silverfish-uk.com\/yeti-sb165-t-series-29-quot-27-5-quot-frame.html#reviews\" id=\"tab-label-reviews-title\" tabindex=\"-1\"\u003eReviews\u003c\/a\u003e\u003c\/div\u003e\n\u003cdiv class=\"data item title\" data-role=\"collapsible\" id=\"tab-label-product.info.details.amblog.related_posts\" role=\"tab\" data-collapsible=\"true\" aria-controls=\"product.info.details.amblog.related_posts\" aria-selected=\"false\" aria-expanded=\"false\" tabindex=\"0\"\u003e\u003ca class=\"data switch\" data-toggle=\"trigger\" href=\"https:\/\/www.silverfish-uk.com\/yeti-sb165-t-series-29-quot-27-5-quot-frame.html#product.info.details.amblog.related_posts\" id=\"tab-label-product.info.details.amblog.related_posts-title\" tabindex=\"-1\"\u003eRelated Posts\u003c\/a\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"block related\" data-limit=\"6\" data-shuffle=\"1\" data-shuffle-weighted=\"0\"\u003e\n\u003cdiv class=\"block-title title\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"YetClothing
28848767 : parseInt(""),55211128881535 : parseInt(""),55211128914303 : parseInt(""),55211128947071 : parseInt(""),55211128979839 : parseInt(""),55211129012607 : parseInt(""),55211129045375 : parseInt(""),55211129078143 : parseInt(""),55211129110911 : parseInt(""),55211129143679 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {55211128848767 : null,55211128881535 : null,55211128914303 : null,55211128947071 : null,55211128979839 : null,55211129012607 : null,55211129045375 : null,55211129078143 : null,55211129110911 : null,55211129143679 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {55211128848767 : parseInt(""),55211128881535 : parseInt(""),55211128914303 : parseInt(""),55211128947071 : parseInt(""),55211128979839 : parseInt(""),55211129012607 : parseInt(""),55211129045375 : parseInt(""),55211129078143 : parseInt(""),55211129110911 : parseInt(""),55211129143679 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {552111
ariant_id }).available;// STOQ-1595/1612 shared signal, derived once here so both the accelerated-checkout block // gate (STOQ-1612) and the click tracker (STOQ-1595) read one clearly-owned flag rather // than a side effect buried in either consumer's try/catch: whether this shop has preorders // configured at all — an enabled selling plan plus at least one preorder variant id, // independent of the block toggle. Fail-open: on error the flag stays unset and both // consumers no-op. try { var _sqCfg = window._RestockRocketConfig; var _sqPlanEnabled = Array.isArray(_sqCfg.sellingPlans) && _sqCfg.sellingPlans.some(function (p) { return p && p.enabled; }); var _sqPreCount = ((_sqCfg.cachedPreorderVariantIds && _sqCfg.cachedPreorderVariantIds.preorder_variant_ids) || []).length; _sqCfg.preordersConfigured = !!(_sqPlanEnabled && _sqPreCount); } catch (e) { /* fail open */ } // STOQ-1612: block (not hide) Buy Now / Shop Pay until our JS runs, so a tap in the // load w (_sqc.integrations || []).some(function (i) { return i && i.type === 'featured_product' && i.enabled && Array.isArray(i.page_types) && i.page_types.indexOf(_sqc.pageType) !== -1; }); } } if (_sqArm && document.documentElement) { _sqc.acceleratedGateArmed = true; document.documentElement.classList.add('stoq-buy-now-pending'); setTimeout(function () { document.documentElement.classList.remove('stoq-buy-now-pending'); }, 6000); } } catch (e) { /* fail open */ } window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-product.js' window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a7522a/restockrocket-1-539/assets/restockrocket-collection.js' window._RestockRocketConfig.scriptUrlProductBis = 'https://cdn.shopify.com/extensions/019f37a7-f058-7bcb-a02d-3fb0b8a75Socks
#SiteFooter { --PT: 100px; --PB: 10px; --bg-lighten-darken-shimmer-bg: #0d0d0d; --bg-lighten-darken-shimmer-effect: #121212; --text: #ffffff; --text-alpha-15: rgba(255, 255, 255, 0.15); --text-alpha-50: rgba(255, 255, 255, 0.6); --text-alpha-85: rgba(255, 255, 255, 0.85);--border: #ffffff;} #SiteFooter .footer-bottom { --grid-columns: 3; }edSettings && window._RestockRocketConfig.cachedSettings.api_host) || 'https://app.restockrocket.io' // Deployed extension build number, read from the CDN asset host Shopify generates: // https://cdn.shopify.com/extensions/ Header Image uuid>/
handle>- #SiteFooter .footer-block--logo { min-width: calc(160px + calc(var(--gutter) / 2)); } #SiteFooter .footer-block__logo-image { width: 160px; }version>/assets/... // Trailing digits (e.g. ".../restockrocket-1-521/assets/" -> "521"). Kept numeric to // match ParseStoqData, so funnel app_version lines up with the order-attribution // app_version. Reflects the ACTUAL deployed build. This is the SINGLE source of the // parsed version — preorder.js getAppVersion() reads it back off config rather than // re-parsing, so the regex lives in exactly one place. try { const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; } catch (e) { window._RestockRocketConfig.appVersion = ''; } const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds const LIQUID_CACHE_MAX_AGE = 15 * 60; // 15 minutes in seconds // Calculate Liquid cache freshness once at initialization const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; // Validate timestamp and calculate ca
<
< Quick Linkson block above) — nothing to bypass otherwise. variant_id is read per-clicked-button // from its form so it's correct on collection/index/search too. block_accelerated_checkout // context (STOQ-1612) rides in `properties` (forwarded verbatim by the pixel, no schema // change): a buy_now click on a preorder variant while the gate was armed is a visible // bypass signal for order debug. Also sends page_url (top-level, like the pixel's native // events) and two preorder signals in properties (see below). try { var _sqTrack = window._RestockRocketConfig; if (_sqTrack.preordersConfigured) { document.addEventListener('click', function (e) { try { var t = e.target; if (!t || !t.closest) return; var host = t.closest('.shopify-payment-button, shopify-payment-terms'); if (!host) return; var channel = host.matches && host.matches('shopify-payment-terms') ? 'shop_pay_installments' : 'buy_now'; var form = host.close
ack.product && _sqTrack.product.id) || '', channel: channel, market_id: _sqTrack.marketId || '', page_type: _sqTrack.pageType || '', cart_token: _sqTrack.cartToken || '', page_url: (window.location && window.location.href) || '', properties: { // Mirror the bundle's own preorder check (preorder.js checkInventoryProvider- // WithCachedFallback): the live set config.preorderVariantIds (refreshed after // page load by loadVariantInventoryData) OR the Liquid-injected // cachedPreorderVariantIds — always present, so it covers clicks before the // bundle loads (why this tracker is inline). ORing both (not preferring one) // matches the bundle and is correct even if the live set is an empty array. Both // hold integer ids; the click-time id comes off a DOM input (.value → string) or // selected_variant_id, so coerce with Number for er bypass is detectable too. is_instock_variant: (function () { var has = function (a) { return Array.isArray(a) && a.indexOf(_sqVidNum) !== -1; }; return has(_sqTrack.inStockVariantIds) || has(_sqTrack.cachedInStockVariantIds && _sqTrack.cachedInStockVariantIds.in_stock_variant_ids); })(), // The enrolled plan's Shopify selling-plan id + inventory_provider (stoq = STOQ tracks // the OOS count; shopify = in-stock preorder). Tells order-debug what kind of preorder // the Buy Now bypassed, without a downstream lookup. enrolled_plan_id: (_sqPlan && (_sqPlan.shopify_selling_plan_id || _sqPlan.shopify_selling_plan_group_id)) || '', enrolled_plan_provider: (_sqPlan && _sqPlan.inventory_provider) || '', block_enabled: !!(_sqTrack.cachedSettings && _sqTrack.cachedSettings.block_accelerated_checkout), gate_armed: !!_sqTrack.a
); 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; } } // Setup event listener for cart selling plan updates // This must be called before any scripts are loaded to avoid race conditions funcCleaners, Degreasers and LubricationMastercard
Track Service Progress html.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}.stoq-hide-buy-now .shopify-payment-button{display:none!important}.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-roc
PayPal x;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
ide-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;} Sell Your Bike
Contact UsInsure Your BikeUnion Pay Ascension Island (SHP£)

