| '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":true,"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_eA>
rror":"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 restocked 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","shopify_app_id":5940125,"cache":true,"cached_at":"2025-11-11T14:27:02.333Z","multi_language_enabled":false,"translation_locale":"en"};window._RestockRocketConfig.cachedPreorderVariantIds = {"preorder_variant_ids":[42167799447778,43590980075746,43916SEAT TUBE LENGTH
521013474,43934694998242,43934695031010,43934695620834,43935975440610,43935975473378,43935989399778,43935989432546,43935990284514,43935994118370,43935995625698,43935995855074,43936000835810,43936003195106,43936003227874,43936008012002,43936008044770,43936022757602,43936022790370,43936022823138,43936022855906,43936056115426,43936061030626,43936064930018,43936070631650,43936078037218,43936078069986,43936088195298,43936093470946,43936101138658,43936107266274,43936124076258,43936124109026,43936124141794,43936124174562,43936129941730,43936129974498,43936130007266,43936142393570,43936142426338,43936142459106,43936152060130,43936152092898,43936152125666,43936193118434,43936250429666,43936255803618,43936266682594,43936266715362,43936293978338,43936294011106,43936316424418,43936316457186,43936320880866,43936320913634,43936320946402,43936327041250,43936327074018,43936327106786,43936331661538,43936332349666,43936333103330,43936351224034,43936353714402,43936362889442,43936362922210,43936388153570,43936389333218,439363955 | <26370,43936398508258,43936401522914,43936408568034,43936414400738,43936700727522,43936706101474,43936706134242,43936706167010,43936706199778,43936706232546,43936706265314,43938308587746,43938308653282,43938308718818,43938308751586,43938308784354,43938308817122,43938322612450,43938322645218,43938322677986,43981336051938,43981336084706,43981336117474,43981336150242,43981345587426,43981345620194,43981345652962,43981345685730,43981357580514,43981357613282,43981362462946,43981362495714,43981362528482,43981369016546,43981369049314,43981374914786,43981374947554,43981374980322,43981392904418,43981695844578,43981695877346,43981695910114,43981695942882,43981986070754,43981987905762,43981987938530,44052906967266,44052907327714,44052907360482,44052907393250,44052907426018,44052907458786,44052907491554,44052909097186,44052909129954,44140302827746,44140302893282,44140317016290,44155590508770,44155590541538,44155594211554,44155594244322,44155594277090,44155594309858,44155594342626,44155594375394,44155594440930,4415559447369
li class="result result--full">
8,44155594506466,44195991847138,44195991945442,44329993437410,44329993470178,44329993502946,44329993535714,44329993568482,44957136584930,44957136781538,44957136945378,45068753961186,45068753993954,45069622640866,45069622903010,45069622968546,45069750730978,45069750763746,45353010921698,45353010954466,45353010987234,45353018261730,45353018294498,45353018327266,55569712382335,55569712447871,55569712480639,55569933074815,55570550194559,55570550227327,55604008976767,55638316908927,55638316941695,55638316974463,56220814999935,56220815032703,56270279606655,56270279639423,56270279672191,56314171064703,56314171097471,56398983725439,56398983758207,56398983790975,56399322251647],"updated_at":"2025-12-13T14:20:13Z","market_locations_enabled":false,"market_id":382140642,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = { out_of_stock_var{{ it.item.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,"billi |
ge_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":
3e\n\u003cdiv class=\"product-about__more-link-wrapper\"\u003e\n\u003cdiv class=\"product-about__more-link\"\u003e\u003csvg class=\"icon icon-filter-two\" width=\"12\" height=\"7\" viewbox=\"0 0 12 7\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003cpath d=\"M10 1.5L6 5.5L2 1.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"square\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product-about__accordion-description\"\u003e\n\u003cul\u003e\n\u003cli\u003eHeadtube: ZS44\/EC44 headset included\u003c\/li\u003e\n\u003cli\u003eAlloy seatpost collar included\u003c\/li\u003e\n\u003cli\u003eUDH hanger included\u003c\/li\u003e\n\u003cli\u003eRobert Axle Project Rear 148x12mm Boost thru axle included\u003c\/li\u003e\n\u003cli\u003eSeatpost: 31.6 mm (dropper post ready)\u003c\/li\u003e\n\u003cli\u003eBottom bracket: 73mm BSA \u003c\/li\u003e\n\u003cli\u003eBrake standard: Direct-mount 160mm\u003c\/li\u003e\n\u003cli\u003eFork travel: 100 | – 120mm\u003c\/li\u003e\n\u003cli\u003eAvailable with carbon or suspension fork\u003c\/li\u003e\n\u003cli\u003eWheel Size: 29″\u003c\/li\u003e\n\u003cli\u003eTire size: up to 29×2.4”\u003c\/li\u003e\n\u003cli\u003eMax Chainring: up to 38t\u003c\/li\u003e\n\u003cli\u003eFrame weight 2.1 kg\u003c\/li\u003e\n\u003cli\u003eButted tubes\u003c\/li\u003e\n\u003cli\u003eGrade 9 3Al-2.5V\u003c\/li\u003e\n\u003cli\u003eLifetime Frame Warranty\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2 class=\"h5 product-about__accordion-title active\"\u003e\u003cspan\u003eGeometry, Weight \u0026amp; Specs\u003c\/span\u003e\u003c\/h2\u003e\n\u003cdiv class=\"product-about__more-link-wrapper\"\u003e\n\u003cdiv class=\"product-about__more-link\"\u003e\u003csvg class=\"icon icon-filter-two\" width=\"12\" height=\"7\" viewbox=\"0 0 12 7\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003cpath d=\"M10 1.5L6 5.5L2 1.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"square\"\u003e\u003c\/path\u003e\u003c\/
svg\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product-about__accordion-description main-product-description\"\u003e\n\u003cp\u003e\u003cstrong\u003ePictures are for reference purposes only.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eIf you have any requirements for custom parts, feel free to send us an email.\u003c\/strong\u003e\u003c\/em\u003e\u003c\/p\u003e\n\u003cp\u003eBuild details.\u003c\/p\u003e\n\u003ctable xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\" cellspacing=\"0\" cellpadding=\"0\" dir=\"ltr\" border=\"1\" data-sheets-root=\"1\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"210\"\u003e\n\u003ccol width=\"710\"\u003e\n\u003c\/colgroup\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Product Type\"}'\u003eProduct Type\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Component\"}'\u003eComponent\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Bar Tape \/ Grips\"}'\u003eBar Tape \/ Grips\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"ODI\"}'\u003eODI\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Frame\"}'\u003eFrame\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Gloria - Titanium FKti\"}'\u003eGloria - Titanium FKti\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Fork\"}'\u003eFork\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Gloria Cabon with Cages mounts\"}'\u003eGloria Carbon with Cages mounts\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Handle Bar\"}'\u003eHandle Bar\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Pro 800 x 40 mm rise\"}'\u003ePro 800 x 40 mm rise\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Saddle\"}'\u003eSaddle\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"450
{
"@context": "http://schema.org",
"@type": "Organization",
"name": "ProjektRide","sameAs": [
null,
null,
null,
null,
null,
null,
null
],
"url": "https:\/\/projektride.co.uk"
}
S | elle Itallia\"}'\u003eSelle Itallia\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Stem\"}'\u003eStem\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"BBB\"}'\u003eBBB\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Tyre\"}'\u003eTyre\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Schwalbe Racing Ralph Tubeless\"}'\u003eSchwalbe Racing Ralph Tubeless\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Wheel Pair\"}'\u003eWheel Pair\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"E 1900 wheel, 30 mm rim ,29 inch \"}'\u003eE 1900 wheel, 30 mm rim ,29 inch\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Bottom Bracket\"}'\u003eBottom Bracket\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"BB-RS501 bottom bracket cups, English thread cups\"}'\u003eBB-RS501 bottom bracket c
ups, English thread cups\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Seat Post\"}'\u003eSeat Post\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"BBB 31.6 x 400mm\"}'\u003eBBB 31.6 x 400mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Groupset\"}'\u003eGroupset\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"SLX\"}'\u003eSLX\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Cassette\"}'\u003eCassette\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"CS-M7100 SLX 12-speed cassette 10 - 51T\"}'\u003eCS-M7100 SLX 12-speed cassette 10 - 51T\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Chain\"}'\u003eChain\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"CNM7100126Q CN-M7100 SLX\/105 HG+ chain with quick link, 12-speed, 126L \"}'\u003eCNM7100126Q CN-M7100 SLX\/105 HG+ chain with quick link, 12-speed, 126L\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Crank Set\"}'\u003eCrank Set\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"FC-M7100 SLX Crank set without ring, 12-speed, 52 mm chainline\"}'\u003eFC-M7100 SLX Crank set without ring, 12-speed, 52 mm chainline\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Head Set\"}'\u003eHead Set\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Gloria ZS44\/EC44\"}'\u003eGloria ZS44\/EC44\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Head Set spacer\"}'\u003eHead Set spacer\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\" Headset Spacer Set \/ 1 1\/8\\\" \/ 2 x 10mm \/ Black\"}'\u003eHeadset Spacer Set \/ 1 1\/8\" \/ 2 x 10mm \/ Black\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Breaks\"}'\u003eBreak495
s\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"BR-M7120\/BL-M7100 SLX 4 pot bled brake lever\/post mount calliper\"}'\u003eBR-M7120\/BL-M7100 SLX 4 pot bled brake lever\/post mount calliper\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Trigger\"}'\u003eTrigger\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"RDM7100SGS RD-M7100 SLX 12-speed rear derailleur, Shadow+ SGS, for single \"}'\u003eRDM7100SGS RD-M7100 SLX 12-speed rear derailleur, Shadow+ SGS, for single\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Rear Mech\"}'\u003eRear Mech\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"RDM7100SGS RD-M7100 SLX 12-speed rear derailleur, Shadow+ SGS, for single \"}'\u003eRDM7100SGS RD-M7100 SLX 12-speed rear derailleur, Shadow+ SGS, for single\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Seat Clamp\"}'\u003eSeat Clamp\u003 | c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Gloria Forged Alloy Bolt Up 34.9\"}'\u003eGloria Forged Alloy Bolt Up 34.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Rotors\"}'\u003eRotors\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Front 180 \/ Rear 160 SMRT64 Center Lock\"}'\u003e\n\u003cp\u003eFront 180 \/ Rear 160 SMRT64 Center Lock\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ch2 class=\"product-about__accordion-title active\"\u003e\u003cspan class=\"h5\"\u003eAbout the XC FKTi\u003c\/span\u003e\u003c\/h2\u003e\n\u003cdiv class=\"product-about__more-link-wrapper\"\u003e\n\u003cdiv class=\"product-about__more-link\"\u003e\u003csvg class=\"icon icon-filter-two\" width=\"12\" height=\"7\" viewbox=\"0 0 12 7\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003cpath d=\"M10 1.5L6 5.5L2 1.5\" stroke=\"currentColor\" stroke-width=\"
2\" stroke-linecap=\"square\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product-about__accordion-description\"\u003e\n\u003cp\u003eIntroducing our new Gloria XC bike, the FKTi, and it's ready to take on anything; from local XC laps, chatty UK gravel rides and even epic edge-of-the-world adventures. We believe this bike absolutely does it all.\u003c\/p\u003e\n\u003cp\u003eThe FKTi is our wildcard, we are betting very heavily on it! It's an all conquering, trustworthy XC machine with a touch of the untamed. Go light and speedy for local races or load up with gear for that rugged adventure trip.\u003c\/p\u003e\n\u003cp\u003eWhat's the secret sauce? We designed this bike with a modern XC geometry, that optimises trail-riding zeal, while of course incorporating our material of choice, top-notch titanium Grade 9 3.25 tubing. The FKTi is adventure-ready, folks.\u003c\/p\u003e\n\u003cp\u003eWe've already seen it smashing 'Fastest Known Times' and ultra races. As o
ff-road gets more adventurous, the FKTi is here to help you blaze the trails. We have even created a Drop Bar XC racing build that will combine the best of gravel racing with a more solid and capable set up.\u003c\/p\u003e\n\u003cp\u003eWe've kept things sleek and simple – a straight headtube for stiffness and weight reduction, a direct mount rear brake, and a classic BSA bottom bracket.\u003c\/p\u003e\n\u003cp\u003eReady for anything? Well so are we: Mechanical or Electronic shifting, hydraulic braking or not – the Gloria FKTi is as versatile to build as it is to ride. Want it fully integrated, you can achieve it with Gloria!\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","published_at":"2025-05-16T15:32:45+01:00","created_at":"2025-05-16T15:32:45+01:00","vendor":"Gloria","type":"Bicycles","tags":["FKTI"],"price":269900,"price_min":269900,"price_max":269900,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at
console.log("pr-product-page");_price_varies":false,"variants":[{"id":55464801927551,"title":"Small","option1":"Small","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"XC FKTI Bike - Carbon Fork - SLX Groupset - Small","public_title":"Small","options":["Small"],"price":269900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55464801960319,"title":"Medium","option1":"Medium","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"XC FKTI Bike - Carbon Fork - SLX Groupset - Medium","public_title":"Medium","options":["Medium"],"price":269900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55464801993087,"title":"Large","option1":"Large","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"XC FKTI Bike - Carbon Fork - SLX Groupset - Large","public_title":"Large","options":["Large"],"price":269900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":55464802025855,"title":"Extra Large","option1":"Extra Large","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"XC FKTI Bike - Carbon Fork - SLX Groupset - Extra Large","public_title":"Extra Large","options":["Extra Large"],"price":269900,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/XC_FKTI_Carbon_Fork_SLX_on_magenta.webp?v=1747405873","\/\/projektride.co.uk\/cdn\/shop\/files\/XC_FKTI_Carbon_Fork_SLX_2_magenta.webp?v=1747405880"],"featured_image":"\/\/projektride.co.uk\/cdn\/sho
p\/files\/XC_FKTI_Carbon_Fork_SLX_on_magenta.webp?v=1747405873","options":["Size"],"media":[{"alt":null,"id":65799646675327,"position":1,"preview_image":{"aspect_ratio":1.504,"height":1362,"width":2048,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/XC_FKTI_Carbon_Fork_SLX_on_magenta.webp?v=1747405873"},"aspect_ratio":1.504,"height":1362,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/XC_FKTI_Carbon_Fork_SLX_on_magenta.webp?v=1747405873","width":2048},{"alt":null,"id":65799651459455,"position":2,"preview_image":{"aspect_ratio":1.504,"height":1362,"width":2048,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/XC_FKTI_Carbon_Fork_SLX_2_magenta.webp?v=1747405880"},"aspect_ratio":1.504,"height":1362,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/XC_FKTI_Carbon_Fork_SLX_2_magenta.webp?v=1747405880","width":2048}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003ch2 class=\"product-about__accordion-title active\"\u003e\u003cspan class=\"h5\"\u003eMTB Fr| ame details\u003c\/span\u003e\u003c\/h2\u003e\n\u003cdiv class=\"product-about__more-link-wrapper\"\u003e\n\u003cdiv class=\"product-about__more-link\"\u003e\u003csvg class=\"icon icon-filter-two\" width=\"12\" height=\"7\" viewbox=\"0 0 12 7\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003cpath d=\"M10 1.5L6 5.5L2 1.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"square\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product-about__accordion-description\"\u003e\n\u003cul\u003e\n\u003cli\u003eHeadtube: ZS44\/EC44 headset included\u003c\/li\u003e\n\u003cli\u003eAlloy seatpost collar included\u003c\/li\u003e\n\u003cli\u003eUDH hanger included\u003c\/li\u003e\n\u003cli\u003eRobert Axle Project Rear 148x12mm Boost thru axle included\u003c\/li\u003e\n\u003cli\u003eSeatpost: 31.6 mm (dropper post ready)\u003c\/li\u003e\n\u003cli\u003eBottom bracket: 73mm BSA \u003c\/li\u003e\n\u003cli\u003eBrake standard: Direct-mount 160mm\u003c\B
/li\u003e\n\u003cli\u003eFork travel: 100 – 120mm\u003c\/li\u003e\n\u003cli\u003eAvailable with carbon or suspension fork\u003c\/li\u003e\n\u003cli\u003eWheel Size: 29″\u003c\/li\u003e\n\u003cli\u003eTire size: up to 29×2.4”\u003c\/li\u003e\n\u003cli\u003eMax Chainring: up to 38t\u003c\/li\u003e\n\u003cli\u003eFrame weight 2.1 kg\u003c\/li\u003e\n\u003cli\u003eButted tubes\u003c\/li\u003e\n\u003cli\u003eGrade 9 3Al-2.5V\u003c\/li\u003e\n\u003cli\u003eLifetime Frame Warranty\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch2 class=\"h5 product-about__accordion-title active\"\u003e\u003cspan\u003eGeometry, Weight \u0026amp; Specs\u003c\/span\u003e\u003c\/h2\u003e\n\u003cdiv class=\"product-about__more-link-wrapper\"\u003e\n\u003cdiv class=\"product-about__more-link\"\u003e\u003csvg class=\"icon icon-filter-two\" width=\"12\" height=\"7\" viewbox=\"0 0 12 7\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003cpath d=\"M10 1.5L6 5.5L2 1.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap= | \"square\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product-about__accordion-description main-product-description\"\u003e\n\u003cp\u003e\u003cstrong\u003ePictures are for reference purposes only.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003e\u003cstrong\u003eIf you have any requirements for custom parts, feel free to send us an email.\u003c\/strong\u003e\u003c\/em\u003e\u003c\/p\u003e\n\u003cp\u003eBuild details.\u003c\/p\u003e\n\u003ctable xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\" cellspacing=\"0\" cellpadding=\"0\" dir=\"ltr\" border=\"1\" data-sheets-root=\"1\"\u003e\n\u003ccolgroup\u003e\n\u003ccol width=\"210\"\u003e\n\u003ccol width=\"710\"\u003e\n\u003c\/colgroup\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Product Type\"}'\u003eProduct Type\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Component\"}'\u003eComponent\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ct
d data-sheets-value='{\"1\":2,\"2\":\"Bar Tape \/ Grips\"}'\u003eBar Tape \/ Grips\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"ODI\"}'\u003eODI\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Frame\"}'\u003eFrame\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Gloria - Titanium FKti\"}'\u003eGloria - Titanium FKti\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Fork\"}'\u003eFork\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Gloria Cabon with Cages mounts\"}'\u003eGloria Carbon with Cages mounts\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Handle Bar\"}'\u003eHandle Bar\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Pro 800 x 40 mm rise\"}'\u003ePro 800 x 40 mm rise\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Saddle\"}'\u003eSaddle\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Selle Itallia\"}'\u003eSelle Itallia\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Stem\"}'\u003eStem\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"BBB\"}'\u003eBBB\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Tyre\"}'\u003eTyre\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Schwalbe Racing Ralph Tubeless\"}'\u003eSchwalbe Racing Ralph Tubeless\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Wheel Pair\"}'\u003eWheel Pair\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"E 1900 wheel, 30 mm rim ,29 inch \"}'\u003eE 1900 wheel, 30 mm rim ,29 inch\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Bottom Bracket\"}'\u003eBottom Bracket\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"BB-RS501 bottom bracket cups, English thrEFF. TOP TUBE LENGTH
ead cups\"}'\u003eBB-RS501 bottom bracket cups, English thread cups\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Seat Post\"}'\u003eSeat Post\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"BBB 31.6 x 400mm\"}'\u003eBBB 31.6 x 400mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Groupset\"}'\u003eGroupset\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"SLX\"}'\u003eSLX\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Cassette\"}'\u003eCassette\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"CS-M7100 SLX 12-speed cassette 10 - 51T\"}'\u003eCS-M7100 SLX 12-speed cassette 10 - 51T\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Chain\"}'\u003eChain\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"CNM7100126Q CN-M7100 SLX\/105 HG+ chain with quick link, 12-speed, 126L | \"}'\u003eCNM7100126Q CN-M7100 SLX\/105 HG+ chain with quick link, 12-speed, 126L\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Crank Set\"}'\u003eCrank Set\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"FC-M7100 SLX Crank set without ring, 12-speed, 52 mm chainline\"}'\u003eFC-M7100 SLX Crank set without ring, 12-speed, 52 mm chainline\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Head Set\"}'\u003eHead Set\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Gloria ZS44\/EC44\"}'\u003eGloria ZS44\/EC44\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Head Set spacer\"}'\u003eHead Set spacer\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\" Headset Spacer Set \/ 1 1\/8\\\" \/ 2 x 10mm \/ Black\"}'\u003eHeadset Spacer Set \/ 1 1\/8\" \/ 2 x 10mm \/ Black\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-va
lue='{\"1\":2,\"2\":\"Breaks\"}'\u003eBreaks\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"BR-M7120\/BL-M7100 SLX 4 pot bled brake lever\/post mount calliper\"}'\u003eBR-M7120\/BL-M7100 SLX 4 pot bled brake lever\/post mount calliper\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Trigger\"}'\u003eTrigger\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"RDM7100SGS RD-M7100 SLX 12-speed rear derailleur, Shadow+ SGS, for single \"}'\u003eRDM7100SGS RD-M7100 SLX 12-speed rear derailleur, Shadow+ SGS, for single\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Rear Mech\"}'\u003eRear Mech\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"RDM7100SGS RD-M7100 SLX 12-speed rear derailleur, Shadow+ SGS, for single \"}'\u003eRDM7100SGS RD-M7100 SLX 12-speed rear derailleur, Shadow+ SGS, for single\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Seat Clamp\"}'\u003eSeat Clamp\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Gloria Forged Alloy Bolt Up 34.9\"}'\u003eGloria Forged Alloy Bolt Up 34.9\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Rotors\"}'\u003eRotors\u003c\/td\u003e\n\u003ctd data-sheets-value='{\"1\":2,\"2\":\"Front 180 \/ Rear 160 SMRT64 Center Lock\"}'\u003e\n\u003cp\u003eFront 180 \/ Rear 160 SMRT64 Center Lock\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ch2 class=\"product-about__accordion-title active\"\u003e\u003cspan class=\"h5\"\u003eAbout the XC FKTi\u003c\/span\u003e\u003c\/h2\u003e\n\u003cdiv class=\"product-about__more-link-wrapper\"\u003e\n\u003cdiv class=\"product-about__more-link\"\u003e\u003csvg class=\"icon icon-filter-two\" width=\"12\" height=\"7\" viewbox=\"0 0 12 7\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\u003cpath d=\"M10 1.5L6 5.5L2 1.577.4
5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"square\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"product-about__accordion-description\"\u003e\n\u003cp\u003eIntroducing our new Gloria XC bike, the FKTi, and it's ready to take on anything; from local XC laps, chatty UK gravel rides and even epic edge-of-the-world adventures. We believe this bike absolutely does it all.\u003c\/p\u003e\n\u003cp\u003eThe FKTi is our wildcard, we are betting very heavily on it! It's an all conquering, trustworthy XC machine with a touch of the untamed. Go light and speedy for local races or load up with gear for that rugged adventure trip.\u003c\/p\u003e\n\u003cp\u003eWhat's the secret sauce? We designed this bike with a modern XC geometry, that optimises trail-riding zeal, while of course incorporating our material of choice, top-notch titanium Grade 9 3.25 tubing. The FKTi is adventure-ready, folks.\u003c\/p\u003e\n\u003cp\u003eWe've already seen it smashing | 'Fastest Known Times' and ultra races. As off-road gets more adventurous, the FKTi is here to help you blaze the trails. We have even created a Drop Bar XC racing build that will combine the best of gravel racing with a more solid and capable set up.\u003c\/p\u003e\n\u003cp\u003eWe've kept things sleek and simple – a straight headtube for stiffness and weight reduction, a direct mount rear brake, and a classic BSA bottom bracket.\u003c\/p\u003e\n\u003cp\u003eReady for anything? Well so are we: Mechanical or Electronic shifting, hydraulic braking or not – the Gloria FKTi is as versatile to build as it is to ride. Want it fully integrated, you can achieve it with Gloria!\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {55464801927551 : "deny",55464801960319 : "deny",55464801993087 : "deny",55464802025855 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {55464801927551 : parseInt("1"),55464801960319 :
parseInt("1"),55464801993087 : parseInt("1"),55464802025855 : parseInt("1"),};
window._RestockRocketConfig.variantsPreorderCount = {55464801927551 : parseInt(""),55464801960319 : parseInt(""),55464801993087 : parseInt(""),55464802025855 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {55464801927551 : null,55464801960319 : null,55464801993087 : null,55464802025855 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {55464801927551 : parseInt(""),55464801960319 : parseInt(""),55464801993087 : parseInt(""),55464802025855 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {55464801927551 : null,55464801960319 : null,55464801993087 : null,55464802025855 : null,};
window._RestockRocketConfig.variantsShippingText = {55464801927551 : "",55464801960319 : "",55464801993087 : "",55464802025855 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {55464801927551 : null,55464801960319 : null,55464801993087 : null,55464802025855 : null,};
window._RestockRocketConfig.selected_variant_id = 55464801927551;
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/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-collection.js'
window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
function checkSettingsE604.3
xpiry(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 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._RestockRocketC | onfig.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 || 626
!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?.them
e?.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) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
if(settings.enable_app) {
const hijackIntegration = window._RestockRocketConfig.in653.4
tegrations.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)) {
createRestoc | kRocketScript(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 updateCartSel
lingPlans() {
// 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');
}
}
attemptCar