SB140 LRMeet the bike in between nothing. Leaving no rider wanting. Master of the climb, the bomb, the rail and the air. The utterly unequivocal. The rule crusher. The trend buster. No rig can rule all, but this one can absolutely rule.
The mountain bike
.
5'5" - 5'11"
5'1" - 5'7"
LARGE
MEDIUM
5'10" - 6'3"
5'5" - 5'11"
X-LARGE
LARGE
6'1" - 6'7"
5'10" - 6'3"
XX-LARGE
X-LARGE
6'5" - 6'11"
6'1" - 6'7"
XX-LARGE
6'5" - 6'11"
SPECIFICATION
FOX FACTORY 36 GRIP X2 / 160MMC/Series carbon fibre frame, Switch Infinity suspension technology, threaded bottom bracket, fully enclosed internal cable routing, 148mm x 12mm BOOST dropouts, sealed Enduro Max pivot bearings, integrated derailleur hanger, and axle.
Please note: Specifications are subject to change without notice.
GEOMETRY
All measurements are shown in millimetres.
Please note: Specifications are subject to change without notice.
GEOMETRY
All measurements are shown in millimetres.
160MM FORK
SM
MD
LG
160MM FORK
XL
SM
HEAD TUBE ANGLE
65.0
65.0
65.0
65.0
65.0
D
65.0
EFF. SEATTUBE ANGLE
65.0
77.0
77.0
D
77.0
EFF. SEATTUBE ANGLE
77.0
77.0
77.0
77.0
77.0
E
77.0
ACTUAL SEATTUBE ANGLE
77.0
71.8
72.2
E
72.4
ACTUAL SEATTUBE ANGLE
72.8
71.8
73.3
72.2
72.4
F
72.8
CHAINSTAY LENGTH
73.3
436
438
F
440
CHAINSTAY LENGTH
442
436
444
438
440
G
442
WHEELBASE
444
1188
1221
G
1246
WHEELBASE
1277
1188
1304
1221
1246
H
1277
ESTIMATED BB HEIGHT
1304
342
342
H
342
ESTIMATED BB HEIGHT
342
342
342
342
342
I
342
STANDOVER
342
726
733
I
737
STANDOVER
739
726
744
733
737
J
739
HEADTUBE LENGTH
744
92
575
44
44
L
44
FORK (OFFSET)
44
44
44
44
44
M
44
STACK
44
617
620
M
625
STACK
635
617
655
620
625
N
635
REACH
655
430
460
N
480
REACH
505
430
520
460
480
O
505
FRONT CENTER
520
752
783
O
806
145
145
145
145
145
145
145
"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycb2514raw.webp?v=1741953615\u0026width=1920","name":"Yeti Cycles SB140 C-Series C2 Lunch Ride 29\" Factory Bike - Medium \/ Grey","offers":{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410446207#offer","@type":"Offer","availability":"http:\/\/schema.org\/InStock","price":"6699.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410446207"},"sku":"YCB25149CMDRGDFXC056600"},{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410478975#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycb2514turq.webp?v=1741953615\u0026width=1920","name":"Yeti Cycles SB140 C-Series C2 Lunch Ride 29\" Factory Bike - Medium \/ Blue","offers":{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410478975#offer","@type":"Offer","
availability":"http:\/\/schema.org\/InStock","price":"6699.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410478975"},"sku":"YCB25149CMDPTUFXC056600"},{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410511743#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycb2514emr.webp?v=1741953615\u0026width=1920","name":"Yeti Cycles SB140 C-Series C2 Lunch Ride 29\" Factory Bike - Large \/ Green","offers":{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410511743#offer","@type":"Offer","availability":"http:\/\/schema.org\/InStock","price":"6699.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410511743"},"sku":"YCB25149CXLPEMFXC056600"},{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=
-lunch-ride-29-factory-bike?variant=55196410642815#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycb2514raw.webp?v=1741953615\u0026width=1920","name":"Yeti Cycles SB140 C-Series C2 Lunch Ride 29\" Factory Bike - Extra Large \/ Grey","offers":{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410642815#offer","@type":"Offer","availability":"http:\/\/schema.org\/InStock","price":"6699.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410642815"},"sku":"YCB25149CXLRGDFXC056600"},{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410675583#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycb2514turq.webp?v=1741953615\u0026width=1920","name":"Yeti Cycles SB140 C-Series C2 Lunch Ride 29\" Factory Bike - Extra Large \/ Blue","offers":{"@id":"\/products\/yeti-cycles-sb140-c-series
-c2-lunch-ride-29-factory-bike?variant=55196410675583#offer","@type":"Offer","availability":"http:\/\/schema.org\/InStock","price":"6699.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410675583"},"sku":"YCB25149CXLPTUFXC056600"},{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410708351#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycb2514emr.webp?v=1741953615\u0026width=1920","name":"Yeti Cycles SB140 C-Series C2 Lunch Ride 29\" Factory Bike - Extra Extra Large \/ Green","offers":{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410708351#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"6699.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410708351"}},{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410741119#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycb2514emr.webp?v=1741953615\u0026width=1920","name":"Yeti Cycles SB140 C-Series C2 Lunch Ride 29\" Factory Bike - Extra Extra Large \/ Grey","offers":{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410741119#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"6699.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410741119"}},{"@id":"\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410773887#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/ycb2514emr.webp?v=1741953615\u0026width=1920","name":"Yeti Cycles SB140 C-Series C2 Lunch Ride 29\" Factory Bike - Extra Extra Large \/ Blue","offers":{"@id":"\/products\/yeti-cycles-sb140-c
-series-c2-lunch-ride-29-factory-bike?variant=55196410773887#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"6699.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike?variant=55196410773887"}}],"name":"Yeti Cycles SB140 C-Series C2 Lunch Ride 29\" Factory Bike","productGroupID":"14979885334911","url":"https:\/\/projektride.co.uk\/products\/yeti-cycles-sb140-c-series-c2-lunch-ride-29-factory-bike"}
<= LIQUID_CACHE_MAX_AGE) {
console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`);
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else {
console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`);
window._RestockRocketConfig.isLiquidCacheFresh = false;
}
}
function checkSettingsExpiry(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._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 age = Date.now() - updatedAt.getTime();
if (age
<];
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
function 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);
});
}
});
}
// 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
hopify.shop,
'ngrok-skip-browser-warning': 'skip'
};
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(cac
hedSettings);
} else {
console.error('STOQ - failed to load settings:', error);
}
})
.catch(function(e) {
console.error(e)
})
}
function fetchEmbedConfig(endpoint, apply) {
return fetch(
`${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`,
{
headers: {
'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop,
'ngrok-skip-browser-warning': 'skip'
}
}
)
.then(function(response) {
if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`);
return response.json();
})
.then(function(data) {
try {
apply(data);
} catch (applyError) {
// Apply failures are programming bugs (e.g. response shape changed
// server-side and the assignment threw). Surface them as console.error
// so they're visible in browser logs, then re-throw to fall through
// to the same Liquid-cached fallback as a fetch failur