Belarus (GBP£)
Belgium (EUR€)
Guernsey (GBP£) Benin (XOFFr)
Guinea-Bissau (XOFFr) Botswana (BWPP)
Hungary (HUFFt) British Indian Ocean Territory (USD$)
Tristan da Cunha (GBP£) Iceland (ISKkr) Bulgaria (EUR€) Türkiye (GBP£)
Isle of Man (GBP£) Burundi (BIFFr)
Ukraine (UAH₴)
Jersey (GBP£) Cape Verde (CVE$)
United Kingdom (GBP£) Kenya (KESKSh) Central African Republic (XAFCFA)
34)","Bosch PowerTube 600","CUBE","Electric Bike","Hybrid Trekking","NEW 2026","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled","SUPREME HYBRID DELUXE"],"price":349900,"price_min":349900,"price_max":349900,"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":57747197362559,"title":"Step-through \/ Easy Entry \/ seagrey\/black \/ 46 cm","option1":"Step-through \/ Easy Entry","option2":"seagrey\/black","option3":"46 cm","sku":"114550EE46","requires_shipping":true,"taxable":true,"featured_image":{"id":84875963236735,"product_id":15720156823935,"position":1,"created_at":"2026-06-13T11:53:17+01:00","updated_at":"2026-06-13T11:53:20+01:00","alt":"CUBE SUPREME HYBRID DELUXE SLX 600 SEAGREY\/BLACK","width":2000,"height":1306,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/114550.jpg?v=1781348000","variant_ids":[57747197362559,57747197395327,57747197428095,57747197460863]},"available":fa "position":1,"created_at":"2026-06-13T11:53:17+01:00","updated_at":"2026-06-13T11:53:20+01:00","alt":"CUBE SUPREME HYBRID DELUXE SLX 600 SEAGREY\/BLACK","width":2000,"height":1306,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/114550.jpg?v=1781348000","variant_ids":[57747197362559,57747197395327,57747197428095,57747197460863]},"available":false,"name":"CUBE SUPREME HYBRID DELUXE SLX 600 SEAGREY\/BLACK - Step-through \/ Easy Entry \/ seagrey\/black \/ 50 cm","public_title":"Step-through \/ Easy Entry \/ seagrey\/black \/ 50 cm","options":["Step-through \/ Easy Entry","seagrey\/black","50 cm"],"price":349900,"weight":34460,"compare_at_price":null,"inventory_management":"shopify","barcode":"4054571499738","featured_media":{"alt":"CUBE SUPREME HYBRID DELUXE SLX 600 SEAGREY\/BLACK","id":71336111473023,"position":1,"preview_image":{"aspect_ratio":1.531,"height":1306,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/114550.jpg?v=1781348000"}},"requires_selling_plan":false,"selling_plan_allocations":[],"q United States (GBP£) opify","barcode":"4054571499745","featured_media":{"alt":"CUBE SUPREME HYBRID DELUXE SLX 600 SEAGREY\/BLACK","id":71336111473023,"position":1,"preview_image":{"aspect_ratio":1.531,"height":1306,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/114550.jpg?v=1781348000"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}},{"id":57747197460863,"title":"Step-through \/ Easy Entry \/ seagrey\/black \/ 58 cm","option1":"Step-through \/ Easy Entry","option2":"seagrey\/black","option3":"58 cm","sku":"114550EE58","requires_shipping":true,"taxable":true,"featured_image":{"id":84875963236735,"product_id":15720156823935,"position":1,"created_at":"2026-06-13T11:53:17+01:00","updated_at":"2026-06-13T11:53:20+01:00","alt":"CUBE SUPREME HYBRID DELUXE SLX 600 SEAGREY\/BLACK","width":2000,"height":1306,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/114550.jpg?v=1781348000","variant_ids":[57747197362559,57747197395327,57747197428095,57747197460863]},"avail sch's Performance PX motor provides quiet and smooth pedal assistance up to 90Nm. The 600Wh Bosch PowerTube battery is stowed neatly inside the down tube, while Smooth Welding complements the frame's clean, almost organic lines. Integrated Cable Routing and X-Connect keep wires and cables out of sight and out of harm's way. There's a wide range of sizes from 46cm to 58cm, so everyone should be able to find their ideal fit. The Semi-Integrated Carrier 2.0 is equal parts neat and sturdy, giving you a solid platform on which to carry... well, whatever you need. And we added mudguards, a full lighting system and a kickstand, so you really are all set.\u003c\/div\u003e\u003ch3\u003eSpecification\u003c\/h3\u003e\u003ctable\u003e\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eFrame\u003c\/th\u003e\n\u003ctd\u003eAluminium Superlite, Comfort Ride Geometry, Premium Comfort And Safety, Semi-Integrated Carrier, Fully Integrated Battery, Advanced Internal Cable Routing\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n Vatican City (EUR€) 03ctr\u003e\n\u003cth\u003eCrankset\u003c\/th\u003e\n\u003ctd\u003eACID Trekking Hybrid, 50T\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCrankset chainring sizes\u003c\/th\u003e\n\u003ctd\u003e50T\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCassette\u003c\/th\u003e\n\u003ctd\u003eGates Rear Sprocket E9 CDX, 24T\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eNumber of gears\u003c\/th\u003e\n\u003ctd\u003e999\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBelt\u003c\/th\u003e\n\u003ctd\u003eGates CDX, 128T\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRims\u003c\/th\u003e\n\u003ctd\u003eCUBE EX25, 32H, Disc, Tubeless Ready\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eFront hub\u003c\/th\u003e\n\u003ctd\u003eShimano HB-QB400, QR. 6-Bolt\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRear hub\u003c\/th\u003e\n\u003ctd\u003eEnviolo Trekking, 380%, 6-Bolt, 135mm\u003c\/td\u003e\n\u0Latvia (EUR€) Comoros (KMFFr) 03c\/th\u003e\n\u003ctd\u003eACID FM Pure Kickstand\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eMudguard\u003c\/th\u003e\n\u003ctd\u003eACID 50 BB-Mount\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBell\u003c\/th\u003e\n\u003ctd\u003eReich Cycle Bells Ringsound\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCarrier\u003c\/th\u003e\n\u003ctd\u003eACID SIC 2.0 RILink\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eEngine\u003c\/th\u003e\n\u003ctd\u003eBosch Drive Unit Performance Line PX max. 90Nm (BDU34)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBattery\u003c\/th\u003e\n\u003ctd\u003eBosch PowerTube 600\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCharger\u003c\/th\u003e\n\u003ctd\u003eBosch 4A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRemote\u003c\/th\u003e\n\u003ctd\u003eBosch LED Remote\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eDisplay\u003c\/th ockRocketConfig.variantsInventoryQuantity = {57747197362559 : parseInt("0"),57747197395327 : parseInt("0"),57747197428095 : parseInt("0"),57747197460863 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {57747197362559 : parseInt(""),57747197395327 : parseInt(""),57747197428095 : parseInt(""),57747197460863 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {57747197362559 : null,57747197395327 : null,57747197428095 : null,57747197460863 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {57747197362559 : parseInt(""),57747197395327 : parseInt(""),57747197428095 : parseInt(""),57747197460863 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {57747197362559 : null,57747197395327 : null,57747197428095 : null,57747197460863 : null,}; window._RestockRocketConfig.variantsShippingText = {57747197362559 : "",57747197395327 : "",57747197428095 : "",57747197460863 : "",}; window._RestockRocketConfig.vLesotho (GBP£) Congo - Brazzaville (XAFCFA) < < < Zambia (GBP£) che age if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; window._RestockRocketConfig.liquidCacheAge = null; } else { const now = Math.floor(Date.now() / 1000); // Current time in seconds const liquidCacheAge = now - liquidRenderedAt; // Age in seconds // Surfaced into funnel events: a stale cache means the app rendered with // outdated inventory/selling-plan data — a real "had the opportunity but // failed" cause. Negative (client clock ahead) clamps to 0. window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); // Handle client clock ahead of server if (liquidCacheAge age = Date.now() - updatedAt.getTime(); if (age Zimbabwe (USD$) 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') // Fire stoq_initialized once per page load so the funnel pipeline has a definitive // "our code ran on this page" signal independent of any cusLibya (GBP£) Côte d’Ivoire (XOFFr) ctedVariantId || '', liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0, app_version: _stoqInitConfig.appVersion || '', liquid_cache_age: _stoqInitConfig.liquidCacheAge, // Selected variant's stock posture as our app saw it at render — explains // whether we *should* have treated it as a preorder candidate. inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '', inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId], }); } catch (e) { console.debug('STOQ - stoq_initialized publish failed:', e); } // STOQ-1595: publish stoq_accelerated_checkout_clicked for every accelerated-checkout // click (Buy Now / dynamic checkout / Shop Pay installments) on ALL surfaces, before our // bundle loads, via one delegated capture-phase listener (catches late-rendered buttons). // Only on shops with preorders configured (shared `preordersConfigured` signal from the // derivati st('form'); var vidEl = form && form.querySelector('[name="id"]'); var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || ''; // The enabled STOQ selling plan the clicked variant belongs to (if any), found once and // reused for in_enabled_plan / enrolled_plan_id / enrolled_plan_provider below. var _sqVidNum = Number(variantId); var _sqPlan = null; // Array.isArray guard (not `|| []`) so a truthy non-array sellingPlans can't throw and // silently drop the whole publish. var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : []; _sqPlans.forEach(function (pl) { if (!_sqPlan && pl && pl.enabled && Array.isArray(pl.variant_ids) && pl.variant_ids.indexOf(_sqVidNum) !== -1) { _sqPlan = pl; } }); Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', { variant_id: variantId, product_id: (_sqTrLiechtenstein (CHFCHF) tion setupCartSellingPlanUpdater(settings) { // Setup listener regardless - updateCartSellingPlans has its own guards // This ensures cleanup happens even when preorders are disabled globally // Listen for stoq:inventory-data-loaded event dispatched by api.js window.addEventListener('stoq:inventory-data-loaded', function(event) { console.debug('STOQ - Inventory data loaded, updating cart selling plans'); 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); }); } }); } // ---- Live settings via the Storefront API (adCroatia (EUR€) <
"settings") { value } } }'; fetch( `https://${cfg.shop}/api/2025-07/graphql.json`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Shopify-Storefront-Access-Token': cfg.storefrontAccessToken, }, body: JSON.stringify({ query: query, variables: { namespace: cfg.metafieldNamespace } }), } ) .then(function(response) { if (!response.ok) { throw new Error('Storefront API HTTP ' + response.status); } return response.json(); }) .then(function(body) { if (body && body.errors && body.errors.length) { throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', ')); } const value = body && body.data && body.data.shop && body.data.shop.metafield && body.data.shop.metafield.value; if (!value) { throw new Error('Storefront API returned no settings metafield value'); } cfg.sto
p' }; 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('S
} }), fetch
Gambia (GMDD) CUBE TRIKE FAMILY HYBRID 1500 WHITE/REFLEX
Georgia (GBP£) Frame StyleGermany (EUR€) Ghana (GBP£)
Gibraltar (GBP£)



