Каталог
(0)
Предзаказ

Фитинг DN 10 BEL (Ш) 14

Артикул: 801311
с НДС 20%
Запросить Счет
Добавить в сравнение

Откройте новые горизонты надежности с фитингом DN 10 BEL (Ш) 14, идеально подходящим для сложных промышленных задач. Соединитель обеспечивает максимальную долговечность благодаря способности выдерживать рабочее давление до 445 бар. Внутренний диаметр 3/8 дюйма и конструкция из высококачественных материалов гарантируют устойчивость к износу и коррозии, что делает его идеальным выбором для гидравлических систем, машин и нефтегазовой промышленности.

Преимущества фитинга заключаются в уменьшении необходимости в частой замене благодаря его высокой прочности и надежности. Это способствует снижению эксплуатационных затрат и повышению эффективности оборудования. Профессионалы выбирают DN 10 BEL (Ш) 14 за его стабильность, безопасность и долгий срок службы. Покупайте в РусГидроПром и оцените его преимущества!

Выбрать
    Наличие и цена на сайте всегда АКТУАЛЬНЫ
    Описание

    Надежное решение для промышленных условий — Фитинг DN 10 BEL (Ш) 14

    Фитинг DN 10 BEL (Ш) 14 предназначен для использования в различных промышленных системах, где важны надежность и долговечность. Благодаря высококачественным материалам и продуманной конструкции, этот фитинг обеспечивает стабильную и безопасную работу даже при высоких нагрузках и экстремальных условиях эксплуатации.

    Основные характеристики

    ХарактеристикаЗначение
    Артикул801311
    БрендCAST
    D114S
    DASH-4
    DN10
    ID (дюйм)3/8
    L129,5 мм
    L223,5 мм
    Рабочее давление (WP)445 бар

    Преимущества и области применения

    Этот фитинг идеально подходит для использования в гидравлических системах, нефтегазовой промышленности, машиностроении и других отраслях, где требуется высокая надежность соединений. Благодаря высокой прочности и устойчивости к коррозии, он эффективно решает задачи по обеспечению герметичности и долговечности соединений, что особенно важно в условиях агрессивной среды.

    Одним из ключевых преимуществ данного фитинга является его способность выдерживать высокое рабочее давление до 445 бар, что позволяет использовать его в сложных и ответственных системах. Кроме того, он способствует снижению эксплуатационных затрат за счет уменьшения частоты обслуживания и замены компонентов, что удлиняет срок службы оборудования.

    Надежность и доверие клиента

    Фитинг DN 10 BEL (Ш) 14 обеспечивает стабильную и безопасную работу, снижая риск простоев и повышая производительность вашего оборудования. Высокие стандарты качества и проверенные материалы делают его надежным выбором для профессионалов, стремящихся к максимальной эффективности и безопасности своих систем.

    Не упустите возможность приобрести фитинг DN 10 BEL (Ш) 14 в интернет-магазине РусГидроПром, чтобы обеспечить бесперебойную работу вашего оборудования. Закажите прямо сейчас и оцените все преимущества этого надежного решения!

    Характеристики
    Бренд
    CAST
    WP (bar) рабочее давление
    445
    внутр. диаметр (дюйм)
    3/8
    DN условный внутренний диаметр рукава
    10
    DASH размер продукции (рукава, фитинги, TC)
    -4
    Размер L1 фитинги Каст
    29,5
    Размер L2 фитинги Каст
    23,5
    Размер соедин. D1 фитинги Каст
    14S
    Аналогичные товары
    В наличии
    Предзаказ
    арт. 801320
    В наличии
    Фитинг DN 20 BEL (Ш) 22 от CAST — оптимальное...
    595 ₽ 489 ₽
    В наличии
    Предзаказ
    арт. 801513
    Фитинг DN 12 BEL (Ш) 14 (45) от CAST —...
    636 ₽ 523 ₽
    В наличии
    Предзаказ
    арт. 801523
    Фитинг серии DN 25 BEL (Ш) 28 (45) от бренда...
    1 302 ₽ 1 070 ₽
    В наличии
    Предзаказ
    арт. 801505
    Фитинг DN 06 BEL (Ш) 10 (45) от бренда CAST...
    168 ₽ 139 ₽
    В наличии
    Предзаказ
    арт. 801406
    Фитинг DN 06 BEL (Ш) 12 (90) от CAST идеально...
    185 ₽ 152 ₽
    В наличии
    Предзаказ
    арт. 701318
    В наличии
    Фитинг DN 16 BEL (Ш) 20 — высококачественный компонент для...
    173 ₽ 142 ₽
    В наличии
    Предзаказ
    арт. 801403
    Представляем фитинг DN 06 BEL (Ш) 6 (90) — идеальное...
    161 ₽ 132 ₽
    В наличии
    Предзаказ
    арт. 801520
    Фитинг DN 20 BEL (Ш) 22 (45) от бренда CAST...
    839 ₽ 689 ₽
    В наличии
    Предзаказ
    арт. 801405
    Фитинг DN 06 BEL (Ш) 10 (90) от компании CAST...
    168 ₽ 139 ₽
    В наличии
    Предзаказ
    арт. 801306
    В наличии
    Откройте новые горизонты для вашей промышленности с фитингом DN 06...
    91 ₽ 75 ₽
    В наличии
    Предзаказ
    арт. 801418
    Фитинг DN 16 BEL (Ш) 20 (90) — это высокотехнологичное...
    724 ₽ 595 ₽
    В наличии
    Предзаказ
    арт. 801322
    В наличии
    Фитинг DN 25 BEL (Ш) 25 от бренда CAST —...
    808 ₽ 663 ₽
    В наличии
    Предзаказ
    арт. 801522
    Представляем Фитинг DN 25 BEL (Ш) 25 (45) — оптимальное...
    1 375 ₽ 1 130 ₽
    Отзывы
    Отзывов еще никто не оставлял
    Популярные товары
    Фитинги
    Пром рукава
    РВД
    БЫСТРОРАЗЪЕМНЫЕ СОЕДИНЕНИЯ
    Фитинги
    Пром рукава
    РВД
    БЫСТРОРАЗЪЕМНЫЕ СОЕДИНЕНИЯ
    Предзаказ товара
    Предзаказ успешно отправлен!
    Имя *
    Телефон *
    Добавить в корзину
    Название товара
    100 ₽
    1 шт.
    Перейти в корзину
    Обратный звонок
    Запрос успешно отправлен!
    Имя *
    Телефон *
    Сообщение *
    {{ widget_messages.btn_buy_one_click_text }}
    Запросить счет в WhatsApp
    {% endcapture %} {% capture cart_button %}
    {% endcapture %} {% capture marketplace_button %} {% endcapture %} {% capture stickers %}
    {% include 'system_stickers', sticker_class: 'sticker', sticker_property: 'label' %}
    {{ messages.pre_order }}
    {% endcapture %}
    1 %}is-more-variants{% endif %} {% if account.forbid_order_over_existing %}is-forbid-order-over-existing{% endif%} {% if is_show_marketplace_button %} is-show-marketplace-button {% endif %} {% if hide_all_buttons %} hide-all-buttons {% endif %}">
    {% if product.images.size > 1 or product.video_links.size > 0 %} {% else %} {% assign img_title = product.title | escape %} {% if product.first_image.title.size > 0 %} {% assign img_title = product.first_image.title | escape %} {% endif %} {% endif %}
    {% if account.reviews_enabled? %} {% if editor_mode? or widget_settings.product-hide-rating != true %}
    {% assign r = 1 %} {% for i in (1..5) %} {% assign r = r | plus: 1 %} {% endfor %}
    ({{ product.reviews_count }})
    {% endif %} {% endif %}
    {%- comment -%} ОРИГИНАЛЬНЫЙ блок артикула оставляем как есть (платформа его заполняет), но позже мы скроем только текст, чтобы не было дубля. Значение будем читать из него. {%- endcomment -%}
    {% if editor_mode? or widget_settings.product-hide-sku != true %}
    {% endif %}
    {%- comment -%}
    В наличии
    {%- endcomment -%} {{ stickers }} {% assign initial_sku = product.variants.first.sku | default: product.sku %}

    {{ product.title | editable }}

    Артикул: {{ initial_sku }}
    {% if product.bundle_discount > 0 %}
    {{ widget_messages.product_bundle_discount_label }}: {{ product.bundle_discount | money }}
    {% endif %}
    с НДС 20%
    {% if product.show_service_button %} {{ service_button }} {% elsif product.show_cart_button %} {{ cart_button }} {{ preorder_button }} {% elsif product.show_quick_checkout_button %} {{ quick_checkout_product_button }} {{ preorder_button }} {% endif %} {% if is_show_marketplace_button == false %} {% if settings.favorite_enabled %} {% endif %} {% if settings.compare_enabled == null or settings.compare_enabled %} {% if widget_settings.product-hide-compare != true %} {% unless product.is_bundle %} {% endunless %} {% endif %} {% endif %} {% endif %}
    {% if product.show_quick_checkout_button and product.show_cart_button %} {{ quick_checkout_product_button }} {% endif %} {% if product.show_marketplace_button %} {{ marketplace_button }} {% endif %}
    {% if settings.favorite_enabled %} {% endif %} {% if settings.compare_enabled == null or settings.compare_enabled %} {% if widget_settings.product-hide-compare != true %} {% unless product.is_bundle %} {{ messages.btn_compare_text }} {% endunless %} {% endif %} {% endif %}
    {% if sber_bnpl.payment_gateway_enabled? %} {% if sber_bnpl.show_at_product == true %} {% include "system_bnpl-button" with product, button_class: 'collection', button_type_show: 'collection-price-default', button_type_hide: 'collection-price-varies-hide' %} {% endif %} {% endif %}
    {% if product.show_variants? %}
    {% capture product_variants_options %}{ "default": "option-radio" {% if widget_settings.display-property-color == "text" %}, "default": "option-span"{% endif %} {% if widget_settings.display-property-color == "picture" %}, "default": "option-radio"{% endif %} }{% endcapture %}
    {% else %}
    {% endif %} {% unless product.is_bundle %} {% if product.accessories.size > 0 %}
    {{ messages.options }}
    {% endif %} {% endunless %} {% if product.is_bundle %}
    {% for bundle_component in product.bundle_components %}
    {% if bundle_component.variant.option_values.size > 0 %}
    {% for option_value in bundle_component.variant.option_values %} {{ option_value.option_name.title }}: {{ option_value.title }} {% endfor %}
    {% endif %}
    {% if bundle_component.is_free %} {{ bundle_component.quantity }} × {{ widget_messages.product_bundle_gift_text }} {% else %} {{ bundle_component.quantity }} × {{ bundle_component.variant.price | money }} {% endif %}
    {% endfor %}
    {% endif %}
    {% if editor_mode? or widget_settings.product-hide-short-description != true %}
    {{ product.short_description | replace: '','
    ' | editable }}
    {% endif %}
    {% include "system_insales_widget-calculate_delivery" %}
    {% assign img_title = null %} /* === БАЗА / ПЕРЕМЕННЫЕ И СЛУЖЕБНЫЕ СОСТОЯНИЯ =============================== */ @include background-color(--bg); & { --buy-btn-min-width: 220px; } .product__buy-btn-area.is-fixed-state { @media (max-width: 767px) { .product__buy-btn-area-inner { position: fixed; bottom: var(--product-buy-fixed-position, 0); left: 0; right: 0; background-color: var(--bg); padding: 5px var(--layout-side-padding); box-shadow: 4px 0 10px rgba(212, 87, 87, 0.383); z-index: var(--zindex-fixed); display: flex; } } } .editor-mobile-state:not(.editor-mobile-only-view) & { @media (max-width: 767px) { .product__buy-btn-area-inner { pointer-events: none; } } } .product__buy-btn-area-inner { width: 100%; display: flex; align-items: flex-end; /* Никогда не обрезаем всплывашки */ overflow: visible; } &[style*="--img-fit:contain"] { .product__photo.img-ratio img, .product__photo-tumb.img-ratio img { object-fit: contain; } } &[style*="--product-hide-sku:true"] { .product__sku { display: none !important; } } &[style*="--product-hide-short-description:true"] { .product__short-description { display: none !important; } } &[style*="--product-hide-full-description:true"] { .product__full-description { display: none !important; } } &[style*="--product-hide-variants-title:true"] { .option-selector .option-label { display: none !important; } } &[style*="--product-hide-rating:true"] { .product__rating { display: none !important; } } /* === ГРИД / РАЗМЕТКА ПРОДУКТА ============================================== */ .product { display: grid; grid-template-areas: "photo form" "photo description" "photo properties" "photo reviews" "photo calculate-delivery"; grid-template-columns: 50% minmax(450px, 1fr); grid-template-rows: repeat(3, auto) 1fr; grid-column-gap: 2rem; @media screen and (max-width: 1024px) { grid-template-areas: "photo" "form" "calculate-delivery"; grid-template-columns: auto; grid-template-rows: auto; grid-column-gap: 0; } &__area-photo { grid-area: photo; min-width: 0; position: relative; } &__area-form { grid-area: form; min-width: 0; } &__area-description { grid-area: description; min-width: 0; } &__area-properties { grid-area: properties; min-width: 0; } &__area-reviews { grid-area: reviews; min-width: 0; } &__area-calculate-delivery { grid-area: calculate-delivery; } &__available-forbid_order { position: absolute; top: 50%; left: 0; right: 0; text-align: center; padding: 0 1rem; transform: translateY(-50%); color: var(--color-text); display: none; } &.is-more-old-prices, &:not(.with-sale-value), &.with-accessories { .sticker-sale { display: none !important; } } &.without-old-price { .product__price-old { display: none; } } &.is-available { .product__available { display: block; } } &.not-available { &.is-zero-count-show { .product__available { display: block; } .product__not-available, .product__available-forbid_order { display: none; } } &.is-zero-count-hidden, &.is-zero-count-shown.is-forbid-order-over-existing { .product__not-available, .product__available-forbid_order { display: block; } .product__actions-btn { display: flex; } } &.is-zero-count-shown { .product__buy-one-click { display: block; } .product__available { display: block; } } &.is-zero-count-hidden { .counter-wrap, .product__preorder-btn, .add-cart-counter__btn { display: none; } .favorites_btn { margin-left: 0; margin-right: 0.75rem; } .product__compare-btn { margin-left: 0; } .product__actions-btn { display: flex; } } &.is-zero-count-hidden, &.is-zero-count-shown.is-forbid-order-over-existing { .product__buy-btn-area, .product__buy-one-click { display: none !important; } .product__photo img { opacity: 0.3; } .product__price-cur { color: var(--color-text-half-shade); } .product__available { display: none; } .product__actions-btn { display: flex; } } &.is-zero-count-preorder { .add-cart-counter__btn, .counter-wrap { display: none; } .product__not-available { display: block; } .product__preorder-btn { display: inline-flex; } .sticker-preorder { display: inline-flex; } } .option-value { &.is-radio { &>span, &.is-span { color: var(--color-text); } } } .product__buy-one-click { display: none; } } &.with-sale-value { .product__sale-value { display: inline-block; } } /* === ФОРМА ТОВАРА === */ .product-form { display: grid; grid-auto-flow: row; grid-template-areas: "title title" "rating rating" "short-description short-description" "available sku" "price price" "variants-bundle variants-bundle" "accessories accessories" "controls controls" "bundle bundle" "stickers stickers"; grid-template-columns: 1fr max-content; @media (max-width: 767px) { grid-template-areas: "title title" "rating rating" "short-description short-description" "available sku" "price price" "variants-bundle variants-bundle" "accessories accessories" "controls controls" "bundle bundle" "stickers stickers"; } &__area-rating { grid-area: rating; } &__area-sku { grid-area: sku; } &__area-available { grid-area: available; display: flex; font-size: 0.9rem; color: var(--color-text-half-shade); } &__area-title { grid-area: title; } &__area-variants-bundle { grid-area: variants-bundle; } &__area-accessories { grid-area: accessories; margin-bottom: 1.5rem; .label-accessories { display: block; line-height: 1.2; font-size: 0.8rem; text-transform: uppercase; font-weight: 500; padding-bottom: 0.5rem; } [data-product-accessory-error] { color: red; } .accessory-item:not(.common-accessories-has-error) [data-product-accessory-error] { display: none; } [data-product-accessory-values-item] { display: block; } } &__area-controls { grid-area: controls; } &__area-short-description{ grid-area: short-description; min-width: 0; } } /* === SKU === */ &__sku { display: inline-block; font-size: 0.9rem; color: var(--color-text-half-shade); } /* === РЕЙТИНГ === */ &__rating { margin-bottom: 0.5rem; display: inline-block; cursor: pointer; font-size: 0.9rem; } &__rating-list { display: inline-flex; vertical-align: text-bottom; } &__reviews-count { font-size: 0.8rem; display: inline-block; vertical-align: middle; margin-left: 3px; color: var(--color-accent-text); } &__rating-star { color: var(--color-text-major-shade); margin-right: 0.1rem; &:last-child { margin-right: 0; } &.is-active { color: var(--rating-color); } } /* === ЗАГОЛОВОК === */ &__title { line-height: 1.2; margin-bottom: 1.5rem; font-size: 2rem; @media (max-width: 767px) { font-size: 1.5rem; overflow-wrap: break-word; } } /* === ВАРИАНТЫ === */ &__variants { select { display: none; } } .option-selector { display: flex; flex-wrap: wrap; .option { margin: 0 0.8rem 0.8rem 0; width: 100%; } .option-label { display: block; line-height: 1.2; font-size: 0.8rem; text-transform: uppercase; font-weight: 500; padding-bottom: 0.5rem; } .option-value { &.is-radio, &.is-span { display: inline-block; margin: 0 10px 15px 0; line-height: 1; font-size: 1rem; cursor: pointer; &.is-active { cursor: default; &>span, &.is-span { background: var(--color-btn-bg); border-color: var(--color-btn-bg); color: var(--color-btn-color); &:hover { background: var(--color-btn-bg-hover); border-color: var(--color-btn-bg-hover); color: var(--color-btn-color); } } } &>input { display: none; } &>span, &.is-span { display: inline-block; font-weight: 500; border-radius: var(--controls-btn-border-radius); border: 1px solid var(--bg-minor-shade); background-color: var(--bg-minor-shade); color: var(--color-text); height: 32px; font-size: 0.9rem; padding: .5rem 1rem; transition: background-color .2s, color .2s; &:hover { background-color: var(--bg-major-shade); border-color: var(--bg-major-shade); } } } } } /* === НАЛИЧИЕ === */ &__not-available { display: none; margin-left: 0.25rem; } &__available { display: none; margin-left: 0.25rem; color: var(--color-success); } /* === ЦЕНА === */ &__price { margin-top: 1rem; margin-bottom: 1rem; line-height: 1.2; } &__price-cur { font-size: 1.75rem; font-weight: 700; margin-right: 10px; white-space: nowrap; @media (max-width: 767px) { font-size: 1.5rem; font-weight: 400; } } &__price-old { font-size: 1.5rem; color: var(--color-text-major-shade); text-decoration: line-through; white-space: nowrap; @media (max-width: 767px) { font-size: 1rem; } } /* === КНОПКИ/КОНТРОЛЫ === */ &__controls { display: grid; grid-template-columns: 100%; grid-row-gap: 0.75rem; @media screen and (max-width: 480px) { display: block; } /* Чтобы тултипы не резались */ overflow: visible; border: 1px solid #eee; padding: 10px; border-radius: 30px; } &__controls-left + &__controls-right { @media screen and (max-width: 480px) { margin-top: 1rem; } } &__buy-btn-area { width: 100%; @media screen and (max-width: 480px) { display: flex; } } &__preorder-btn { min-width: var(--buy-btn-min-width); display: none; } &__buy-one-click {} &__compare-btn, &__compare-btn:hover { background: var(--bg-minor-shade); color: var(--color-text-half-shade); height: 46px !important; width: 46px !important; border: 0; margin-left: 0.75rem; &:hover { border: 0; } &.compare-added { color: var(--color-btn-bg); span { font-weight: 600; } } } &__back-btn { width: var(--controls-height-m); min-width: var(--controls-height-m); background-color: var(--bg); color: var(--color-text); position: absolute; left: 1rem; top: 1rem; padding: 1px 0 2px; border-radius: 50%; z-index: 1; display: none; font-size: 1.3rem; @media (max-width: 767px) { left: 0; display: flex; } &:hover { @include background-color(--color-btn-bg); color: var(--color-btn-color-hover); } } /* === Бандл === */ &__bundle { margin: 1.5rem 0 1rem; grid-area: bundle; } &__bundle-discount { padding: 0.3rem 0; } /* === ОПИСАНИЯ === */ &__short-description { font-size: 1rem; line-height: 1.3; margin-bottom: 0.5rem; border-bottom: 1px solid var(--bg-major-shade); p { margin-bottom: 0.75rem; } } &__full-description { font-size: 1.125rem; line-height: 1.3; @media screen and (max-width: 767px) { font-size: 1rem; } } /* === ГАЛЕРЕЯ === */ &__gallery { position: sticky; top: 1rem; img { &.lazyload { visibility: hidden; &.loaded { visibility: visible; } } } &.is-shown-one-photo { .product__gallery-tumbs { display: none; } .product__gallery-main { .splide__arrow, .splide__pagination { display: none; } } } @media screen and (max-width: 1024px) { position: relative; top: auto; } @media screen and (max-width: 767px) { margin: 0 calc(-1 * var(--layout-side-padding)); } } &__one-photo { position: sticky; top: 1rem; @media screen and (max-width: 1024px) { max-width: 500px; margin: 0 auto 10px; position: relative; top: auto; } @media screen and (max-width: 767px) { margin: 0 calc(-1 * var(--layout-side-padding)); margin-bottom: 10px; } } &__photo { display: block; border-radius: var(--controls-btn-border-radius); border: 1px solid var(--bg-major-shade); @media screen and (max-width: 767px) { border-radius: 0; } } &__gallery-tumbs { margin-top: 1rem; @media screen and (max-width: 1024px) { display: none; } &:hover { .splide .splide__arrow { opacity: 1; &:disabled { opacity: 0.35; } } } .splide__slide.is-current .product__photo-tumb:before { border: 2px solid var(--color-btn-bg); } .splide { .splide__arrow { width: 1.5rem; height: 1.5rem; background: var(--color-btn-bg); outline: none; opacity: 0; &.splide__arrow--prev { left: 0.2rem; } &.splide__arrow--next { right: 0.2rem; } &:disabled { display: none; } } .splide__arrow-icon { font-size: 1.2rem; } } } &__gallery-main { position: relative; @media screen and (max-width: 1024px) { max-width: 500px; margin: 0 auto 10px; } .splide__arrow { opacity: 0; outline: none; @media screen and (max-width: 1024px) { display: none; } } .splide__arrow-icon { font-size: 2.5rem; } } &__photo-tumb { border-radius: var(--controls-btn-border-radius); &:before { content: ""; position: absolute; inset: 0; border: 1px solid var(--bg-major-shade); pointer-events: none; z-index: 1; border-radius: var(--controls-btn-border-radius); } } .splide__pagination { display: none; bottom: 1rem; position: absolute; background: var(--bg); padding: 0 3px; border-radius: 20px; width: auto; opacity: 0.9; @media screen and (max-width: 1024px) { display: block; } } .splide__pagination__page { margin: 0 4px; background: var(--bg-major-shade); opacity: 1; outline: none; width: 8px; height: 8px; border-radius: 50%; &.is-active { background: var(--color-btn-bg); transform: scale(1); } } .splide__arrow { width: 3rem; height: 3rem; background: none; color: var(--color-btn-color); } .splide__arrow--prev { left: 0.5rem; } .splide__arrow--next { right: 0.5rem; } .splide__arrow-icon:before { text-shadow: 0 0 1px var(--color-btn-color); } /* === СТИКЕРЫ === */ .stickers { grid-area: stickers; margin-top: 2rem; } .sticker { display: inline-flex; vertical-align: middle; margin: 0 5px 5px 0; line-height: 1; padding: 0.35em; font-size: var(--sticker-font-size, 0.875rem); border-radius: var(--controls-btn-border-radius); &.sticker-preorder { display: none; } &:empty { display: none; } &:last-child { margin-right: 0; } } /* === СВОЙСТВА === */ &__properties { --grid-list-min-width: 220px; --grid-list-row-gap: 0.7rem; --grid-list-column-gap: 1rem; } &__property { line-height: 1.3; font-size: 1.125rem; } &__property-name { font-size: 0.875rem; color: var(--color-text-half-shade); } } /* === ЭЛЕМЕНТ БАНДЛА ======================================================== */ .bundle-item { display: grid; grid-template-columns: 100px 1fr; column-gap: 1.2rem; padding: 1.2rem 0; border-bottom: 1px solid var(--bg-major-shade); font-size: 1.125rem; @media screen and (max-width: 1024px) { grid-template-columns: 80px 1fr; } &:first-child { padding-top: 0; } &:last-child { border-bottom: none; padding-bottom: 0; } &__photo { min-width: 0; } &__name { line-height: 1.2; margin-bottom: 5px; font-weight: 600; a { color: var(--color-text); text-decoration: none; } } &__property-list { color: var(--color-text-half-shade); } &__property-item { display: inline-block; margin-right: 10px; } } /* === СЧЁТЧИК =============================================================== */ .counter { border: 1px solid var(--bg-minor-shade); border-radius: var(--controls-btn-border-radius); height: 46px; margin-right: 0.75rem; .counter-input { border: 0; color: var(--color-text); background: transparent; text-align: center; border-radius: 0; width: 4rem; font-size: 1.125rem; height: 42px; outline: none; font-weight: 500; box-shadow: none; } .counter-button { font-size: 0.7rem; line-height: 0; color: var(--color-text); background: transparent; height: 100%; width: 24px; cursor: pointer; outline: none; margin: 0; -webkit-user-select: none; user-select: none; opacity: .3; transition: opacity .18s; box-shadow: none; &:hover { opacity: 1; border: 0; } } } /* === РЕЙТИНГ ЗВЕЗДАМИ ===================================================== */ .star-radio { display: none; } .star-rating { display: flex; flex-flow: row-reverse; width: max-content; font-size: 1.5rem; color: var(--color-text-major-shade); .star-label { padding-right: 0.5rem; } } .star-rating .star-radio:checked ~ .star-label, .star-rating .star-label:hover ~ .star-label, .star-rating .star-label:hover { color: var(--rating-color); } /* === ФОРМЫ ================================================================= */ .form-field { margin-bottom: 1.2rem; &__label { display: block; margin-bottom: 0.5rem; font-size: 0.875rem; line-height: 1; } &.is-error, .is-error { color: var(--color-error); input, textarea { border-color: var(--color-error); } } &.form-field_conctrols { margin-bottom: 0; } } .notice-success { padding: 1rem 0; font-weight: bold; color: var(--color-btn-bg); font-size: 1.3rem; } .js-load-review-image { display: none !important; } /* ============================================ .product__controls-left { display: flex; max-width: 450px; @media (max-width: 767px) { max-width: none; } overflow: visible; } .product__controls-right { max-width: 450px; @media (max-width: 767px) { max-width: none; } display: flex; flex-direction: column; gap: 0.75rem; } ============================================ */ .product__controls-left { display: flex; max-width: 100%; @media (max-width: 767px) { max-width: none; } overflow: visible; } .product__controls-right { max-width: 100%; @media (max-width: 767px) { max-width: none; } display: flex; flex-direction: column; gap: 0.75rem; } /* === ИЗБРАННОЕ / КНОПКА-СЕРДЦЕ ============================================ */ .favorites_btn, .favorites_btn:hover { font-size: 1.5rem; background-color: var(--bg-minor-shade); color: var(--color-text-half-shade); outline: none; padding: 1rem; margin-left: 0.75rem; border: 0; height: 46px; width: 46px; .icon-favorites-f { display: none; } } .favorites_btn.favorites-added { color: var(--color-btn-bg); .icon-favorites-f { display: block; } .icon-favorites-o { display: none; } } /* Фиксированная панель снизу */ .fixed-add-text { display: none; } .is-fixed-state { .favorites_btn, .favorites_btn:hover { margin-left: 0; width: 50px; } .product__buy-btn-area-inner { padding: 0 !important; } .product__compare-btn { width: 50px; margin: 0; } .add-cart-counter__btn, .product__service-button__btn { flex: auto; } .add-cart-counter__controls-btn { width: 100%; } .counter-wrap { .option-label { display: none; } .counter { margin: 0; .counter-input { width: 3rem; } } } } .product__properties-content { padding-bottom: 1rem; } /* === КНОПКА ДОБАВЛЕНИЯ В КОРЗИНУ / ONE-CLICK =============================== */ .add-cart-counter { &.is-add-cart { .add-cart-counter__btn { display: none; } .add-cart-counter__controls { display: flex; height: auto; } } &__btn-icon { margin-right: 0; } &__detail-count { min-width: 1.125rem; height: 1.125rem; padding: 0 3px; line-height: 1.125rem; font-size: 0.75rem; text-align: center; border-radius: 50%; position: absolute; top: 0; right: 0; transform: translate(50%, -50%); background-color: var(--color-btn-bg-major-shade); } &__controls { width: 100%; height: var(--controls-height-m); text-align: center; display: none; } &__controls-btn { position: relative; font-size: 0.75rem; } } .add-cart-counter__btn, .product__preorder-btn, .add-cart-counter__controls-btn, .product__service-button__btn, .product__buy-one-click .button { font-size: 1.125rem; padding: .8125rem 2rem; line-height: 1; font-weight: 500; height: 46px; } /* Подпись к полю количества */ .counter-wrap .option-label { display: block; line-height: 1.2; font-size: 0.8rem; text-transform: uppercase; font-weight: 500; padding-bottom: 0.5rem; } /* === COLORS-IMAGE ДЛЯ СИСТЕМНОГО ЦВЕТА ==================================== */ .product .option-selector .is-system-color .option-value-system-color.with-image-color { padding: 1px; border-radius: 50%; img { width: 28px; height: 28px; border-radius: 50%; } } /* === PLAY-OVERLAY ДЛЯ ВИДЕО =============================================== */ .control, .control * { box-sizing: content-box; letter-spacing: 0; } .control { border: 7.2px solid #fff; border-radius: 50%; margin: 0; padding: 0; width: 85px; height: 85px; font-size: 0; white-space: nowrap; text-align: center; cursor: pointer; opacity: 0.6; box-shadow: 0 5px 10px 2px rgba(0, 0, 0, .2); } .control, .control .center, .control:before { display: inline-block; vertical-align: middle; transition: border .2s, width .2s, height .2s, margin .2s; position: absolute; z-index: 100; left: calc(50% - 50px); top: calc(50% - 50px); } .control:before { content: ""; height: 112px; } .control.play .center { margin: 0; border-left: 49.496px solid #fff; border-top: 31px solid transparent; border-bottom: 28px solid transparent; height: 0; margin-top: 20px; margin-left: 35px; } .control:hover { opacity: 0.9; } .product__slide-tumbs { .control { border: 4.2px solid #fff; width: 35px; height: 35px; } .control, .control .center, .control:before { left: calc(50% - 22px); top: calc(50% - 22px); } .control.play .center { border-left: 21.496px solid #fff; border-top: 12px solid transparent; border-bottom: 12px solid transparent; margin-top: 11px; margin-left: 16px; } } video { height: 100%; object-fit: var(--img-fit, contain); } /* === MARKETPLACE / ONE-CLICK ВНЕШНИЙ ВИД ================================== */ .is-show-marketplace-button.with-marketplace-links { .product__controls { gap: 0; } } .add-cart-counter__btn, .product__service-button__btn, .product__buy-one-click { flex-grow: 1; } .is-show-marketplace-button, .hide-all-buttons { .product__actions-btn { display: flex; } .product__buy-btn-area .product__buy-btn-area-inner { display: none; } } .product__marketplace-button, .product__buy-one-click.is-secondary-button .button { background: linear-gradient(130deg, #cae9ffdf 0%, #b0e1ff 51%, #cae9ffd7 100%); padding: 15px 45px; text-align: center; text-transform: uppercase; transition: 0.5s; background-size: 200% auto; color: rgb(3, 151, 231); box-shadow: 0 0 20px rgb(235, 235, 235); border-radius: 10px; display: block; &:hover { background-position: right center; color: rgb(14, 71, 109); text-decoration: none; border: none; box-shadow: none; } } .product__marketplace-button .button__icon { margin-right: 8px; } /* === ДЕЙСТВИЯ (избранное/сравнение) В ПРАВОМ СТОЛБЦЕ ====================== */ .product__actions-btn { display: none; justify-content: space-between; @media (max-width: 767px) { flex-direction: column; } .product__user-btn.product__favorites-btn, .product__user-btn.product__compares-btn { text-decoration: none; cursor: pointer; display: inline-flex; align-items: center; vertical-align: middle; padding: 5px 0; min-height: 36px; color: var(--color-accent-text); } .product__favorites-btn { .icon-favorites-f { display: none; } } .btn-icon { padding-right: 0.5rem; } .product__favorites-btn.favorites-added { .icon-favorites-o { display: none; } .icon-favorites-f { display: block; } } } /* Если скрыты все кнопки — скрываем BNPL */ .hide-all-buttons .bnpl-button-container { display: none; } /* === Бейдж наличия ========================================================= */ .new-quantity { font-weight: 600; margin-right: 5px; font-size: 1.1rem; } /* Текстовый бейдж с градиентом */ .data-quantity-unit { display: inline-block; width: max-content; padding: 2px 10px; border-radius: 8px; font-size: 1rem; font-weight: 600; line-height: 1.2; color: #fff; background: linear-gradient(45deg, #34e853 0%, #43a431 100%); } [data-stock-indicator] { cursor: help; } .data-quantity-unit.stock--many { background: linear-gradient(45deg, #34e853 0%, #43a431 100%); color: #fff; } .data-quantity-unit.stock--low { background: linear-gradient(45deg, #FFE259 0%, #F9A825 100%); color: #2b2b2b; } .data-quantity-unit.stock--critical { background: linear-gradient(45deg, #FF6A6A 0%, #E53935 100%); color: #fff; } .data-quantity-unit:hover { filter: brightness(0.98); } /* === WhatsApp кнопка ======================================================= */ .watsbtn a { display: flex; align-items: center; position: relative; padding: .8125rem 5rem; height: 46px; white-space: nowrap; text-decoration: none; color: #fff; border-radius: 10px; font-size: 1.125rem; font-weight: 500; background: linear-gradient(130deg, #8fb388 0%, #9be3a7 51%, #8fb388 100%); background-size: 200% auto; transition: .5s; box-shadow: 0 0 20px #eee; } .watsbtn a:hover { background-position: right center; color: #fff; text-decoration: none; box-shadow: none; } .watsbtn a::after { content: ""; position: absolute; left: 25px; top: 50%; transform: translateY(-50%); width: 34px; height: 34px; background: url('https://static.insales-cdn.com/files/1/4182/35713110/original/whatsapp_logo.png') no-repeat center/contain; pointer-events: none; } /* === Кнопка «В корзину» (градиент) ======================================== */ .add-cart-counter__btn { background: linear-gradient(130deg, #1877F2 0%, #1ec7f5 51%, #1877F2 100%); background-size: 200% auto; color: #fff; box-shadow: 0 0 20px rgb(247, 247, 247); border: none; transition: .5s; border-radius: 10px; font-size: 1.125rem; padding: .8125rem 2rem; line-height: 1; font-weight: 500; height: 46px; &:hover { background-position: right center; color: rgba(255, 255, 255, .947); text-decoration: none; box-shadow: none; } } /* === SKU визуальный маркер ================================================= */ .product__sku { color: red; } /* =========================================================================== ХОВЕР-ПОДСКАЗКИ И ПОДСВЕТКА ДЛЯ «ИЗБРАННОЕ» И «СРАВНЕНИЕ» ======================================================================= */ /* Базовые настройки: тултипы не обрезаются и всегда поверх соседей */ .product__controls, .product__controls-left, .product__buy-btn-area-inner { overflow: visible; } .favorites_btn, .product__compare-btn { position: relative; z-index: 2; /* кнопки поверх соседей */ } /* ---- ИЗБРАННОЕ (сердце) ---- */ /* Подсветка и красноватая тень при наведении (если ещё не добавлено) */ .favorites_btn:not(.favorites-added):hover { color: #E53935; box-shadow: 0 8px 22px rgba(229, 57, 53, .22); transform: translateZ(0); transition: box-shadow .18s ease, color .18s ease, transform .18s ease; } /* Мягче, если уже добавлено */ .favorites_btn.favorites-added:hover { box-shadow: 0 8px 18px rgba(229, 57, 53, .16); } /* Тултип для избранного */ .favorites_btn::after { content: "Добавить в избранное"; position: absolute; left: calc(100% + 10px); top: 50%; transform: translateY(-50%) translateX(-6px); opacity: 0; visibility: hidden; pointer-events: none; white-space: nowrap; padding: 8px 12px; border-radius: 10px; font-size: .875rem; line-height: 1; color: #fff; background: rgba(8, 22, 64, .9); box-shadow: 0 8px 24px rgba(0, 0, 0, .25); transition: opacity .18s ease, transform .18s ease; z-index: 10; /* сам тултип выше */ } .favorites_btn::before { content: ""; position: absolute; left: calc(100% + 4px); top: 50%; transform: translateY(-50%); border: 6px solid transparent; border-right-color: rgba(8, 22, 64, .9); opacity: 0; visibility: hidden; transition: opacity .18s ease; z-index: 10; } .favorites_btn:hover::after, .favorites_btn:hover::before { opacity: 1; visibility: visible; transform: translateY(-50%) translateX(0); } /* ---- СРАВНЕНИЕ ---- */ .product__compare-btn:hover { color: #1877F2; box-shadow: 0 8px 22px rgba(24, 119, 242, .20); } /* Тултип для сравнения */ .product__compare-btn::after { content: "Добавить в сравнение"; position: absolute; left: calc(100% + 10px); top: 50%; transform: translateY(-50%) translateX(-6px); opacity: 0; visibility: hidden; pointer-events: none; white-space: nowrap; padding: 8px 12px; border-radius: 10px; font-size: .875rem; line-height: 1; color: #fff; background: rgba(10, 30, 90, .9); box-shadow: 0 8px 24px rgba(0, 0, 0, .25); transition: opacity .18s ease, transform .18s ease; z-index: 10; } .product__compare-btn::before { content: ""; position: absolute; left: calc(100% + 4px); top: 50%; transform: translateY(-50%); border: 6px solid transparent; border-right-color: rgba(10, 30, 90, .9); opacity: 0; visibility: hidden; transition: opacity .18s ease; z-index: 10; } .product__compare-btn:hover::after, .product__compare-btn:hover::before { opacity: 1; visibility: visible; transform: translateY(-50%) translateX(0); } /* ---- Мобильные: показываем подсказки НАД кнопками и по центру ---- */ @media (max-width: 767px) { .favorites_btn::after, .product__compare-btn::after { left: 50% !important; top: -42px !important; transform: translateX(-50%) !important; margin-left: 0 !important; } .favorites_btn::before, .product__compare-btn::before { left: 50% !important; top: -8px !important; transform: translate(-50%, -100%) rotate(90deg) !important; border-right-color: transparent !important; border-top-color: rgba(10, 30, 90, .9) !important; /* стрелка вверх */ } } /* --- FIX: тултип не прячется за соседней кнопкой --- */ .product__controls, .product__controls-left, .product__buy-btn-area-inner{ overflow: visible; /* на всякий случай */ } /* базовый z-index у обеих кнопок */ .favorites_btn, .product__compare-btn{ position: relative; z-index: 1 !important; /* перекрываем прежние 2 */ } /* при наведении поднимаем ПАРЕНТ, чтобы его ::after был выше соседей */ .favorites_btn:hover, .favorites_btn:focus-within, .product__compare-btn:hover, .product__compare-btn:focus-within{ z-index: 999 !important; } /* сам тултип ещё выше внутри своего контекста */ .favorites_btn::after, .favorites_btn::before, .product__compare-btn::after, .product__compare-btn::before{ z-index: 1000 !important; } .product-form__area-price { grid-area: price; } /* Кликабельный артикул под заголовком */ .sku-inline{ display:inline-flex; align-items:center; gap:.5rem; margin:.5rem 0 0; color:var(--color-text); text-decoration:none; cursor:pointer; user-select:none; } .sku-inline:hover .sku-label, .sku-inline:hover .sku-value{ text-decoration: underline; } .sku-label{ font-weight:600; } .sku-value{ font-weight:600; } /* Иконка «ярлык» */ .sku-icon{ width:18px; height:18px; color:#E53935; flex:0 0 auto; display:inline-block; } .sku-icon svg{ display:block; width:100%; height:100%; } /* Тост «Скопировано…» */ .copy-toast{ position:fixed; left:50%; bottom:24px; transform:translateX(-50%) translateY(16px); background:rgba(18,18,18,.92); color:#fff; padding:12px 16px; border-radius:12px; font-size:.95rem; box-shadow:0 8px 24px rgba(0,0,0,.25); opacity:0; pointer-events:none; z-index:9999; transition:opacity .18s ease, transform .18s ease; } .copy-toast.is-shown{ opacity:1; transform:translateX(-50%) translateY(0); } /* === ВАШИ СТАРЫЕ СТИЛИ (оставлены без изменений) =========================== ... (оставьте ваш существующий CSS как есть) ======================================================================== */ /* Скрываем штатный текст артикула в правом столбце, чтобы не было дубля */ .product .product-form__area-sku .product__sku { display: none !important; } /* Кликабельная строка артикула под заголовком */ .product .sku-inline{ display:inline-flex; align-items:center; gap:.5rem; margin-top:.35rem; text-decoration:none; user-select:none; cursor:pointer; color:var(--color-text); position:relative; /* для тултипа */ } /* Красная иконка "копировать" */ .product .sku-inline .sku-icon{ display:inline-flex; width:18px; height:18px; color:#E53935; /* красная заливка через currentColor */ } /* Текстовые части */ .product .sku-inline .sku-label, .product .sku-inline .sku-value{ font-weight:600; } .product .sku-inline:hover .sku-label, .product .sku-inline:hover .sku-value{ text-decoration: underline; } /* Тултип как у "Избранного" — с сообщением «Скопировать в буфер обмена» */ .product .sku-inline::after{ content:"Скопировать в буфер обмена"; position:absolute; left:calc(100% + 10px); top:50%; transform:translateY(-50%) translateX(-6px); opacity:0; visibility:hidden; pointer-events:none; white-space:nowrap; padding:8px 12px; border-radius:10px; font-size:.875rem; line-height:1; color:#fff; background:rgba(8,22,64,.92); box-shadow:0 8px 24px rgba(0,0,0,.25); transition:opacity .18s ease, transform .18s ease; z-index:1000; } .product .sku-inline::before{ content:""; position:absolute; left:calc(100% + 4px); top:50%; transform:translateY(-50%); border:6px solid transparent; border-right-color:rgba(8,22,64,.92); opacity:0; visibility:hidden; transition:opacity .18s ease; z-index:1000; } .product .sku-inline:hover::after, .product .sku-inline:hover::before, .product .sku-inline:focus-visible::after, .product .sku-inline:focus-visible::before{ opacity:1; visibility:visible; transform:translateY(-50%) translateX(0); } /* На мобильных — показываем тултип над строкой по центру */ @media (max-width: 767px){ .product .sku-inline::after{ left:50% !important; top:-42px !important; transform:translateX(-50%) !important; } .product .sku-inline::before{ left:50% !important; top:-8px !important; transform:translate(-50%,-100%) rotate(90deg) !important; border-right-color:transparent !important; border-top-color:rgba(8,22,64,.92) !important; } } /* Тост «Скопировано…» */ .copy-toast{ position:fixed; left:50%; bottom:24px; transform:translateX(-50%) translateY(16px); background:rgba(18,18,18,.92); color:#fff; padding:12px 16px; border-radius:12px; font-size:.95rem; box-shadow:0 8px 24px rgba(0,0,0,.25); opacity:0; pointer-events:none; z-index:9999; transition:opacity .18s ease, transform .18s ease; } .copy-toast.is-shown{ opacity:1; transform:translateX(-50%) translateY(0); } .product__controls { padding: 20px 18px; } /* было 10px — так «Количество» дышит */ .counter-wrap .option-label { margin-bottom: .6rem; } /* чуть ниже подпись */ .product__calculate-delivery > div, .product__calculate-delivery .calculate-delivery, .product__calculate-delivery .insales-widget-calculate-delivery, .product__calculate-delivery [data-calculate-delivery]{ border-radius: 30px !important; overflow: hidden; /* чтобы тени/фон тоже обрезались по радиусу */ } /* Правильное место: сам серый хедер */ /* На случай другой разметки: первый «header»-блок внутри виджета */ .product__area-calculate-delivery .product__calculate-delivery > div > [class*="header"]:first-child{ padding: 14px 20px !important; border-top-left-radius: 30px !important; border-top-right-radius: 30px !important; } /* Центрируем текст в кнопке WhatsApp */ .watsbtn a{ display: flex; /* уже есть, но на всякий случай */ align-items: center; /* вертикальный центр */ justify-content: center; /* горизонтальный центр */ width: 100%; /* пусть занимает всю ширину контейнера */ text-align: center; /* на случай переноса строки */ } .watsbtn a span{ flex: 0 0 auto; /* текст не растягивается, остаётся по центру */ } .product .sku-inline{ text-decoration: none; transition: color .15s ease; } .product .sku-inline .sku-label, .product .sku-inline .sku-value{ text-decoration: none; } /* Ховер: меняем цвет текста на красный и НЕ подчёркиваем */ .product .sku-inline:hover, .product .sku-inline:focus-visible{ color:#E53935; /* тот же красный, что у иконки */ } .product .sku-inline:hover .sku-label, .product .sku-inline:hover .sku-value, .product .sku-inline:focus-visible .sku-label, .product .sku-inline:focus-visible .sku-value{ color:#E53935; text-decoration:none !important; } /* подпись под ценой «с НДС 20%» */ .product__vat-icon{ width: 16px; height: 16px; flex: 0 0 16px; color: #8e8e93; /* совпадает с текстом */ opacity: .9; } /* чтобы точно шла сразу под ценой */ .product__price + .product__vat-note{ display:flex; } /* Отступы для строки «с НДС 20%» под ценой */ .product__vat-note{ display: flex; /* чтобы margin работал предсказуемо */ align-items: center; gap: 8px; color: #8e8e93; font-size: 1rem; line-height: 1.2; margin: 3px 0 14px; /* ← нижний отступ добавлен */ } .product__vat-note .icon-vat{ width:16px; height:16px; flex:0 0 16px; } /* скрываем внутренние +/- вокруг центральной кнопки */ .add-cart-counter__controls-btn{ display:none!important; } /* базовый вид "как раньше" (синий) и вернём тексты */ .add-cart-counter .add-cart-counter__detail{ flex:1 1 auto; display:flex; flex-direction:column; align-items:center; justify-content:center; height:46px; padding:.8125rem 2rem; border-radius:10px; line-height:1.1; text-decoration:none; font-weight:500; font-size:1rem; background: linear-gradient(130deg,#1877F2 0%, #1ec7f5 51%, #1877F2 100%); background-size:200% auto; color:#fff; border:none; box-shadow:0 0 20px rgb(247,247,247); transition:.5s; } .add-cart-counter .add-cart-counter__detail:hover{ background-position:right center; box-shadow:none; } .add-cart-counter .add-cart-counter__detail-text, .add-cart-counter .add-cart-counter__detail-dop-text{ display:block; } .add-cart-counter .add-cart-counter__detail-dop-text{ margin-top:4px; } /* при добавлении — скрыть синюю кнопку и показать зелёную «Перейти» */ .add-cart-counter.is-add-cart .add-cart-counter__btn{ display:none!important; } .add-cart-counter.is-add-cart .add-cart-counter__controls{ display:flex; } /* нужно, чтобы показался .__detail */ .add-cart-counter.is-add-cart .add-cart-counter__detail{ background: linear-gradient(130deg,#27ae60 0%, #2ecc71 51%, #27ae60 100%); } /* выравнивание с «окошком» количества справа */ .product__buy-inline{ display:flex; align-items:stretch; gap:.75rem; } .product__buy-inline .add-cart-counter{ flex:1 1 auto; } .product__buy-inline .counter-wrap{ flex:0 0 auto; margin:0; } .product__buy-inline .counter{ height:46px; display:flex; align-items:center; } .product__buy-inline .counter .counter-input{ width:3.5rem; } .product__buy-inline .counter-wrap .option-label{ display:none; } .counter-input::-webkit-outer-spin-button, .counter-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; } .counter-input { -moz-appearance: textfield; } /* === PRICE BADGE: зелёная плашка для основной цены ======================= */ .product__price { display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; } .product .product__price-cur{ display:inline-flex; align-items:baseline; justify-content:center; padding:.25rem .6rem; border-radius:12px; background: linear-gradient(180deg, #22c55e 0%, #16a34a 100%); color:#fff; line-height:1; font-weight:800; font-size:1.75rem; /* как было, но можно поднять/опустить */ letter-spacing:.2px; font-variant-numeric: tabular-nums; box-shadow: 0 2px 6px rgba(0,0,0,.06); margin-right:.35rem; } @media (max-width:767px){ .product .product__price-cur{ font-size:1.5rem; padding:.22rem .55rem; } } /* старую цену делаем компактнее рядом с бейджем */ .product .product__price-old{ color: var(--color-text-major-shade); text-decoration: line-through; font-size:1rem; opacity:.85; } /* === Плашка размера скидки после зачёркнутой цены ======================= */ .product__price{ display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; } .product__discount-badge{ display:inline-flex; align-items:center; justify-content:center; padding:.18rem .5rem; background: linear-gradient(180deg, #ef4444 0%, #dc2626 100%); /* красная */ color:#fff; font-weight:800; line-height:1; font-size:.95rem; border-radius:12px; box-shadow:0 2px 5px rgba(0,0,0,.06); white-space:nowrap; } @media (max-width:767px){ .product__discount-badge{ font-size:.9rem; padding:.15rem .45rem; } } .product__buy-one-click .button, .product__buy-one-click .button:hover, .product__buy-one-click .button:focus, .product__buy-one-click .button:active{ border: none !important; outline: none !important; } /* Гарантируем, что блок покупки видим, если тема не в режиме hide-all-buttons/marketplace */ .product:not(.hide-all-buttons):not(.is-show-marketplace-button) .product__buy-btn-area .product__buy-btn-area-inner{ display: flex !important; } .product-form__area-price{ display:block !important; } .product__price-cur:empty{ min-width:6ch; min-height:1.8rem; border-radius:12px; } .product__price-cur{ visibility: visible !important; } $(function() { MicroModal.init({ disableFocus: true, disableScroll: true, // onShow: , onClose: function(modal, element, event) { event.preventDefault(); event.stopPropagation(); }, }); let videos = [...$("video.fslightbox-source")]; for (var i = 0; i < videos.length; i++) { videos[i].controls = false; videos[i].autoplay = "true"; videos[i].playsinline = "true"; videos[i].loop = "true"; videos[i].muted = "true"; } $(".splide__slide video").each(function() { $(this).attr("autoplay", "true"); $(this).attr("muted", "true"); $(this).attr("playsinline", "true"); $(this).attr("loop", "true"); }); $widget.each(function() { let productGalleryBlock = $(this).find(".js-product-gallery"); if (productGalleryBlock.length > 0) { initProductGallerySlider(productGalleryBlock); } }); $widget.on("click", ".js-product-gallery-tumbs-slide", function() { let slide_index = $(this).attr("data-product-img-index"); let slider_main_inst = $(this) .parents(".js-product-gallery") .find(".js-product-gallery-main")[0].splide; if (slider_main_inst) { slider_main_inst.go(Number(slide_index)); } }); fixedBuyBtnOnMobile($widget); let review_notice_success = $widget.find(".review-form .notice-success"); if (review_notice_success.length) { $("html, body").scrollTop(review_notice_success.offset().top); } $(widget) .find(".product__back-btn") .on("click", function() { if (history.length > 2) { window.history.back(); } else { window.location.href = "/"; } }); $(widget) .find(".product__block-title") .on("click", function() { $(this).parent(".toggle-menu").toggleClass("is-show"); }); $widget.find(".js-show-replied-manager").on("click", function() { $(this).parents(".reviews-item").addClass("is-show-replied"); }); $widget.find(".js-hide-replied-manager").on("click", function() { $(this).parents(".reviews-item").removeClass("is-show-replied"); }); $widget.find(".js-show-all-reviews").on("click", function() { $(this) .parents(".reviews") .find(".reviews-item.is-hide") .removeClass("is-hide"); $(this).hide(); }); $widget.find(".js-show-review-form").on("click", function() { $(this) .toggleClass("is-hide") .parents(".product__reviews") .find(".reviews-wrapper") .toggleClass("is-hide"); $(this).parents(".product__reviews").find(".notice-success").hide(); }); EventBus.subscribe( [ "widget:input-setting:insales:system:editor", "widget:change-setting:insales:system:editor", ], (data) => { if ( data.widget_id == $widget.parents(".editable-widget").data("widgetId") ) { if (data.setting_name == "show-selected-variant-photos") { let product_node = $widget.find("[data-product-id]:first"); product_node.attr( "data-gallery-type", data.value ? "variant-photos" : "all-photos" ); configurateVariantsPhoto(product_node); } else { updateProductGallerySlider(data); } } } ); EventBus.subscribe("init_instance:insales:product", (data) => { if (data.action && data.action.productJSON) { let product_block = [data-product-id="${data.action.productJSON.id}"]; let $product_block = $(product_block); $product_block.addClass("product-inited"); } }); // — ГАЛЕРЕЯ: обновление картинок при смене варианта — EventBus.subscribe("change_variant:insales:product", function(data) { $widget.each(function(index, el) { let product_node = data.action.product || $('
    '); let product_id = product_node.attr("data-product-id"); let is_cur_product_instance = $(data.action.product[0]) .parents(".editable-widget") .data("widgetId") == $(el).parents(".editable-widget").data("widgetId"); if ( data.action && data.action.product && data.first_image.url && data.product_id == product_id && is_cur_product_instance ) { let variant_photos = []; let product_img_ids = []; let product_imgs = data.action.productJSON.images; let product_variants = data.action.productJSON.variants; if (data.image_id) { if (data.image_ids && data.image_ids.length > 0) { variant_photos.push.apply(variant_photos, data.image_ids); } product_imgs.forEach(function(item) { product_img_ids.push(item.id); }); product_img_ids.forEach(function(imageId) { let is_image_for_all_variants = true; product_variants.forEach(function(variantItem) { let variant_imgs = variantItem.image_ids; if (variant_imgs.indexOf(imageId) != -1) { is_image_for_all_variants = false; } }); if (is_image_for_all_variants) { variant_photos.push(imageId); } }); } product_node.attr("data-variant-photos", variant_photos); product_node.attr("data-variant-id", data.id); product_node.attr("data-variant-first-img-id", data.first_image.id); let gallery_type = product_node.attr("data-gallery-type"); if (gallery_type == "variant-photos") { configurateVariantsPhoto(product_node); } else { if (product_node.is("[data-is-gallery-type-all-photos]")) { goToCurrentVariantPhoto(product_node); configurateVariantsPhoto(product_node); } else { configurateVariantsPhoto(product_node); } } } }); }); EventBus.subscribe("reviews-open:insales:site", function() { let reviews_block = $widget.find(".reviews"); if (reviews_block.length) { $("html, body").animate( { scrollTop: reviews_block.offset().top - 20 }, 500 ); } }); }); // === СЛАЙДЕРЫ / ГАЛЕРЕЯ === function initProductGallerySlider(galleryBlock) { let mainSliderBlock = galleryBlock.find(".js-product-gallery-main"); let tumbsSliderBlock = galleryBlock.find(".js-product-gallery-tumbs"); mainSliderBlock.find('.product__slide-main.play-video').each(function(index, el) { let $splideVideoItem = $(el) $(el).find('iframe[src*="rutube"]').each(function(index, iframe) { let $controlPlay = $splideVideoItem.find('.control.play'); $controlPlay[0].dataset.iframeSrc = iframe.src; iframe.src = ''; $controlPlay.on('click', function(e) { let targetSrc = e.target.parentNode.dataset.iframeSrc; if (targetSrc === $controlPlay[0].dataset.iframeSrc) { $(.fslightbox-absoluted .fslightbox-fade-in-strong #${iframe.id}).attr('src', targetSrc); } }) }) }); let img_id = mainSliderBlock.parents('[data-variant-first-img-id]:first').attr("data-variant-first-img-id"); let startIndex = 0; let currentImage = mainSliderBlock.find([data-product-img-id="${img_id}"]); if (currentImage.length) { startIndex = currentImage.index() } mainSliderBlock[0].splide = new Splide(mainSliderBlock[0], { gap: 1, start: startIndex }); mainSliderBlock[0].splide.on("move", function(newIndex) { let slide_index = newIndex; let slider_tumbs_node = mainSliderBlock .parents(".js-product-gallery") .find(".js-product-gallery-tumbs"); let slider_tumbs_inst = slider_tumbs_node[0].splide; if (slider_tumbs_inst) { slider_tumbs_inst.go(Number(slide_index)); slider_tumbs_node .find(".splide__slide.is-current") .removeClass("is-current"); slider_tumbs_node .find(".splide__slide[data-product-img-index=" + slide_index + "]") .addClass("is-current"); } }); mainSliderBlock[0].splide.mount(); tumbsSliderBlock[0].splide = new Splide(tumbsSliderBlock[0], { perPage: 5, perMove: 1, gap: "1rem", pagination: false, start: startIndex }); tumbsSliderBlock .find(".splide__slide.is-current") .removeClass("is-current"); tumbsSliderBlock .find(".splide__slide[data-product-img-index=" + startIndex + "]") .addClass("is-current"); tumbsSliderBlock[0].splide.mount(); } function configurateVariantsPhoto(productNode) { let product_gallery_block = productNode.find(".js-product-gallery"); let videoFirst = productNode.find(".js-product-all-images.video-first"); if (product_gallery_block.length > 0) { let gallery_type = productNode.attr("data-gallery-type"); let variant_id = productNode.attr("data-variant-id"); let variant_photos_ids = productNode .attr("data-variant-photos") .split(",") .filter((element) => element !== ""); let sizeVideo = productNode.data('video-size') if (variant_photos_ids.length > 0 && sizeVideo && sizeVideo > 0) { for (let i = sizeVideo - 1; i >= 0; i--) { if (videoFirst.length > 0) { variant_photos_ids.unshift(i); } else { variant_photos_ids.push(i); } } } let slider_main_inst = productNode.find(".js-product-gallery-main")[0] .splide; let slider_tumbs_inst = productNode.find(".js-product-gallery-tumbs")[0] .splide; let showVariantPhotos = () => { for (let i = 0; i < variant_photos_ids.length; i++) { let result_main_slide = productNode.find( '.js-product-all-images .product__slide-main[data-product-img-id="' + variant_photos_ids[i] + '"]' ); let result_tumbs_slide = productNode.find( '.js-product-all-images .product__slide-tumbs[data-product-img-id="' + variant_photos_ids[i] + '"]' ); if (result_main_slide.length > 0) { let main_slide_clone = result_main_slide .clone() .attr("data-product-img-index", i); main_slide_clone .find(".product__photo") .attr("data-fslightbox", "product-photos-lightbox-" + variant_id); main_slide_clone.appendTo( $(slider_main_inst.Components.Elements.list) ); } if (result_tumbs_slide.length > 0) { let tumbs_slide_clone = result_tumbs_slide .clone() .attr("data-product-img-index", i); if (i == 0) { tumbs_slide_clone.addClass("is-current"); } tumbs_slide_clone.appendTo( $(slider_tumbs_inst.Components.Elements.list) ); } } if (variant_photos_ids.length > 1) { product_gallery_block.removeClass("is-shown-one-photo"); } else { product_gallery_block.addClass("is-shown-one-photo"); } }; let showAllProductPhotos = () => { let all_main_photos = productNode.find( ".js-product-all-images .product__slide-main" ); let all_tumbs_photos = productNode.find( ".js-product-all-images .product__slide-tumbs" ); all_main_photos.each(function(index, el) { let main_slide_clone = $(el) .clone() .attr("data-product-img-index", index); main_slide_clone .find(".product__photo") .attr("data-fslightbox", "product-photos-lightbox-" + variant_id); main_slide_clone.appendTo($(slider_main_inst.Components.Elements.list)); }); all_tumbs_photos.each(function(index, el) { let tumbs_slide_clone = $(el) .clone() .attr("data-product-img-index", index); if (index == 0) { tumbs_slide_clone.addClass("is-current"); } tumbs_slide_clone.appendTo( $(slider_tumbs_inst.Components.Elements.list) ); }); if (all_main_photos.length > 1) { product_gallery_block.removeClass("is-shown-one-photo"); } else { product_gallery_block.addClass("is-shown-one-photo"); } }; $(slider_main_inst.Components.Elements.list).html(""); $(slider_tumbs_inst.Components.Elements.list).html(""); slider_main_inst.destroy(); slider_tumbs_inst.destroy(); if (gallery_type == "variant-photos") { if (variant_photos_ids.length > 0) { showVariantPhotos(); } else { showAllProductPhotos(); } initProductGallerySlider(product_gallery_block); productNode.removeAttr("data-is-gallery-type-all-photos"); } else { showAllProductPhotos(); initProductGallerySlider(product_gallery_block); goToCurrentVariantPhoto(productNode); productNode.attr("data-is-gallery-type-all-photos", ""); } refreshFsLightbox(); } } function updateProductGallerySlider(data) { let widget_slider_main_node = $( '[data-widget-id="' + data.widget_id + '"] .js-product-gallery-main' ); let widget_slider_tumbs_node = $( '[data-widget-id="' + data.widget_id + '"] .js-product-gallery-tumbs' ); if (widget_slider_main_node.length) { let sliderMainInst = widget_slider_main_node[0].splide; setTimeout(function() { sliderMainInst.refresh(); }, 0); } if (widget_slider_tumbs_node.length) { let sliderTumbsInst = widget_slider_tumbs_node[0].splide; setTimeout(function() { sliderTumbsInst.refresh(); }, 0); } } function goToCurrentVariantPhoto(productNode) { let img_id = productNode.attr("data-variant-first-img-id"); let videoFirst = productNode.find(".js-product-all-images.video-first").not('.after-inited'); let result_slide_elem_first_video = productNode.find( '.js-product-gallery-main [data-product-img-id="0"]' ); let result_slide_elem = productNode.find( '.js-product-gallery-main [data-product-img-id="' + img_id + '"]' ); if (result_slide_elem.length > 0) { let sliderMainInst = productNode.find(".js-product-gallery-main")[0].splide; if (sliderMainInst) { if (videoFirst.length > 0) { sliderMainInst.go( Number(result_slide_elem_first_video.attr("data-product-img-index")) ); } else { sliderMainInst.go( Number(result_slide_elem.attr("data-product-img-index")) ); } let slider_tumbs_node = productNode.find(".js-product-gallery-tumbs"); slider_tumbs_node .find(".splide__slide.is-current") .removeClass("is-current"); if (videoFirst.length > 0) { slider_tumbs_node .find( ".splide__slide[data-product-img-index=" + result_slide_elem_first_video.attr("data-product-img-index") + "]" ) .addClass("is-current"); } else { slider_tumbs_node .find( ".splide__slide[data-product-img-index=" + result_slide_elem.attr("data-product-img-index") + "]" ) .addClass("is-current"); } } } if (videoFirst.length > 0) { videoFirst.addClass('after-inited') } } $widget.find(".js-load-review-image").on("change", function() { let str = $(this).val(); let i = str.lastIndexOf("/") + 1; if (str.lastIndexOf("\\")) { i = str.lastIndexOf("\\") + 1; } let filename = str.slice(i); $widget.find(".load-review-image-name").html(filename); }); function fixedBuyBtnOnMobile(widgetLayout) { if (widgetLayout.find("#product-detail-buy-area").length === 0) { return false; } configureBuyBtn(); $(window).on("scroll resize", configureBuyBtn); function configureBuyBtn() { if (widgetLayout.find('.hide-all-buttons').length || widgetLayout.find('.is-show-marketplace-button').length) { return; // Если один из классов найден, выходим из функции } let buy_area = widgetLayout.find("#product-detail-buy-area"); let buy_area_height = buy_area.innerHeight(); let fixed_bottom_panel = $('[data-fixed-panels="bottom"]'); if ($(window).width() < 768) { let fixed_bottom_panel_height = 0; if ( fixed_bottom_panel.length && !fixed_bottom_panel.is(".is-no-layouts") ) { fixed_bottom_panel_height = fixed_bottom_panel.innerHeight(); } let btn_area_height = buy_area .find(".product__buy-btn-area-inner") .innerHeight(); let new_bottom_offset = ${ fixed_bottom_panel_height + btn_area_height }px; buy_area .css("height", buy_area_height) .addClass("is-fixed-state") .css("--product-buy-fixed-position", ${fixed_bottom_panel_height}px); if (widgetLayout.find(".product__not-available").is(":hidden")) { buy_area.parent().css("height", "0"); } $("html").css("--fixed-panels-bottom-offset", new_bottom_offset); } else { let fixed_bottom_panel_height = 0; if ( fixed_bottom_panel.length && !fixed_bottom_panel.is(".is-no-layouts") ) { fixed_bottom_panel_height = fixed_bottom_panel.innerHeight(); } buy_area.css("height", "auto").removeClass("is-fixed-state"); buy_area.parent().css("height", "auto"); $("html").css( "--fixed-panels-bottom-offset", ${fixed_bottom_panel_height}px ); } } } // Отключаем увеличение картинок в галерее let fs_gallery = document.querySelector(".product__area-photo"); if (fs_gallery) { fs_gallery.addEventListener("click", (event) => { $(".fslightbox-absoluted video").each(function(i) { $(this).get(0).play(); $(this).get(0).controls = false; $(this).get(0).autoplay = true; $(this).get(0).muted = true; $(this).get(0).playsinline = true; $(this).get(0).loop = true; }); if ( event.target.nodeName === "IMG" && event.target.closest(".product__gallery-main") ) { let items = document.querySelectorAll(".fslightbox-absoluted"); items.forEach(function(item) { item.addEventListener( "touchmove", (event) => { event.preventDefault(); }, { passive: false } ); }); } }); } // ===================================================================== // ОКРУГЛЁННЫЕ ОСТАТКИ (шт / метры) // ===================================================================== // Бины для штук function mapStockByPieces(q) { if (q <= 10) return { text: 'до 10 шт', mod: 'stock--critical' }; if (q <= 50) return { text: '10–50 шт', mod: 'stock--low' }; if (q <= 250) return { text: '50–250 шт', mod: 'stock--many' }; if (q <= 1000) return { text: '250–1 000 шт', mod: 'stock--many' }; if (q <= 2500) return { text: '1–2.5 тыс. шт', mod: 'stock--many' }; if (q <= 5000) return { text: '2.5–5 тыс. шт', mod: 'stock--many' }; if (q <= 10000) return { text: '5–10 тыс. шт', mod: 'stock--many' }; return { text: '10 тыс.+', mod: 'stock--many' }; } // Бины для метров function mapStockByMeters(q) { if (q <= 25) return { text: 'до 25 м', mod: 'stock--critical' }; if (q <= 99) return { text: '25–99 м', mod: 'stock--low' }; if (q <= 249) return { text: '100–249 м', mod: 'stock--many' }; if (q <= 499) return { text: '250–499 м', mod: 'stock--many' }; if (q <= 999) return { text: '500–999 м', mod: 'stock--many' }; if (q <= 2499) return { text: '1–2.4 км', mod: 'stock--many' }; if (q <= 4999) return { text: '2.5–4.9 км', mod: 'stock--many' }; if (q <= 9999) return { text: '5–9.9 км', mod: 'stock--many' }; return { text: '10 км+', mod: 'stock--many' }; } // Универсальная маршрутизация по unit function mapStockLabel(q, unit) { if (q === 0) { return { text: 'Нет в наличии', mod: null, none: true }; } if (q == null || isNaN(Number(q))) { // Если платформа не даёт точное число — просто «В наличии» return { text: 'В наличии', mod: 'stock--many', plain: true }; } const n = Number(q); const u = (unit || '').toString().toLowerCase(); // Любой unit, содержащий «м», трактуем как метры if (u.includes('м')) return mapStockByMeters(n); return mapStockByPieces(n); } // Применение ярлыка к бейджу function applyStockToBadge($product, qty, unit) { const $badge = $product.find('.data-quantity-unit[data-stock-indicator]'); const $label = $badge.find('[data-product-quantity-label]'); if (!$badge.length || !$label.length) return; const mapped = mapStockLabel(qty, unit); if (mapped.none) { $badge.hide(); return; } $badge.removeClass('stock--many stock--low stock--critical'); if (mapped.mod) $badge.addClass(mapped.mod); const text = (mapped.plain || mapped.text === 'В наличии') ? mapped.text : В наличии: ${mapped.text}; $label.text(text); $badge.show(); } // Инициализация при загрузке (используем data-initial-qty и unit) $widget.each(function () { const $product = $(this).find('[data-product-id]:first'); const $badge = $product.find('.data-quantity-unit[data-stock-indicator]'); if (!$badge.length) return; const unit = $badge.data('product-unit') || $product.attr('data-product-unit') || ''; const initialQtyRaw = $badge.data('initial-qty'); const initialQty = (initialQtyRaw === '' || initialQtyRaw === undefined) ? null : Number(initialQtyRaw); applyStockToBadge($product, initialQty, unit); }); // Обновляем ярлык при смене варианта EventBus.subscribe('change_variant:insales:product', function (data) { let product_node = $widget.find('[data-product-id]:first'); let product_id = product_node.attr('data-product-id'); if (!(data && data.action && data.product_id == product_id)) return; const $badge = product_node.find('.data-quantity-unit[data-stock-indicator]'); const unit = $badge.data('product-unit') || product_node.attr('data-product-unit') || ''; const q = (data.quantity === undefined) ? null : data.quantity; applyStockToBadge(product_node, q, unit); }); // === ВАШЕ ИМЕЮЩЕЕСЯ JS ОСТАВЛЯЕМ КАК ЕСТЬ ================================== // (все ваши существующие функции/инициализации ниже не трогаем) // --- БЛОК «Артикул»: кликабельная копия + обновление при смене варианта ---- (function () { var ROOT = document.querySelector('[data-product-id]'); if (!ROOT) return; var skuLink = ROOT.querySelector('.sku-inline'); if (!skuLink) return; var skuValueEl = skuLink.querySelector('[data-sku-value]'); function extractSkuLabelText(raw) { if (!raw) return ''; return raw.replace(/^Артикул:\s*/i,'').replace(/^SKU:\s*/i,'').trim(); } function readSkuFromPlatform() { var node = ROOT.querySelector('.product-form__area-sku [data-product-card-sku]'); if (!node) return ''; return extractSkuLabelText((node.textContent || '').trim()); } function readSkuFromJSON() { try { var json = ROOT.getAttribute('data-product-json'); if (!json) return ''; var pj = JSON.parse(json); var currentVariantId = ROOT.getAttribute('data-variant-id'); var v = null; if (currentVariantId && pj.variants) { v = pj.variants.find(function (x) { return String(x.id) === String(currentVariantId); }); } if (!v && pj.variants && pj.variants.length) v = pj.variants[0]; return (v && v.sku) || pj.sku || ''; } catch (e) { return ''; } } function getCurrentSku() { return readSkuFromPlatform() || readSkuFromJSON() || ''; } function updateSkuLine() { var sku = getCurrentSku(); if (!sku) return; skuLink.setAttribute('data-sku', sku); if (skuValueEl) skuValueEl.textContent = sku; } // Копирование в буфер function copyText(text) { if (navigator.clipboard && navigator.clipboard.writeText) { return navigator.clipboard.writeText(text); } return new Promise(function (resolve) { var ta = document.createElement('textarea'); ta.value = text; document.body.appendChild(ta); ta.select(); try { document.execCommand('copy'); } catch(e) {} document.body.removeChild(ta); resolve(); }); } var toast = document.querySelector('.copy-toast'); function showToast(msg) { if (!toast) return; toast.textContent = msg || 'Скопировано в буфер обмена'; toast.classList.add('is-shown'); setTimeout(function () { toast.classList.remove('is-shown'); }, 1600); } // Делегирование клика document.addEventListener('click', function (e) { var a = e.target.closest('[data-copy-sku]'); if (!a || !ROOT.contains(a)) return; e.preventDefault(); var sku = a.getAttribute('data-sku') || (a.querySelector('.sku-value') || {}).textContent || ''; sku = (sku || '').trim(); if (!sku) return; copyText(sku).then(function () { showToast('Скопировано в буфер обмена'); }); }); // Первичное заполнение updateSkuLine(); // Обновление при смене варианта от платформы if (window.EventBus && typeof EventBus.subscribe === 'function') { EventBus.subscribe('change_variant:insales:product', function (data) { if (!data || String(data.product_id) !== String(ROOT.getAttribute('data-product-id'))) return; // даём платформе перерисовать значение в штатном блоке setTimeout(updateSkuLine, 0); }); } })(); $(function(){ function killNativeTitles(ctx){ $(ctx).find('[title]').removeAttr('title'); } // сразу убрать: killNativeTitles(document); // и убирать при наведении/ре-рендерах: $(document).on('mouseenter', '.sku-copy-line', function(){ killNativeTitles(this); }); }); // Сбрасываем делегаты на случай повторной инициализации $widget.off('click', '[data-quantity] [data-quantity-change]'); $widget.off('input blur change', '.counter-input[name="quantity"]'); $widget.off('click', '[data-add-cart-counter-plus],[data-add-cart-counter-minus]'); $widget.off('click', '[data-add-cart-counter-btn]'); // === ЕДИНЫЙ СИНХРОНИЗАТОР КОЛИЧЕСТВА (фикс рассинхронизации 6 vs 7) === $(function () { var MIN = 1, STEP = 1; function normInt(v) { v = String(v == null ? '' : v).replace(',', '.').replace(/[^\d.]/g, ''); var n = parseFloat(v); if (isNaN(n) || n < MIN) n = MIN; return String(Math.round(n / STEP) * STEP); } function $root(el){ return $(el).closest('[data-product-id]'); } function $acc($r){ return $r.find('[data-add-cart-counter]').first(); } function $ext($r){ return $r.find('.counter-input[name="quantity"]'); } function getCart($a){ var t = ($a.find('[data-add-cart-counter-count]').text()||'').replace(/[^\d]/g,''); var n = parseInt(t,10); return isNaN(n) ? MIN : n; } // Клик по кнопке и ожидание фактического изменения числа function clickAndWait($a, btnSel, prevVal, done){ $a.find(btnSel).trigger('click'); var tries = 0; var timer = setInterval(function(){ var now = getCart($a); if (now !== prevVal || tries > 40) { // ~3.2 c максимум clearInterval(timer); done(now); } tries++; }, 80); } // Последовательно доводим внутренний счётчик до нужного target function requestAdjust($a, target){ target = parseInt(normInt(target), 10); $a.data('target', target); if ($a.data('adjusting')) return; // уже идёт доведение — просто обновили цель $a.data('adjusting', true); (function loop(){ var cur = getCart($a); var tgt = parseInt($a.data('target'),10) || MIN; if (cur === tgt) { $a.removeData('adjusting'); return; } var btn = (tgt > cur) ? '[data-add-cart-counter-plus]' : '[data-add-cart-counter-minus]'; clickAndWait($a, btn, cur, function(){ setTimeout(loop, 10); }); })(); } // Нормализуем стартовое значение поля $widget.find('.counter-input[name="quantity"]').each(function(){ this.value = normInt(this.value || 1); }); // Внешние +/- возле «окошка» $widget.on('click', '[data-quantity] [data-quantity-change]', function(){ var $r = $root(this), $a = $acc($r); setTimeout(function(){ var val = parseInt(normInt($ext($r).val()),10); $ext($r).val(val); if ($a.hasClass('is-add-cart')){ if ($a.data('adjusting')) { $a.data('target', val); return; } requestAdjust($a, val); } }, 0); }); // Ручной ввод в «окошке» $widget.on('input', '.counter-input[name="quantity"]', function(){ this.value = this.value.replace(/[^\d]/g,''); }); $widget.on('blur change', '.counter-input[name="quantity"]', function(){ var $r = $root(this), $a = $acc($r); var val = parseInt(normInt(this.value),10); this.value = val; if ($a.hasClass('is-add-cart')){ if ($a.data('adjusting')) { $a.data('target', val); return; } requestAdjust($a, val); } }); // Первый клик «В корзину»: ждём is-add-cart и доводим до выбранного количества $widget.on('click', '[data-add-cart-counter-btn]', function(){ var $r = $root(this), $a = $acc($r), want = parseInt(normInt($ext($r).val()),10); var tries = 0, timer = setInterval(function(){ tries++; if ($a.hasClass('is-add-cart')){ clearInterval(timer); if ($a.data('adjusting')) { $a.data('target', want); } else { requestAdjust($a, want); } } if (tries > 60) clearInterval(timer); // ~3 сек таймаут }, 50); }); // Внутренние +/- блока корзины — зеркалим в «окошко» $widget.on('click', '[data-add-cart-counter-plus],[data-add-cart-counter-minus]', function(){ var $r = $root(this), $a = $acc($r); setTimeout(function(){ $ext($r).val(getCart($a)); }, 120); }); }); (function(){ // Берём только цифры, поддерживаем пробелы/₽/запятые function parsePrice(text){ if (!text) return NaN; var t = String(text).replace(/\s+/g,'').replace(',', '.'); var m = t.match(/-?\d+(\.\d+)?/); return m ? parseFloat(m[0]) : NaN; } function updateDiscount($root){ var $cur = $root.find('.product__price-cur'); var $old = $root.find('.product__price-old'); var $badge = $root.find('[data-discount-badge]'); if (!$cur.length || !$old.length || !$badge.length){ return; } var cur = parsePrice($cur.text()); var old = parsePrice($old.text()); // если нет старой цены или скидки нет — прячем бейдж if (!isFinite(cur) || !isFinite(old) || old <= cur){ $badge.hide().text(''); return; } var pct = Math.round((old - cur) / old * 100); // размер скидки, % $badge.text('−' + pct + '%').show(); // Хочешь ещё и сумму скидки — раскомментируй следующую строку: // $badge.text('−' + (old - cur).toLocaleString('ru-RU') + ' ₽ (−' + pct + '%)').show(); } var $product = $('.product').first(); if (!$product.length) return; // первичный расчёт updateDiscount($product); // Обновляем при смене варианта платформой if (window.EventBus && typeof EventBus.subscribe === 'function'){ EventBus.subscribe('change_variant:insales:product', function(){ setTimeout(function(){ updateDiscount($product); }, 0); }); } // И на любые изменения текста цен (когда их дорисовывает виджет) var targets = [ $product.find('.product__price-cur')[0], $product.find('.product__price-old')[0] ].filter(Boolean); var obs = new MutationObserver(function(){ updateDiscount($product); }); targets.forEach(function(node){ obs.observe(node, {childList:true, subtree:true, characterData:true}); }); })(); (function(){ var MOVE_DELAY = 0; (function () { // Ищем только контейнеры Яндекс Сплита (узкие селекторы) var splitSel = '.ya-split, [data-ya-split], [data-module="ya-split"], iframe[src*="yandex.ru"][src*="split"]'; function findSplit($root){ var $c = $root.find(splitSel); // если поймали iframe, поднимаем до ближайшей видимой обёртки $c = $c.map(function(){ var n = this; if (n.tagName === 'IFRAME') { var p = n.closest('.widget, .block, .payment, .payment-method, div'); return p || n; } return n; }); return $($c); } function move(){ var $root = $('.product').first(); var $holder = $root.find(holderSel).first(); if (!$root.length || !$holder.length) return; findSplit($root).each(function(){ var $n = $(this); if ($n.closest(holderSel).length) return; // уже на месте if ($n.closest('.product__controls').length) return; // не трогаем блок кнопок $holder.append($n.detach().show()); }); } // сразу, при смене варианта, при мутациях и с «страховкой» $(move); if (window.EventBus && EventBus.subscribe){ EventBus.subscribe('change_variant:insales:product', function(){ setTimeout(move,0); }); } var prod = document.querySelector('.product'); if (prod){ var obs = new MutationObserver(function(){ setTimeout(move,0); }); obs.observe(prod, {childList:true, subtree:true}); } var tries = 40; // ~10 сек var timer = setInterval(function(){ move(); if (--tries<=0) clearInterval(timer); }, 250); })(); (function () { var holderSel = '.product__area-calculate-delivery [data-ya-split-holder]'; var splitSel = '.ya-split, [data-ya-split], [data-module="ya-split"], iframe[src*="yandex.ru"][src*="split"]'; function findSplit($root){ var $c = $root.find(splitSel); // если попался iframe — берем ближайшую обертку, иначе сам узел $c = $c.map(function(){ var n = this; if (n.tagName === 'IFRAME') { var p = n.closest('.widget, .block, .payment, .payment-method, div'); return p || n; } return n; }); return $($c); } function ensureHolder($root){ var $holder = $root.find(holderSel).last(); if ($holder.length) return $holder; var $area = $root.find('.product__area-calculate-delivery').first(); if (!$area.length) return $(); return $('
    ').appendTo($area); } function move(){ var $root = $('.product').first(); if (!$root.length) return; var $holder = ensureHolder($root); if (!$holder.length) return; findSplit($root).each(function(){ var $n = $(this); // уже стоит на месте — пропускаем if ($n.closest(holderSel).length) return; // ни при каких условиях не тащим его в блок кнопок if ($n.closest('.product__controls').length) return; $holder.append($n.detach().show()); }); } $(move); if (window.EventBus && EventBus.subscribe){ EventBus.subscribe('change_variant:insales:product', function(){ setTimeout(move,0); }); } // следим именно за зоной доставки — когда она дорисуется, перетащим Сплит var area = document.querySelector('.product__area-calculate-delivery'); if (area){ var obs = new MutationObserver(function(){ setTimeout(move,0); }); obs.observe(area, {childList:true, subtree:true}); } // страховочные попытки ~15 сек var tries = 60, timer = setInterval(function(){ move(); if(--tries<=0) clearInterval(timer); }, 250); })(); (function(){ function parsePrice(text){ if (!text) return NaN; var t = String(text).replace(/\s+/g,'').replace(',', '.'); var m = t.match(/-?\d+(\.\d+)?/); return m ? parseFloat(m[0]) : NaN; } function updateDiscount($root){ var $cur = $root.find('.product__price-cur'); var $old = $root.find('.product__price-old'); var $badge = $root.find('[data-discount-badge]'); if (!$cur.length || !$old.length || !$badge.length){ return; } var cur = parsePrice($cur.text()); var old = parsePrice($old.text()); if (!isFinite(cur) || !isFinite(old) || old <= cur){ $badge.text('').css('display','none'); return; } var pct = Math.round((old - cur) / old * 100); $badge.text('−' + pct + '%').css('display','inline-flex'); // ← гарантированно перебиваем inline "display:none" } var $product = $('.product').first(); if (!$product.length) return; // первичная попытка + небольшие «догонялки» на случай поздней дорисовки updateDiscount($product); setTimeout(function(){ updateDiscount($product); }, 200); setTimeout(function(){ updateDiscount($product); }, 600); // вместо подписки на 2 конкретные — слушаем ВЕСЬ контейнер цены var priceBox = $product.find('.product__price')[0]; if (priceBox){ var obs = new MutationObserver(function(){ updateDiscount($product); }); obs.observe(priceBox, {childList:true, subtree:true, characterData:true}); } // и при смене варианта if (window.EventBus && typeof EventBus.subscribe === 'function'){ EventBus.subscribe('change_variant:insales:product', function(){ setTimeout(function(){ updateDiscount($product); }, 0); }); } })(); } catch(error) { console.error('Widget "widget-type_widget_v4_product_7_0e0e1076d5087c4b49b40beb13ab5a70"', error) } ;try { let widget = '.widget-type_widget_v4_header_4_0e472dad113e2262bdbf7e1e057ed450'; let $widget = $('.widget-type_widget_v4_header_4_0e472dad113e2262bdbf7e1e057ed450'); $(widget).find(".header__collections").css('display', 'none'); /* eslint-disable linebreak-style */ $(function() { var mobilePoint = 768; function getWidget(item) { return item.closest('.layout'); } $(widget).find(".header__collections").css('display', ''); $(document).ready(function() { $widget.each(function(index, el) { new LazyLoad({ container: $(el).get(0), elements_selector: '.lazyload' }); }); function initCutList() { $(widget).find(".js-cut-list").cutList({ moreBtnTitle: '', alwaysVisibleElem: '.is-current' }); } if ($(window).width() >= mobilePoint) { initCutList() } $(window).on('resize', function() { if ($(window).width() >= mobilePoint && $(widget).find(".icon-ellipsis-h").length < 1) { initCutList() } }); $(window).on('load', function() { $(widget).find(".js-cut-list").resize(); }); $(window).on('resize', function() { let collections_menu = $(widget).find(".header__collections"); let collections_menu_content = collections_menu.find(".header__collections-content"); if (collections_menu.is(".is-show")) { let max_height = $(window).height() - collections_menu.offset().top - 20; collections_menu_content.css("maxHeight", max_height); } }); if ($(widget).find(".header__collections .is-current").length) { $(widget).find(".header__collections .is-current").addClass("is-show-mobile"); $(widget).find(".header__collections > .header__collections-item.is-current").addClass("is-show"); } $(widget).find(".js-show-header-collections").on("click", function() { let thisWidget = getWidget($(this)); thisWidget.each(function(index, el) { let lazyLoadCollectionList = new LazyLoad({ container: $(el).get(0), elements_selector: '.lazyload' }); try { lazyLoadCollectionList.loadAll() } catch (e) { console.log(e) } }); let collections_menu = thisWidget.find(".header__collections"); let collections_menu_content = collections_menu.find(".header__collections-content"); if (collections_menu.is(".is-show")) { collections_menu.removeClass("is-show"); bodyScrollLock.clearAllBodyScrollLocks(); } else { collections_menu.addClass("is-show"); if ($(this).is(".header-mobile-panel__show-menu-btn")) { let targetElement = $(widget).find(".header__collections.is-show").get(0); if (targetElement) { bodyScrollLock.disableBodyScroll(targetElement); } } let max_height = $(window).height() - collections_menu.offset().top - 20; collections_menu_content.css("maxHeight", max_height); } $(this).toggleClass("is-active"); thisWidget.find(".header__collections-overlay").toggleClass("is-show"); }); $(document).on("click", function(event) { let thisWidget = getWidget($(event.target).closest('.layout')); if ($(event.target).closest(".js-show-header-collections").length || $(event.target).closest(".header__collections-content").length) { return; } thisWidget.find(".header__collections.is-show").removeClass("is-show"); thisWidget.find(".header__collections-overlay.is-show").removeClass("is-show"); thisWidget.find(".js-show-header-collections").removeClass("is-active"); bodyScrollLock.clearAllBodyScrollLocks(); }); $(widget).find(".js-hide-header-collections").on("click", function() { let thisWidget = getWidget($(this)); thisWidget.find(".header__collections.is-show").removeClass("is-show"); thisWidget.find(".js-show-header-collections").removeClass("is-active"); thisWidget.find(".header__collections-overlay.is-show").removeClass("is-show"); bodyScrollLock.clearAllBodyScrollLocks(); }); $(widget).find(".js-show-more-subcollections").on("click", function() { let thisWidget = getWidget($(this)); let collections_menu = thisWidget.find(".header__collections-menu"); let limit = collections_menu.attr("data-subcollections-items-limit"); let collection_elem = $(this).parents(".header__collections-item.is-level-1"); if ($(this).is(".is-active")) { $(this).removeClass("is-active"); collection_elem.find('.header__collections-submenu .header__collections-item:nth-child(n+' + (parseInt(limit) + 1) + ')').addClass("is-hide"); } else { $(this).addClass("is-active"); collection_elem.find(".header__collections-submenu .header__collections-item").removeClass("is-hide"); } }); }); $(function() { EventBus.subscribe(['widget:input-setting:insales:system:editor', 'widget:change-setting:insales:system:editor'], (data) => { $(widget).find(".js-cut-list").resize(); if (data.setting_name == 'subcollections-items-limit') { configureSubcollectionsItemsLimit(data.value); } }); }); function configureSubcollectionsItemsLimit(limit) { let collections_menu = $(widget).find(".header__collections-menu"); collections_menu.attr("data-subcollections-items-limit", limit); $(widget).find(".header__collections-submenu").each(function() { let collection_elem = $(this).parents(".header__collections-item.is-level-1"); let collection_elem_more_controls = collection_elem.find(".header__collections-show-more"); $(this).find(".header__collections-item").removeClass("is-hide"); $(this).find('.header__collections-item:nth-child(n+' + (parseInt(limit) + 1) + ')').addClass("is-hide"); collection_elem_more_controls.find(".js-show-more-subcollections").removeClass("is-active"); if ($(this).find(".header__collections-item").length > parseInt(limit)) { collection_elem_more_controls.addClass("is-show"); } else { collection_elem_more_controls.removeClass("is-show"); } }); } }); } catch(error) { console.error('Widget "widget-type_widget_v4_header_4_0e472dad113e2262bdbf7e1e057ed450"', error) } ;try { let widget = '.widget-type_widget_v4_footer_18_1_f1a5f40fa79138dfe9ec0a773a5979a4'; let $widget = $('.widget-type_widget_v4_footer_18_1_f1a5f40fa79138dfe9ec0a773a5979a4'); $(function() { $(widget).find(".js-show-mobile-submenu").on("click", function() { $(this).parents(".menu-item:first").toggleClass("is-show-mobile"); }); }); } catch(error) { console.error('Widget "widget-type_widget_v4_footer_18_1_f1a5f40fa79138dfe9ec0a773a5979a4"', error) } ;try { let widget = '.widget-type_widget_v4_products_similar_1_b490de5034feb79e7590a450fb0b3fea'; let $widget = $('.widget-type_widget_v4_products_similar_1_b490de5034feb79e7590a450fb0b3fea'); $(function () { // ========= вспомогательные ========= var mobile_point = 767; function isMobileWidth() { return $(window).width() <= mobile_point; } // ====== МАППИНГ ОСТАТКОВ ДЛЯ КАРУСЕЛИ (PLP-грубость) ====== // Штуки: function mapStockByPieces(q) { if (q <= 10) return { text: 'до 10 шт', mod: 'stock--critical' }; if (q <= 50) return { text: '10–50 шт', mod: 'stock--low' }; if (q <= 250) return { text: '50–250 шт', mod: 'stock--many' }; if (q <= 1000) return { text: '250–1 000 шт', mod: 'stock--many' }; if (q <= 2500) return { text: '1–2.5 тыс. шт', mod: 'stock--many' }; if (q <= 5000) return { text: '2.5–5 тыс. шт', mod: 'stock--many' }; if (q <= 10000) return { text: '5–10 тыс. шт', mod: 'stock--many' }; return { text: '10 тыс.+', mod: 'stock--many' }; } // Метры: function mapStockByMeters(q) { if (q <= 25) return { text: 'до 25 м', mod: 'stock--critical' }; if (q <= 99) return { text: '25–99 м', mod: 'stock--low' }; if (q <= 249) return { text: '100–249 м', mod: 'stock--many' }; if (q <= 499) return { text: '250–499 м', mod: 'stock--many' }; if (q <= 999) return { text: '500–999 м', mod: 'stock--many' }; if (q <= 2499) return { text: '1–2.4 км', mod: 'stock--many' }; if (q <= 4999) return { text: '2.5–4.9 км', mod: 'stock--many' }; if (q <= 9999) return { text: '5–9.9 км', mod: 'stock--many' }; return { text: '10 км+', mod: 'stock--many' }; } // Выбор маппинга по unit function mapStockLabel(q, unit) { if (q === 0) return { text: 'Под заказ', mod: 'out-of-stock', none: false }; if (q == null || isNaN(Number(q))) return { text: 'В наличии', mod: 'stock--many', plain: true }; const n = Number(q); const u = (unit || '').toString().toLowerCase(); if (u.includes('м')) return mapStockByMeters(n); return mapStockByPieces(n); } function applyStockToBadge($scope) { $scope.find('.quantity-badge[data-stock-indicator]').each(function () { const $badge = $(this); const raw = $badge.data('initial-qty'); const unit = $badge.data('product-unit') || ''; const qty = (raw === '' || typeof raw === 'undefined') ? null : Number(raw); const mapped = mapStockLabel(qty, unit); $badge.removeClass('stock--many stock--low stock--critical out-of-stock'); if (mapped.mod) $badge.addClass(mapped.mod); const txt = (mapped.plain) ? mapped.text : `В наличии: ${mapped.text}`; $badge.text(mapped.text === 'Под заказ' ? 'Под заказ' : txt).show(); }); } function initStockBadges(ctx) { applyStockToBadge(ctx || $widget); } // ========= ИНИЦИАЛИЗАЦИЯ СЛАЙДЕРА ========= $(document).ready(function () { // тексты отзывов (оставил как в твоём коде) function declinationText(number, txt) { var cases = [2, 0, 1, 1, 1, 2]; return txt[number % 100 > 4 && number % 100 < 20 ? 2 : cases[number % 10 < 5 ? number % 10 : 5]]; } $widget.find('.product-preview').each(function () { const reviewsCount = parseInt($(this).find('.product-preview__review-count').text(), 10); let s = $(this).data('review-singular'); let g = $(this).data('review-singular-gen'); let p = $(this).data('review-plural'); $(this).find('.product-preview__review-text').text(declinationText(reviewsCount, [s, g, p])); }); let $blocks = $widget.find(".js-special-products"); $blocks.each(function () { let $wrap = $(this); let $slider = $wrap.find(".js-special-products-slider"); let slide_min_width = $slider.is("[data-slide-min-width]") ? parseInt($slider.data("slideMinWidth")) : 220; let slide_min_width_mobile = $slider.is("[data-slide-min-width-mobile]") ? parseInt($slider.data("slideMinWidthMobile")) : 150; let slide_gap = $slider.is("[data-slide-gap]") ? parseInt($slider.data("slideGap")) : 30; $slider.data("slideMinWidth", slide_min_width); $slider.data("slideMinWidthMobile", slide_min_width_mobile); $slider.data("slideGap", slide_gap); $slider[0].splide = new Splide($slider[0], { perPage: Math.floor(($slider.width() + slide_gap) / ((isMobileWidth() ? slide_min_width_mobile : slide_min_width) + slide_gap)), gap: slide_gap, perMove: 1 }); $(window).on("resize", function () { let sw = parseInt($slider[0].dataset.slideMinWidth); let swm = parseInt($slider[0].dataset.slideMinWidthMobile); let g = parseInt($slider[0].dataset.slideGap); $slider[0].splide.options = { perPage: Math.floor(($slider.width() + g) / ((isMobileWidth() ? swm : sw) + g)) }; if ($slider[0].splide.length <= $slider[0].splide.options.perPage) { $slider[0].splide.options = { drag: false }; } else { $slider[0].splide.options = { drag: true }; } }); $slider[0].splide.on('mounted updated', function () { // показать/скрыть стрелки let prev_btn = $wrap.find(".special-products__slider-arrow-prev"); let next_btn = $wrap.find(".special-products__slider-arrow-next"); let inst = $slider[0].splide; if (inst.length <= inst.options.perPage) { prev_btn.addClass("is-hide"); next_btn.addClass("is-hide"); $slider.addClass("is-hide-paging"); } else { prev_btn.removeClass("is-hide"); next_btn.removeClass("is-hide"); $slider.removeClass("is-hide-paging"); } }); $slider[0].splide.on('mounted', function () { // инициализируем бейджи после монтирования слайдера initStockBadges($wrap); // drag on/off if ($slider[0].splide.length <= $slider[0].splide.options.perPage) { $slider[0].splide.options = { drag: false }; } else { $slider[0].splide.options = { drag: true }; } }); $slider[0].splide.on('arrows:updated', function () { let prev_btn = $wrap.find(".special-products__slider-arrow-prev"); let next_btn = $wrap.find(".special-products__slider-arrow-next"); prev_btn.toggleClass("is-disabled", $slider.find(".splide__arrow--prev").prop("disabled") === true); next_btn.toggleClass("is-disabled", $slider.find(".splide__arrow--next").prop("disabled") === true); }); $slider[0].splide.mount(); $widget.find(".js-move-slide").on("click", function () { let slider_node = $(this).parents(".js-special-products").find(".js-special-products-slider"); if (slider_node.length) { let s = slider_node[0].splide; if ($(this).is(".special-products__slider-arrow-prev")) s.go('-'); if ($(this).is(".special-products__slider-arrow-next")) s.go('+'); } }); }); }); // Обновление фото варианта и бейджа при смене варианта в карточке из карусели EventBus.subscribe("change_variant:insales:product", function (data) { let $product = $(data.action.product[0]); // 1) Фото варианта (как было) let $imagesContainer = $product.find(".product-preview__photo .product-preview__photo-variant"); if ($imagesContainer.length) { let images = []; if (data.image_ids.length <= 1) { let defaultImage = data.images[0]; if (defaultImage) { images = [` `]; } } else { let variantImages = data.action.productJSON.images.filter(img => data.image_ids.includes(img.id)); let firstImage = variantImages[0] || data.action.productJSON.images[0]; if (firstImage) { images.push(` `); } } $imagesContainer.html(images.join('')); } // 2) Бейдж остатков const $badge = $product.find('.quantity-badge[data-stock-indicator]'); if ($badge.length) { const unit = $badge.data('product-unit') || ''; const q = (typeof data.quantity === 'undefined') ? null : data.quantity; const mapped = mapStockLabel(q, unit); $badge.removeClass('stock--many stock--low stock--critical out-of-stock'); if (mapped.mod) $badge.addClass(mapped.mod); const txt = (mapped.plain) ? mapped.text : `В наличии: ${mapped.text}`; $badge.text(mapped.text === 'Под заказ' ? 'Под заказ' : txt).show(); } }); }); } catch(error) { console.error('Widget "widget-type_widget_v4_products_similar_1_b490de5034feb79e7590a450fb0b3fea"', error) } ;try { let widget = '.widget-type_widget_v4_products_related_1_d74a193ddafb7a3f2877e7a153e4d12c'; let $widget = $('.widget-type_widget_v4_products_related_1_d74a193ddafb7a3f2877e7a153e4d12c'); (function ($, window, document) { if (!$) return; // ====== STOCK BADGE ====== var StockBadge = (function () { function mapPieces(q) { if (q <= 10) return { text: 'В наличии: до 10 шт', mod: 'stock--critical' }; if (q <= 50) return { text: 'В наличии: 10–50 шт', mod: 'stock--low' }; if (q <= 250) return { text: 'В наличии: 50–250 шт', mod: 'stock--many' }; if (q <= 1000) return { text: 'В наличии: 250–1 000 шт', mod: 'stock--many' }; if (q <= 2500) return { text: 'В наличии: 1–2.5 тыс. шт', mod: 'stock--many' }; if (q <= 5000) return { text: 'В наличии: 2.5–5 тыс. шт', mod: 'stock--many' }; if (q <= 10000) return { text: 'В наличии: 5–10 тыс. шт', mod: 'stock--many' }; return { text: 'В наличии: 10 тыс.+', mod: 'stock--many' }; } function mapMeters(q) { if (q <= 25) return { text: 'В наличии: до 25 м', mod: 'stock--critical' }; if (q <= 99) return { text: 'В наличии: 25–99 м', mod: 'stock--low' }; if (q <= 249) return { text: 'В наличии: 100–249 м',mod: 'stock--many' }; if (q <= 499) return { text: 'В наличии: 250–499 м',mod: 'stock--many' }; if (q <= 999) return { text: 'В наличии: 500–999 м',mod: 'stock--many' }; if (q <= 2499) return { text: 'В наличии: 1–2.4 км', mod: 'stock--many' }; if (q <= 4999) return { text: 'В наличии: 2.5–4.9 км',mod: 'stock--many' }; if (q <= 9999) return { text: 'В наличии: 5–9.9 км', mod: 'stock--many' }; return { text: 'В наличии: 10 км+', mod: 'stock--many' }; } function compute(qty, unit) { if (qty === 0) return { text: 'Под заказ', mod: 'out-of-stock' }; if (qty == null || isNaN(Number(qty))) return { text: 'В наличии', mod: 'stock--many' }; var u = (unit || '').toString().toLowerCase(); return u.includes('м') ? mapMeters(Number(qty)) : mapPieces(Number(qty)); } function applyOne($badge, qty, unit) { var res = compute(qty, unit); $badge.removeClass('stock--many stock--low stock--critical out-of-stock') .addClass(res.mod) .text(res.text) .show(); } function init(scope) { $(scope || document).find('.quantity-badge[data-stock-indicator]').each(function () { var $b = $(this); var raw = $b.attr('data-initial-qty'); var qty = (raw === '' || typeof raw === 'undefined') ? null : Number(raw); var unit = $b.attr('data-product-unit') || ''; applyOne($b, qty, unit); }); } return { init: init, applyOne: applyOne }; })(); // ====== SPLIDE ====== function perView($slider, minW, gap) { var w = $slider.width() || 1; return Math.max(1, Math.floor((w + gap) / (minW + gap))); } function initSlider($wrap) { $wrap.find('.js-special-products-slider').each(function () { var el = this; var $el = $(el); var minW = parseInt($el.data('slideMinWidth')) || 220; var minWm = parseInt($el.data('slideMinWidthMobile')) || 150; var gap = parseInt($el.data('slideGap')) || 30; var isMobile = $(window).width() <= 767; if (typeof Splide === 'undefined') return; // нет библиотеки — тихо выходим var inst = new Splide(el, { perPage: perView($el, isMobile ? minWm : minW, gap), gap: gap, perMove: 1, arrows: true, pagination: $(window).width() <= 767 }); inst.on('mounted move updated', function () { toggleControls($wrap, inst); }); inst.mount(); // кнопки $wrap.find('.js-move-slide').off('click.splideNav').on('click.splideNav', function () { if ($(this).hasClass('special-products__slider-arrow-prev')) inst.go('-'); if ($(this).hasClass('special-products__slider-arrow-next')) inst.go('+'); }); // пересчёт при ресайзе $(window).on('resize.relatedSplide', function () { var mobile = $(window).width() <= 767; inst.options = { perPage: perView($el, mobile ? minWm : minW, gap) }; toggleControls($wrap, inst); }); }); } function toggleControls($wrap, inst) { var $prev = $wrap.find('.special-products__slider-arrow-prev'); var $next = $wrap.find('.special-products__slider-arrow-next'); var slides = inst.Components.Elements.list.children.length; var perPage = inst.options.perPage || 1; if (slides <= perPage) { $prev.addClass('is-hide'); $next.addClass('is-hide'); } else { $prev.removeClass('is-hide'); $next.removeClass('is-hide'); // блокируем крайние состояния var idx = inst.index; $prev.toggleClass('is-disabled', idx === 0); $next.toggleClass('is-disabled', idx >= slides - perPage); } } // ====== VARIANT CHANGE ====== if (window.EventBus && typeof window.EventBus.subscribe === 'function') { EventBus.subscribe('change_variant:insales:product', function (data) { try { var $card = $(data.action.product[0]); // Обновление фото (если используется клик по .product-preview__photo-variant) var $imgWrap = $card.find('.product-preview__photo .product-preview__photo-variant'); if ($imgWrap.length) { var html = ''; if (data.image_ids.length <= 1) { var def = data.images && data.images[0]; if (def) { html = '' + '' + '' + '' + ''; } } else { var arr = data.action.productJSON.images.filter(function (img) { return data.image_ids.indexOf(img.id) > -1; }); var first = arr[0] || data.action.productJSON.images[0]; if (first) { html = '' + '' + '' + '' + ''; } } $imgWrap.html(html); } // Обновление бейджа var $badge = $card.find('.quantity-badge[data-stock-indicator]'); if ($badge.length) { var unit = $badge.attr('data-product-unit') || ''; var qty = (typeof data.quantity === 'undefined') ? null : data.quantity; StockBadge.applyOne($badge, qty, unit); } } catch (e) { // тихо if (window.console && console.warn) console.warn('Variant/badge update error:', e); } }); } // ====== INIT ====== $(function () { $('.js-special-products').each(function () { var $wrap = $(this); initSlider($wrap); }); // Бейджи после отрисовки StockBadge.init(document); }); })(window.jQuery, window, document); } catch(error) { console.error('Widget "widget-type_widget_v4_products_related_1_d74a193ddafb7a3f2877e7a153e4d12c"', error) }
    Заявка
    Я ознакомлен и согласен с условиями оферты и политики конфиденциальности.
    Запросить Счет
    Я ознакомлен и согласен с условиями оферты и политики конфиденциальности.