Стеновые и кровельные материалы

Стеновые и кровельные материалы — профлист, сэндвич-панели, доборы | ГК «СтилКонстракшн» :root { —bg: #0e1013; —panel: #12151a; —muted: #1a1f26; —line: #2a313b; —text: #e7ecf3; —soft: #94a3b8; —accent: #56b6f7; —accent-2: #7cf1c9; —warn: #f7b956; —glass: rgba(255, 255, 255, .06); —blur: 12px; —radius: 18px; —radius-lg: 26px; —shadow: 0 18px 60px rgba(0, 0, 0, .35), 0 1px 0 rgba(255, 255, 255, .03) inset; —max: 1200px; —pad: clamp(16px, 2vw, 32px); } /* base */ .wr-wrap { position: relative; background: var(—bg); color: var(—text); isolation: isolate; overflow: hidden; padding-bottom: 70px } .wr-wrap::before { content: «»; position: absolute; inset: -20% -10% auto -10%; height: 52vh; z-index: -1; filter: blur(20px); background: radial-gradient(60% 60% at 20% 30%, #56b6f71a 0, transparent 60%), radial-gradient(50% 50% at 80% 20%, #7cf1c918 0, transparent 60%) } .wr-cont { max-width: var(—max); margin: 0 auto; padding: 0 var(—pad) } .wr-sec { padding: clamp(40px, 6vw, 90px) 0 } hr.wr-sep { border: 0; height: 1px; background: linear-gradient(90deg, transparent, var(—line), transparent); opacity: .5; margin: 34px 0 } a { color: inherit; text-decoration: none } *, *:before, *:after { box-sizing: border-box } /* scroll progress */ .wr-progress { position: sticky; top: 0; z-index: 50; height: 3px; background: linear-gradient(90deg, #56b6f7, #7cf1c9); width: 0% } /* HERO with parallax + spotlight */ .wr-hero { position: relative; padding: clamp(82px, 10vw, 120px) 0 28px; text-align: center; border-bottom: 1px solid var(—line); background: radial-gradient(900px 360px at 85% -10%, rgba(86, 182, 247, .10), transparent 60%), radial-gradient(1200px 420px at 20% -15%, rgba(124, 241, 201, .10), transparent 60%), var(—bg); } .wr-hero h1 { margin: 0 0 10px; font-size: clamp(32px, 5.2vw, 64px); font-weight: 900; background: linear-gradient(180deg, #fff, #cfe7ff); -webkit-background-clip: text; background-clip: text; color: transparent } .wr-hero p { margin: 0 auto; color: #cfd8e4; max-width: 84ch; font-size: clamp(15px, 1.4vw, 18px) } .wr-hero .bullets { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin: 18px auto 0 } @media(max-width:980px) { .wr-hero .bullets { grid-template-columns: 1fr 1fr } } @media(max-width:640px) { .wr-hero .bullets { grid-template-columns: 1fr } } .b { border: 1px solid var(—line); border-radius: 14px; padding: 10px 12px; background: rgba(255, 255, 255, .04); color: #d6e6f6; font-size: 14px; position: relative; overflow: hidden } .b::after { content: «»; position: absolute; inset: auto -20% 0 -20%; height: 2px; background: linear-gradient(90deg, #7cf1c9, #56b6f7); opacity: .0; transition: .35s } .b:hover::after { opacity: .6 } /* spotlight layer */ .wr-spot { position: absolute; inset: 0; pointer-events: none; mix-blend-mode: screen; opacity: .22; background: radial-gradient(200px 200px at var(—mx, 50%) var(—my, 20%), rgba(124, 241, 201, .35), rgba(86, 182, 247, .0) 70%); } /* CTA buttons: magnetic + ripple */ .wr-ctas { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-top: 16px } .btn { position: relative; display: inline-flex; align-items: center; gap: 10px; height: 48px; padding: 0 18px; border-radius: 14px; border: 1px solid var(—line); background: linear-gradient(180deg, #19212a, #12161d); color: #eaf6ff; font-weight: 800; letter-spacing: .2px; box-shadow: var(—shadow); cursor: pointer; transition: .2s; will-change: transform } .btn:hover { transform: translateY(-2px); box-shadow: 0 18px 60px rgba(86, 182, 247, .25) } .btn.ghost { background: rgba(255, 255, 255, .06) } .btn:after { content: «»; position: absolute; inset: 0; border-radius: inherit; transform: scale(0); opacity: 0; background: radial-gradient(140px 140px at var(—rx, 50%) var(—ry, 50%), rgba(124, 241, 201, .22), transparent 45%); transition: transform .4s ease, opacity .5s ease } .btn.click:after { transform: scale(1); opacity: .9 } /* sticky filter chips (springy) */ .tabs-wrap { position: sticky; top: 0; z-index: 6; background: linear-gradient(180deg, rgba(14, 16, 19, .92), rgba(14, 16, 19, .7)); backdrop-filter: blur(10px); border-bottom: 1px solid var(—line) } .tabs { display: flex; gap: 10px; flex-wrap: wrap; justify-content: center; padding: 12px 0 } .tab { border: 1px solid var(—line); background: rgba(255, 255, 255, .06); padding: 10px 16px; border-radius: 999px; color: #eaf2ff; font-weight: 800; letter-spacing: .2px; cursor: pointer; transition: transform .12s ease, border-color .2s } .tab:hover { transform: translateY(-1px); border-color: #3f8bd6 } .tab[aria-pressed=»true»] { background: linear-gradient(90deg, var(—accent), var(—accent-2)); color: #0a1218; box-shadow: 0 6px 24px rgba(86, 182, 247, .35) } /* cards grid (3D tilt + neon border) */ .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px } @media(max-width:1024px) { .grid { grid-template-columns: repeat(2, 1fr) } } @media(max-width:640px) { .grid { grid-template-columns: 1fr } } .card { —rx: 0deg; —ry: 0deg; —ang: 120deg; position: relative; background: linear-gradient(180deg, rgba(255, 255, 255, .04), rgba(0, 0, 0, .22)); border: 1px solid var(—line); border-radius: 18px; box-shadow: var(—shadow); padding: 18px; overflow: hidden; transform: perspective(900px) rotateX(var(—rx)) rotateY(var(—ry)) translateZ(0); transition: transform .14s ease, border-color .25s ease, box-shadow .25s ease } .card:hover { border-color: #3b4654; box-shadow: 0 26px 70px rgba(0, 0, 0, .45) } .card::after { content: «»; position: absolute; inset: -1px; border-radius: inherit; pointer-events: none; background: conic-gradient(from var(—ang), rgba(124, 241, 201, .0), rgba(124, 241, 201, .25), rgba(86, 182, 247, .18), rgba(124, 241, 201, .0)); opacity: .0; filter: blur(14px); transition: opacity .25s ease } .card:hover::after { opacity: .9 } .card h3 { margin: 6px 0 8px; font-size: 20px } .card p { margin: 0; color: #c8d3e0; line-height: 1.6 } .card ul { margin: 10px 0 0; padding-left: 18px; color: #cfd8e4 } .card li { margin: 6px 0 } .hidden { display: none !important } /* mini tables */ .details { margin-top: 12px; border: 1px solid var(—line); border-radius: 12px; overflow: hidden; background: rgba(255, 255, 255, .02) } .details summary { cursor: pointer; padding: 10px 12px; font-weight: 800; color: #e7f2ff; border-bottom: 1px solid var(—line) } .details summary::-webkit-details-marker { display: none } .details table { width: 100%; border-collapse: collapse; font-size: 13px } .details th, .details td { padding: 8px 10px; border-bottom: 1px solid #24303d; color: #cbd7e6; text-align: left } .details thead { background: rgba(255, 255, 255, .04) } .details tr:last-child td { border-bottom: none } /* KPI counters */ .kpis { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px } @media(max-width:640px) { .kpis { grid-template-columns: 1fr } } .k { border: 1px solid var(—line); border-radius: 12px; background: rgba(255, 255, 255, .04); padding: 16px; text-align: center } .k .v { font-weight: 900; font-size: clamp(20px, 3vw, 32px) } .k .d { color: #9fb3c9; font-size: 12px } /* Coatings slider */ .coat { border: 1px solid var(—line); border-radius: 18px; background: rgba(255, 255, 255, .03); padding: 18px; box-shadow: var(—shadow) } .coat-head { display: flex; gap: 10px; justify-content: space-between; align-items: center; flex-wrap: wrap } .switch { display: inline-flex; align-items: center; gap: 8px; border: 1px solid var(—line); border-radius: 999px; padding: 6px 10px; background: rgba(255, 255, 255, .06) } .switch b { font-size: 13px } .slider { margin-top: 12px; display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px } @media(max-width:900px) { .slider { grid-template-columns: repeat(3, 1fr) } } @media(max-width:560px) { .slider { grid-template-columns: repeat(2, 1fr) } } .sw { display: flex; gap: 10px; align-items: center; border: 1px solid var(—line); border-radius: 12px; padding: 10px; background: rgba(255, 255, 255, .04); cursor: pointer; transition: .2s } .sw:hover { transform: translateY(-2px); box-shadow: 0 16px 40px rgba(0, 0, 0, .35); border-color: #3b4654 } .dot { width: 22px; height: 22px; border-radius: 6px; border: 1px solid #23303d; box-shadow: inset 0 1px 0 rgba(255, 255, 255, .06) } .sw span { font-size: 13px; color: #cfe1f6 } /* Nodes carousel */ .nodes { position: relative } .row { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 14px; overflow: hidden; scroll-behavior: smooth } @media(max-width:980px) { .row { grid-template-columns: 1fr 1fr } } @media(max-width:640px) { .row { grid-template-columns: 1fr } } .node { border: 1px solid var(—line); border-radius: 18px; background: linear-gradient(180deg, rgba(255, 255, 255, .04), rgba(0, 0, 0, .2)); padding: 16px; min-height: 140px } .nav { display: flex; justify-content: space-between; gap: 10px; margin-top: 10px } .nav button { border: 1px solid var(—line); background: rgba(255, 255, 255, .06); color: #eaf2ff; border-radius: 12px; padding: 8px 12px; cursor: pointer; transition: .2s } .nav button:hover { transform: translateY(-1px) } .nav button[disabled] { opacity: .4; pointer-events: none; cursor: default } /* CTA */ .cta { border: 1px solid var(—line); border-radius: 20px; background: linear-gradient(180deg, rgba(255, 255, 255, .03), rgba(0, 0, 0, .35)); box-shadow: var(—shadow); padding: 32px; text-align: center } .cta h3 { margin: 0 0 10px; font-size: clamp(22px, 3vw, 32px) } .cta p { margin: 0 auto 16px; color: #cdd8e6; max-width: 70ch } /* Sticky mini-CTA (footer-aware) */ .sticky { position: fixed; right: 16px; bottom: 16px; z-index: 9; display: none; gap: 10px; align-items: center; filter: drop-shadow(0 8px 24px rgba(0, 0, 0, .35)) } .sticky .btn { height: auto; padding: 10px 14px; border-radius: 999px } /* reveal */ .reveal { opacity: 0; transform: translateY(14px); transition: opacity .7s cubic-bezier(.2, .7, .2, 1), transform .7s cubic-bezier(.2, .7, .2, 1) } .reveal.show { opacity: 1; transform: none } /* ===== INFINITE MARQUEE (autoduplicate) ===== */ .marq { —gap: 34px; —edge-fade: 24px; —duration: 25s; position: relative; overflow: hidden; border-top: 1px solid var(—line); border-bottom: 1px solid var(—line); background: rgba(255, 255, 255, .02); mask-image: linear-gradient(90deg, transparent 0, #000 var(—edge-fade), #000 calc(100% — var(—edge-fade)), transparent 100%); } .marq-track { display: inline-flex; align-items: center; gap: var(—gap); padding: 10px 0; min-width: max-content; animation: marq-move var(—duration) linear infinite; will-change: transform; } .marq:hover .marq-track { animation-play-state: paused; } .marq .tag { font-size: 13px; padding: 8px 12px; border-radius: 999px; border: 1px solid var(—line); background: rgba(255, 255, 255, .04); color: #d6e6f6; white-space: nowrap; flex: 0 0 auto } @keyframes marq-move { from { transform: translateX(0) } to { transform: translateX(-50%) } } /* motion reduce */ @media (prefers-reduced-motion:reduce) { .card, .btn, .reveal { transition: none } .wr-spot { display: none } .marq { overflow: auto; mask-image: none } .marq-track { animation: none !important } }

Стеновые и кровельные материалы

Профлист (C/H), сэндвич-панели (PIR/минвата), кровельные системы, мембраны/плёнки, утеплитель, водостоки, доборы и крепёж. Подбор под узлы/карты раскроя, маркировка, документы и логистика. Монтаж не выполняем — снабжение и комплектация.

Подбор под профиль/замок
Толщины и покрытия по ТЗ
Маркировка по зонам монтажа
Упаковочные ведомости
Сертификаты/паспорт, УПД
Графики отгрузок

Профлист стеновой/кровельный (C/H)

Толщины 0,4–1,0 мм, Zn/Al-Zn. Покрытия PE/MatPE/Pural/Plastisol. Рез под длину, цвета по RAL.

  • Доборы под профиль
  • Маркировка листов
  • Упаковочные ведомости
Рабочая ширина и шаг
Профиль Раб. ширина Шаг волны
C8/C10 ~1150 мм ~80–100 мм
C20/H20 ~1100 мм ~137–183 мм
H35/H44 ~1000 мм ~210–260 мм

Сэндвич-панели (PIR/минвата)

Стеновые/кровельные, замок Micro/Hidden. Толщины 40–200 мм, плотности по ТЗ.

  • Плёнки/герметики/саморезы
  • Доборы к системам
  • Паспорта и СС
Типовые толщины/λ
Наполнитель Толщ. λ, Вт/м·К
PIR 60–160 0.022–0.026
Минвата 80–200 0.034–0.040

Кровельные системы

Фальц/рулон/композит. Коньки, ендовы, аэраторы, вентвыходы, снегозадержатели.

  • Комплект под узлы
  • Карты раскроя
  • Цвет/покрытие

Водосточные системы

Металл/ПВХ, диаметры/сечения, крепёж, воронки, колена, труба/желоб.

  • Подбор по кровле
  • Цвет RAL
  • Маркировка и опись

Мембраны/плёнки

Паро/гидро/ветрозащита, супердиффузионные, ленты/уплотнения, УФ-стойкость.

  • Стыки и примыкания
  • Акустические подложки
  • Маркировка рулонов

Утеплитель

Минвата (плиты/маты), PIR/PUR. Плотности для стен/кровель, крепёж и тарельчатые дюбели.

  • λ и плотности под ТЗ
  • Пожтребования
  • Протоколы по запросу

Крепёж/герметики

Саморезы по металлу/дереву, фермерские, EPDM-шайбы, герметики, уплотнители, ленты.

  • Подбор длины/тип
  • Комплект к системе
  • Расход по узлам
Ориентиры расхода
Изделие Расход Примечание
Профлист 6–9 шт/м² по обрешётке
Сэндвич 2–3 шт/м² по схеме крепления
Доборы 1 шт/300–400 мм по длине планки

Доборные элементы

Планки примыканий, отливы, уголки, коньки. Изготовление по картам раскроя и узлам.

  • Толщина/покрытие под лист
  • Маркировка планок
  • Упаковка по зонам

Комплектация/логистика

Пакетирование по зонам, маркировка пачек/листов, ведомости для ПТО, доставка на объект.

  • Слоты отгрузки
  • Переупаковка
  • Фото-фиксация
C8C20H35H44
PEMatPEPuralPlastisol
PIRМинватаAl-ZnRAL
0
часа — счёт/КП
0
м²+ — укомплектовано
0
регионов РФ/ЕАЭС

Покрытия и цвета RAL

Финиш:

RAL 3005 Вино-красный
RAL 5005 Синий
RAL 6005 Зелёный мох
RAL 7004 Сигнально-серый
RAL 7024 Графит
RAL 8017 Шоколад
RAL 9003 Сигнально-белый
RAL 9005 Чёрный
RAL 1014 Слоновая кость
RAL 3009 Оксид-красный
RAL 6002 Лиственный
RAL 7021 Тёмно-серый
Финиш: Глянец. Выберите цвет, чтобы зафиксировать в заявке.

Узлы и доборы

Конёк/ветровая
Геометрия под профиль, вентиляционный зазор, уплотнитель.
Ендова
Нижняя/верхняя, ширина полки, герметизация, схема крепления.
Примыкание к стене/трубе
Планки, штроба, герметик, фартуки.
Карниз/софит
Капельник, карнизная планка, вентиляция подшивки.
Снегозадержатель
Трубчатый/пластинчатый, шаг опор, крепёж по схеме.
Водоотвод
Желоб, воронки, уклоны, колена, крепление к лобовой.

Укомплектуем стеновые/кровельные «под ключ»

Согласуем спецификацию и узлы, подготовим доборы, маркировку и график отгрузок.

{«@context»:»https://schema.org»,»@type»:»Service»,»name»:»Поставка стеновых и кровельных материалов»,»provider»:{«@type»:»Organization»,»name»:»ГК «СтилКонстракшн»»,»url»:»»},»areaServed»:»RU»,»serviceType»:[«Профлист»,»Сэндвич-панели»,»Кровельные системы»,»Мембраны»,»Утеплитель»,»Доборы»,»Крепёж»,»Водостоки»,»Логистика»],»offers»:{«@type»:»Offer»,»availability»:»https://schema.org/InStock»}} const prefersReduced = window.matchMedia && window.matchMedia(‘(prefers-reduced-motion: reduce)’).matches; /* Reveal + stagger */ (function () { const els = […document.querySelectorAll(‘.reveal’)]; if (!(‘IntersectionObserver’ in window)) { els.forEach(e => e.classList.add(‘show’)); return; } const io = new IntersectionObserver((en, o) => { en.forEach(x => { if (x.isIntersecting) { x.target.classList.add(‘show’); if (x.target.dataset.stag && !prefersReduced) { const kids = x.target.querySelectorAll(‘:scope .card, :scope .b, :scope .k .v’); kids.forEach((el, i) => { el.style.opacity = 0; el.style.transform = ‘translateY(10px)’; setTimeout(() => { el.style.transition = ‘opacity .5s ease, transform .5s ease’; el.style.opacity = 1; el.style.transform = ‘none’; }, 70 * i); }); } o.unobserve(x.target); } }) }, { threshold: .16 }); els.forEach(e => io.observe(e)); })(); /* Scroll progress */ (function () { const bar = document.getElementById(‘wrProgress’); const onScroll = () => { const h = document.documentElement; const pr = (h.scrollTop) / (h.scrollHeight — h.clientHeight); bar.style.width = (pr * 100) + ‘%’; }; window.addEventListener(‘scroll’, onScroll, { passive: true }); onScroll(); })(); /* Hero spotlight + slight parallax */ (function () { const hero = document.querySelector(‘.wr-hero’); const spot = hero && hero.querySelector(‘.wr-spot’); if (!hero || !spot || prefersReduced) return; hero.addEventListener(‘pointermove’, (e) => { const r = hero.getBoundingClientRect(); const mx = ((e.clientX — r.left) / r.width) * 100; const my = ((e.clientY — r.top) / r.height) * 100; spot.style.setProperty(‘—mx’, mx + ‘%’); spot.style.setProperty(‘—my’, my + ‘%’); spot.style.opacity = .3; hero.style.backgroundPosition = `${(mx — 50) * .12}px ${(my — 50) * .12}px`; }); hero.addEventListener(‘pointerleave’, () => { spot.style.opacity = .18 }); })(); /* Magnetic buttons + ripple */ (function () { const mags = […document.querySelectorAll(‘.js-magnet’)]; if (prefersReduced) return; mags.forEach(btn => { btn.addEventListener(‘pointermove’, e => { const r = btn.getBoundingClientRect(); const x = e.clientX — (r.left + r.width / 2); const y = e.clientY — (r.top + r.height / 2); btn.style.transform = `translate(${x * 0.08}px, ${y * 0.08}px)`; }); btn.addEventListener(‘pointerleave’, () => btn.style.transform = »); btn.addEventListener(‘click’, e => { const r = e.currentTarget.getBoundingClientRect(); e.currentTarget.style.setProperty(‘—rx’, ((e.clientX — r.left) / r.width * 100) + ‘%’); e.currentTarget.style.setProperty(‘—ry’, ((e.clientY — r.top) / r.height * 100) + ‘%’); e.currentTarget.classList.add(‘click’); setTimeout(() => e.currentTarget.classList.remove(‘click’), 320); }); }); })(); /* 3D tilt cards */ (function () { const grid = document.getElementById(‘grid’); if (!grid || prefersReduced) return; grid.querySelectorAll(‘.card’).forEach(card => { const max = 6; const angBase = parseFloat(card.getAttribute(‘data-ang’) || ‘0’); card.addEventListener(‘pointermove’, e => { const r = card.getBoundingClientRect(); const px = (e.clientX — r.left) / r.width — .5; const py = (e.clientY — r.top) / r.height — .5; card.style.setProperty(‘—rx’, (-py * max) + ‘deg’); card.style.setProperty(‘—ry’, (px * max) + ‘deg’); card.style.setProperty(‘—ang’, (angBase + px * 40) + ‘deg’); }); card.addEventListener(‘pointerleave’, () => { card.style.setProperty(‘—rx’, ‘0deg’); card.style.setProperty(‘—ry’, ‘0deg’); card.style.setProperty(‘—ang’, angBase + ‘deg’); }); }); })(); /* Tabs filter with tiny spring */ (function () { const tabs = […document.querySelectorAll(‘.tab’)]; const cards = […document.querySelectorAll(‘#grid .card’)]; function apply(cat) { cards.forEach(c => c.classList.toggle(‘hidden’, !(cat === ‘all’ || c.dataset.cat === cat))); } tabs.forEach(t => t.addEventListener(‘click’, () => { tabs.forEach(x => x.setAttribute(‘aria-pressed’, ‘false’)); t.setAttribute(‘aria-pressed’, ‘true’); apply(t.dataset.filter); const top = document.querySelector(‘.tabs-wrap’).offsetTop; window.scrollTo({ top: top + 1, behavior: prefersReduced ? ‘auto’ : ‘smooth’ }); if (!prefersReduced) { t.animate([{ transform: ‘scale(.9)’ }, { transform: ‘scale(1.04)’ }, { transform: ‘scale(1)’ }], { duration: 240, easing: ‘ease-out’ }); } })); })(); /* KPI counters on view */ (function () { const wrap = document.getElementById(‘kpis’); if (!wrap) return; const nums = wrap.querySelectorAll(‘.v’); let done = false; const run = () => { if (done) return; done = true; nums.forEach(n => { const target = parseInt(n.getAttribute(‘data-c’) || ‘0’, 10); const dur = 900; const t0 = performance.now(); function tick(t) { const p = Math.min(1, (t — t0) / dur); n.textContent = Math.floor(target * (0.2 + 0.8 * p)).toLocaleString(‘ru-RU’); if (p { if (e[0].isIntersecting) { run(); io.disconnect(); } }, { threshold: .3 }); io.observe(wrap); })(); /* Coatings slider logic */ (function () { const out = document.getElementById(‘ralOut’); if (!out) return; let fin = ‘Глянец’; document.querySelectorAll(‘input[name=»fin»]’).forEach(r => r.addEventListener(‘change’, () => { fin = (r.value === ‘mat’ ? ‘Матовый’ : ‘Глянец’); out.innerHTML = ‘Финиш: ‘ + fin + ‘. Выберите цвет, чтобы зафиксировать в заявке.’; })); document.querySelectorAll(‘#ralSlider .sw’).forEach(sw => { sw.addEventListener(‘click’, () => { const ral = sw.getAttribute(‘data-ral’) || ‘цвет’; out.innerHTML = ‘Финиш: ‘ + fin + ‘. Выбран цвет: ‘ + ral + ‘. Нажмите «Запросить КП» — передадим параметры.’; }); }); })(); /* Nodes carousel (finite, no wrap + auto-disable buttons) */ (function () { const row = document.getElementById(‘nodesRow’); if (!row) return; const prev = document.getElementById(‘prevN’); const next = document.getElementById(‘nextN’); const gap = 14; function step() { const el = row.querySelector(‘.node’); return (el ? el.getBoundingClientRect().width : 320) + gap; } function atStart() { return row.scrollLeft = row.scrollWidth — 1; } function update() { prev.disabled = atStart(); next.disabled = atEnd(); } function go(dir) { row.scrollBy({ left: dir * step(), behavior: prefersReduced ? ‘auto’ : ‘smooth’ }); setTimeout(update, 240); } update(); prev.addEventListener(‘click’, () => go(-1)); next.addEventListener(‘click’, () => go(+1)); row.addEventListener(‘scroll’, update, { passive: true }); window.addEventListener(‘resize’, () => setTimeout(update, 80), { passive: true }); })(); /* Sticky CTA show/hide + footer-aware */ (function () { const sticky = document.getElementById(‘wrSticky’); let shown = false; const show = () => { if (window.scrollY > 420 && !shown) { sticky.style.display = ‘flex’; shown = true; } if (window.scrollY { entries.forEach(e => { sticky.style.opacity = e.isIntersecting ? ‘.0’ : »; sticky.style.pointerEvents = e.isIntersecting ? ‘none’ : »; }); }, { threshold: 0.01 }); fIO.observe(footer); } })(); /* Widster lazy loader */ function wrWidster(e) { if (e) e.preventDefault(); try { if (window.__widsterLoaded && window.widster && window.widster.open) { window.widster.open(); return; } if (document.getElementById(‘wrWidsterScript’)) { return; } window.__widsterLoaded = false; window.wwidget = ‘837745a476e49072577bd5965e004260cb787b63525a84eb8931aee32562fed5’; const s = document.createElement(‘script’); s.id = ‘wrWidsterScript’; s.async = true; s.charset = ‘UTF-8’; s.src = ‘https://widster.ru/embed/’ + window.wwidget; s.onload = function () { window.__widsterLoaded = true; try { window.widster && window.widster.open && window.widster.open(); } catch (e) { } }; document.body.appendChild(s); } catch (err) { location.href = ‘mailto:sales@gk-sc.ru?subject=’ + encodeURIComponent(‘Запрос КП (стеновые/кровельные)’) + ‘&body=’ + encodeURIComponent(‘Здравствуйте! Нужен расчёт по стеновым/кровельным материалам. Приложу ведомость/узлы.’); } } /* ===== INFINITE MARQUEE JS (autoduplicate) ===== */ (function () { const prefersReduced = window.matchMedia && window.matchMedia(‘(prefers-reduced-motion: reduce)’).matches; const blocks = document.querySelectorAll(‘.marq’); if (!blocks.length) return; blocks.forEach(m => { const track = m.querySelector(‘.marq-track’); if (!track) return; const spd = (m.getAttribute(‘data-speed’) || ’25s’).trim(); m.style.setProperty(‘—duration’, spd); if (prefersReduced) return; const originalHTML = track.innerHTML; track.innerHTML = originalHTML + originalHTML; // минимум 2× для бесшовности let copies = 1; while (track.scrollWidth < m.clientWidth * 2.2 && copies { if (prefersReduced) return; track.style.animation = ‘none’; track.innerHTML = originalHTML + originalHTML; let c = 1; while (track.scrollWidth < m.clientWidth * 2.2 && c { clearTimeout(to); to = setTimeout(rebuild, 120); }, { passive: true }); }); })();

Нужен расчёт стоимости?

Отправьте чертёж или ТЗ — подготовим КП за 2 часа

Смотрите также

Нужен расчёт стоимости?

Отправьте чертёж или ТЗ — рассчитаем за 2 часа

+7 (499) 350-85-45
Получить КП
Позвонить Получить КП

Подождите! У нас есть предложение

Оставьте заявку и получите расчёт стоимости в течение 2 часов

Нажимая кнопку, вы соглашаетесь с политикой конфиденциальности

Написать в Telegram