{"id":57747200344447,"title":"Standard \/ flashwhite\/reflex \/ UNISIZE","option1":"Standard","option2":"flashwhite\/reflex","option3":"UNISIZE","sku":"78951024","requires_shipping":true,"taxable":true,"featured_image":{"id":84875967824255,"product_id":15720157315455,"position":1,"created_at":"2026-06-13T11:53:59+01:00","updated_at":"2026-06-13T11:54:02+01:00","alt":"CUBE TRIKE FAMILY HYBRID 1500 WHITE\/REFLEX","width":2000,"height":1094,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/789510.jpg?v=1781348042","variant_ids":[57747200344447]},"available":false,"name":"CUBE TRIKE FAMILY HYBRID 1500 WHITE\/REFLEX - Standard \/ flashwhite\/reflex \/ UNISIZE","public_title":"Standard \/ flashwhite\/reflex \/ UNISIZE","options":["Standard","flashwhite\/reflex","UNISIZE"],"price":449900,"weight":113000,"compare_at_price":null,"inventory_management":"shopify","barcode":"4054571446527","featured_media":{"alt":"CUBE TRIKE FAMILY HYBRID 1500 WHITE\/REFLEX","id":71336115962239,"position":1,"preview_image":{"aspect_ratio":1.828,"height":1094,"width":2000,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/789510.jpg?v=1781348042"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}} 11 2 4 ChainKMC e101 EPTRimsCUBE EX40, 507 x 36H / 406 x 32H, DISC, Tubeless ReadyFront hubCube Cargo Hub, 36H, Straightpull, 110x15mm BoostRear hubCube Trike Hub, StraightpullFront tireSchwalbe Pick-Up, Super Defense, 65-507
Quantity
3
5

  • Satori Sorata 34,9mm, 280mm -440mm telescoping seatpost

  • ACID Front Light PRO-E 110, 5-16V, DC
Rear light