Вентиляционные каналы на молнии по бокам открываются при необходимости, молнии на лодыжке не пускают штанину в цепь. Расшитое колено, широкий пояс со шнуровкой, rip-stop спереди; от +7°С до +30°С.
Характеристики:
— эластичный материал;
— анатомический покрой;
— плоские швы;
— расшито колено, низ заужен;
— широкий пояс со шнуровкой;
— карманы с замком-молнией;
— на лодыжке молнии для защиты от попадания в цепь;
— вшиты светоотражающие элементы;
— по бокам вшиты вентиляционные каналы на молнии для дополнительной вентиляции в случае необходимости;
— материал спереди rip-stop; Материал: Polyester 100%.
Велоштаны RockBros будут идеальны при комбинированном использовании с вело трусами. Температура комфорта использования: от +7°С до +30°С
Оплата и доставка
Способы доставки
СДЭКПо России, ЕАЭС и СНГ
Почта РоссииДля населенных пунктов без ПВЗ
По Санкт-Петербургу доступна курьерская доставка Яндекс Go. Самовывоз из нашего шоурума по адресу Санкт-Петербург, Железноводская 25.
Способы оплаты
СБП / QR-кодБыстрая онлайн-оплата
Банковская картаЧерез платежного партнера
Яндекс ПэйОплата через Яндекс
Яндекс СплитОплата частями, если доступно
Чек отправляется на e-mail или SMS. Заказ комплектуется за 1 рабочий день
Уход за изделием
Бережный уход сохраняет эластичность ткани и защитные элементы изделия.
Застегните молнии и липучки, выверните изделие и используйте сетчатый мешок.
Стирайте при температуре не выше 30 °C на деликатном режиме с минимальным отжимом.
Используйте мягкое жидкое средство; без кондиционера, отбеливателя и химчистки.
Не замачивайте и не выкручивайте.
Сушите расправленным в тени; без сушильной машины, батареи и утюга.
Посадка и выбор размера
Летние велоштаны RockBros рассчитаны на свободную спортивную посадку и могут использоваться поверх велотрусов с памперсом. Размер выбирайте прежде всего по талии, а рост используйте как дополнительный ориентир.
Проверяйте талиюПояс должен держаться уверенно без сильного давления. Посадку можно дополнительно отрегулировать шнуровкой.
Свобода в коленеСделайте несколько приседаний: ткань не должна ограничивать сгибание колена или сильно натягиваться в бедрах.
Безопасный низЗауженные штанины и молнии у лодыжек помогают убрать лишний объем рядом с цепью и облегчают надевание.
Если талия и рост указывают на разные размеры или параметры находятся у границы диапазона, уточните посадку у консультанта перед заказом.
Умный подбор размера
Введите рост и обхват талии в сантиметрах. Калькулятор использует таблицу размеров из этой карточки товара.
(function () {
function normalize(value) {
return String(value || '').trim().toLowerCase().replace(/\s+/g, ' ');
}
function parseRange(value) {
var match = String(value || '').replace(/,/g, '.').match(/(\d+(?:\.\d+)?)\s*[-–—]\s*(\d+(?:\.\d+)?)/);
return match ? [Number(match[1]), Number(match[2])] : null;
}
function inRange(value, range) {
return value >= range[0] && value <= range[1];
}
function distance(value, range) {
if (inRange(value, range)) return 0;
return value < range[0] ? range[0] - value : value - range[1];
}
function nearBorder(value, range) {
return Math.abs(value - range[0]) <= 1 || Math.abs(value - range[1]) <= 1;
}
function readGuide() {
var popup = document.querySelector('#wd_sizeguide');
if (!popup) return null;
var rows = Array.prototype.map.call(
popup.querySelectorAll('.wd-sizeguide-table tr'),
function (row) {
return Array.prototype.map.call(row.cells, function (cell) {
return cell.textContent.trim();
});
}
);
var sizeRow = rows.find(function (row) { return normalize(row[0]).indexOf('размер') !== -1; });
var heightRow = rows.find(function (row) {
var label = normalize(row[0]);
return label.indexOf('рост') !== -1 || label.indexOf('высота') !== -1;
});
var waistRow = rows.find(function (row) { return normalize(row[0]).indexOf('тал') !== -1; });
if (!sizeRow || !heightRow || !waistRow || sizeRow.length < 2) return null;
var sizes = sizeRow.slice(1).map(function (name, index) {
return {
name: name,
height: parseRange(heightRow[index + 1]),
waist: parseRange(waistRow[index + 1])
};
}).filter(function (size) {
return size.name && size.height && size.waist;
});
if (!sizes.length) return null;
return {
title: (popup.querySelector('.wd-sizeguide-title') || {}).textContent || 'таблица размеров',
sizes: sizes
};
}
function availableSizes() {
var bodyMatch = document.body.className.match(/postid-(\d+)/);
if (!bodyMatch) return [];
var form = document.querySelector('form.variations_form[data-product_id="' + bodyMatch[1] + '"]');
if (!form) return [];
try {
var variations = JSON.parse(form.getAttribute('data-product_variations') || '[]');
return variations.filter(function (variation) {
return variation.is_in_stock && variation.variation_is_active;
}).map(function (variation) {
return normalize(variation.attributes.attribute_pa_size).replace(/[^a-zа-я0-9]/g, '');
});
} catch (error) {
return [];
}
}
function initialize() {
document.querySelectorAll('[data-vo-pants-calc]').forEach(function (calc) {
if (calc.getAttribute('data-pants-ready') === '1') return;
calc.setAttribute('data-pants-ready', '1');
var heightInput = calc.querySelector('[data-pants-height]');
var waistInput = calc.querySelector('[data-pants-waist]');
var button = calc.querySelector('[data-pants-calculate]');
var result = calc.querySelector('[data-pants-result]');
var sizeOutput = calc.querySelector('[data-pants-size]');
var message = calc.querySelector('[data-pants-message]');
var source = calc.querySelector('[data-pants-source]');
button.addEventListener('click', function () {
var height = Number(heightInput.value);
var waist = Number(waistInput.value);
var guide = readGuide();
result.classList.add('is-visible');
if (!height || !waist) {
sizeOutput.textContent = 'Заполните оба параметра';
message.textContent = 'Для подбора нужны рост и обхват талии.';
source.textContent = '';
return;
}
if (!guide) {
sizeOutput.textContent = 'Нужна консультация';
message.textContent = 'Не удалось прочитать таблицу текущего товара. Напишите нам — подберем размер вручную.';
source.textContent = '';
return;
}
var minHeight = Math.min.apply(null, guide.sizes.map(function (item) { return item.height[0]; }));
var maxHeight = Math.max.apply(null, guide.sizes.map(function (item) { return item.height[1]; }));
var minWaist = Math.min.apply(null, guide.sizes.map(function (item) { return item.waist[0]; }));
var maxWaist = Math.max.apply(null, guide.sizes.map(function (item) { return item.waist[1]; }));
if (height maxHeight || waist maxWaist) {
sizeOutput.textContent = 'Параметры вне таблицы';
message.textContent = 'Ваши мерки выходят за диапазон таблицы. Напишите нам — поможем подобрать размер вручную.';
source.textContent = 'Источник: ' + guide.title.trim();
return;
}
var ranked = guide.sizes.map(function (item) {
var score = (inRange(waist, item.waist) ? 3 : 0) + (inRange(height, item.height) ? 1 : 0);
var delta = distance(waist, item.waist) * 2 + distance(height, item.height) * 0.5;
return { item: item, score: score, delta: delta };
}).sort(function (a, b) {
return b.score !== a.score ? b.score - a.score : a.delta - b.delta;
});
var best = ranked[0];
var second = ranked[1];
var border = nearBorder(waist, best.item.waist) || nearBorder(height, best.item.height);
var available = availableSizes();
var normalizedBest = normalize(best.item.name).replace(/[^a-zа-я0-9]/g, '');
var isAvailable = !available.length || available.indexOf(normalizedBest) !== -1;
sizeOutput.textContent = 'Рекомендуемый размер: ' + best.item.name;
if (!isAvailable) {
message.textContent = 'Размер соответствует таблице, но сейчас не найден среди доступных вариаций. Уточните альтернативу у консультанта.';
} else if (second && best.score === second.score) {
message.textContent = 'Параметры находятся между размерами ' + best.item.name + ' и ' + second.item.name + '. Лучше уточнить желаемую посадку.';
} else if (border) {
message.textContent = 'Вы близко к границе диапазона. Перед заказом рекомендуем уточнить посадку.';
} else {
message.textContent = 'Талия и рост лучше всего соответствуют размеру ' + best.item.name + '.';
}
source.textContent = 'Источник: ' + guide.title.trim() + '; проверка наличия выполнена по вариациям товара.';
});
});
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initialize, { once: true });
} else {
initialize();
}
})();