Header Image


M —N —Frame stackStem length49 cmGabon (XOFFr) Gambia (GMDD) Georgia (GBP£) Germany (EUR€) Ghana (GBP£) Gibraltar (GBP£) Greece (EUR€) Greenland (DKKkr.) Guadeloupe (EUR€) Guernsey (GBP£) Guinea (GNFFr) Guinea-Bissau (XOFFr) Hungary (HUFFt) Iceland (ISKkr) Ireland (EUR€) Isle of Man (GBP£) Italy (EUR€) Jersey (GBP£) Kenya (KESKSh) Kosovo (EUR€) Latvia (EUR€) Lesotho (GBP£) Liberia (GBP£) Libya (GBP£) Liechtenstein (CHFCHF) Lithuania (EUR€) // Only use disabled_plan_ids when using cached plans window._RestockRocketConfig.disabledSellingPlanIds = cachedData.disabled_plan_ids || []; console.debug('[RR] Using selling plans from cachedSellingPlans (cached_at: ' + cachedData.cached_at + ')'); } } else { // When using old format (stale cache), don't trust disabled_plan_ids window._RestockRocketConfig.disabledSellingPlanIds = []; console.debug('[RR] Using selling plans from old format (max updated_at: ' + maxUpdatedAt + ')'); } } })();window._RestockRocketConfig.enabledNotifyMeVariantIds = [];window._RestockRocketConfig.disabledNotifyMeVariantIds = [];window._RestockRocketConfig.backInStockTemplates = [];window._RestockRocketConfig.restockNotes = {};window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article", g, riding, or transporting your bicycle. Original owners only. Product registration is required within 60 days of purchase to be eligible for this program.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"https:\/\/www.enve.com\/support\/incidental-damage-protection-terms\/\"\u003ehttps:\/\/www.enve.com\/support\/incidental-damage-protection-terms\/\u003c\/a\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003ch5\u003eENVE Carbon Seatpost - 25mm Offset\u003c\/h5\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMaterial\u003c\/td\u003e\n\u003ctd\u003eCarbon fibre\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eWeight\u003c\/td\u003e\n\u003ctd\u003e204g\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eDiameter\u003c\/td\u003e\n\u003ctd\u003e27.2 30.9, 31.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSaddle Angle Adjustment\u003c\/td\u003e\n\u003ctd\u003e0-27-degreLuxembourg (EUR€) tory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55175522746751,"title":"25.4mm post - 400mm length - 25mm offset","option1":"25.4mm post - 400mm length - 25mm offset","option2":null,"option3":null,"sku":"EN512625440","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"ENVE 400mm Carbon Seatpost - 25mm Offset - 25.4mm post - 400mm length - 25mm offset","public_title":"25.4mm post - 400mm length - 25mm offset","options":["25.4mm post - 400mm length - 25mm offset"],"price":33000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55175522779519,"title":"27.2mm post - 400mm length - 0 degrees offset","option1":"27.2mm post - 400mm length - 0 degrees offset","option2":null,"option3":null,"sku":"EN512627240","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"ENVE 400mm Carbon Seatpost - 25mm up or down, making micro adjustments of the angle easy.\u003c\/p\u003e\n\u003cp\u003eAnother benefit to the clamp is its narrow rail supports, which allow maximum fore and aft saddle adjustment, helping to perfect your bike fit. Two upper cradles are also supplied to cater for standard and oversized rails.\u003c\/p\u003e\n\u003cp\u003eAvailable in 27.2, 30.9 and 31.6mm, the seatpost is compatible with the majority of bikes.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eContinuous uni-directional carbon construction\u003c\/li\u003e\n\u003cli\u003ePatented twin-bolt clamp design\u003c\/li\u003e\n\u003cli\u003eCompatible with standard and oversized rails\u003c\/li\u003e\n\u003cli\u003eReversible lower cradles for 0-18° or 9-27° of angle adjustment\u003c\/li\u003e\n\u003cli\u003eTitanium bolts\u003c\/li\u003e\n\u003cli\u003e5-year Factory Limited Warranty and Incidental Damage Protection Programme\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch5\u003eENVE Factory Limited Warranty\u003c\/h5\u003e\n\u003cp\u003eCoverMadagascar (GBP£) parseInt("0"),55175522845055 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {55175522648447 : parseInt(""),55175522681215 : parseInt(""),55175522713983 : parseInt(""),55175522746751 : parseInt(""),55175522779519 : parseInt(""),55175522812287 : parseInt(""),55175522845055 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {55175522648447 : null,55175522681215 : null,55175522713983 : null,55175522746751 : null,55175522779519 : null,55175522812287 : null,55175522845055 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {55175522648447 : parseInt(""),55175522681215 : parseInt(""),55175522713983 : parseInt(""),55175522746751 : parseInt(""),55175522779519 : parseInt(""),55175522812287 : parseInt(""),55175522845055 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {55175522648447 : null,55175522681215 : null,55175522713983 : null,55175522746751 : null,55175522779519 : null,55175522812287 : null,55175522 <Malawi (MWKMK) translation data in metafield // Metafield hasn't been backfilled yet - force refresh console.debug('STOQ - multi-language enabled but no translation data in 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 !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[keyhedSettings); } 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}`); // Setup cart selling plan updater BEFORE loading any scripts to avoid race conditions setupCartSellingPlanUpdater(settings); if(settings.enable_app) { const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) { return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType); }) if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) { createRestockRocketScript(window._RestockRocketConMali (XOFFr) .restock-rocket-button,.restock-rocket-button-float{opacity:1!important;border:none!important;cursor:pointer!important;background-image:none!important;box-shadow:none!important;padding:15px 20px;font-size:16px;width:100%;font-family:inherit}@font-face{font-family:OpenSans;font-weight:200;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Light.woff)}@font-face{font-family:OpenSans;font-weight:300;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Regular.woff)}@font-face{font-family:OpenSans;font-weight:600;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-SemiBold.woff)}.restock-rocket-button-container{position:relative;z-index:1;width:100%}.restock-rocket-button-container-float-right{position:fixed;z-index:123123;top:calc(50% - 200px);right:0;transform:rotate(270deg);transform-origin:bottom right}.restock-rocket-button-container-float-left{position:fixed;z-index:123123;top:calc(50% - 200px);left:40px;transform:rotate(90deg);transform-origin:top left}.restock-rocket-button-container-float-left:hover,.restock-rocket-button-container-float-right:hover,.restock-rocket-button-container:hover,.restock-rocket-button-float:hover,.restock-rocket-button:hover{opacity:.8}.restock-rocket-button{min-height:50px;margin-top:10px;margin-bottom:10px}.restock-rocket-button-collection{position:relative;font-size:13px;line-height:1;padding:7px;height:auto;z-index:3}.restock-rocket-wrapper{background-color:rgba(0,0,0,.5);z-index:123123123;width:100%;height:100%;overflow:auto;position:fixed;right:0;top:0;transition-property:all;transition-duration:.3s;display:flex;flex-direction:column;justify-content:center;}.restock-rocket-wrapper-inline{width:100%;height:100%;margin-top:20px}.restock-rocket-preorder-description{padding:10px 15px;margin-top:20px;display:flex;flex-direction:column;gap:10px;}.preorder-description-details{margin-bottom:0;display:flex;flex-direction:column;gap:10px;}.preorder-detail-item{display:flex;flex-direction:row;justify-content:start;gap:8px;align-items:center;}.restock-rocket-payment-widget{border:1px solid #ebebeb;margin-bottom:20px;}.restock-rocket-payment-option{display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:15px 20px;}.restock-rocket-payment-option:not(:last-child){border-bottom:1px solid #ebebeb;}.restock-rocket-payment-input-container{flex:1 1 auto;min-width:0}.restock-rocket-preorder-discount-badge{background:#ebebeb;height:25px;line-height:25px;padding:0 15px;border-radius:25px;font-size:0.8rem;flex:0 0 auto}.restock-rocket-payment-input{margin-right:10px;margin-top:-3px;vertical-align:middle;margin-left:0;accent-color:#202223}.restock-rocket-payment-description{margin-top:4px;flex:1 1 100%}.restock-rocket-preorder-badge{font-size:13px;line-height:1;padding:5px 13px 6px;border-radius:40px;height:auto;border:none;width:auto;z-index:2;margin:0;background:0 0}.preorder-badge-collection{position:absolute;top:10px;right:10px}.preorder-badge-product{margin-left:10px}.restock-rocket-price-strike{text-decoration:line-through;color: #666666;}.restock-rocket-discounted-price{margin-left:10px;}.restock-rocket-acknowledgement-checkbox{margin-bottom:12px;display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height: 1.5;}.restock-rocket-acknowledge-checkbox-input{width:18px;height:18px;margin-top:2px;cursor:pointer;flex-shrink:0;accent-color: #0d0d0d;}.restock-rocket-acknowledge-checkbox-label{flex:1;cursor:pointer;}.restock-rocket-preorder-countdown-timer{display:flex;flex-direction:column;align-items:center;padding:16px;margin:8px 0;font-family:inherit;}.restock-rocket-preorder-countdown-timer .countdown-header{font-size:16px;margin-bottom:6px;text-align:center}.restock-rocket-preorder-countdown-timer .countdown-units{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}.restock-rocket-preorder-countdown-timer .countdown-unit{display:flex;flex-direction:column;align-items:center;gap:6px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:40px;padding:10px 6px;text-align:center;font-size:20px;line-height:1}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:14px;font-weight:500;text-align:center;text-transform:capitalize;opacity:.7}@media (max-width:768px){.restock-rocket-preorder-countdown-timer{padding:14px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:55px;padding:14px 10px;font-size:26px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:11px}}@media (max-width:480px){.restock-rocket-preorder-countdown-timer{padding:12px}.restock-rocket-preorder-countdown-timer .countdown-units{width:100%;gap:10px}.restock-rocket-preorder-countdown-timer .countdown-box{width:100%;min-width:50px;padding:12px 8px;font-size:24px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:10px}}.restock-rocket-toast{position:fixed;cursor:pointer;background:#fff;border:0;min-width:40px;min-height:40px;box-shadow:0 0 15px rgba(0,0,0,.1)!important;z-index:622004;padding:20px 30px;font-family:inherit;font-size:inherit;color:#000;display:flex;justify-content:center;align-items:center}.restock-rocket-toast a{text-decoration:none;font-weight:700;color:#000}.restock-rocket-toast .dismiss{margin-left:15px;z-index:1;font-size:20px;}.restock-rocket-toast-top{top:60px}.restock-rocket-toast-bottom{bottom:75px}.restock-rocket-toast-left,.restock-rocket-toast-right{-webkit-animation:.5s forwards slide;animation:.5s forwards slide}.restock-rocket-toast-left{left:0;transform:translateX(-100%);-webkit-transform:translateX(-100%);border-radius:0 10px 10px 0}.restock-rocket-toast-left.slide-out{-webkit-animation:.5s forwards slide-out-left;animation:.5s forwards slide-out-left}.restock-rocket-toast-right{right:0;transform:translateX(100%);-webkit-transform:translateX(100%);border-radius:10px 0 0 10px}.restock-rocket-toast-right.slide-out{-webkit-animation:.5s forwards slide-out-right;animation:.5s forwards slide-out-right}@keyframes slide{100%{transform:translateX(0)}}@-webkit-keyframes slide{100%{-webkit-transform:translateX(0)}}@keyframes slide-out-left{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}@-webkit-keyframes slide-out-left{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(-100%)}}@keyframes slide-out-right{0%{transform:translateX(0)}100%{transform:translateX(100%)}}@-webkit-keyframes slide-out-right{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(100%)}}.restock-rocket-preorder-progress-bar{padding:12px 15px;margin-bottom:20px;font-family:inherit;}.restock-rocket-preorder-progress-bar .preorder-progress-text{margin-bottom:8px;}.restock-rocket-preorder-progress-bar .preorder-progress-bar-row{display:flex;align-items:center;gap:10px;}.restock-rocket-preorder-progress-bar .preorder-progress-track{flex:1;height:12px;overflow:hidden;}.restock-rocket-preorder-progress-bar .preorder-progress-fill{display:block;height:100%;min-width:2px;transition:width 0.3s ease;}.restock-rocket-preorder-progress-bar .preorder-progress-percentage{font-weight:500;min-width:35px;text-align:right;} Malta (EUR€) Mauritania (GBP£) Mauritius (MUR₨) Mayotte (EUR€) Moldova (MDLL) Monaco (EUR€) Montenegro (EUR€) Morocco (MADد.م.) Mozambique (GBP£) Namibia (GBP£) Netherlands (EUR€)
 Frame reach  
