a class="product__media product__media--featured" href="/collections/bike-hire/products/hire-ortlieb-40l-pannier-bags" title="Hire Ortlieb 40L Pannier Bags" aria-label="Hire Ortlieb 40L Pannier Bags" style="background-image: url(//projektride.co.uk/cdn/shop/files/resize_width_1000_600x.jpg?v=1741085512)">
span class="visually-hidden">Hire Ortlieb 40L Pannier Bags>
Do I need to pay a security deposit?
jektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.35.png?v=1687690844","options":["Size"],"media":[{"alt":null,"id":31960273158370,"position":1,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.35.png?v=1687690844"},"aspect_ratio":1.31,"height":942,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.35.png?v=1687690844","width":1234},{"alt":null,"id":31960273256674,"position":2,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.54.png?v=1687690860"},"aspect_ratio":1.31,"height":942,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2023-06-25at12.00.54.png?v=1687690860","width":1234},{"alt":null,"id":31960273387746,"position":3,"preview_image":{"aspect_ratio":1.31,"height":942,"width":1234,"src":"\/\/projektride.co.uk\/cdn\/shop\/product
sign prevents knee contact while pedaling out of the saddle.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003eThe plus versions of the stem bag include exterior mesh pockets for catching empty wrappers as well as a mesh drainage hole to help keep the interior dry.\u003c\/p\u003e\n\u003cp data-mce-fragment=\"1\"\u003e\u003cem data-mce-fragment=\"1\"\u003eWhile the body fabric of the stem bag is waterproof, due to the stitching process used to assemble the product, there is the possibility for water to enter through the seams when exposed to sustained rain. We recommend using an internal dry bag for contents that must remain absolutely dry.\u003c\/em\u003e\u003c\/p\u003e"}
!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
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)
Email
<
£0.00
<