orption. The post is also compatible with electronic drivetrain batteries.\u003c\/p\u003e\n\u003cp\u003eThe patented twin-bolt clamp design secures your saddle thanks to its method of compressing a horizontally-opposed wedge system to clamp the rails. As you tighten the front or rear bolt while loosening the other, the wedge tilts the saddle up or down, making micro adjustments of the angle easy.\u003c\/p\u003e\n\u003cp\u003eAnother benefit to the clamp is its narrow rail supports, which allow maximum fore and aft saddle adjustment, helping to perfect your bike fit. Two upper cradles are also supplied to cater for standard and oversized rails.\u003c\/p\u003e\n\u003cp\u003eAvailable in 27.2, 30.9 and 31.6mm, the seatpost is compatible with the majority of bikes.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eContinuous uni-directional carbon construction\u003c\/li\u003e\n\u003cli\u003ePatented twin-bolt clamp design\u003c\/li\u003e\n\u003cli\u003eCompatible with standard and oversized rails\u003c\/li\u003e\n\u0 tags":["seatpost","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":33000,"price_min":33000,"price_max":33000,"available":false,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":55175522648447,"title":"27.2mm post - 400mm length - 25mm offset","option1":"27.2mm post - 400mm length - 25mm offset","option2":null,"option3":null,"sku":"EN510127240","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"ENVE 400mm Carbon Seatpost - 25mm Offset - 27.2mm post - 400mm length - 25mm offset","public_title":"27.2mm post - 400mm length - 25mm offset","options":["27.2mm post - 400mm length - 25mm offset"],"price":33000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55175522681215,"title":"30.9mm post - 400mm length - 25mm offset","option1":"30.9mm post - 400mm length 0mm length - 0-degrees offset","option1":"31.6mm post - 400mm length - 0-degrees offset","option2":null,"option3":null,"sku":"EN512631640","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"ENVE 400mm Carbon Seatpost - 25mm Offset - 31.6mm post - 400mm length - 0-degrees offset","public_title":"31.6mm post - 400mm length - 0-degrees offset","options":["31.6mm post - 400mm length - 0-degrees offset"],"price":33000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/en510127240_7.webp?v=1741358086"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/en510127240_7.webp?v=1741358086","options":["Size"],"media":[{"alt":null,"id":64606051434879,"position":1,"preview_image":{"aspect_ratio":1.0,"height":1600,"width":1600,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/en510127240_7.webp?v=1741358086"},"aspect_ratio":1.0,"height":160 s\/\u003c\/a\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003ch5\u003eENVE Carbon Seatpost - 25mm Offset\u003c\/h5\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMaterial\u003c\/td\u003e\n\u003ctd\u003eCarbon fibre\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eWeight\u003c\/td\u003e\n\u003ctd\u003e204g\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eDiameter\u003c\/td\u003e\n\u003ctd\u003e27.2 30.9, 31.6\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSaddle Angle Adjustment\u003c\/td\u003e\n\u003ctd\u003e0-27-degrees\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eOffset\u003c\/td\u003e\n\u003ctd\u003e25mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eLength\u003c\/td\u003e\n\u003ctd\u003e400mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSaddle Rail Compatibility\u003c\/td\u003e\n\u003ctd\u003e7 ckrocket-1-470/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 const LIQUID_CACHE_MAX_AGE = 2 * 60 * 60; // 2 hours in seconds // Calculate Liquid cache freshness once at initialization const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; // Validate timestamp and calculate cache age if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; } else { const now = Math.floor(Date.now() / 1000); // Current time in seconds const liquidCacheAge = now - liquidRenderedAt; // Age in seconds // < < && 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); }); } }); } // 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.S led for ${window._RestockRocketConfig.pageType}`); } // Dispatch custom event when app is loaded // Cart selling plan updates will be triggered by stoq:inventory-data-loaded event const appLoadedEvent = new CustomEvent('stoq:loaded', { detail: { pageType: window._RestockRocketConfig.pageType, enabled: settings.enable_app, settings: settings, preorderEnabled: settings.preorder_enabled } }); console.debug('STOQ - dispatching app loaded event'); window.dispatchEvent(appLoadedEvent); } }