PageSourceSearch

https://modulniye-doma.ru/contacts

html modulniye-doma.ru collected 2026-10-07 20:00:54 UTC 191,802 bytes, 3,481 lines download raw bytes

1<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="yandex-verification" content="272fea569c8b07d2" /> <!--metatextblock--> <title>Контакты Кантри Хаус — производство в Суонтаке, телефоны</title> <meta name="description" content="Производство и отдел продаж Кантри Хаус в технопарке Суонтака под Петербургом. Телефоны продаж и сервиса, часы, мессенджеры, карта и маршрут. Экскурсия в цех." /> <meta property="og:url" content="https://modulniye-doma.ru/contacts" /> <meta property="og:title" content="Контакты Кантри Хаус — производство в Суонтаке, телефоны" /> <meta property="og:description" content="Производство и отдел продаж Кантри Хаус в технопарке Суонтака под Петербургом. Телефоны продаж и сервиса, часы, мессенджеры, карта и маршрут. Экскурсия в цех." /> <meta property="og:type" content="website" /> <meta property="og:image" content="https://static.tildacdn.com/tild3366-3831-4564-a166-653963636430/ct-og-2.jpg" /> <link rel="canonical" href="https://modulniye-doma.ru/contacts"> <!--/metatextblock--> <meta name="format-detection" content="telephone=no" /> <meta http-equiv="x-dns-prefetch-control" content="on"> <link rel="dns-prefetch" href="https://ws.tildacdn.com"> <link rel="dns-prefetch" href="https://static.tildacdn.com"> <!--favicons--> <link rel="shortcut icon" href="https://static.tildacdn.com/tild3161-3639-4466-a363-323835396437/photo.png" type="image/x-icon"/> <!--/favicons--> <!-- Assets --> 
1<script src="https://neo.tildacdn.com/js/tilda-fallback-1.0.min.js" async charset="utf-8"></script>
1 <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-grid-3.0.min.css" type="text/css" media="all" onerror="this.loaderr='y';"/> <link rel="stylesheet" href="https://static.tildacdn.com/ws/project10731239/tilda-blocks-page207032509.min.css?t=1790840660" type="text/css" media="all" onerror="this.loaderr='y';" /> <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-animation-2.0.min.css" type="text/css" media="all" onerror="this.loaderr='y';" /> <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-popup-1.1.min.css" type="text/css" media="print" onload="this.media='all';" onerror="this.loaderr='y';" /> <noscript><link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-popup-1.1.min.css" type="text/css" media="all" /></noscript> <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-forms-1.0.min.css" type="text/css" media="all" onerror="this.loaderr='y';" /> 
1<script nomodule src="https://static.tildacdn.com/js/tilda-polyfill-1.0.min.js" charset="utf-8"></script>
1 
1<script type="text/javascript">function t_onReady(func) {if(document.readyState!='loading') {func();} else {document.addEventListener('DOMContentLoaded',func);}}
2function t_onFuncLoad(funcName,okFunc,time) {if(typeof window[funcName]==='function') {okFunc();} else {setTimeout(function() {t_onFuncLoad(funcName,okFunc,time);},(time||100));}}</script>
2 
2<script src="https://static.tildacdn.com/js/tilda-scripts-3.0.min.js" charset="utf-8" defer onerror="this.loaderr='y';"></script>
2 
2<script src="https://static.tildacdn.com/ws/project10731239/tilda-blocks-page207032509.min.js?t=1790840660" charset="utf-8" async onerror="this.loaderr='y';"></script>
2 
2<script src="https://static.tildacdn.com/js/tilda-lazyload-1.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script>
2 
2<script src="https://static.tildacdn.com/js/tilda-animation-2.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script>
2 
2<script src="https://static.tildacdn.com/js/tilda-popup-1.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script>
2 
2<script src="https://static.tildacdn.com/js/tilda-forms-1.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script>
2 
2<script src="https://static.tildacdn.com/js/tilda-events-1.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script>
2 <!-- nominify begin --><!-- Yandex.Metrika counter --> 
2<script type="text/javascript" >
vendor: 406 bytes, lines 2-9
2
3   (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
4   m[i].l=1*new Date();
5   for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
6   k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
7   (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
8
9   ym(
952334545
vendor: 123 bytes, lines 9-14
9, "init", {
10        clickmap:true,
11        trackLinks:true,
12        accurateTrackBounce:true,
13        webvisor:true
14   });
15</script>
15 <noscript><div><img src="https://mc.yandex.ru/watch/52334545" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <meta name="yandex-verification" content="272fea569c8b07d2" /> <meta name="google-site-verification" content="XqGcI0pFgXf6iodybLiffjdFfndnCXCO0_0pLeBRGHE" /> <meta name="yandex-verification" content="b9c0dafe6556ed91" /><!-- nominify end -->
15<script type="text/javascript">window.dataLayer=window.dataLayer||[];</script>
15 
15<script type="text/javascript">(function() {var ttt='cebo';var tt='oog';var re=new RegExp("bot|g" + tt + "le|yandex|baidu|bing|msn|duckduckbot|teoma|slurp|crawler|spider|robot|crawling|fa" + ttt + "ok","i");if((re.test(navigator.userAgent))===false&&typeof(sessionStorage)!='undefined'&&sessionStorage.getItem('visited')!=='y'&&document.visibilityState){var style=document.createElement('style');style.type='text/css';style.innerHTML='@media screen and (min-width: 980px) {.t-records {opacity: 0;}.t-records_animated {-webkit-transition: opacity ease-in-out .2s;-moz-transition: opacity ease-in-out .2s;-o-transition: opacity ease-in-out .2s;transition: opacity ease-in-out .2s;}.t-records.t-records_visible {opacity: 1;}}';document.getElementsByTagName('head')[0].appendChild(style);function t_setvisRecs(){var alr=document.querySelectorAll('.t-records');Array.prototype.forEach.call(alr,function(el) {el.classList.add("t-records_animated");});setTimeout(function() {Array.prototype.forEach.call(alr,function(el) {el.classList.add("t-records_visible");});sessionStorage.setItem("visited","y");},400);}
16document.addEventListener('DOMContentLoaded',t_setvisRecs);}})();</script>
16</head> <body class="t-body" style="margin:0;"> <!--allrecords--> <div id="allrecords" class="t-records" data-hook="blocks-collection-content-node" data-tilda-project-id="10731239" data-tilda-page-id="207032509" data-tilda-page-alias="contacts" data-tilda-formskey="f2b2add5692ef370bd3d00a810731239" data-tilda-cookie="no" data-tilda-lazy="yes" data-tilda-root-zone="com" data-tilda-project-headcode="yes" data-tilda-project-country="RU"> <!--header--> <header id="t-header" class="t-records" data-hook="blocks-collection-content-node" data-tilda-project-id="10731239" data-tilda-page-id="57418363" data-tilda-formskey="f2b2add5692ef370bd3d00a810731239" data-tilda-cookie="no" data-tilda-lazy="yes" data-tilda-root-zone="com" data-tilda-project-headcode="yes" data-tilda-page-headcode="yes" data-tilda-project-country="RU"> <div id="rec2840025701" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ═══ БЛОК 01-nav · ШАПКА · ВЕРСИЯ 4.8 · АВТОНОМНАЯ СКВОЗНАЯ ═══
17ВЕРСИЯ 4.8 (22.08.2026): пункт «Туризм и B2B» → «Базы отдыха» (168-ФЗ: латиница в навигации без дубля; целевой клиент страницы /tourism). Разметка и стили без изменений.
18Ставится в страницу ХЕДЕР Тильды — работает на всех страницах сайта.
19Публикуется только кнопкой «Опубликовать» на самой странице ХЕДЕР.
20ВЕРСИЯ 4.7 (21.08.2026) — МОБИЛЬНОЕ МЕНЮ ПЕРЕСОБРАНО ПОД ДЕСКТОП
21Диагноз по живому скриншоту (iPhone, MAX-браузер): бургер срабатывал,
22но меню было собрано под прежний макет — девять пунктов по 30px,
23телефон и кнопка не помещались в экран, justify-content:center
24при запрещённом скролле обрезал список сверху и снизу: первые
25пункты уходили под капсулу шапки, телефон — за нижний край.
26Капсула при открытом меню оставалась в «тёмном» состоянии поверх
27светлого фона — логотип и крестик читались размытым пятном.
28Что изменено (только зона мобильного меню и бургер, остальное
29дословно из 4.6):
301. Пункты — те же капсулы, что в десктопном меню (.hdq-nm a):
31кегль 17, вес 500, скругление 100px, подсветка активного
32пункта янтарём. Стрелок в кружках больше нет.
332. Список скроллируется (overflow:auto, 100dvh, safe-area),
34выравнивание сверху с отступом под капсулу — ничего
35не обрезается ни на каком экране.
363. При открытии шапка принудительно переходит в светлое
37состояние (.hdq-on), при закрытии возвращается к тому,
38что диктует скролл. Крестик и логотип читаются.
394. Порядок пунктов = десктоп (Проекты · В наличии · Туризм и B2B ·
40Производство · Ипотека · Вопросы · Блог) + два, которых
41на десктопе нет по ширине: Видео, Гарантии.
425. Активный пункт подсвечивается по совпадению pathname.
43ИСТОРИЯ 4.0–4.6 — в предыдущей версии файла; здесь сокращена,
44поведение (детектор тёмной страницы, умные ссылки, обнуление
45обёртки Тильды, «Вопросы» → /faqs, «Заявка» → #form) не менялось. --> <style>
46@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@200;300;400;500;600;700;800&display=swap');
47.hdq-sp {
48height: 92px
49}
50.hdq-nav {
51position: fixed !important;
52top: 0;
53left: 0;
54right: 0;
55z-index: 500 !important;
56padding: clamp(10px, 1.4vw, 18px) clamp(12px, 2.4vw, 28px) !important;
57transition: padding .5s cubic-bezier(.16, 1, .3, 1);
58font-family: 'Manrope', system-ui, -apple-system, sans-serif !important
59}
60.hdq-nav *, .hdq-mob, .hdq-mob * {
61box-sizing: border-box !important
62}
63.hdq-nav a, .hdq-mob a {
64text-decoration: none !important
65}
66.hdq-nb {
67max-width: 1360px !important;
68margin: 0 auto !important;
69height: 68px !important;
70padding: 0 12px 0 22px !important;
71display: flex !important;
72align-items: center !important;
73justify-content: space-between !important;
74gap: 20px !important;
75border-radius: 100px !important;
76background: rgba(255, 255, 255, .06) !important;
77border: 1px solid rgba(255, 255, 255, .12) !important;
78-webkit-backdrop-filter: blur(24px) saturate(180%);
79backdrop-filter: blur(24px) saturate(180%);
80transition: all .5s cubic-bezier(.16, 1, .3, 1)
81}
82.hdq-nav.hdq-on {
83padding-top: 10px !important;
84padding-bottom: 10px !important
85}
86.hdq-nav.hdq-on .hdq-nb {
87background: rgba(251, 250, 248, .82) !important;
88border-color: rgba(11, 11, 12, .08) !important;
89box-shadow: 0 8px 40px rgba(11, 11, 12, .09);
90height: 62px !important
91}
92.hdq-lg {
93position: relative !important;
94display: block !important;
95line-height: 0 !important
96}
97.hdq-lg img {
98height: 30px !important;
99width: auto !important;
100display: block !important;
101transition: height .4s cubic-bezier(.16, 1, .3, 1), opacity .35s cubic-bezier(.16, 1, .3, 1)
102}
103.hdq-lg .hdq-lgl {
104position: absolute !important;
105inset: 0 !important;
106opacity: 0 !important
107}
108.hdq-nav.hdq-on .hdq-lg .hdq-lgd {
109opacity: 0 !important
110}
111.hdq-nav.hdq-on .hdq-lg .hdq-lgl {
112opacity: 1 !important
113}
114.hdq-nav.hdq-on .hdq-lg img {
115height: 27px !important
116}
117.hdq-nm {
118display: flex !important;
119gap: 2px !important
120}
121.hdq-nm a {
122padding: 9px 16px !important;
123border-radius: 100px !important;
124font-size: 13.5px !important;
125font-weight: 500 !important;
126color: rgba(255, 255, 255, .8) !important;
127white-space: nowrap !important;
128transition: all .3s cubic-bezier(.16, 1, .3, 1)
129}
130.hdq-nm a:hover {
131background: rgba(255, 255, 255, .14) !important;
132color: #fff !important
133}
134.hdq-nav.hdq-on .hdq-nm a {
135color: #5A5A5F !important
136}
137.hdq-nav.hdq-on .hdq-nm a:hover {
138background: #F2F0EC !important;
139color: #0B0B0C !important
140}
141.hdq-nm a.hdq-act {
142background: rgba(255, 176, 32, .18) !important;
143color: #FFB020 !important
144}
145.hdq-nav.hdq-on .hdq-nm a.hdq-act {
146background: rgba(255, 176, 32, .14) !important;
147color: #FF9500 !important
148}
149.hdq-ne {
150display: flex !important;
151align-items: center !important;
152gap: 12px !important
153}
154.hdq-ntel {
155font-size: 14.5px !important;
156font-weight: 700 !important;
157color: #fff !important;
158letter-spacing: -.02em !important;
159white-space: nowrap !important;
160transition: color .3s
161}
162.hdq-ntel:hover {
163color: #FFB020 !important
164}
165.hdq-nav.hdq-on .hdq-ntel {
166color: #0B0B0C !important
167}
168.hdq-nav.hdq-on .hdq-ntel:hover {
169color: #FF9500 !important
170}
171.hdq-b {
172display: inline-flex !important;
173align-items: center !important;
174justify-content: center !important;
175gap: 10px !important;
176padding: 17px 34px !important;
177border-radius: 100px !important;
178font-size: 14px !important;
179font-weight: 600 !important;
180letter-spacing: -.01em !important;
181white-space: nowrap !important;
182position: relative !important;
183overflow: hidden !important;
184isolation: isolate !important;
185transition: transform .5s cubic-bezier(.34, 1.4, .5, 1), box-shadow .4s cubic-bezier(.16, 1, .3, 1), color .3s
186}
187.hdq-b::before {
188content: '';
189position: absolute;
190inset: 0;
191z-index: -1;
192border-radius: inherit;
193transform: scale(0);
194transition: transform .55s cubic-bezier(.16, 1, .3, 1)
195}
196.hdq-b:hover {
197transform: translateY(-3px) scale(1.02)
198}
199.hdq-b span {
200position: relative !important;
201z-index: 1 !important
202}
203.hdq-bam {
204background: #FFB020 !important;
205color: #0B0B0C !important;
206box-shadow: 0 6px 24px rgba(255, 176, 32, .34)
207}
208.hdq-bam::before {
209background: #0B0B0C
210}
211.hdq-bam:hover {
212color: #fff !important;
213box-shadow: 0 14px 40px rgba(11, 11, 12, .28)
214}
215.hdq-bam:hover::before {
216transform: scale(1.6)
217}
218.hdq-bsm {
219padding: 12px 24px !important;
220font-size: 12.5px !important
221}
222.hdq-blg {
223padding: 21px 44px !important;
224font-size: 15px !important
225}
226.hdq-bg {
227display: none;
228width: 44px !important;
229height: 44px !important;
230padding: 0 !important;
231cursor: pointer;
232border-radius: 100px !important;
233align-items: center !important;
234justify-content: center !important;
235background: rgba(255, 255, 255, .12) !important;
236border: 1px solid rgba(255, 255, 255, .18) !important;
237-webkit-tap-highlight-color: transparent
238}
239.hdq-nav.hdq-on .hdq-bg {
240background: #F2F0EC !important;
241border-color: rgba(11, 11, 12, .08) !important
242}
243.hdq-bg i {
244display: block !important;
245position: relative !important;
246width: 18px !important;
247height: 2px !important;
248background: #fff !important;
249border-radius: 2px !important;
250transition: all .4s cubic-bezier(.16, 1, .3, 1)
251}
252.hdq-bg i::before, .hdq-bg i::after {
253content: '';
254position: absolute;
255left: 0;
256width: 18px;
257height: 2px;
258background: #fff !important;
259border-radius: 2px;
260transition: all .4s cubic-bezier(.16, 1, .3, 1)
261}
262.hdq-bg i::before {
263top: -6px
264}
265.hdq-bg i::after {
266top: 6px
267}
268.hdq-nav.hdq-on .hdq-bg i, .hdq-nav.hdq-on .hdq-bg i::before, .hdq-nav.hdq-on .hdq-bg i::after {
269background: #0B0B0C !important
270}
271.hdq-bg.hdq-x i {
272background: transparent !important
273}
274.hdq-bg.hdq-x i::before {
275top: 0;
276transform: rotate(45deg)
277}
278.hdq-bg.hdq-x i::after {
279top: 0;
280transform: rotate(-45deg)
281}/* ── мобильное меню v4.7: капсулы как на десктопе, скролл, отступ под шапку ── */
282.hdq-mob {
283position: fixed !important;
284inset: 0 !important;
285z-index: 499 !important;
286background: #FBFAF8 !important;
287display: none;
288flex-direction: column !important;
289justify-content: flex-start !important;
290height: 100vh;
291height: 100dvh;
292overflow-y: auto !important;
293-webkit-overflow-scrolling: touch;
294overscroll-behavior: contain;
295padding: 96px 16px calc(24px + env(safe-area-inset-bottom)) !important;
296opacity: 0;
297pointer-events: none;
298transition: opacity .35s cubic-bezier(.16, 1, .3, 1);
299font-family: 'Manrope', system-ui, -apple-system, sans-serif !important
300}
301.hdq-mob.hdq-open {
302opacity: 1;
303pointer-events: all
304}
305.hdq-mobl {
306display: flex !important;
307flex-direction: column !important;
308gap: 4px !important
309}
310.hdq-mobl a {
311display: flex !important;
312align-items: center !important;
313padding: 15px 22px !important;
314border-radius: 100px !important;
315font-size: 17px !important;
316font-weight: 500 !important;
317letter-spacing: -.02em !important;
318line-height: 1.2 !important;
319color: #5A5A5F !important;
320background: transparent !important;
321border: none !important;
322transition: background .3s, color .3s
323}
324.hdq-mobl a:active {
325background: #F2F0EC !important;
326color: #0B0B0C !important
327}
328.hdq-mobl a.hdq-act {
329background: rgba(255, 176, 32, .14) !important;
330color: #FF9500 !important;
331font-weight: 600 !important
332}
333.hdq-mobs {
334height: 1px !important;
335background: rgba(11, 11, 12, .08) !important;
336margin: 10px 22px !important
337}
338.hdq-mobf {
339margin-top: auto !important;
340padding-top: 28px !important;
341display: flex !important;
342flex-direction: column !important;
343gap: 14px !important
344}
345.hdq-mobtel {
346font-size: 24px !important;
347font-weight: 800 !important;
348letter-spacing: -.035em !important;
349color: #0B0B0C !important;
350padding: 0 22px !important
351}
352.hdq-mobf .hdq-b {
353width: 100% !important
354}
355@media (max-width: 900px) {
356.hdq-nm, .hdq-ntel {
357display: none !important
358}
359.hdq-ne .hdq-b {
360display: none !important
361}
362.hdq-bg {
363display: flex
364}
365.hdq-mob {
366display: flex
367}
368.hdq-sp {
369height: 78px
370}
371}
372</style> <div class="hdq-sp" id="hdqSp"></div> <nav class="hdq-nav" id="hdqNav"> <div class="hdq-nb"> <a href="https://modulniye-doma.ru/" class="hdq-lg" aria-label="Кантри Хаус — модульные дома"> <img class="hdq-lgd" src="https://static.tildacdn.com/tild3538-3664-4439-b161-623331323464/CH-gorizontalnyy-na-.svg" alt="Кантри Хаус — модульные дома и бани" width="1918" height="242"> <img class="hdq-lgl" src="https://static.tildacdn.com/tild6166-6531-4539-a530-323661626563/CH-gorizontalnyy-na-.svg" alt="" aria-hidden="true" width="1918" height="242"> </a> <div class="hdq-nm"> <a href="https://modulniye-doma.ru/proekti">Проекты</a> <a href="https://modulniye-doma.ru/nalichie">В наличии</a> <a href="https://modulniye-doma.ru/tourism">Базы отдыха</a> <a href="https://modulniye-doma.ru/production">Производство</a> <a href="https://modulniye-doma.ru/ipoteka">Ипотека</a> <a href="#faq" class="hdq-faq">Вопросы</a> <a href="https://modulniye-doma.ru/news">Блог</a> </div> <div class="hdq-ne"> <a href="tel:+79219679674" class="hdq-ntel">+7 921 967-96-74</a> <a href="#cta" class="hdq-b hdq-bam hdq-bsm hdq-cta"> <span>Заявка</span> </a> <button class="hdq-bg" id="hdqBg" aria-label="Меню" aria-expanded="false" aria-controls="hdqMob"> <i></i> </button> </div> </div> </nav> <div class="hdq-mob" id="hdqMob"> <div class="hdq-mobl"> <a href="https://modulniye-doma.ru/proekti">Проекты</a> <a href="https://modulniye-doma.ru/nalichie">В наличии</a> <a href="https://modulniye-doma.ru/tourism">Базы отдыха</a> <a href="https://modulniye-doma.ru/production">Производство</a> <a href="https://modulniye-doma.ru/ipoteka">Ипотека</a> <a href="#faq" class="hdq-faq">Вопросы</a> <a href="https://modulniye-doma.ru/news">Блог</a> <div class="hdq-mobs"></div> <a href="https://modulniye-doma.ru/#video">Видео</a> <a href="https://modulniye-doma.ru/garantii">Гарантии</a> </div> <div class="hdq-mobf"> <a href="tel:+79219679674" class="hdq-mobtel">+7 921 967-96-74</a> <a href="#cta" class="hdq-b hdq-bam hdq-blg hdq-cta"> <span>Оставить заявку</span> </a> </div> </div> 
372<script>
373(function() {
374var nav = document.getElementById('hdqNav'),
375bg = document.getElementById('hdqBg'),
376mob = document.getElementById('hdqMob'),
377sp = document.getElementById('hdqSp'),
378base = 'https://modulniye-doma.ru/#';
379/* Умные ссылки: якорь главной → локальный, если он есть на этой странице */
380var all = document.querySelectorAll('.hdq-nav a,.hdq-mob a');
381for (var i = 0; i < all.length; i++) {
382var h = all[i].getAttribute('href') || '';
383if (h.indexOf(base) === 0) {
384var id = h.slice(base.length);
385if (id && document.getElementById(id))
386all[i].setAttribute('href', '#' + id);
387}
388}
389if (!document.getElementById('faq')) {
390var fq = document.querySelectorAll('.hdq-faq');
391for (var j = 0; j < fq.length; j++)
392fq[j].setAttribute('href', 'https://modulniye-doma.ru/faqs');
393}
394if (!document.getElementById('cta')) {
395var ct = document.querySelectorAll('.hdq-cta');
396for (var k = 0; k < ct.length; k++)
397ct[k].setAttribute('href', '#form');
398}
399/* Активный пункт по адресу страницы (десктоп и мобильный) */
400try {
401var path = location.pathname.replace(/\/$/, '');
402if (path) {
403var lk = document.querySelectorAll('.hdq-nm a,.hdq-mobl a');
404for (var q = 0; q < lk.length; q++) {
405var u = lk[q].getAttribute('href') || '';
406if (u.indexOf('http') === 0) {
407try {
408if (new URL(u).pathname.replace(/\/$/, '') === path)
409lk[q].classList.add('hdq-act');
410} catch (e) {}
411}
412}
413}
414} catch (e) {}
415/* Определение тёмной страницы */
416function isDark() {
417if (document.querySelector('.hdq-light'))
418return false;
419try {
420if (getComputedStyle(document.documentElement).getPropertyValue('--ink').trim())
421return true;
422} catch (e) {}
423if (document.querySelector('[class*="hero"],.hbox'))
424return true;
425var recs = document.querySelectorAll('.t-rec');
426for (var i = 0; i < recs.length; i++) {
427if (recs[i].contains(nav))
428continue;
429var st = getComputedStyle(recs[i]);
430if (st.backgroundImage && st.backgroundImage !== 'none')
431return true;
432var m = (st.backgroundColor || '').match(/rgba?\(([^)]+)\)/);
433if (m) {
434var p = m[1].split(',').map(parseFloat);
435if ((p.length < 4 || p[3] > 0.5)) {
436var lum = 0.299 * p[0] + 0.587 * p[1] + 0.114 * p[2];
437return lum < 110;
438}
439}
440break;
441}
442return false;
443}
444var dark = false;
445function byScroll() {
446if (!nav || !dark)
447return;
448if (mob && mob.classList.contains('hdq-open'))
449return;
450nav.classList.toggle('hdq-on', window.scrollY > window.innerHeight * 0.6);
451}
452function apply() {
453dark = isDark();
454if (sp)
455sp.style.display = dark ? 'none' : '';
456if (nav) {
457if (!dark) {
458nav.classList.add('hdq-on');
459nav.removeAttribute('data-hdq-scroll');
460} else if (!nav.getAttribute('data-hdq-scroll')) {
461nav.setAttribute('data-hdq-scroll', '1');
462byScroll();
463addEventListener('scroll', byScroll, {
464passive: true
465});
466}
467}
468if (nav && nav.closest) {
469var rec = nav.closest('.t-rec');
470if (rec) {
471rec.style.paddingTop = '0';
472rec.style.paddingBottom = '0';
473rec.style.marginTop = '0';
474rec.style.marginBottom = '0';
475var in123 = rec.querySelector('.t123');
476if (in123) {
477in123.style.paddingTop = '0';
478in123.style.paddingBottom = '0';
479in123.style.marginTop = '0';
480in123.style.marginBottom = '0';
481}
482}
483}
484}
485apply();
486document.addEventListener('DOMContentLoaded', apply);
487addEventListener('load', apply);
488setTimeout(apply, 400);
489/* Бургер v4.7: при открытии капсула светлая; при закрытии — по скроллу */
490if (bg && mob) {
491var open = function() {
492bg.classList.add('hdq-x');
493mob.classList.add('hdq-open');
494bg.setAttribute('aria-expanded', 'true');
495if (nav)
496nav.classList.add('hdq-on');
497document.body.style.overflow = 'hidden';
498mob.scrollTop = 0;
499};
500var close = function() {
501bg.classList.remove('hdq-x');
502mob.classList.remove('hdq-open');
503bg.setAttribute('aria-expanded', 'false');
504document.body.style.overflow = '';
505byScroll();
506};
507bg.addEventListener('click', function() {
508mob.classList.contains('hdq-open') ? close() : open();
509});
510var ml = mob.querySelectorAll('a');
511for (var m = 0; m < ml.length; m++)
512ml[m].addEventListener('click', close);
513document.addEventListener('keydown', function(e) {
514if (e.key === 'Escape')
515close();
516});
517addEventListener('resize', function() {
518if (innerWidth > 900 && mob.classList.contains('hdq-open'))
519close();
520});
521}
522})();
523</script>
523 <!-- nominify end --> </div> </div> </div> </div> <div id="rec3250920301" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ХЕДЕР-патч · дедупликатор приёмщиков форм · v1.1 · 23.08.2026
524v1.1: тест 15:17 показал живой дубль на форме калькулятора — v1.0 имел два
525слепых пятна: волны кончались на 8 с (99 ретраит перенос каждые 1,5 с до
526успеха и мог перенести позже), а страховка на submit не срабатывала (Тильда
527шлёт по клику через XHR без submit-события). Добавлены MutationObserver на
528появление скрытых полей (с дебаунсом 120 мс) и перехват КЛИКА по кнопкам
529отправки (button[type=submit], .t-submit, .fsb) capture-фазой.
530ПРОБЛЕМА: блок 99 (v8, на каждой странице) переносит formservices[] в форму
531zayavka-glavnaya жадным селектором — со ВСЕХ тильдовских форм страницы.
532Сервисных форм две (хедерный попап #form + донор BF502N), у обеих одна пара
533приёмщиков → в форму вкладываются Email, Telegram, Email, Telegram, и каждый
534лид уходит дважды в почту и телеграм (лид #8622095583 — образец симптома).
535РЕШЕНИЕ: сквозной дедупликатор в ХЕДЕРЕ — после переноса удаляет повторные
536formservices[] с одинаковым value во ВСЕХ формах страницы. Галочки сервисов
537не трогаются, хедерная форма остаётся с письмами (она — запасной ход для
538страниц без #cta). Идемпотентен, работает волнами (99 ретраит через 1,5 с)
539и страхуется в момент сабмита.
540КУДА: в самый конец кода страницы ХЕДЕР, после существующих скриптов.
541ПОСЛЕ ВСТАВКИ: «Опубликовать» на самой странице ХЕДЕР (правки сквозных
542не уезжают в бой без явной публикации) → тестовая заявка → в карточке лида
543«Интеграции»: Email, Telegram по ОДНОМУ разу.
544НА БУДУЩЕЕ: при проходе «подвал 2.0» поднять 99 до v9 (seen-set прямо в
545переносе, сниппет в хендовере 23.08) — тогда этот патч станет страховкой,
546а не лекарством; убирать его не нужно. --> 
546<script>
547(function () {
548  function dedupForm(f) {
549    var ins = f.querySelectorAll('input[name="formservices[]"]');
550    if (ins.length < 2) return 0;
551    var seen = {}, removed = 0;
552    for (var i = 0; i < ins.length; i++) {
553      var v = ins[i].value;
554      if (seen[v]) { ins[i].parentNode.removeChild(ins[i]); removed++; }
555      else seen[v] = 1;
556    }
557    return removed;
558  }
559  function sweep() {
560    var forms = document.querySelectorAll('form'), total = 0;
561    for (var i = 0; i < forms.length; i++) total += dedupForm(forms[i]);
562    if (total) try { console.log('CH: дубли приёмщиков убраны — ' + total + ' шт.'); } catch (e) {}
563  }
564  /* 1) стартовые волны */
565  var delays = [0, 800, 2200, 4000, 8000];
566  for (var i = 0; i < delays.length; i++) setTimeout(sweep, delays[i]);
567  /* 2) наблюдатель: 99 может перенести приёмщики в любой момент (ретрай 1,5 с
568        до успеха) — ловим само появление скрытых полей, с дебаунсом */
569  try {
570    var tmr = null;
571    var mo = new MutationObserver(function () {
572      if (tmr) clearTimeout(tmr);
573      tmr = setTimeout(sweep, 120);
574    });
575    mo.observe(document.body, { childList: true, subtree: true });
576  } catch (e) { setInterval(sweep, 2500); }
577  /* 3) страховка на отправке: Тильда шлёт по КЛИКУ через XHR, событие submit
578        может не диспатчиться — чистим форму в момент клика по кнопке отправки */
579  document.addEventListener('click', function (e) {
580    var b = e.target && e.target.closest
581      ? e.target.closest('button[type="submit"], .t-submit, .t-form__submit, .fsb')
582      : null;
583    if (!b) return;
584    var f = b.closest ? b.closest('form') : null;
585    if (f) dedupForm(f);
586  }, true);
587  document.addEventListener('submit', function (e) {
588    if (e.target && e.target.tagName === 'FORM') dedupForm(e.target);
589  }, true);
590})();
591</script>
591 <!-- nominify end --> </div> </div> </div> </div> <div id="rec869710421" class="r t-rec uc-no-scale" style=" " data-animationappear="off" data-record-type="702"> <!-- T702 --> <div class="t702"> <div
592class="t-popup" data-tooltip-hook="#form" data-track-popup='/tilda/popup/rec869710421/opened' role="dialog"
593aria-modal="true"
594tabindex="-1"
595aria-label="Оставить заявку" style="background-color: rgba(11,11,12,0.60);"> <div class="t-popup__close t-popup__block-close"> <button
596type="button"
597class="t-popup__close-wrapper t-popup__block-close-button"
598aria-label="Закрыть диалоговое окно"> <svg role="presentation" class="t-popup__close-icon" width="23px" height="23px" viewBox="0 0 23 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g stroke="none" stroke-width="1" fill="#ffffff" fill-rule="evenodd"> <rect transform="translate(11.313708, 11.313708) rotate(-45.000000) translate(-11.313708, -11.313708) " x="10.3137085" y="-3.6862915" width="2" height="30"></rect> <rect transform="translate(11.313708, 11.313708) rotate(-315.000000) translate(-11.313708, -11.313708) " x="10.3137085" y="-3.6862915" width="2" height="30"></rect> </g> </svg> </button> </div> <style>@media screen and (max-width:560px){#rec869710421 .t-popup__close-icon g{fill:#ffffff !important;}}</style> <style>#rec869710421 .t-popup__container{border-radius:32px;overflow:hidden;}</style> <div class="t-popup__container t-width t-width_8" data-popup-type="702"> <div class="t702__wrapper"> <div class="t702__text-wrapper t-align_center"> <div class="t702__title t-title t-title_xxs" id="popuptitle_869710421">Оставить заявку</div> <div class="t702__descr t-descr t-descr_xs">Ответим в течение рабочего дня</div> </div> <form
599id="form869710421" name='form869710421' role="form" action='' method='POST' data-formactiontype="2" data-inputbox=".t-input-group" class="t-form js-form-proccess t-form_inputs-total_6 " data-success-callback="t702_onSuccess"> <input type="hidden" name="formservices[]" value="7f106144490ea807aeda1f13557c8464" class="js-formaction-services"> <input type="hidden" name="formservices[]" value="30a149d1c555cdcebb50510ae6a0b847" class="js-formaction-services"> <input type="hidden" name="tildaspec-formname" tabindex="-1" value="Заявки на строительство"> <!-- @classes t-title t-text t-btn --> <div class="js-successbox t-form__successbox t-text t-text_md"
600aria-live="polite"
601style="display:none;" data-success-message="Спасибо! Данные успешно отправлены!"></div> <div
602class="t-form__inputsbox
603t-form__inputsbox_vertical-form t-form__inputsbox_inrow
604"> <div
605class="t-input-group t-input-group_nm " data-input-lid="2509215262380" data-field-type="nm" data-field-name="Name"> <div class="t-input-block " style="border-radius:30px;"> <input
606type="text"
607autocomplete="name"
608name="Name"
609id="input_2509215262380"
610class="t-input js-tilda-rule"
611value=""
612placeholder="Ваше имя*" data-tilda-req="1" aria-required="true" data-tilda-rule="name"
613aria-describedby="error_2509215262380"
614style="color:#0b0b0c;border:1px solid #f2f0ec;background-color:#f2f0ec;border-radius:30px;"> </div> <div class="t-input-error" aria-live="polite" id="error_2509215262380"></div> </div> <div
615class="t-input-group t-input-group_ph " data-input-lid="2509215262381" data-field-async="true" data-field-type="ph" data-field-name="Phone"> <div class="t-input-block " style="border-radius:30px;"> <input
616type="tel"
617autocomplete="tel"
618name="Phone"
619id="input_2509215262381" data-phonemask-init="no" data-phonemask-id="869710421" data-phonemask-lid="2509215262381" data-phonemask-maskcountry="RU" class="t-input js-phonemask-input js-tilda-rule"
620value=""
621placeholder="+1(000)000-0000" data-tilda-req="1" aria-required="true" aria-describedby="error_2509215262381"
622style="color:#0b0b0c;border:1px solid #f2f0ec;background-color:#f2f0ec;border-radius:30px;"> 
622<script type="text/javascript">t_onReady(function() {t_onFuncLoad('t_loadJsFile',function() {t_loadJsFile('https://static.tildacdn.com/js/tilda-phone-mask-1.1.min.js',function() {t_onFuncLoad('t_form_phonemask_load',function() {var phoneMasks=document.querySelectorAll('#rec869710421 [data-phonemask-lid="2509215262381"]');t_form_phonemask_load(phoneMasks);});})})});</script>
622 </div> <div class="t-input-error" aria-live="polite" id="error_2509215262381"></div> </div> <div
623class="t-input-group t-input-group_in " data-input-lid="2509215262382" data-field-type="in" data-field-name="Регион"> <div class="t-input-block " style="border-radius:30px;"> <input
624type="text"
625name="Регион"
626id="input_2509215262382"
627class="t-input js-tilda-rule"
628value=""
629placeholder="Планируемое местоположение для строительства*" data-tilda-req="1" aria-required="true"
630aria-describedby="error_2509215262382"
631style="color:#0b0b0c;border:1px solid #f2f0ec;background-color:#f2f0ec;border-radius:30px;"> </div> <div class="t-input-error" aria-live="polite" id="error_2509215262382"></div> </div> <div
632class="t-input-group t-input-group_ta " data-input-lid="1740122867900" data-field-type="ta" data-field-name="Габариты"> <div class="t-input-block " style="border-radius:30px;"> <textarea
633name="Габариты"
634id="input_1740122867900"
635class="t-input js-tilda-rule"
636placeholder="Планируемые габариты дома (и ваши пожелания)*" data-tilda-req="1" aria-required="true" aria-describedby="error_1740122867900"
637style="color:#0b0b0c;border:1px solid #f2f0ec;background-color:#f2f0ec;border-radius:30px;height:136px;"
638rows="4"></textarea> </div> <div class="t-input-error" aria-live="polite" id="error_1740122867900"></div> </div> <div
639class="t-input-group t-input-group_in " data-input-lid="1782401738142" data-field-type="in" data-field-name="Форма оплаты"> <div class="t-input-block " style="border-radius:30px;"> <input
640type="text"
641name="Форма оплаты"
642id="input_1782401738142"
643class="t-input js-tilda-rule"
644value=""
645placeholder="Форма оплаты" data-tilda-req="1" aria-required="true"
646aria-describedby="error_1782401738142"
647style="color:#0b0b0c;border:1px solid #f2f0ec;background-color:#f2f0ec;border-radius:30px;"> </div> <div class="t-input-error" aria-live="polite" id="error_1782401738142"></div> </div> <div
648class="t-input-group t-input-group_cb " data-input-lid="1782379431212" data-field-type="cb" data-field-name="Checkbox"> <div class="t-input-block " style="border-radius:30px;"> <label
649class="t-checkbox__control t-checkbox__control_flex t-text t-text_xs"
650style=""> <input
651type="checkbox"
652name="Checkbox"
653value="yes"
654class="t-checkbox js-tilda-rule" data-tilda-req="1" aria-required="true"> <div
655class="t-checkbox__indicator"
656style="border-color:#ffb020"></div> <span>Я даю согласие на обработку персональных данных</span></label> <style>#rec869710421 .t-checkbox__indicator:after{border-color:#ffb020;}</style> </div> <div class="t-input-error" aria-live="polite" id="error_1782379431212"></div> </div> <div class="t-form__errorbox-middle"> <!--noindex--> <div
657class="js-errorbox-all t-form__errorbox-wrapper"
658style="display:none;" data-nosnippet
659tabindex="-1"
660aria-label="Ошибки при заполнении формы"> <ul
661role="list"
662class="t-form__errorbox-text t-text t-text_md"> <li class="t-form__errorbox-item js-rule-error js-rule-error-all"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-req"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-email"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-name"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-phone"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-minlength"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-string"></li> </ul> </div> <!--/noindex--> </div> <div class="t-form__submit"> <button
663class="t-submit t-btnflex t-btnflex_type_submit t-btnflex_md"
664type="submit"><span class="t-btnflex__text">Отправить</span> <style>#rec869710421 .t-btnflex.t-btnflex_type_submit{color:#ffffff;background-color:#0b0b0c;--border-width:0px;border-style:none !important;border-radius:30px;box-shadow:none !important;font-weight:400;font-size:15px;transition-duration:0.2s;transition-property:background-color,color,border-color,box-shadow,opacity,transform,gap;transition-timing-function:ease-in-out;}@media (hover:hover){#rec869710421 .t-btnflex.t-btnflex_type_submit:not(.t-animate_no-hover):hover{color:#0b0b0c !important;background-color:#ffb020 !important;}#rec869710421 .t-btnflex.t-btnflex_type_submit:not(.t-animate_no-hover):focus-visible{color:#0b0b0c !important;background-color:#ffb020 !important;}}</style></button> </div> </div> <div class="t-form__errorbox-bottom"> <!--noindex--> <div
665class="js-errorbox-all t-form__errorbox-wrapper"
666style="display:none;" data-nosnippet
667tabindex="-1"
668aria-label="Ошибки при заполнении формы"> <ul
669role="list"
670class="t-form__errorbox-text t-text t-text_md"> <li class="t-form__errorbox-item js-rule-error js-rule-error-all"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-req"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-email"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-name"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-phone"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-minlength"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-string"></li> </ul> </div> <!--/noindex--> </div> </form> <style>#rec869710421 input::-webkit-input-placeholder{color:#0b0b0c;opacity:0.5;}#rec869710421 input::-moz-placeholder{color:#0b0b0c;opacity:0.5;}#rec869710421 input:-moz-placeholder{color:#0b0b0c;opacity:0.5;}#rec869710421 input:-ms-input-placeholder{color:#0b0b0c;opacity:0.5;}#rec869710421 textarea::-webkit-input-placeholder{color:#0b0b0c;opacity:0.5;}#rec869710421 textarea::-moz-placeholder{color:#0b0b0c;opacity:0.5;}#rec869710421 textarea:-moz-placeholder{color:#0b0b0c;opacity:0.5;}#rec869710421 textarea:-ms-input-placeholder{color:#0b0b0c;opacity:0.5;}</style> <div class="t702__form-bottom-text t-text t-text_xs t-align_center">Нажимая на кнопку вы даете согласие на обработку <a href="/privacy" style="color: rgb(238, 167, 30);">персональных данных</a></div> </div> </div> </div> </div> 
670<script>t_onReady(function() {t_onFuncLoad('t702_initPopup',function() {t702_initPopup('869710421');});});</script>
670 <style>#rec869710421 .t702__title{font-size:25px;color:#0b0b0c;}#rec869710421 .t702__descr{font-size:13px;color:#5a5a5f;}</style> </div> <div id="rec922044745" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!--Библиотека VORON--><!--Автоскейл стандартных блоков https://voron-dev.ru/scale-standard--> 
670<script>
671(function() {
672    const config = {
673        minWidth: 420,
674        maxWidth: 5000,
675        defaultWidth: 1160,
676        breakpoints: [],
677        scaleCorrection: 0.94,
678      excludedBlocks: ['396', '131', '1093', '453', '123']
679    };
680
681    function stautoScale() {
682        const onlyModeBlocks = Array.from(document.querySelectorAll('.uc-only-scale'));
683        let blocks;
684
685        if (onlyModeBlocks.length > 0) blocks = onlyModeBlocks;
686        else blocks = Array.from(document.querySelectorAll('.t-rec')).filter(block => !config.excludedBlocks.includes(block.getAttribute('data-record-type')));
687
688        const windowWidth = window.innerWidth;
689        let scaleRatio = 1;
690
691        if (windowWidth >= config.minWidth && windowWidth <= config.maxWidth) {
692            let baseWidth = config.defaultWidth;
693
694            for (let i = 0; i < config.breakpoints.length; i++) {
695                if (windowWidth < config.breakpoints[i]) {
696                    baseWidth = i === 0 ? config.minWidth : config.breakpoints[i - 1];
697                    break;
698                }
699            }
700
701            scaleRatio = (windowWidth / baseWidth) * config.scaleCorrection;
702        }
703
704        document.documentElement.style.setProperty('--zoom-factor', scaleRatio);
705
706        blocks.forEach(block => {
707            if (block.hasAttribute('data-no-scale') || block.classList.contains('uc-no-scale')) {
708                return;
709            }
710            block.style.zoom = scaleRatio;
711        });
712    }
713
714    stautoScale();
715    document.fonts.ready.then(() => {
716        stautoScale();
717    });
718
719    let resizeTimeout;
720    window.addEventListener('resize', () => {
721        clearTimeout(resizeTimeout);
722        resizeTimeout = setTimeout(() => {
723            stautoScale();
724        }, 250);
725    });
726
727    document.addEventListener('DOMContentLoaded', () => {
728        stautoScale();
729    });
730})();
731</script>
731 <style>
732    #allrecords {
733        overflow: hidden
734    }
735    [style*="zoom: var(--zoom-factor)"] {
736        transform-origin: 0 0;
737    }
738    :root {
739    --zoom-factor: 1;
740    }.tn-atom.zero-active-link {
741    pointer-events: none;
742    opacity: 0.6;
743}
744</style> 
744<script>
745  document.addEventListener('tildaForm:afterSubmit', function (e) {
746    var formElem = e.target.closest('[data-elem-id="1730303748829"]');
747    if (formElem && typeof ym !== 'undefined') {
748      ym(52334545,'reachGoal','feedback_click')
749    }
750  });
751document.addEventListener("DOMContentLoaded", function () {
752
753    const menuLinks = document.querySelectorAll('#rec818818391 a[href^="/"]');
754    const currentPath = window.location.pathname;
755
756    menuLinks.forEach(link => {
757        const linkPath = link.getAttribute("href");
758
759        if (!linkPath) return;
760
761        if (linkPath === currentPath) {
762
763            // Класс на саму ссылку
764            link.classList.add("zero-active-link");
765
766            // И на её контейнер в Zero Block
767            const parentAtom = link.closest(".tn-atom");
768            if (parentAtom) {
769                parentAtom.classList.add("zero-active-link");
770            }
771        }
772    });
773});
774</script>
774 <!-- nominify end --> </div> </div> </div> </div> <div id="rec879072649" class="r t-rec" style=" " data-record-type="270"> <div class="t270"></div> 
774<script>t_onReady(function() {var hash=window.location.hash;t_onFuncLoad('t270_scroll',function() {t270_scroll(hash,-3);});setTimeout(function() {var curPath=window.location.pathname;var curFullPath=window.location.origin + curPath;var recs=document.querySelectorAll('.r');Array.prototype.forEach.call(recs,function(rec) {var selects='a[href^="#"]:not([href="#"]):not(.carousel-control):not(.t-carousel__control):not([href^="#price"]):not([href^="#submenu"]):not([href^="#popup"]):not([href*="#zeropopup"]):not([href*="#closepopup"]):not([href*="#closeallpopup"]):not([href^="#prodpopup"]):not([href^="#order"]):not([href^="#!"]):not([target="_blank"]),' +
775'a[href^="' + curPath + '#"]:not([href*="#!/tfeeds/"]):not([href*="#!/tproduct/"]):not([href*="#!/tab/"]):not([href*="#popup"]):not([href*="#zeropopup"]):not([href*="#closepopup"]):not([href*="#closeallpopup"]):not([target="_blank"]),' +
776'a[href^="' + curFullPath + '#"]:not([href*="#!/tfeeds/"]):not([href*="#!/tproduct/"]):not([href*="#!/tab/"]):not([href*="#popup"]):not([href*="#zeropopup"]):not([href*="#closepopup"]):not([href*="#closeallpopup"]):not([target="_blank"])';var elements=rec.querySelectorAll(selects);Array.prototype.forEach.call(elements,function(element) {element.addEventListener('click',function(event) {event.preventDefault();var hash=this.hash.trim();t_onFuncLoad('t270_scroll',function() {t270_scroll(hash,-3);});});});});if(document.querySelectorAll('.js-store').length>0||document.querySelectorAll('.js-feed').length>0) {t_onFuncLoad('t270_scroll',function() {t270_scroll(hash,-3,1);});}},500);setTimeout(function() {var hash=window.location.hash;if(hash&&document.querySelectorAll('a[name="' + hash.slice(1) + '"], div[id="' + hash.slice(1) + '"]').length>0) {if(window.isMobile) {t_onFuncLoad('t270_scroll',function() {t270_scroll(hash,0);});} else {t_onFuncLoad('t270_scroll',function() {t270_scroll(hash,0);});}}},1000);window.addEventListener('popstate',function() {var hash=window.location.hash;if(hash&&document.querySelectorAll('a[name="' + hash.slice(1) + '"], div[id="' + hash.slice(1) + '"]').length>0) {if(window.isMobile) {t_onFuncLoad('t270_scroll',function() {t270_scroll(hash,0);});} else {t_onFuncLoad('t270_scroll',function() {t270_scroll(hash,0);});}}});});</script>
776 </div> </header> <!--/header--> <div id="rec3328372901" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ═══ БЛОК 00 · СТИЛИ И ШРИФТ ═══
777     Вставить ПЕРВЫМ блоком T123 на странице.
778     Один раз на всю страницу — в других блоках стили не дублировать. --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Manrope:wght@200;300;400;500;600;700;800&display=swap" rel="stylesheet"> <style>
779
780*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
781html{scroll-behavior:smooth;font-size:16px}
782a{color:inherit;text-decoration:none}
783img{display:block;max-width:100%}
784button{font-family:inherit;border:none;cursor:pointer;background:none;color:inherit}
785ul{list-style:none}
786
787:root{
788  --ink:#0B0B0C;
789  --ink2:#141416;
790  --ink3:#1D1D20;
791  --amber:#FFB020;
792  --amber2:#FF9500;
793  --amber3:#FFC95C;
794  --paper:#FBFAF8;
795  --paper2:#F2F0EC;
796  --paper3:#E8E5DF;
797  --white:#fff;
798  --t1:#0B0B0C;
799  --t2:#5A5A5F;
800  --t3:#95959B;
801  --line:rgba(11,11,12,.08);
802  --lineL:rgba(255,255,255,.09);
803  --R:32px;
804  --Rs:22px;
805  --Rp:100px;
806  --sp:cubic-bezier(.34,1.4,.5,1);
807  --ez:cubic-bezier(.16,1,.3,1);
808}
809
810body{
811  font-family:'Manrope',system-ui,sans-serif;
812  background:var(--paper);color:var(--t1);
813  overflow-x:hidden;-webkit-font-smoothing:antialiased;
814  letter-spacing:-.015em;
815}
816
817/* ══ TYPE ══ */
818.d1{font-size:clamp(44px,7.4vw,124px);font-weight:700;line-height:.94;letter-spacing:-.055em}
819.d2{font-size:clamp(34px,5.2vw,82px);font-weight:700;line-height:1;letter-spacing:-.048em}
820.d3{font-size:clamp(26px,3.2vw,48px);font-weight:700;line-height:1.06;letter-spacing:-.04em}
821.h4{font-size:clamp(17px,1.5vw,21px);font-weight:600;line-height:1.25;letter-spacing:-.025em}
822.lead{font-size:clamp(15px,1.25vw,18px);font-weight:300;line-height:1.62;color:var(--t2)}
823.bd{font-size:14.5px;font-weight:300;line-height:1.62;color:var(--t2)}
824.am{color:var(--amber2)}
825.grad{background:linear-gradient(105deg,var(--amber2) 0%,var(--amber) 45%,var(--amber3) 100%);-webkit-background-clip:text;background-clip:text;color:transparent}
826
827.pill{
828  display:inline-flex;align-items:center;gap:8px;
829  padding:8px 18px;border-radius:var(--Rp);
830  background:rgba(255,176,32,.12);border:1px solid rgba(255,176,32,.24);
831  font-size:12px;font-weight:600;letter-spacing:.02em;color:var(--amber2);
832  margin-bottom:22px;
833}
834.pill i{width:6px;height:6px;border-radius:50%;background:var(--amber);animation:blip 2.4s ease-in-out infinite}
835@keyframes blip{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.8)}}
836.pill.gl{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.18);color:#fff;backdrop-filter:blur(18px)}
837
838/* ══ LAYOUT ══ */
839.wrap{max-width:1360px;margin:0 auto;padding:0 clamp(16px,3.4vw,44px)}
840.sec{padding:clamp(56px,9vh,132px) 0}
841
842/* ══ BUTTONS ══ */
843.b{
844  display:inline-flex;align-items:center;justify-content:center;gap:10px;
845  padding:17px 34px;border-radius:var(--Rp);
846  font-size:14px;font-weight:600;letter-spacing:-.01em;white-space:nowrap;
847  position:relative;overflow:hidden;isolation:isolate;
848  transition:transform .5s var(--sp),box-shadow .4s var(--ez),color .3s;
849}
850.b::before{
851  content:'';position:absolute;inset:0;z-index:-1;border-radius:inherit;
852  transform:scale(0);transition:transform .55s var(--ez);
853}
854.b:hover{transform:translateY(-3px) scale(1.02)}
855.b-am{background:var(--amber);color:var(--ink);box-shadow:0 6px 24px rgba(255,176,32,.34)}
856.b-am::before{background:var(--ink)}
857.b-am:hover{color:#fff;box-shadow:0 14px 40px rgba(11,11,12,.28)}
858.b-am:hover::before{transform:scale(1.6)}
859.b-ink{background:var(--ink);color:#fff}
860.b-ink::before{background:var(--amber)}
861.b-ink:hover{color:var(--ink);box-shadow:0 14px 40px rgba(255,176,32,.34)}
862.b-ink:hover::before{transform:scale(1.6)}
863.b-gl{background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.2);backdrop-filter:blur(20px)}
864.b-gl::before{background:#fff}
865.b-gl:hover{color:var(--ink)}
866.b-gl:hover::before{transform:scale(1.6)}
867.b-out{background:transparent;color:var(--ink);border:1.5px solid var(--line)}
868.b-out::before{background:var(--ink)}
869.b-out:hover{color:#fff;border-color:var(--ink)}
870.b-out:hover::before{transform:scale(1.6)}
871.b-lg{padding:21px 44px;font-size:15px}
872.b-sm{padding:12px 24px;font-size:12.5px}
873.b span{position:relative;z-index:1}
874
875.arw{
876  width:44px;height:44px;border-radius:var(--Rp);flex-shrink:0;
877  display:inline-flex;align-items:center;justify-content:center;
878  background:var(--ink);color:#fff;
879  transition:transform .5s var(--sp),background .3s;
880}
881.arw svg{width:17px;height:17px;stroke:currentColor;fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;transition:transform .4s var(--ez)}
882a:hover>.arw,.arw:hover{background:var(--amber);color:var(--ink);transform:rotate(45deg) scale(1.08)}
883
884/* ══ NAV ══ */
885nav{position:fixed;top:0;left:0;right:0;z-index:500;padding:clamp(10px,1.4vw,18px) clamp(12px,2.4vw,28px);transition:padding .5s var(--ez)}
886.nb{
887  max-width:1360px;margin:0 auto;height:68px;padding:0 12px 0 22px;
888  display:flex;align-items:center;justify-content:space-between;gap:20px;
889  border-radius:var(--Rp);
890  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);
891  backdrop-filter:blur(24px) saturate(180%);
892  transition:all .5s var(--ez);
893}
894nav.on{padding-top:10px;padding-bottom:10px}
895nav.on .nb{background:rgba(251,250,248,.82);border-color:var(--line);box-shadow:0 8px 40px rgba(11,11,12,.09);height:62px}
896
897.nm{display:flex;gap:2px}
898.nm a{padding:9px 16px;border-radius:var(--Rp);font-size:13.5px;font-weight:500;color:rgba(255,255,255,.8);transition:all .3s var(--ez)}
899.nm a:hover{background:rgba(255,255,255,.14);color:#fff}
900nav.on .nm a{color:var(--t2)}
901nav.on .nm a:hover{background:var(--paper2);color:var(--ink)}
902.nm a.act{background:rgba(255,176,32,.18)!important;color:var(--amber)!important}
903nav.on .nm a.act{background:rgba(255,176,32,.14)!important;color:var(--amber2)!important}
904
905.ne{display:flex;align-items:center;gap:12px}
906.ntel{font-size:14.5px;font-weight:700;color:#fff;letter-spacing:-.02em;white-space:nowrap;transition:color .3s}
907.ntel:hover{color:var(--amber)}
908nav.on .ntel{color:var(--ink)}
909nav.on .ntel:hover{color:var(--amber2)}
910
911.bg{display:none;width:44px;height:44px;border-radius:var(--Rp);align-items:center;justify-content:center;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18)}
912nav.on .bg{background:var(--paper2);border-color:var(--line)}
913
914/* Только подчёркивания: color:inherit!important здесь НЕЛЬЗЯ — ID-селектор
915   перебивает .nm a/.ntel и красит меню шапки в тёмный на тёмном */
916#allrecords a{text-decoration:none!important}
917body,#allrecords{font-family:'Manrope',system-ui,-apple-system,sans-serif!important}
918
919section[id]{scroll-margin-top:90px}
920</style> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328373001" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ═══ БЛОК 00b · СТИЛИ, ЧАСТЬ 2 ═══ Вставить сразу после блока 00. --> <style>
921
922.bg i{display:block;position:relative;width:18px;height:2px;background:#fff;border-radius:2px;transition:all .4s var(--ez)}
923.bg i::before,.bg i::after{content:'';position:absolute;
923left:0;width:18px;height:2px;background:#fff;border-radius:2px;transition:all .4s var(--ez)}
924.bg i::before{top:-6px}.bg i::after{top:6px}
925nav.on .bg i,nav.on .bg i::before,nav.on .bg i::after{background:var(--ink)}
926.bg.x i{background:transparent!important}
927.bg.x i::before{top:0;transform:rotate(45deg)}
928.bg.x i::after{top:0;transform:rotate(-45deg)}
929
930.mob{
931  position:fixed;inset:0;z-index:499;background:var(--paper);
932  display:none;flex-direction:column;justify-content:center;padding:0 28px;
933  opacity:0;pointer-events:none;transition:opacity .4s var(--ez);
934}
935.mob.open{opacity:1;pointer-events:all}
936.mob a{display:flex;align-items:center;justify-content:space-between;padding:18px 0;border-bottom:1px solid var(--line);font-size:30px;font-weight:700;letter-spacing:-.04em}
937.mob a .arw{width:36px;height:36px}
938.mob-f{margin-top:32px;display:flex;flex-direction:column;gap:12px}
939.mob-tel{font-size:26px!important;font-weight:800!important;color:var(--amber2)!important;border:none!important;padding:0!important}
940
941/* ══ HERO ══ */
942.hero{position:relative;min-height:100svh;display:flex;flex-direction:column;padding:0 clamp(12px,2.4vw,28px) clamp(12px,2.4vw,28px);background:var(--ink)}
943.hbox{
944  position:relative;flex:1;border-radius:clamp(26px,3.4vw,46px);overflow:hidden;
945  display:flex;flex-direction:column;justify-content:flex-end;
946  margin-top:clamp(76px,8.4vh,98px);
947}
948.hbox img{position:absolute;inset:0;width:100%;height:112%;object-fit:cover;will-change:transform}
949.hbox::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(11,11,12,.5) 0%,rgba(11,11,12,.1) 30%,rgba(11,11,12,.28) 58%,rgba(11,11,12,.9) 100%)}
950.hin{position:relative;z-index:2;padding:clamp(24px,4vw,56px)}
951.hin .d1{color:#fff;max-width:15ch;margin-bottom:22px}
952.hsub{font-size:clamp(15px,1.4vw,19px);font-weight:300;line-height:1.55;color:rgba(255,255,255,.72);max-width:48ch;margin-bottom:32px}
953.hbtn{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
954
955/* stats bento */
956.hstats{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(8px,1vw,12px);margin-top:clamp(8px,1vw,12px)}
957.hs{
958  border-radius:clamp(18px,2.2vw,28px);padding:clamp(20px,2.4vw,30px);
959  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);
960  backdrop-filter:blur(24px);
961  display:flex;align-items:baseline;gap:14px;
962  transition:background .4s,transform .5s var(--sp);
963}
964.hs:hover{background:rgba(255,255,255,.09);transform:translateY(-4px)}
965.hs-n{font-size:clamp(32px,3.6vw,50px);font-weight:800;letter-spacing:-.05em;line-height:1;color:#fff}
966.hs-n sup{font-size:.42em;color:var(--amber);vertical-align:super}
967.hs-t{font-size:13.5px;font-weight:600;color:#fff;margin-bottom:2px}
968.hs-d{font-size:11.5px;font-weight:300;color:rgba(255,255,255,.44)}
969
970
971
972/* ════════ HERO — ГЕОМЕТРИЯ ════════ */
973.hbox{justify-content:flex-start;align-items:stretch;margin-top:clamp(74px,8.2vh,96px)}
974
975.hin{
976  position:relative;z-index:2;
977  display:flex;flex-direction:column;flex:1 1 auto;min-height:0;height:auto;
978  padding:clamp(20px,2.6vw,40px) clamp(22px,3.4vw,52px) clamp(22px,2.6vw,38px);
979}
980
981/* ── верхний блок: заголовок крупный и широкий ── */
982.h-top{max-width:min(1080px,88%);flex:0 0 auto}
983.hin .pill{margin-bottom:clamp(12px,1.6vh,20px)}
984.hin h1{
985  font-size:clamp(40px,6.6vw,108px);
986  line-height:.92;letter-spacing:-.05em;
987  margin-bottom:clamp(12px,1.6vh,20px);
988}
989.hin .hsub{
990  font-size:clamp(14px,1.15vw,17px);
991  max-width:52ch;margin-bottom:0;
992}
993
994/* ── средняя зона: основатель ── */
995.founder{
996  position:relative;flex:1 1 0;min-height:0;
997  display:flex;align-items:flex-end;gap:0;
998  margin:clamp(12px,2vh,26px) 0 clamp(14px,2vh,24px);
999  pointer-events:none;
1000}
1001.founder::before{
1002  content:'';position:absolute;left:0;bottom:-6%;
1003  width:clamp(200px,20vw,300px);height:82%;border-radius:50%;
1004  background:radial-gradient(ellipse at center,rgba(255,176,32,.20) 0%,rgba(255,176,32,.06) 46%,transparent 72%);
1005  filter:blur(30px);transform:translateX(-14%);
1006}
1007.founder > img{
1008  position:relative;z-index:1;
1009  height:100%;max-height:min(340px,38vh);width:auto;display:block;
1010  object-fit:contain;object-position:bottom left;flex:0 0 auto;
1011  filter:drop-shadow(0 20px 48px rgba(0,0,0,.55)) contrast(1.04) brightness(1.05);
1012}
1013.founder-card{
1014  position:relative;z-index:2;pointer-events:auto;flex:0 1 auto;
1015  display:flex;flex-direction:column;gap:4px;
1016  margin:0 0 clamp(6px,1.4vh,20px) clamp(-30px,-1.8vw,-14px);
1017  padding:13px 20px;border-radius:18px;
1018  background:rgba(11,11,12,.6);border:1px solid rgba(255,255,255,.15);
1019  backdrop-filter:blur(24px) saturate(170%);
1020  box-shadow:0 16px 44px rgba(0,0,0,.45);
1021  transition:transform .5s var(--sp),border-color .35s,background .35s;
1022}
1023.founder-card:hover{transform:translateY(-4px);border-color:rgba(255,176,32,.5);background:rgba(11,11,12,.74)}
1024.founder-role{display:flex;align-items:center;gap:7px;font-size:9px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--amber);white-space:nowrap}
1025.founder-role i{width:5px;height:5px;border-radius:50%;background:#3ECF6B;box-shadow:0 0 0 3px rgba(62,207,107,.22)}
1026.founder-nm{font-size:17.5px;font-weight:800;letter-spacing:-.035em;color:#fff;line-height:1.12;white-space:nowrap}
1027.founder-sub{font-size:11px;font-weight:300;color:rgba(255,255,255,.52);line-height:1.4;max-width:21ch}
1028
1029.hin .hbtn{flex:0 0 auto}
1030
1031/* ── ФИКС: подписи в статистике должны быть в столбик ── */
1032.hs-t,.hs-d{display:block}
1033.hs > span:last-child{display:flex;flex-direction:column;gap:2px}
1034.hs-d{margin-top:1px}
1035
1036/* ── короткие экраны ── */
1037
1038</style> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328373101" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ═══ БЛОК 00c · АДАПТИВ ═══ Вставить сразу после 00b. Медиазапросы всегда последними. --> <style>
1039@media(max-height:940px){
1040  .hin h1{font-size:clamp(38px,5.4vw,84px)}
1041  .founder > img{max-height:min(300px,34vh)}
1042}
1043@media(max-height:820px){
1044  .hbox{margin-top:clamp(70px,7.4vh,86px)}
1045  .hin{padding-top:18px;padding-bottom:18px}
1046  .hin h1{font-size:clamp(34px,4.4vw,66px)}
1047  .hin .hsub{font-size:14px;max-width:46ch}
1048  .founder{margin:10px 0 12px}
1049  .founder > img{max-height:min(250px,30vh)}
1050  .founder-card{padding:11px 16px;border-radius:15px}
1051  .founder-nm{font-size:16px}
1052  .founder-sub{font-size:10.5px}
1053  .hs{padding:clamp(13px,1.9vh,20px) clamp(16px,2vw,24px)}
1054  .hs-n{font-size:clamp(28px,3vw,42px)}
1055  .b-lg{padding:16px 32px;font-size:13.5px}
1056}
1057@media(max-height:700px){
1058  .hin h1{font-size:clamp(30px,3.6vw,52px)}
1059  .founder > img{max-height:min(200px,26vh)}
1060  .hs{padding:11px 18px}
1061  .hs-n{font-size:26px}
1062}
1063
1064/* ── планшет / мобайл ── */
1065@media(max-width:1100px){
1066  .h-top{max-width:100%}
1067  .hin h1{font-size:clamp(36px,5.6vw,64px)}
1068  .founder-sub{max-width:19ch}
1069}
1070@media(max-width:980px){
1071  .hin{height:auto;padding-bottom:16px}
1072  .founder{
1073    flex:0 0 auto;min-height:0;align-items:center;gap:15px;
1074    margin:20px 0 18px;
1075  }
1076  .founder::before{display:none}
1077  .founder > img{
1078    height:92px;width:92px;max-height:none;border-radius:100px;flex-shrink:0;
1079    object-fit:cover;object-position:50% 12%;
1080    padding:2.5px;background:linear-gradient(140deg,var(--amber),rgba(255,176,32,.3));
1081    filter:none;box-shadow:0 12px 32px rgba(0,0,0,.45);
1082  }
1083  .founder-card{
1084    margin:0;padding:0;background:transparent;border:none;
1085    backdrop-filter:none;box-shadow:none;
1086  }
1087  .founder-card:hover{transform:none;background:transparent;border-color:transparent}
1088  .founder-sub{max-width:30ch;font-size:11.5px}
1089  .hstats{gap:8px}
1090  .hs{padding:14px 18px}
1091  .hs-n{font-size:30px}
1092}
1093@media(max-width:640px){
1094  .hin h1{font-size:clamp(32px,8.6vw,44px)}
1095  .hin .hsub{font-size:13.5px}
1096}
1097
1098/* ══ MARQUEE ══ */
1099.mq{background:var(--ink);padding:18px 0;overflow:hidden;border-top:1px solid var(--lineL)}
1100/* padding-right равен gap: делает период анимации кратным, стык становится бесшовным */
1101.mq-t{display:flex;align-items:center;gap:52px;width:max-content;white-space:nowrap;animation:run 34s linear infinite;padding-right:52px}
1102@keyframes run{from{transform:translateX(0)}to{transform:translateX(-50%)}}
1103.mq-i{display:inline-flex;align-items:center;gap:52px;font-size:14px;font-weight:600;color:rgba(255,255,255,.42);letter-spacing:-.01em}
1104.mq-i::after{content:'';width:5px;height:5px;border-radius:50%;background:var(--amber)}
1105
1106/* ══ SECTION HEAD ══ */
1107.sh{margin-bottom:clamp(28px,4.5vh,52px)}
1108.sh-r{display:flex;justify-content:space-between;align-items:flex-end;gap:32px;flex-wrap:wrap}
1109.sh.c{text-align:center}
1110
1111/* ══ BENTO CATALOG ══ */
1112.bento{display:grid;grid-template-columns:repeat(12,1fr);gap:clamp(10px,1.1vw,14px)}
1113.bc{
1114  position:relative;border-radius:clamp(20px,2.4vw,30px);overflow:hidden;background:var(--ink2);
1115  min-height:280px;display:flex;flex-direction:column;justify-content:flex-end;
1116  transition:transform .6s var(--sp),box-shadow .5s var(--ez);
1117}
1118.bc:hover{transform:translateY(-7px);box-shadow:0 28px 64px rgba(11,11,12,.22)}
1119.bc:nth-child(1){grid-column:span 7;min-height:400px}
1120.bc:nth-child(2){grid-column:span 5;min-height:400px}
1121.bc:nth-child(3){grid-column:span 4}
1122.bc:nth-child(4){grid-column:span 4}
1123.bc:nth-child(5){grid-column:span 4}
1124.bc:nth-child(6){grid-column:span 12;min-height:320px}
1125.bc img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .9s var(--ez),filter .6s}
1126.bc:hover img{transform:scale(1.07)}
1127.bc::after{content:'';position:absolute;inset:0;background:linear-gradient(0deg,rgba(11,11,12,.92) 0%,rgba(11,11,12,.34) 46%,rgba(11,11,12,.02) 100%);transition:opacity .5s}
1128.bcb{position:relative;z-index:2;padding:clamp(20px,2.2vw,30px)}
1129.bc-tag{
1130  display:inline-flex;align-items:center;padding:6px 14px;border-radius:var(--Rp);
1131  background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.18);backdrop-filter:blur(16px);
1132  font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:#fff;margin-bottom:12px;
1133}
1134.bc-n{font-size:clamp(20px,2.1vw,32px);font-weight:700;letter-spacing:-.035em;color:#fff;line-height:1.1;margin-bottom:16px}
1135.bc-a{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
1136.ic{
1137  width:40px;height:40px;border-radius:var(--Rp);flex-shrink:0;
1138  display:flex;align-items:center;justify-content:center;
1139  background:rgba(255,255,255,.13);border:1px solid rgba(255,255,255,.16);backdrop-filter:blur(16px);
1140  transition:all .45s var(--sp);
1141}
1142.ic:hover{background:#fff;transform:translateY(-3px) scale(1.06)}
1143.ic svg{width:17px;height:17px;fill:#fff;transition:fill .3s}
1144.ic:hover svg{fill:var(--ink)}
1145.bc-go{
1146  padding:11px 22px;border-radius:var(--Rp);background:var(--amber);color:var(--ink);
1147  font-size:13px;font-weight:600;transition:all .45s var(--sp);
1148}
1149.bc-go:hover{background:#fff;transform:translateY(-3px)}
1150
1151/* ══ WHY BENTO ══ */
1152.why{background:var(--paper2)}
1153.wg{display:grid;grid-template-columns:repeat(12,1fr);gap:clamp(10px,1.1vw,14px)}
1154.wc{
1155  background:var(--white);border-radius:clamp(20px,2.2vw,28px);padding:clamp(24px,2.4vw,32px);
1156  display:flex;flex-direction:column;min-height:196px;grid-column:span 4;
1157  border:1px solid transparent;
1158  transition:transform .55s var(--sp),box-shadow .5s var(--ez),border-color .4s;
1159}
1160.wc:hover{transform:translateY(-6px);box-shadow:0 22px 52px rgba(11,11,12,.09);border-color:rgba(255,176,32,.3)}
1161.wci{
1162  width:50px;height:50px;border-radius:16px;margin-bottom:auto;
1163  background:linear-gradient(140deg,rgba(255,176,32,.18),rgba(255,176,32,.06));
1164  display:flex;align-items:center;justify-content:center;
1165  transition:transform .55s var(--sp);
1166}
1167.wc:hover .wci{transform:rotate(-8deg) scale(1.08)}
1168.wci svg{width:22px;height:22px;stroke:var(--amber2);fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
1169.wc h4{margin:24px 0 8px}
1170.wc p{font-size:13.8px;font-weight:300;line-height:1.58;color:var(--t2)}
1171
1172.wc.big{grid-column:span 8;background:var(--ink);color:#fff;justify-content:flex-end;position:relative;overflow:hidden}
1173.wc.big::before{
1174  content:'';position:absolute;width:400px;height:400px;border-radius:50%;
1175  background:radial-gradient(circle,rgba(255,176,32,.22),transparent 68%);
1176  top:-160px;right:-120px;pointer-events:none;
1177}
1178.wc.big h4{color:#fff;font-size:clamp(22px,2.4vw,34px);letter-spacing:-.04em;margin-top:0;position:relative}
1179.wc.big p{color:rgba(255,255,255,.58);margin-bottom:24px;max-width:44ch;position:relative}
1180.wc.big .b{position:relative;align-self:flex-start}
1181.wc.w4{grid-column:span 4}
1182.wc.w6{grid-column:span 6}
1183
1184/* ══ PROCESS ══ */
1185.pg{display:grid;grid-template-columns:repeat(6,1fr);gap:clamp(10px,1.1vw,14px)}
1186.pc{
1187  background:var(--white);border-radius:clamp(18px,2vw,26px);padding:clamp(20px,2.2vw,28px);
1188  border:1px solid var(--line);min-height:200px;display:flex;flex-direction:column;
1189  transition:transform .55s var(--sp),box-shadow .5s,background .4s;
1190}
1191.pc:hover{transform:translateY(-6px);box-shadow:0 20px 46px rgba(11,11,12,.09);border-color:transparent}
1192.pn{
1193  width:44px;height:44px;border-radius:var(--Rp);margin-bottom:auto;
1194  background:var(--paper2);display:flex;align-items:center;justify-content:center;
1195  font-size:15px;font-weight:800;color:var(--t3);letter-spacing:-.02em;
1196  transition:all .5s var(--sp);
1197}
1198.pc:hover .pn{background:var(--amber);color:var(--ink);transform:scale(1.12)}
1199.pt{font-size:15.5px;font-weight:700;letter-spacing:-.025em;margin:22px 0 7px}
1200.pd{font-size:12.8px;font-weight:300;line-height:1.55;color:var(--t2)}
1201
1202/* ══ FAQ ══ */
1203.faq{background:var(--paper2)}
1204.fg{display:grid;grid-template-columns:1fr 1fr;gap:clamp(10px,1.2vw,16px);align-items:start}
1205.fcol{display:flex;flex-direction:column;gap:clamp(10px,1.2vw,16px)}
1206.fi{
1207  background:var(--white);border-radius:var(--Rs);overflow:hidden;
1208  border:1px solid transparent;transition:all .45s var(--ez);
1209}
1210.fi.open{border-color:rgba(255,176,32,.32);box-shadow:0 14px 40px rgba(11,11,12,.07)}
1211.fq{
1212  width:100%;display:flex;align-items:center;justify-content:space-between;gap:18px;
1213  padding:21px 24px;text-align:left;
1214  font-size:15.5px;font-weight:600;letter-spacing:-.025em;line-height:1.32;
1215  transition:color .3s;
1216}
1217.fq:hover{color:var(--amber2)}
1218.fpl{
1219  position:relative;width:32px;height:32px;border-radius:var(--Rp);flex-shrink:0;
1220  background:var(--paper2);display:flex;align-items:center;justify-content:center;
1221  transition:all .45s var(--sp);
1222}
1223.fi.open .fpl{background:var(--amber);transform:rotate(180deg)}
1224.fpl::before,.fpl::after{content:'';position:absolute;background:var(--amber2);border-radius:2px;transition:all .4s var(--ez)}
1225.fpl::before{width:13px;height:2px}
1226.fpl::after{width:2px;height:13px}
1227.fi.open .fpl::before,.fi.open .fpl::after{background:var(--ink)}
1228.fi.open .fpl::after{transform:rotate(90deg);opacity:0}
1228
1229.fa{max-height:0;overflow:hidden;transition:max-height .5s var(--ez),padding .5s;padding:0 24px;font-size:14px;font-weight:300;line-height:1.65;color:var(--t2)}
1230.fi.open .fa{max-height:420px;padding:0 24px 24px}
1231
1232/* ══ TRUST ══ */
1233.tg{
1234  display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(26px,4vw,68px);align-items:center;
1235  background:var(--ink);border-radius:clamp(24px,3vw,42px);padding:clamp(28px,4vw,64px);
1236  color:#fff;position:relative;overflow:hidden;
1237}
1238.tg::before{
1239  content:'';position:absolute;width:620px;height:620px;border-radius:50%;
1240  background:radial-gradient(circle,rgba(255,176,32,.16),transparent 68%);
1241  bottom:-260px;left:-180px;pointer-events:none;
1242}
1243.tl{position:relative;z-index:1}
1244.tl .d3{color:#fff;margin-bottom:16px}
1245.tl .lead{color:rgba(255,255,255,.58);margin-bottom:28px}
1246.tls{display:flex;flex-direction:column;gap:11px;margin-bottom:32px}
1247.tls li{display:flex;align-items:center;gap:13px;font-size:15px;font-weight:400;color:rgba(255,255,255,.9)}
1248.chk{width:26px;height:26px;border-radius:var(--Rp);background:rgba(255,176,32,.18);display:flex;align-items:center;justify-content:center;flex-shrink:0}
1249.chk svg{width:12px;height:12px;stroke:var(--amber);stroke-width:2.8;fill:none;stroke-linecap:round;stroke-linejoin:round}
1250.tr{position:relative;z-index:1}
1251.tr img{width:100%;border-radius:var(--Rs);box-shadow:0 30px 70px rgba(0,0,0,.44)}
1252
1253/* ══ CTA ══ */
1254.cta{background:var(--paper)}
1255.cbox{
1256  display:grid;grid-template-columns:1fr 1fr;gap:clamp(26px,4vw,64px);align-items:center;
1257  background:var(--paper2);border-radius:clamp(24px,3vw,42px);padding:clamp(26px,4vw,60px);
1258}
1259.cl .d2{margin-bottom:16px}
1260.cl .lead{margin-bottom:30px}
1261.cp{display:grid;grid-template-columns:1fr 1fr;gap:10px}
1262.cpi{background:var(--white);border-radius:var(--Rs);padding:17px 20px;transition:transform .5s var(--sp)}
1263.cpi:hover{transform:translateY(-4px)}
1264.cpt{font-size:15.5px;font-weight:700;letter-spacing:-.03em;color:var(--ink);margin-bottom:3px}
1265.cpd{font-size:12.5px;font-weight:300;color:var(--t2);line-height:1.45}
1266
1267.form{background:var(--white);border-radius:clamp(20px,2.6vw,32px);padding:clamp(24px,3vw,40px);box-shadow:0 24px 64px rgba(11,11,12,.09)}
1268.ft{font-size:25px;font-weight:800;letter-spacing:-.04em;margin-bottom:5px}
1269.fs{font-size:13.5px;font-weight:300;color:var(--t2);margin-bottom:24px}
1270.fgp{margin-bottom:11px}
1271.fin{
1272  width:100%;padding:16px 22px;border-radius:var(--Rp);
1273  background:var(--paper2);border:1.5px solid transparent;
1274  font-family:'Manrope',sans-serif;font-size:14.5px;font-weight:500;color:var(--ink);
1275  outline:none;transition:all .35s var(--ez);-webkit-appearance:none;appearance:none;
1276}
1277.fin::placeholder{color:var(--t3);font-weight:300}
1278.fin:focus{border-color:var(--amber);background:var(--white);box-shadow:0 0 0 4px rgba(255,176,32,.12)}
1279textarea.fin{border-radius:22px;resize:vertical;min-height:96px}
1280select.fin{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%2395959B' stroke-width='1.8' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 22px center;color:var(--t3);padding-right:48px}
1281select.fin:valid{color:var(--ink)}
1282.fch{display:flex;gap:11px;align-items:flex-start;margin:18px 0 20px}
1283.fch input{width:18px;height:18px;margin-top:1px;accent-color:var(--amber);flex-shrink:0;cursor:pointer}
1284.fch label{font-size:12.5px;font-weight:300;color:var(--t3);line-height:1.5;cursor:pointer}
1285.fsb{width:100%;padding:19px;border-radius:var(--Rp);background:var(--ink);color:#fff;font-size:15px;font-weight:600;position:relative;overflow:hidden;isolation:isolate;transition:transform .5s var(--sp),box-shadow .4s,color .3s}
1286.fsb::before{content:'';position:absolute;inset:0;z-index:-1;background:var(--amber);border-radius:inherit;transform:scale(0);transition:transform .55s var(--ez)}
1287.fsb:hover{color:var(--ink);transform:translateY(-3px);box-shadow:0 14px 40px rgba(255,176,32,.36)}
1288.fsb:hover::before{transform:scale(1.6)}
1289
1290/* ══ FOOTER ══ */
1291footer{background:var(--ink);color:#fff;border-radius:clamp(24px,3vw,42px) clamp(24px,3vw,42px) 0 0;margin-top:clamp(20px,3vw,40px)}
1292.ftop{display:grid;grid-template-columns:1.6fr .8fr .8fr 1.2fr;gap:clamp(26px,4vw,56px);padding:clamp(44px,7vh,80px) 0 clamp(30px,5vh,52px);border-bottom:1px solid var(--lineL)}
1293
1294.fab{font-size:14px;font-weight:300;line-height:1.68;color:rgba(255,255,255,.5);margin-bottom:22px;max-width:34ch}
1295.frq{font-size:11.5px;font-weight:300;line-height:1.9;color:rgba(255,255,255,.28)}
1296.fc h5{font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.34);margin-bottom:18px}
1297.fc li{margin-bottom:11px}
1298.fc a{font-size:14px;font-weight:300;color:rgba(255,255,255,.6);transition:all .3s var(--ez);display:inline-block}
1299.fc a:hover{color:var(--amber);transform:translateX(4px)}
1300.ftel{display:block;font-size:23px;font-weight:800;letter-spacing:-.035em;color:#fff;margin-bottom:8px;transition:color .3s}
1301.ftel:hover{color:var(--amber)}
1302.ftel.s{font-size:17px;font-weight:600;color:rgba(255,255,255,.55)}
1303.fad{font-size:13px;font-weight:300;line-height:1.6;color:rgba(255,255,255,.42);margin-top:16px}
1304.fhr{font-size:12.5px;font-weight:300;color:rgba(255,255,255,.3);margin-top:10px;line-height:1.6}
1305.fso{display:flex;gap:9px;margin-top:22px;flex-wrap:wrap}
1306.so{width:44px;height:44px;border-radius:var(--Rp);background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);display:flex;align-items:center;justify-content:center;transition:all .5s var(--sp)}
1307.so:hover{background:var(--amber);border-color:var(--amber);transform:translateY(-4px) scale(1.06)}
1308.so svg{width:17px;height:17px;fill:rgba(255,255,255,.68);transition:fill .3s}
1309.so:hover svg{fill:var(--ink)}
1310.fbot{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;padding:24px 0;font-size:12.5px;font-weight:300;color:rgba(255,255,255,.26)}
1311.fbot a:hover{color:rgba(255,255,255,.6)}
1312
1313/* ══ UP ══ */
1314.up{
1315  position:fixed;right:20px;bottom:20px;z-index:300;
1316  width:52px;height:52px;border-radius:var(--Rp);
1317  background:rgba(251,250,248,.9);backdrop-filter:blur(20px);
1318  border:1px solid var(--line);box-shadow:0 8px 28px rgba(11,11,12,.14);
1319  display:flex;align-items:center;justify-content:center;
1320  opacity:0;pointer-events:none;transform:translateY(14px) scale(.9);
1321  transition:all .5s var(--sp);
1322}
1323.up.show{opacity:1;pointer-events:all;transform:none}
1324.up:hover{background:var(--amber);border-color:var(--amber);transform:translateY(-4px)}
1325.up svg{width:18px;height:18px;stroke:var(--ink);stroke-width:2.4;fill:none;stroke-linecap:round;stroke-linejoin:round}
1326
1327/* ══ REVEAL ══ */
1328.rv{opacity:0;transform:translateY(28px);transition:opacity .9s var(--ez),transform .9s var(--ez)}
1329.rv.in{opacity:1;transform:none}
1330.dl1{transition-delay:.06s}.dl2{transition-delay:.12s}.dl3{transition-delay:.18s}.dl4{transition-delay:.24s}.dl5{transition-delay:.3s}
1331
1332/* ══ RESPONSIVE ══ */
1333@media(max-width:1180px){
1334  .bc:nth-child(1),.bc:nth-child(2){grid-column:span 12;min-height:340px}
1335  .bc:nth-child(3),.bc:nth-child(4),.bc:nth-child(5){grid-column:span 6}
1336  .wc,.wc.w4,.wc.w6{grid-column:span 6}
1337  .wc.big{grid-column:span 12}
1338  .pg{grid-template-columns:repeat(3,1fr)}
1339  .tg,.cbox{grid-template-columns:1fr}
1340  .ftop{grid-template-columns:1fr 1fr}
1341}
1342@media(max-width:900px){
1343  .nm,.ntel{display:none}
1344  .ne .b{display:none}
1345  .bg{display:flex}
1346  .mob{display:flex}
1347  .hstats{grid-template-columns:1fr}
1348  .fg{grid-template-columns:1fr}
1349}
1350@media(max-width:640px){
1351  .hbox{margin-top:78px}
1352  .hbtn{flex-direction:column;width:100%}
1353  .hbtn .b{width:100%}
1354  .bento{grid-template-columns:1fr}
1355  .bc:nth-child(n){grid-column:span 1;min-height:270px}
1356  .wg{grid-template-columns:1fr}
1357  .wc,.wc.big,.wc.w4,.wc.w6{grid-column:span 1}
1358  .pg{grid-template-columns:1fr}
1359  .pc{min-height:auto;flex-direction:row;gap:16px;align-items:flex-start}
1360  .pn{margin-bottom:0;flex-shrink:0}
1361  .pt{margin-top:0}
1362  .cp{grid-template-columns:1fr}
1363  .ftop{grid-template-columns:1fr}
1364  .fbot{flex-direction:column;text-align:center}
1365  .up{right:14px;bottom:14px;width:46px;height:46px}
1366}
1367
1368/* ══ ДОБАВЛЕНО: наличие, калькуляторы, география, модели, видео ══ */
1369.ch-g3{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(10px,1.1vw,14px)}
1370.ch-g6{display:grid;grid-template-columns:repeat(6,1fr);gap:clamp(10px,1.1vw,14px)}
1371.ch-card{background:var(--white);border:1px solid var(--line);border-radius:clamp(18px,2vw,26px);
1372  overflow:hidden;display:flex;flex-direction:column;transition:transform .55s var(--sp),box-shadow .5s var(--ez)}
1373.ch-card:hover{transform:translateY(-6px);box-shadow:0 26px 60px rgba(11,11,12,.13)}
1374.ch-ph{aspect-ratio:16/10;position:relative;background:var(--paper3) center/cover}
1375.ch-ph .bc-tag{position:absolute;top:14px;left:14px;margin:0;background:var(--amber);
1376  border-color:transparent;color:var(--ink)}
1377.ch-cb{padding:clamp(18px,2vw,24px);display:flex;flex-direction:column;flex:1}
1378.ch-cb .pd{flex:1;margin:7px 0 16px}
1379.ch-pr{font-size:clamp(20px,2vw,26px);font-weight:700;letter-spacing:-.035em;font-variant-numeric:tabular-nums}
1380.ch-pr em{font-style:normal;font-size:13px;font-weight:400;color:var(--t2)}
1381.ch-live{display:inline-flex;align-items:center;gap:8px;padding:8px 18px;border-radius:var(--Rp);
1382  background:rgba(255,176,32,.14);border:1px solid rgba(255,176,32,.26);color:var(--amber2);
1383  font-size:12px;font-weight:600;letter-spacing:.02em;margin-bottom:22px}
1384.ch-live::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--amber);animation:chp 2s infinite}
1385@keyframes chp{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.72)}}
1386.ch-f{margin-bottom:24px}
1387.ch-f label{display:flex;justify-content:space-between;align-items:baseline;gap:12px;
1388  font-size:13.5px;font-weight:600;letter-spacing:-.02em;margin-bottom:11px}
1389.ch-f label b{font-size:15px;font-weight:700;color:var(--amber2);font-variant-numeric:tabular-nums}
1390.ch-r{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:4px;
1391  background:var(--paper3);outline:none}
1392.ch-r::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;border-radius:50%;
1393  background:var(--amber);border:4px solid var(--white);box-shadow:0 3px 12px rgba(11,11,12,.22);cursor:pointer}
1394.ch-r::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:var(--amber);
1395  border:4px solid var(--white);cursor:pointer}
1396.ch-ch{display:flex;gap:8px;flex-wrap:wrap}
1397.ch-b{padding:11px 20px;border-radius:var(--Rp);border:1.5px solid var(--line);background:transparent;
1398  font-size:13px;font-weight:600;letter-spacing:-.01em;color:var(--ink);transition:all .4s var(--sp)}
1399.ch-b.on{background:var(--ink);border-color:var(--ink);color:#fff}
1400.ch-out{background:var(--ink);border-radius:clamp(20px,2.4vw,30px);padding:clamp(24px,3vw,38px);
1401  color:#fff;display:flex;flex-direction:column;justify-content:center}
1402.ch-lbl{font-size:11.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
1403  color:rgba(255,255,255,.45);margin-bottom:10px}
1404.ch-big{font-size:clamp(34px,4.4vw,58px);font-weight:800;letter-spacing:-.05em;line-height:1;
1405  color:var(--amber);font-variant-numeric:tabular-nums}
1406.ch-row{display:flex;gap:clamp(20px,3vw,40px);margin:26px 0;padding-top:22px;border-top:1px solid var(--lineL);flex-wrap:wrap}
1407.ch-row b{display:block;font-size:19px;font-weight:700;letter-spacing:-.03em;color:#fff;font-variant-numeric:tabular-nums}
1408.ch-row span{font-size:12px;font-weight:300;color:rgba(255,255,255,.45)}
1409.ch-disc{font-size:11.5px;font-weight:300;line-height:1.55;color:rgba(255,255,255,.38);margin-top:18px}
1410.ch-disc-l{font-size:11.5px;font-weight:300;line-height:1.55;color:var(--t3);margin-top:18px}
1411.ch-ax{height:2px;border-radius:2px;margin:110px 0 0;position:relative;
1412  background:linear-gradient(90deg,var(--amber) 0%,rgba(255,176,32,.38) 60%,rgba(255,176,32,.14) 100%)}
1413.ch-pt{position:absolute;top:50%;transform:translate(-50%,-50%)}
1414.ch-pt i{display:block;width:13px;height:13px;border-radius:50%;background:var(--amber);border:3px solid var(--ink)}
1415.ch-pt.lg i{width:22px;height:22px;box-shadow:0 0 0 9px rgba(255,176,32,.18)}
1416.ch-pt u{position:absolute;left:50%;transform:translateX(-50%);bottom:24px;white-space:nowrap;text-decoration:none;text-align:center}
1417.ch-pt u b{display:block;font-size:13px;font-weight:700;color:#fff;letter-spacing:-.02em}
1418.ch-pt u span{font-size:11.5px;font-weight:300;color:rgba(255,255,255,.45)}
1419.ch-pt s{position:absolute;left:50%;transform:translateX(-50%);top:24px;white-space:nowrap;text-decoration:none;
1420  font-size:12.5px;font-weight:700;color:var(--amber);font-variant-numeric:tabular-nums}
1421.ch-pt.lg s{font-size:clamp(20px,2.4vw,32px);letter-spacing:-.03em}
1422.ch-rec{background:rgba(255,255,255,.04);border:1px solid var(--lineL);border-radius:clamp(18px,2vw,26px);
1423  padding:clamp(22px,2.4vw,30px);transition:border-color .5s,transform .55s var(--sp)}
1424.ch-rec:hover{border-color:rgba(255,176,32,.42);transform:translateY(-5px)}
1425.ch-rec .n{font-size:clamp(28px,3.2vw,40px);font-weight:800;letter-spacing:-.045em;color:var(--amber);line-height:1;font-variant-numeric:tabular-nums}
1426.ch-rec .t{font-size:16px;font-weight:700;letter-spacing:-.025em;color:#fff;margin:14px 0 8px;line-height:1.24}
1427.ch-rec .d{font-size:13px;font-weight:300;line-height:1.55;color:rgba(255,255,255,.5)}
1428.ch-tag{display:inline-block;margin-bottom:16px;padding:5px 13px;border-radius:var(--Rp);
1429  border:1px solid var(--lineL);font-size:10.5px;font-weight:600;letter-spacing:.09em;
1430  text-transform:uppercase;color:rgba(255,255,255,.5)}
1431.ch-m{background:var(--white);border:1px solid var(--line);border-radius:clamp(16px,1.8vw,22px);
1432  padding:clamp(18px,2vw,24px);display:flex;flex-direction:column;transition:transform .5s var(--sp),border-color .4s}
1433.ch-m:hover{transform:translateY(-5px);border-color:var(--ink)}
1434.ch-m .c{font-size:10.5px;font-weight:800;letter-spacing:.14em;color:var(--amber2)}
1435.ch-m .a{font-size:clamp(22px,2.2vw,28px);font-weight:700;letter-spacing:-.04em;margin:8px 0 2px;font-variant-numeric:tabular-nums}
1436.ch-m .s{font-size:12.5px;font-weight:300;color:var(--t2)}
1437.ch-m .p{margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:13.5px;font-weight:700}
1438.ch-v{position:relative;border-radius:clamp(16px,1.8vw,24px);overflow:hidden;aspect-ratio:16/9;
1439  background:var(--ink2);display:block}
1440.ch-v img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.82;
1441  transition:transform .9s var(--ez),opacity .5s}
1442.ch-v:hover img{transform:scale(1.06);opacity:1}
1443.ch-dur{position:absolute;top:12px;right:12px;z-index:2;padding:5px 11px;border-radius:var(--Rp);
1444  background:rgba(11,11,12,.7);backdrop-filter:blur(10px);font-size:11.5px;font-weight:600;color:#fff;
1445  font-variant-numeric:tabular-nums}
1446.ch-v .cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:16px;font-size:13.5px;
1447  font-weight:600;letter-spacing:-.02em;color:#fff;
1448  background:linear-gradient(to top,rgba(11,11,12,.9),transparent)}
1449.ch-pl{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:2;
1450  width:52px;height:52px;border-radius:50%;background:rgba(255,176,32,.94);
1451  display:flex;align-items:center;justify-content:center;transition:transform .5s var(--sp)}
1452.ch-v:hover .ch-pl{transform:translate(-50%,-50%) scale(1.12)}
1453.ch-pl::before{content:"";border-left:15px solid var(--ink);border-top:9px solid transparent;
1454  border-bottom:9px solid transparent;margin-left:4px}
1455@media(max-width:1000px){
1456  .ch-g3,.ch-g6{grid-template-columns:1fr 1fr}
1457}
1458@media(max-width:680px){
1459  .ch-g3,.ch-g6{grid-template-columns:1fr}
1460  .ch-ax{margin-top:130px}
1461  .ch-pt u span{display:none}
1462  .ch-pt.lg s{font-size:18px}
1463}
1464
1465/* ══ ЛОГОТИП ══
1466   Две картинки друг над другом: светлая видна над тёмным героем,
1467   тёмная — когда шапка при скролле становится светлой.
1468   Если цвета перепутаны — поменять местами ссылки в блоке 01-nav. */
1469.lg{position:relative;display:block;line-height:0}
1470.lg img{height:30px;width:auto;display:block;transition:height .4s var(--ez),opacity .35s var(--ez)}
1471.lg .lg-l{position:absolute;inset:0;opacity:0}
1472nav.on .lg .lg-d{opacity:0}
1473nav.on .lg .lg-l{opacity:1}
1474nav.on .lg img{height:27px}
1475.flg img{height:64px;width:auto;display:block;margin-bottom:20px}
1476@media(max-width:640px){.lg img{height:24px}nav.on .lg img{height:22px}.flg img{height:52px}}
1477
1478@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
1479</style> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328373201" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ═══ БЛОК 00d · СТИЛИ, ЧАСТЬ 4 (ФИНАЛ) ═══
1480     Вставить сразу ПОСЛЕ блока 00c. ЕДИНСТВЕННЫЙ источник правок героя
1481     и брони цветов. При замене стирать старое содержимое целиком.
1482
1483     ПРАВКА 03.08.2026 под новый первый экран: заголовок стал длиннее
1484     («от производителя» вместо названия компании), поэтому жёсткие 88px
1485     и портрет ровно 340px больше не помещались — Василий наезжал на
1486     подзаголовок. Оба размера сделаны подвижными. Больше в герое
1487     ничего не менялось. Правила героя писать ТОЛЬКО здесь: 00e для
1488     первого экрана закрыт, наслоения ломают высоты. --> <style>
1489
1490/* ═ БРОНЯ ЦВЕТОВ ИНТЕРАКТИВА — финальное слово, поверх любых наложений.
1491   Перенесена из 00c (тот упёрся в лимит T123). Новые кнопки — дописывать сюда. ═ */
1492#allrecords .nm a{color:rgba(255,255,255,.8)!important}
1493#allrecords nav.on .nm a{color:var(--t2)!important}
1494#allrecords .nm a.act{color:var(--amber)!important}
1495#allrecords nav.on .nm a.act{color:var(--amber2)!important}
1496#allrecords .ntel{color:#fff!important}
1497#allrecords nav.on .ntel{color:var(--ink)!important}
1498#allrecords .b-am{color:var(--ink)!important}
1499#allrecords .b-am:hover{color:#fff!important}
1500#allrecords .b-gl{color:#fff!important}
1501#allrecords .b-gl:hover{color:var(--ink)!important}
1502#allrecords .b-out{color:var(--ink)!important}
1503#allrecords .b-out:hover{color:#fff!important}
1504#allrecords .b-ink{color:#fff!important}
1505#allrecords .b-ink:hover{color:var(--ink)!important}
1506#allrecords .bc-go{color:var(--ink)!important}
1507#allrecords .mob a{color:var(--t1)!important}
1508#allrecords .mob-tel{color:var(--amber2)!important}
1509#allrecords .fc a{color:rgba(255,255,255,.6)!important}
1510#allrecords .fc a:hover{color:var(--amber)!important}
1511#allrecords .ftel{color:#fff!important}
1512#allrecords .ftel.s{color:rgba(255,255,255,.55)!important}
1513
1514/* ═══ HERO · ОБЩЕЕ: читаемость текста + ночная калибровка затемнения ═══ */
1515.hin h1{text-shadow:0 2px 22px rgba(0,0,0,.42)}
1516.hin h1 .grad{text-shadow:none;filter:drop-shadow(0 2px 14px rgba(0,0,0,.42))}
1517.hsub{color:rgba(255,255,255,.92)!important;font-weight:400!important;text-shadow:0 1px 12px rgba(0,0,0,.55)}
1518.hin .pill.gl{background:rgba(11,11,12,.4)!important;border-color:rgba(255,255,255,.22)!important}
1519.hbox::after{background:
1520  linear-gradient(90deg,rgba(11,11,12,.52) 0%,rgba(11,11,12,.26) 34%,rgba(11,11,12,.04) 60%,rgba(11,11,12,0) 76%),
1521  linear-gradient(180deg,rgba(11,11,12,.35) 0%,rgba(11,11,12,.06) 30%,rgba(11,11,12,.18) 58%,rgba(11,11,12,.88) 100%)!important}
1522
1523/* ═══ HERO · ДЕСКТОП (≥981px) ═══ */
1524@media(min-width:981px){
1525  .hbox{margin-top:96px}
1526  .hbox img{object-position:100% 50%}
1527  /* 88px рассчитывались под прежний заголовок в две строки. Новый текст
1528     «Модульные дома и бани от производителя» встаёт в три строки и съедает
1529     высоту — портрет Василия начинает наезжать на подзаголовок. Заголовок
1530     подвижный: на широких окнах крупный, на узких сам ужимается. */
1531  .hin h1{font-size:clamp(46px,4.4vw,72px)}
1532  .hin .hsub{font-size:16px;max-width:52ch}
1533  .hin .pill{font-size:12px}
1534  .founder{gap:22px;margin-top:clamp(24px,4vh,48px)}
1535  .founder-card{margin-left:0}
1536  /* Портрет прибит к нижнему краю и при нехватке места растёт вверх,
1537     заезжая на текст. Привязываем высоту к окну: на низких экранах
1538     Василий уменьшается вместо того, чтобы перекрывать подзаголовок. */
1539  .founder > img{height:clamp(200px,25vh,300px);max-height:none}
1540  .founder-nm{font-size:17.5px}
1541  .founder-sub{font-size:11px}
1542  .hs-n{font-size:44px}
1543  .hs{padding:24px 28px}
1544  .b-lg{padding:21px 44px;font-size:15px}
1545}
1546
1547/* ═══ HERO · МОБАЙЛ (≤640px) ═══
1548   H1 → гео впритык (2px) → спейсер-абзац → Василий на зелени (ручка
1549   margin-top, шаг 16px) → кнопки → плитки. Тени и градиент — ночные. */
1550@media(max-width:640px){
1551  .hbox{margin-top:96px}
1552  .hbox img{transform:none!important;height:100%;object-position:50% 0}
1553  .hbox::after{background:linear-gradient(180deg,rgba(11,11,12,.42) 0%,rgba(11,11,12,.24) 36%,rgba(11,11,12,.34) 62%,rgba(11,11,12,.92) 100%)!important}
1554  .hsub{color:#fff!important;text-shadow:0 1px 10px rgba(0,0,0,.7)}
1555  .hin{position:relative;padding-bottom:18px}
1556  .h-top{display:contents}
1557  .h-top h1{order:1;margin:0!important;font-size:38px}
1558  .h-top .pill{order:2;position:static;transform:none;align-self:flex-start;
1559    margin:2px 0 0!important;white-space:nowrap;font-size:10px;padding:6px 12px;gap:6px;
1560    background:rgba(11,11,12,.35);border-color:rgba(255,255,255,.14);letter-spacing:.01em}
1561  .h-top .pill i{width:5px;height:5px}
1562  .hin .hsub{order:3;display:block;visibility:hidden}
1563  .founder{order:4;gap:12px;margin:128px 0 15px}
1564  .founder > img{height:68px;width:68px}
1565  .founder-nm{font-size:15.5px;text-shadow:0 1px 8px rgba(0,0,0,.75)}
1566  .founder-sub{font-size:10.5px;max-width:25ch;color:rgba(255,255,255,.88)!important;text-shadow:0 1px 8px rgba(0,0,0,.75)}
1567  .founder-role{text-shadow:0 1px 6px rgba(0,0,0,.65)}
1568  .hbtn{order:5}
1569  .hs-n{font-size:30px}
1570  .hstats{margin-top:16px}
1571}
1572
1573</style> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328373301" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ct__00-anchor · якорь верха страницы --> <div id="top" style="display:block;position:relative;top:-90px;visibility:hidden"></div> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328378601" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ct__01-hero v1.2 · тираж героя эталона (крошки две версии, скрим 74°, моб. высота calc(100svh−108px) — без изменений; высотная модель = М2: кадру прибита min-height calc(100svh−230px) на десктопе и calc(100svh−108px) на планшете (641–980: плитки уходят в столбик и вместе с картой съедали кадр), иначе ряд карты под плитками ужимал его через flex:1) · контент: H1 «Приезжайте на производство», кнопки «Как доехать» (#map — сетка карты под кадром) и «Договориться о визите» (#cta, data-lead); внешняя ссылка на карточку Яндекса — только в карточке рядом с картой · строка стоимости → строка «отдел продаж · часы» · три плитки эталона в первом экране (4,8 на Яндекс Картах · 3 000 м² · 380+), под ними ряд «карта + карточка»: цветной виджет Яндекс Карт по oid (loading=lazy; фирменная капсула сверху слева; после координат из карточки — режим ll/pt без бал
1573уна) и стеклянная карточка Суонтаки (адрес, часы, маршрут) · кадр — сборочный цех (20231104_185600, съёмка Сотиса): слева тёмный модуль под текст, справа дом с кровлей; <picture> с вертикальным кропом под ≤640 · ≤640: моб. крошка включена, десктопная скрыта (норма kg) --> <style>
1574/* — герой модели — */
1575.ct-hero {
1576position: relative;
1577min-height: 100svh;
1578display: flex;
1579flex-direction: column;
1580padding: 0 clamp(12px, 2.4vw, 28px) clamp(12px, 2.4vw, 28px);
1581background: var(--ink)
1582}
1583.ct-hbox {
1584position: relative;
1585flex: 1;
1586border-radius: clamp(26px, 3.4vw, 46px);
1587overflow: hidden;
1588display: flex;
1589flex-direction: column;
1590justify-content: flex-end;
1591margin-top: clamp(74px, 8.2vh, 96px)
1592}
1593.ct-hbox > img, .ct-hbox > picture > img { /* норма с М1: обёртка picture ломает селектор .X-hbox > img — расширяем */
1594position: absolute;
1595inset: 0;
1596width: 100%;
1597height: 112%;
1598object-fit: cover;
1599object-position: center;
1600will-change: transform
1601}
1602.ct-hbox::after {
1603content: '';
1604position: absolute;
1605inset: 0;
1606background: linear-gradient(180deg, rgba(11, 11, 12, .42) 0%, rgba(11, 11, 12, .06) 30%, rgba(11, 11, 12, .10) 58%, rgba(11, 11, 12, .88) 100%)
1607}
1608.ct-hbox::before {
1609content: '';
1610position: absolute;
1611inset: 0;
1612z-index: 1;
1613background: linear-gradient(74deg, rgba(11, 11, 12, .82) 0%, rgba(11, 11, 12, .55) 30%, rgba(11, 11, 12, .18) 52%, rgba(11, 11, 12, 0) 64%)
1614}
1615.ct-hin {
1616position: relative;
1617z-index: 2;
1618padding: clamp(22px, 3.4vw, 52px);
1619max-width: min(62%, 860px);
1620flex: 1;
1621display: flex;
1622flex-direction: column;
1623align-items: flex-start
1624}
1625.ct-hin h1 {
1626margin-top: auto;
1627font-size: clamp(36px, 4.8vw, 78px);
1628line-height: .97;
1629letter-spacing: -.05em;
1630font-weight: 700;
1631color: #fff;
1632max-width: 14ch;
1633margin-bottom: clamp(12px, 1.8vh, 22px);
1634text-shadow: 0 2px 22px rgba(0, 0, 0, .28)
1635}
1636.ct-sub {
1637font-size: clamp(14px, 1.2vw, 17.5px);
1638font-weight: 300;
1639line-height: 1.58;
1640color: rgba(255, 255, 255, .94) !important;
1641text-shadow: 0 1px 12px rgba(0, 0, 0, .4);
1642max-width: 52ch;
1643margin-bottom: clamp(18px, 2.6vh, 30px)
1644}
1645.ct-hbtn {
1646display: flex;
1647gap: 12px;
1648flex-wrap: wrap;
1649align-items: center;
1650margin-bottom: clamp(14px, 2vh, 22px)
1651}
1652.ct-price {
1653display: inline-flex;
1654align-items: baseline;
1655gap: 8px;
1656font-size: 13px;
1657font-weight: 300;
1658color: rgba(255, 255, 255, .82) !important;
1659text-shadow: 0 1px 8px rgba(0, 0, 0, .4)
1660}
1661.ct-price b {
1662font-size: 14.5px;
1663font-weight: 800;
1664letter-spacing: -.02em;
1665color: var(--amber)
1666}/* хлебные крошки — десктоп в контенте героя */
1667.ct-bc--desk {
1668display: flex;
1669align-items: center;
1670gap: 9px;
1671flex-wrap: wrap;
1672font-size: 12.5px;
1673font-weight: 500;
1674color: rgba(255, 255, 255, .62);
1675margin-bottom: clamp(14px, 2vh, 22px)
1676}
1677.ct-bc--desk a {
1678transition: color .3s
1679}
1680.ct-bc--desk a:hover {
1681color: var(--amber)
1682}
1683.ct-bc--desk i {
1684font-style: normal;
1685color: rgba(255, 255, 255, .3)
1686}
1687.ct-bc--desk b {
1688font-weight: 600;
1689color: #fff
1690}/* хлебные крошки — мобильная, абсолютная в герое */
1691.ct-bc--mob {
1692display: none;
1693position: absolute;
1694top: 16px;
1695left: 24px;
1696z-index: 3;
1697font-size: 12px;
1698font-weight: 500;
1699color: #fff !important;
1700text-shadow: 0 1px 4px rgba(0, 0, 0, .5)
1701}
1702.ct-bc--mob i {
1703font-style: normal;
1704opacity: .55;
1705margin: 0 5px
1706}/* факты в герое */
1707.ct-stats {
1708display: grid;
1709grid-template-columns: repeat(3, 1fr);
1710gap: clamp(8px, 1vw, 12px);
1711margin-top: clamp(8px, 1vw, 12px)
1712}
1713.ct-hs {
1714border-radius: clamp(18px, 2.2vw, 28px);
1715padding: clamp(20px, 2.4vw, 30px);
1716background: rgba(255, 255, 255, .05);
1717border: 1px solid rgba(255, 255, 255, .1);
1718backdrop-filter: blur(24px);
1719display: flex;
1720align-items: baseline;
1721gap: 14px;
1722transition: background .4s, transform .5s cubic-bezier(.34, 1.4, .5, 1)
1723}
1724.ct-hs:hover {
1725background: rgba(255, 255, 255, .09);
1726transform: translateY(-4px)
1727}
1728.ct-hs-n {
1729font-size: clamp(32px, 3.6vw, 50px);
1730font-weight: 800;
1731letter-spacing: -.05em;
1732line-height: 1;
1733color: #fff;
1734white-space: nowrap
1735}
1736.ct-hs-n small {
1737font-size: .42em;
1738color: #FFB020;
1739font-weight: 800
1740}
1741.ct-hs > span:last-child {
1742display: flex;
1743flex-direction: column;
1744gap: 2px
1745}
1746.ct-hs-t {
1747font-size: 13.5px;
1748font-weight: 600;
1749color: #fff;
1750margin-bottom: 2px
1751}
1752.ct-hs-d {
1753font-size: 11.5px;
1754font-weight: 300;
1755color: rgba(255, 255, 255, .44);
1756margin-top: 1px
1757}
1758/* ряд под плитками: карта (цветной виджет Яндекса) + карточка Суонтаки */
1759.ct-grid {
1760display: grid;
1761grid-template-columns: 1.15fr .85fr;
1762gap: clamp(8px, 1vw, 12px);
1763margin-top: clamp(8px, 1vw, 12px)
1764}
1765.ct-map {
1766position: relative;
1767border-radius: clamp(18px, 2.2vw, 28px);
1768overflow: hidden;
1769min-height: 440px;
1770background: #E8E5DF;
1771border: 1px solid rgba(255, 255, 255, .1)
1772}
1773.ct-map iframe {
1774position: absolute;
1775inset: 0;
1776width: 100%;
1777height: 100%;
1778border: 0;
1779display: block
1780}
1781.ct-mcap {
1782position: absolute;
1783top: 14px;
1784left: 14px;
1785z-index: 2;
1786display: flex;
1787align-items: center;
1788gap: 10px;
1789padding: 9px 16px 9px 14px;
1790border-radius: 100px;
1791background: rgba(11, 11, 12, .78);
1792backdrop-filter: blur(12px);
1793border: 1px solid rgba(255, 255, 255, .12);
1794box-shadow: 0 8px 28px rgba(0, 0, 0, .35);
1795pointer-events: none
1796}
1797.ct-mcap img {
1798height: 14px;
1799width: auto;
1800display: block
1801}
1802.ct-mcap i {
1803width: 4px;
1804height: 4px;
1805border-radius: 50%;
1806background: var(--amber);
1807display: block
1808}
1809.ct-mcap span {
1810font-size: 12px;
1811font-weight: 600;
1812letter-spacing: .02em;
1813color: #fff;
1814white-space: nowrap
1815}
1816.ct-card {
1817border-radius: clamp(18px, 2.2vw, 28px);
1818padding: clamp(22px, 2.6vw, 34px);
1819background: rgba(255, 255, 255, .05);
1820border: 1px solid rgba(255, 255, 255, .1);
1821backdrop-filter: blur(24px);
1822display: flex;
1823flex-direction: column;
1824gap: 20px;
1825color: #fff
1826}
1827.ct-card .pill {
1828margin-bottom: 0;
1829align-self: flex-start
1830}
1831.ct-adr {
1832font-size: clamp(20px, 1.8vw, 26px);
1833font-weight: 700;
1834letter-spacing: -.03em;
1835line-height: 1.15;
1836color: #fff
1837}
1838.ct-csub {
1839font-size: 13.5px;
1840font-weight: 300;
1841line-height: 1.55;
1842color: rgba(255, 255, 255, .62);
1843margin-top: 6px
1844}
1845.ct-hrs {
1846display: grid;
1847grid-template-columns: auto 1fr;
1848gap: 6px 14px;
1849font-size: 13.5px;
1850font-weight: 300;
1851color: rgba(255, 255, 255, .72)
1852}
1853.ct-hrs b {
1854font-weight: 600;
1855color: #fff
1856}
1857.ct-rt {
1858display: flex;
1859flex-direction: column;
1860gap: 10px;
1861margin-top: auto
1862}
1863.ct-rt .b {
1864width: 100%
1865}
1866@media (max-height: 820px) {
1867.ct-hbox {
1868margin-top: clamp(70px, 7.4vh, 86px)
1869}
1870.ct-hs {
1871padding: clamp(13px, 1.9vh, 20px) clamp(16px, 2vw, 24px)
1872}
1873.ct-hs-n {
1874font-size: clamp(28px, 3vw, 42px)
1875}
1876}
1877@media (max-height: 700px) {
1878.ct-hs {
1879padding: 11px 18px
1880}
1881.ct-hs-n {
1882font-size: 26px
1883}
1884}
1885@media (max-width: 980px) {
1886.ct-hbox {
1887min-height: calc(100svh - 108px)
1888}
1889.ct-grid {
1890grid-template-columns: 1fr;
1891gap: 8px
1892}
1893.ct-map {
1894min-height: 360px
1895}
1896.ct-stats {
1897gap: 8px
1898}
1899.ct-hs {
1900padding: 14px 18px
1901}
1902.ct-hs-n {
1903font-size: 30px
1904}
1905}
1906@media (max-width: 900px) {
1907.ct-stats {
1908grid-template-columns: 1fr
1909}
1910}
1911@media (min-width: 981px) {
1912.ct-hbox {
1913margin-top: 96px;
1914min-height: calc(100svh - 230px)
1915}
1916.ct-hs {
1917padding: 24px 28px
1918}
1919.ct-hs-n {
1920font-size: 44px
1921}
1922}
1923@media (max-width: 640px) {
1924.ct-hero {
1925min-height: 100vh
1926}
1927.ct-hbox {
1928margin-top: 96px;
1929min-height: calc(100vh - 108px);
1930min-height: calc(100svh - 108px)
1931}
1932.ct-hbox > img, .ct-hbox > picture > img { /* норма с М1: обёртка picture ломает селектор .X-hbox > img — расширяем */
1933transform: none !important;
1934height: 100% !important;
1935object-position: 50% 42%
1936}
1937.ct-hbox::before {
1938background: none
1939}
1940.ct-hbox::after {
1941background: linear-gradient(180deg, rgba(11, 11, 12, .42) 0%, rgba(11, 11, 12, .24) 36%, rgba(11, 11, 12, .34) 62%, rgba(11, 11, 12, .92) 100%) !important
1942}
1943.ct-hin {
1944max-width: 100%
1945}
1946.ct-bc--mob {
1947display: block
1948}
1949.ct-bc--desk {
1950display: none
1951}
1952.ct-hin h1 {
1953order: 1;
1954margin: 10px 0 0 !important;
1955font-size: 33px;
1956line-height: 1.06;
1957letter-spacing: -.045em;
1958max-width: 100%
1959}
1960.ct-hin .pill {
1961order: 2;
1962align-self: flex-start;
1963margin: 10px 0 0 !important;
1964white-space: nowrap;
1965font-size: 10px;
1966padding: 6px 12px
1967}
1968.ct-hin .pill i {
1969width: 5px;
1970height: 5px
1971}
1972.ct-sub {
1973order: 3;
1974display: none
1975}
1976.ct-hbtn {
1977order: 4;
1978flex-direction: column;
1979width: 100%;
1980margin-top: auto
1981}
1982.ct-hbtn .b {
1983width: 100%
1984}
1985.ct-price {
1986order: 5;
1987display: block;
1988margin-top: 12px;
1989font-size: 11.5px;
1990line-height: 1.65;
1991max-width: 36ch;
1992color: rgba(255, 255, 255, .66) !important
1993}
1994.ct-price b {
1995display: block;
1996font-size: 13px
1997}
1998.ct-hs-n {
1999font-size: 30px
2000}
2001.ct-stats {
2002margin-top: 16px
2003}
2004.ct-map {
2005min-height: 300px
2006}
2007.ct-card {
2008padding: 20px
2009}
2010}
2011</style> <section class="ct-hero"> <div class="ct-hbox"> <a href="https://modulniye-doma.ru/" class="ct-bc--mob">
2012Главная
2013<i>·</i>
2014Контакты
2015</a> <picture> <source media="(max-width:640px)" srcset="https://static.tildacdn.com/tild3564-3561-4661-b534-363036306333/ct-hero-mob.jpg"> <img src="https://static.tildacdn.com/tild3335-6561-4562-b633-356339663032/ct-hero-desk.jpg" alt="Сборочный цех Кантри Хаус в технопарке Суонтака — модульные дома на разных стадиях сборки" id="hi"> </picture> <div class="ct-hin"> <div class="ct-bc--desk rv"> <a href="https://modulniye-doma.ru/">Главная</a> <i>·</i> <b>Контакты</b> </div> <div class="pill gl rv dl1"> <i></i>
2016Производство и отдел продаж · Ленобласть
2017</div> <h1 class="rv dl2">
2018Приезжайте
2019<span class="grad">на производство</span> </h1> <p class="ct-sub rv dl3">Встречаемся не в городском офисе, а в цеху под Санкт-Петербургом: покажем дома в сборке, бани на площадке и материалы, из которых собираем. Экскурсия входит в первую встречу и ни к чему не обязывает. Доставляем и монтируем по всей России.</p> <div class="ct-hbtn rv dl4"> <a href="#map" class="b b-am b-lg"> <span>Как доехать</span> </a> <a href="#cta" class="b b-gl b-lg" data-lead="Визит на производство"> <span>Договориться о визите</span> </a> </div> <div class="ct-price rv dl5">
2020Отдел продаж
2021<b><a href="tel:+79219679674">+7 921 967-96-74</a></b>
2022· ПН–ПТ 9:00–18:00 · СБ–ВС по договорённости
2023</div> </div> </div> <div class="ct-stats"> <div class="ct-hs"> <span class="ct-hs-n">
20244,8
2025<small>из 5</small> </span> <span> <span class="ct-hs-t">Оценка на Яндекс Картах</span> <span class="ct-hs-d">По 114 оценкам</span> </span> </div> <div class="ct-hs"> <span class="ct-hs-n">
20263 000
2027<small>м²</small> </span> <span> <span class="ct-hs-t">Три цеха</span> <span class="ct-hs-d">Заготовка, покраска, сборка</span> </span> </div> <div class="ct-hs"> <span class="ct-hs-n">
2028380+
2029<small>домов</small> </span> <span> <span class="ct-hs-t">Построено с 2018 года</span> <span class="ct-hs-d">Дома, бани и базы отдыха</span> </span> </div> </div> <div id="map" style="display:block;position:relative;top:-90px;visibility:hidden"></div> <div class="ct-grid"> <div class="ct-map"> <div class="ct-mcap"> <img src="https://static.tildacdn.com/tild3538-3664-4439-b161-623331323464/CH-gorizontalnyy-na-.svg" alt="Кантри Хаус"> <i></i> <span>Технопарк Суонтака</span> </div> <iframe src="https://yandex.ru/map-widget/v1/?ol=biz&oid=82308979593&z=15" title="Кантри Хаус на Яндекс Картах — производство в технопарке Суонтака" allowfullscreen loading="lazy"></iframe> </div> <div class="ct-card"> <div class="pill gl"> <i></i>
2030Производство и отдел продаж
2031</div> <div> <div class="ct-adr">Технопарк Суонтака</div> <div class="ct-csub">Ленинградская область, Всеволожский район, Юкковское сельское поселение</div> </div> <div class="ct-hrs"> <b>ПН–ПТ</b> <span>9:00–18:00</span> <b>СБ–ВС</b> <span>по договорённости — напишите накануне</span> </div> <div class="ct-rt"> <a href="https://yandex.ru/maps/org/country_house/82308979593" target="_blank" rel="noopener" class="b b-am"> <span>Построить маршрут</span> </a> <a href="#cta" class="b b-gl" data-lead="Визит на производство"> <span>Выбрать день визита</span> </a> </div> </div> </div> </section> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328379101" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ct__02-phones v1.0 · три телефона с назначением: -74 продажи основной (мессенджеры), -73 продажи, -75 сервис и гарантия (номер с прежней /contacts — подтверждение Василия в брифе) · почта · префикс ctp-, база (sec/wrap/sh/pill/d2/grad/rv/b) из 00a–00c, появление — блок 99 · ставится ПОСЛЕ героя --> <style>
2032.ctp-sec {
2033padding-top: clamp(40px, 6vh, 72px) !important
2034}
2035.ctp-g {
2036display: grid;
2037grid-template-columns: repeat(3, 1fr);
2038gap: clamp(12px, 1.4vw, 18px)
2039}
2040.ctp-c {
2041background: #fff;
2042border: 1px solid rgba(11, 11, 12, .08);
2043border-radius: 22px;
2044padding: 22px 24px;
2045display: flex;
2046flex-direction: column;
2047transition: transform .5s cubic-bezier(.34, 1.4, .5, 1), box-shadow .5s
2048}
2049.ctp-l {
2050font-size: 11.5px !important;
2051font-weight: 600 !important;
2052letter-spacing: .12em;
2053text-transform: uppercase;
2054color: #95959B !important;
2055margin-bottom: 10px
2056}
2057.ctp-n {
2058display: block;
2059font-size: clamp(19px, 1.8vw, 24px) !important;
2060font-weight: 800 !important;
2061letter-spacing: -.035em;
2062color: #0B0B0C !important;
2063transition: color .3s
2064}
2065.ctp-d {
2066font-size: 13px !important;
2067font-weight: 300 !important;
2068line-height: 1.5 !important;
2069color: #5A5A5F !important;
2070margin-top: 8px;
2071flex: 1
2072}
2073.ctp-m {
2074display: flex;
2075gap: 8px;
2076flex-wrap: wrap;
2077margin-top: 14px
2078}
2079.ctp-m a {
2080display: inline-flex;
2081align-items: center;
2082padding: 9px 14px;
2083border-radius: 100px;
2084border: 1px solid rgba(11, 11, 12, .08);
2085background: #fff;
2086font-size: 12.5px !important;
2087font-weight: 600 !important;
2088color: #0B0B0C !important;
2089transition: background .4s, border-color .4s, transform .4s cubic-bezier(.34, 1.4, .5, 1)
2090}
2091.ctp-lead {
2092max-width: 340px
2093}
2094@media (hover: hover) {
2095.ctp-c:hover {
2096transform: translateY(-4px);
2097box-shadow: 0 18px 44px rgba(11, 11, 12, .08)
2098}
2099.ctp-n:hover {
2100color: #FF9500 !important
2101}
2102.ctp-m a:hover {
2103background: #FFB020;
2104border-color: #FFB020;
2105transform: translateY(-2px)
2106}
2107}
2108@media (max-width: 1000px) {
2109.ctp-g {
2110grid-template-columns: 1fr
2111}
2112}
2113</style> <section class="sec ctp-sec" id="phones"> <div class="wrap"> <div class="sh sh-r"> <div> <div class="pill rv"> <i></i>
2114Телефоны
2115</div> <h2 class="d2 rv dl1">
2116Кому
2117<span class="grad">звонить</span> </h2> </div> <p class="lead ctp-lead rv dl2">Не дозвонились — напишите в мессенджер или на почту, перезвоним в рабочее время.</p> </div> <div class="ctp-g"> <div class="ctp-c rv dl1"> <div class="ctp-l">Отдел продаж · основной</div> <a class="ctp-n" href="tel:+79219679674">+7 921 967-96-74</a> <div class="ctp-d">Расчёт стоимости, экскурсия на производство, наличие на складе. На этот номер отвечаем и в мессенджерах.</div> <div class="ctp-m"> <a href="https://wa.me/79219679674" target="_blank" rel="noopener">Вотсап</a> <a href="https://max.ru/join/CT3VhV2vx1vMfhljktT0bD6Eql_bwNN5BFULFEYHQwc" target="_blank" rel="noopener">MAX</a> <a href="https://t.me/countryhousespb" target="_blank" rel="noopener">Телеграм-канал</a> </div> </div> <div class="ctp-c rv dl2"> <div class="ctp-l">Отдел продаж</div> <a class="ctp-n" href="tel:+79219679673">+7 921 967-96-73</a> <div class="ctp-d">Второй номер отдела продаж — если основной занят. Документы и реквизиты — на почту.</div> <div class="ctp-m"> <a href="mailto:[email protected]">[email protected]</a> </div> </div> <div class="ctp-c rv dl3"> <div class="ctp-l">Сервис · гарантия</div> <a class="ctp-n" href="tel:+79219679675">+7 921 967-96-75</a> <div class="ctp-d">Вопросы по построенным объектам: гарантийные обращения, обслуживание, дополнительные работы.</div> <div class="ctp-m"> <a href="https://modulniye-doma.ru/garantii">Что покрывает гарантия</a> </div> </div> </div> </div> </section> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328379201" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ct__03-visit v1.0 · четыре шага визита на производство: день → цех (3 цеха, 3 000 м² — канон /production) → площадка (выставочная зона и склад — канон обзора цеха 25.08) → офис на территории (проектировщик правит планировку при вас) · перелинковка: /production, /nalichie · префикс ctv-, база из 00a–00c, появление — блок 99 --> <style>
2118.ctv-sec {
2119padding-top: 0 !important
2120}
2121.ctv-g {
2122display: grid;
2123grid-template-columns: repeat(4, 1fr);
2124gap: clamp(10px, 1.2vw, 16px)
2125}
2126.ctv-s {
2127background: #fff;
2128border: 1px solid rgba(11, 11, 12, .08);
2129border-radius: 22px;
2130padding: 20px 22px;
2131display: flex;
2132flex-direction: column
2133}
2134.ctv-n {
2135font-size: 30px !important;
2136font-weight: 800 !important;
2137letter-spacing: -.05em;
2138line-height: 1;
2139color: #FF9500 !important;
2140margin-bottom: 10px
2141}
2142.ctv-t {
2143font-size: 14.5px !important;
2144font-weight: 600 !important;
2145letter-spacing: -.02em;
2146color: #0B0B0C !important;
2147margin-bottom: 6px
2148}
2149.ctv-d {
2150font-size: 12.8px !important;
2151font-weight: 300 !important;
2152line-height: 1.5 !important;
2153color: #5A5A5F !important
2154}
2155.ctv-lead {
2156max-width: 400px
2157}
2158.ctv-lead a {
2159color: #FF9500 !important;
2160font-weight: 500 !important;
2161border-bottom: 1px solid rgba(255, 149, 0, .35);
2162transition: border-color .3s
2163}
2164@media (hover: hover) {
2165.ctv-lead a:hover {
2166border-color: #FF9500
2167}
2168}
2169@media (max-width: 1000px) {
2170.ctv-g {
2171grid-template-columns: 1fr 1fr
2172}
2173}
2174@media (max-width: 640px) {
2175.ctv-g {
2176grid-template-columns: 1fr
2177}
2178}
2179</style> <section class="sec ctv-sec" id="visit"> <div class="wrap"> <div class="sh sh-r"> <div> <div class="pill rv"> <i></i>
2180Как проходит визит
2181</div> <h2 class="d2 rv dl1">
2182Один час — и вы
2183<span class="grad">видите всё</span> </h2> </div> <p class="lead ctv-lead rv dl2">Подробно о цехе и технологии — на странице <a href="https://modulniye-doma.ru/production">производства</a>, а что стоит на площадке прямо сейчас — в разделе <a href="https://modulniye-doma.ru/nalichie">«В наличии»</a>.</p> </div> <div class="ctv-g"> <div class="ctv-s rv dl1"> <div class="ctv-n">01</div> <div class="ctv-t">Договариваемся о дне</div> <div class="ctv-d">Звонок или сообщение накануне — подскажем, как проехать по территории технопарка, и встретим.</div> </div> <div class="ctv-s rv dl2"> <div class="ctv-n">02</div> <div class="ctv-t">Цех</div> <div class="ctv-d">Три цеха, 3 000 м²: заготовка, малярная камера, сборка. Дома на разных стадиях — от каркаса пола до готового модуля.</div> </div> <div class="ctv-s rv dl3"> <div class="ctv-n">03</div> <div class="ctv-t">Площадка</div> <div class="ctv-d">Выставочная зона и склад готовых модулей: зайти внутрь, сравнить отделки, посмотреть бани.</div> </div> <div class="ctv-s rv dl4"> <div class="ctv-n">04</div> <div class="ctv-t">Кофе и проект</div> <div class="ctv-d">Офис на территории: проектировщик правит планировку при вас, менеджер считает смету.</div> </div> </div> </div> </section> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328379301" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ct__04-legal v1.0 · юридический адрес текстом с пометкой «офиса для встреч нет» (карта на юрадрес снята — в доме двойник, аудит 25.08) · реквизиты из базы фактов · документы по запросу · перелинковка: /garantii, /privacy, /production · префикс ctl-, база из 00a–00c, появление — блок 99 · ПЕРЕД формой 15-cta --> <style>
2184.ctl-sec {
2185padding-top: 0 !important
2186}
2187.ctl-g {
2188display: grid;
2189grid-template-columns: 1fr 1fr;
2190gap: clamp(12px, 1.4vw, 18px)
2191}
2192.ctl-b {
2193background: #fff;
2194border: 1px solid rgba(11, 11, 12, .08);
2195border-radius: clamp(20px, 2.4vw, 32px);
2196padding: clamp(22px, 2.6vw, 34px);
2197display: flex;
2198flex-direction: column
2199}
2200.ctl-b h3 {
2201font-size: clamp(17px, 1.5vw, 21px) !important;
2202font-weight: 700 !important;
2203letter-spacing: -.025em;
2204color: #0B0B0C !important;
2205margin: 0 0 12px !important
2206}
2207.ctl-b p {
2208font-size: 14px !important;
2209font-weight: 300 !important;
2210line-height: 1.62 !important;
2211color: #5A5A5F !important;
2212margin: 0 !important
2213}
2214.ctl-rq {
2215font-size: 12.5px !important;
2216font-weight: 300 !important;
2217line-height: 1.8 !important;
2218color: #5A5A5F !important;
2219margin-top: 12px
2220}
2221.ctl-rq b {
2222font-weight: 600 !important;
2223color: #0B0B0C !important
2224}
2225.ctl-l {
2226display: flex;
2227gap: 8px;
2228flex-wrap: wrap;
2229margin-top: auto;
2230padding-top: 16px
2231}
2232@media (max-width: 1000px) {
2233.ctl-g {
2234grid-template-columns: 1fr
2235}
2236}
2237</style> <section class="sec ctl-sec" id="legal"> <div class="wrap"> <div class="ctl-g"> <div class="ctl-b rv dl1"> <h3>Юридический адрес</h3> <p>Для договоров, счетов и почтовой корреспонденции. Офиса для встреч по этому адресу нет — все встречи проходят на производстве в Суонтаке.</p> <div class="ctl-rq"> <b>ООО «КАНТРИ ХАУС»</b> <br>
2238194156, Санкт-Петербург, ул. Зеленогорская, д. 4, лит. А, пом. 167-Н, оф. 3
2239<br>
2240ИНН 7804631263 · КПП 780201001 · ОГРН 1187847330516
2241<br>
2242Генеральный директор Кузьмин Василий Михайлович
2243</div> </div> <div class="ctl-b rv dl2"> <h3>Реквизиты и документы</h3> <p>Работаем по официальному договору с фиксированной сметой. Реквизиты для оплаты и сертификат ПРОМТЕХСТАНДАРТ высылаем по запросу на почту или в мессенджер. Условия гарантии — 5 лет по договору — на отдельной странице.</p> <div class="ctl-l"> <a href="https://modulniye-doma.ru/garantii" class="b b-out b-sm"> <span>Гарантии</span> </a> <a href="https://modulniye-doma.ru/production" class="b b-out b-sm"> <span>О производстве</span> </a> <a href="https://modulniye-doma.ru/privacy" class="b b-out b-sm"> <span>Политика конфиденциальности</span> </a> </div> </div> </div> </div> </section> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328379501" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ═══ БЛОК 15-cta · Форма заявки · ВЕРСИЯ 3.2 · АВТОНОМНАЯ + ПОПАП-СЛОТ ═══
2244Та же форма, что версия 2.1 (два поля + согласие, тильдовская
2245механика нетронута), но теперь блок несёт ВСЕ свои стили в себе:
2246цвета, шрифты и размеры зашиты литералами токенов с !important
2247под уникальным префиксом ctq-.
2248ЗАЧЕМ: раньше вид формы держали базовые стили главной (00a–00c),
2249и блок нельзя было перенести на другую страницу. Теперь можно:
2250вставил на страницу модели, туризма или статьи — выглядит
2251точно как на главной. Чип «Ваш запрос / Расчёт» тоже стилизован
2252внутри блока — работает на страницах без 00e.
2253НА ГЛАВНОЙ: заменяет версию 2.1 без визуальных изменений
2254(двойные классы: базовые остаются, ctq дублирует значения).
2255ПРИ ТИРАЖЕ НА ДРУГУЮ СТРАНИЦУ поменять три вещи:
22561) name="zayavka-glavnaya" → своё имя формы,
22572) value у tildaspec-formname → своя подпись в письме,
22583) на странице нужен свой донор с приёмщиками и скрипт переноса
2259formservices (как в 99-scripts, part «перенос приёмщиков»).
2260ВЕРСИЯ 3.1: внутри блока добавлено всплывающее окно (ctq-m) с копией
2261формы (name="zayavka-popup", свои id). Открывается скриптами v6
2262по клику на любую кнопку заявки — человек заполняет, не уезжая
2263со своего места на странице. Низовая форма остаётся фиÐ
2263½Ð°Ð»Ð¾Ð¼
2264страницы. Приёмщики переносятся скриптом в обе формы.
2265Якорь id="cta" — один раз на странице. --> <style>
2266/* ═══ ctq — автономные стили формы, значения токенов зашиты литералами,
2267чтобы блок работал на ЛЮБОЙ странице без базовых стилей главной ═══ */
2268.ctq {
2269background: #FBFAF8 !important;
2270padding: clamp(56px, 9vh, 132px) 0 !important
2271}
2272.ctq .ctq-wrap {
2273max-width: 1360px;
2274margin: 0 auto;
2275padding: 0 clamp(16px, 3.4vw, 44px)
2276}
2277.ctq .ctq-box {
2278display: grid !important;
2279grid-template-columns: 1fr 1fr;
2280gap: clamp(26px, 4vw, 64px);
2281align-items: center;
2282background: #F2F0EC !important;
2283border-radius: clamp(24px, 3vw, 42px) !important;
2284padding: clamp(26px, 4vw, 60px) !important;
2285}
2286.ctq .ctq-pill {
2287display: inline-flex;
2288align-items: center;
2289gap: 8px;
2290padding: 8px 18px;
2291border-radius: 100px;
2292background: rgba(255, 176, 32, .12) !important;
2293border: 1px solid rgba(255, 176, 32, .24);
2294font-family: 'Manrope', sans-serif !important;
2295font-size: 12px !important;
2296font-weight: 600;
2297color: #FF9500 !important;
2298margin-bottom: 22px;
2299}
2300.ctq .ctq-pill i {
2301width: 6px;
2302height: 6px;
2303border-radius: 50%;
2304background: #FFB020 !important
2305}
2306.ctq .ctq-h {
2307font-family: 'Manrope', sans-serif !important;
2308font-size: clamp(34px, 5.2vw, 82px) !important;
2309font-weight: 700 !important;
2310line-height: 1 !important;
2311letter-spacing: -.048em !important;
2312color: #0B0B0C !important;
2313margin: 0 0 16px !important;
2314}
2315.ctq .ctq-grad {
2316background: linear-gradient(105deg, #FF9500 0%, #FFB020 45%, #FFC95C 100%);
2317-webkit-background-clip: text;
2318background-clip: text;
2319color: transparent !important;
2320}
2321.ctq .ctq-lead {
2322font-family: 'Manrope', sans-serif !important;
2323font-size: clamp(15px, 1.25vw, 18px) !important;
2324font-weight: 300 !important;
2325line-height: 1.62 !important;
2326color: #5A5A5F !important;
2327margin: 0 0 30px !important;
2328}
2329.ctq .ctq-cp {
2330display: grid;
2331grid-template-columns: 1fr 1fr;
2332gap: 10px
2333}
2334.ctq .ctq-cpi {
2335background: #FFFFFF !important;
2336border-radius: 22px !important;
2337padding: 17px 20px !important;
2338transition: transform .5s cubic-bezier(.34, 1.4, .5, 1);
2339}
2340.ctq .ctq-cpi:hover {
2341transform: translateY(-4px)
2342}
2343.ctq .ctq-cpt {
2344font-family: 'Manrope', sans-serif !important;
2345font-size: 15.5px !important;
2346font-weight: 700 !important;
2347letter-spacing: -.03em;
2348color: #0B0B0C !important;
2349margin-bottom: 3px;
2350}
2351.ctq .ctq-cpd {
2352font-family: 'Manrope', sans-serif !important;
2353font-size: 12.5px !important;
2354font-weight: 300 !important;
2355color: #5A5A5F !important;
2356line-height: 1.45;
2357}
2358.ctq .ctq-form {
2359background: #FFFFFF !important;
2360border-radius: clamp(20px, 2.6vw, 32px) !important;
2361padding: clamp(24px, 3vw, 40px) !important;
2362box-shadow: 0 24px 64px rgba(11, 11, 12, .09) !important;
2363}
2364.ctq .ctq-ft {
2365font-family: 'Manrope', sans-serif !important;
2366font-size: 25px !important;
2367font-weight: 800 !important;
2368letter-spacing: -.04em;
2369color: #0B0B0C !important;
2370margin-bottom: 5px;
2371}
2372.ctq .ctq-fs {
2373font-family: 'Manrope', sans-serif !important;
2374font-size: 13.5px !important;
2375font-weight: 300 !important;
2376color: #5A5A5F !important;
2377margin-bottom: 24px;
2378}
2379.ctq .ctq-fgp {
2380margin-bottom: 11px
2381}
2382.ctq .ctq-fin {
2383width: 100% !important;
2384padding: 16px 22px !important;
2385border-radius: 100px !important;
2386background: #F2F0EC !important;
2387border: 1.5px solid transparent !important;
2388font-family: 'Manrope', sans-serif !important;
2389font-size: 14.5px !important;
2390font-weight: 500 !important;
2391color: #0B0B0C !important;
2392outline: none !important;
2393box-sizing: border-box;
2394-webkit-appearance: none;
2395appearance: none;
2396transition: all .35s cubic-bezier(.16, 1, .3, 1);
2397}
2398.ctq .ctq-fin::placeholder {
2399color: #95959B !important;
2400font-weight: 300
2401}
2402.ctq .ctq-fin:focus {
2403border-color: #FFB020 !important;
2404background: #FFFFFF !important;
2405box-shadow: 0 0 0 4px rgba(255, 176, 32, .12) !important
2406}
2407.ctq .ctq-fch {
2408display: flex;
2409gap: 11px;
2410align-items: flex-start;
2411margin: 18px 0 20px
2412}
2413.ctq .ctq-fch input {
2414width: 18px;
2415height: 18px;
2416margin-top: 1px;
2417accent-color: #FFB020 !important;
2418flex-shrink: 0;
2419cursor: pointer
2420}
2421.ctq .ctq-fch label {
2422font-family: 'Manrope', sans-serif !important;
2423font-size: 12.5px !important;
2424font-weight: 300 !important;
2425color: #95959B !important;
2426line-height: 1.5;
2427cursor: pointer;
2428}
2429.ctq .ctq-fch label a {
2430color: #FF9500 !important
2431}
2432.ctq .ctq-fsb {
2433width: 100% !important;
2434padding: 19px !important;
2435border-radius: 100px !important;
2436background: #0B0B0C !important;
2437color: #FFFFFF !important;
2438border: none !important;
2439font-family: 'Manrope', sans-serif !important;
2440font-size: 15px !important;
2441font-weight: 600 !important;
2442cursor: pointer;
2443position: relative;
2444overflow: hidden;
2445isolation: isolate;
2446transition: transform .5s cubic-bezier(.34, 1.4, .5, 1), box-shadow .4s, color .3s;
2447}
2448.ctq .ctq-fsb::before {
2449content: '';
2450position: absolute;
2451inset: 0;
2452z-index: -1;
2453background: #FFB020 !important;
2454border-radius: inherit;
2455transform: scale(0);
2456transition: transform .55s cubic-bezier(.16, 1, .3, 1);
2457}
2458.ctq .ctq-fsb:hover {
2459color: #0B0B0C !important;
2460transform: translateY(-3px);
2461box-shadow: 0 14px 40px rgba(255, 176, 32, .36) !important
2462}
2463.ctq .ctq-fsb:hover::before {
2464transform: scale(1.6)
2465}/* чип «расчёт/запрос» — копия ccp в зоне блока, для страниц без 00e */
2466.ctq .ctq-form .ccp {
2467display: none;
2468font-family: 'Manrope', sans-serif !important;
2469font-size: 12.5px !important;
2470font-weight: 500 !important;
2471line-height: 1.5;
2472color: #0B0B0C !important;
2473background: rgba(255, 176, 32, .12) !important;
2474border: 1px solid rgba(255, 176, 32, .35) !important;
2475border-radius: 16px !important;
2476padding: 12px 16px !important;
2477margin-bottom: 14px;
2478}
2479.ctq .ctq-form .ccp b {
2480font-weight: 700
2481}
2482.ctq .ctq-form .ccp.ccp-on {
2483display: block;
2484animation: ctqin .5s cubic-bezier(.16, 1, .3, 1)
2485}
2486@keyframes ctqin {
2487from {
2488opacity: 0;
2489transform:translateY(-8px)
2490}
2491to {
2492opacity: 1;
2493transform: none
2494}
2495}
2496@media (max-width: 640px) {
2497.ctq .ctq-box {
2498grid-template-columns: 1fr;
2499padding: 20px
2500}
2501.ctq .ctq-cp {
2502grid-template-columns: 1fr
2503}
2504.ctq .ctq-h {
2505font-size: 34px !important
2506}
2507}/* — всплывающее окно заявки — */
2508.ctq-m {
2509position: fixed;
2510inset: 0;
2511z-index: 900;
2512display: none;
2513align-items: center;
2514justify-content: center;
2515padding: 18px;
2516background: rgba(11, 11, 12, .62) !important;
2517backdrop-filter: blur(8px);
2518}
2519.ctq-m.on {
2520display: flex;
2521animation: ctqmf .35s cubic-bezier(.16, 1, .3, 1)
2522}
2523@keyframes ctqmf {
2524from {
2525opacity:0
2526}
2527to {
2528opacity: 1
2529}
2530}
2531.ctq-md {
2532position: relative;
2533width: 100%;
2534max-width: 440px;
2535max-height: calc(100svh - 36px);
2536overflow: auto;
2537animation: ctqmd .45s cubic-bezier(.16, 1, .3, 1);
2538}
2539@keyframes ctqmd {
2540from {
2541opacity: 0;
2542transform:translateY(22px) scale(.97)
2543}
2544to {
2545opacity: 1;
2546transform: none
2547}
2548}
2549.ctq-mx {
2550position: absolute;
2551top: 14px;
2552right: 14px;
2553z-index: 2;
2554width: 38px;
2555height: 38px;
2556border-radius: 100px;
2557background: #F2F0EC !important;
2558border: none;
2559cursor: pointer;
2560display: flex;
2561align-items: center;
2562justify-content: center;
2563transition: background .3s, transform .4s cubic-bezier(.34, 1.4, .5, 1);
2564}
2565.ctq-mx:hover {
2566background: #FFB020 !important;
2567transform: rotate(90deg)
2568}
2569.ctq-mx svg {
2570width: 15px;
2571height: 15px;
2572stroke: #0B0B0C;
2573stroke-width: 2.4;
2574fill: none;
2575stroke-linecap: round
2576}
2577</style> <section class="sec cta ctq" id="cta"> <div class="wrap ctq-wrap"> <div class="cbox rv ctq-box"> <div class="cl"> <div class="pill ctq-pill"> <i></i>
2578Заявка
2579</div> <h2 class="d2 ctq-h">
2580Договоримся
2581<br> <span class="grad ctq-grad">о визите</span> </h2> <p class="lead ctq-lead">Назначим день экскурсии на производство или сориентируем по стоимости и срокам без визита. Оставьте телефон — перезвоним в рабочее время.</p> <div class="cp ctq-cp"> <div class="cpi ctq-cpi"> <div class="cpt ctq-cpt">В рабочий день</div> <div class="cpd ctq-cpd">Сориентируем по стоимости</div> </div> <div class="cpi ctq-cpi"> <div class="cpt ctq-cpt">Бесплатно</div> <div class="cpd ctq-cpd">Выезд на участок и консультация</div> </div> <div class="cpi ctq-cpi"> <div class="cpt ctq-cpt">Фикс. цена</div> <div class="cpd ctq-cpd">Стоимость закреплена в договоре</div> </div> <div class="cpi ctq-cpi"> <div class="cpt ctq-cpt">Вся Россия</div> <div class="cpd ctq-cpd">Доставка и монтаж в любой регион</div> </div> </div> </div> <form class="form t-form js-form-proccess ctq-form" data-formactiontype="2" data-inputbox=".fgp" name="zayavka-glavnaya"> <input type="hidden" name="tildaspec-formname" value="Заявка со страницы Контакты"> <div class="ft ctq-ft">Оставить заявку</div> <div class="fs ctq-fs">Ответим в течение рабочего дня</div> <div class="fgp ctq-fgp"> <input type="text" name="Name" class="fin t-input js-tilda-rule ctq-fin" data-tilda-req="1" data-tilda-rule="name" id="fn" placeholder="Ваше имя" required> </div> <div class="fgp ctq-fgp"> <input type="tel" name="Phone" class="fin t-input js-tilda-rule ctq-fin" data-tilda-req="1" data-tilda-rule="phone" id="fp" placeholder="+7 (000) 000-00-00" required> </div> <div class="fgp ctq-fgp fch ctq-fch"> <input type="checkbox" name="Soglasie" value="Согласие получено" class="js-tilda-rule" data-tilda-req="1" id="ok" required> <label for="ok">
2582Я даю согласие на обработку персональных данных и ознакомлен с
2583<a href="https://modulniye-doma.ru/privacy" target="_blank" rel="noopener" style="text-decoration:underline!important">политикой конфиденциальности</a> </label> </div> <button type="submit" class="fsb ctq-fsb" id="sub"> <span style="position:relative;z-index:1">Отправить</span> </button> <div class="js-successbox" style="display:none;padding:22px 0;text-align:center"> <div class="cpt ctq-cpt" style="margin-bottom:6px">Заявка отправлена</div> <div class="cpd ctq-cpd">Свяжемся с вами в рабочее время</div> </div> </form> </div> </div> <!-- Всплывающая форма: открывается скриптом v6 по клику на любую
2584кнопку заявки. Копия основной формы: своё имя zayavka-popup,
2585свои id, те же приёмщики (скрипт переносит в обе). --> <!-- Всплывающее окно. ВЕРСИЯ 3.2: внутри не копия формы, а СЛОТ —
2586при открытии скрипт v8 перемещает сюда единственную форму
2587страницы (zayavka-glavnaya), при закрытии возвращает на место.
2588Причина: бэкенд Тильды рассылает приёмщикам только «родную»
2589форму — копия с другим именем принималась в «Заявки»,
2590но письма и Telegram по ней не отправлялись. Одна форма
2591решает это архитектурно. --> <div class="ctq-m" id="ctqm" role="dialog" aria-modal="true" aria-label="Заявка"> <div class="ctq-md"> <button type="button" class="ctq-mx" aria-label="Закрыть"> <svg viewBox="0 0 24 24"> <path d="M6 6l12 12M18 6L6 18"/> </svg> </button> <div class="ctq-slot"></div> </div> </div> </section> <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328379601" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ct__98-schema v1.0 · BreadcrumbList (2) + ContactPage (dateModified, +03:00) + LocalBusiness/HomeAndConstructionBusiness: адрес производства, телефоны с назначением (contactPoint), часы, hasMap на карточку Яндекса, geo — координаты из карточки Яндекса (PASTE-GEO-*) · FAQPage нет (на странице нет FAQ) 
2591· aggregateRating НЕ добавлен: самооценка в LocalBusiness нарушает правила Google, рейтинг живёт в видимом тексте с указанием источника · отдельный T123 в конце страницы · Проверка: validator.schema.org (0 ошибок) + search.google.com/test/rich-results --> 
2591<script type="application/ld+json">
2592{
2593"@context": "https://schema.org",
2594"@graph": [
2595{
2596"@type": "BreadcrumbList",
2597"itemListElement": [
2598{
2599"@type": "ListItem",
2600"position": 1,
2601"name": "Главная",
2602"item": "https://modulniye-doma.ru/"
2603},
2604{
2605"@type": "ListItem",
2606"position": 2,
2607"name": "Контакты",
2608"item": "https://modulniye-doma.ru/contacts"
2609}
2610]
2611},
2612{
2613"@type": "ContactPage",
2614"@id": "https://modulniye-doma.ru/contacts#page",
2615"url": "https://modulniye-doma.ru/contacts",
2616"name": "Контакты Кантри Хаус — производство в Суонтаке, телефоны",
2617"inLanguage": "ru-RU",
2618"dateModified": "2026-08-26T12:00:00+03:00",
2619"about": {
2620"@id": "https://modulniye-doma.ru/contacts#org"
2621},
2622"mainEntity": {
2623"@id": "https://modulniye-doma.ru/contacts#org"
2624}
2625},
2626{
2627"@type": [
2628"LocalBusiness",
2629"HomeAndConstructionBusiness"
2630],
2631"@id": "https://modulniye-doma.ru/contacts#org",
2632"name": "Кантри Хаус",
2633"alternateName": "Country House",
2634"legalName": "ООО «КАНТРИ ХАУС»",
2635"vatID": "7804631263",
2636"taxID": "7804631263",
2637"url": "https://modulniye-doma.ru/",
2638"image": "https://static.tildacdn.com/tild6536-3936-4361-b731-363865353661/ct-og.jpg",
2639"logo": "https://static.tildacdn.com/tild3437-3666-4166-a131-333336333238/CH-lokap-na-temnom.svg",
2640"description": "Производитель модульных домов и бань. Собственный цех в теÑ
2640…нопарке Суонтака под Санкт-Петербургом, доставка и монтаж по всей России.",
2641"telephone": [
2642"+7 921 967-96-74",
2643"+7 921 967-96-73"
2644],
2645"email": "[email protected]",
2646"priceRange": "₽₽₽",
2647"address": {
2648"@type": "PostalAddress",
2649"streetAddress": "территория технопарк Суонтака, Юкковское сельское поселение",
2650"addressLocality": "Всеволожский район",
2651"addressRegion": "Ленинградская область",
2652"addressCountry": "RU"
2653},
2654"geo": {
2655"@type": "GeoCoordinates",
2656"latitude": "PASTE-GEO-LAT",
2657"longitude": "PASTE-GEO-LON"
2658},
2659"hasMap": "https://yandex.ru/maps/org/country_house/82308979593",
2660"openingHoursSpecification": [
2661{
2662"@type": "OpeningHoursSpecification",
2663"dayOfWeek": [
2664"Monday",
2665"Tuesday",
2666"Wednesday",
2667"Thursday",
2668"Friday"
2669],
2670"opens": "09:00",
2671"closes": "18:00"
2672}
2673],
2674"contactPoint": [
2675{
2676"@type": "ContactPoint",
2677"contactType": "sales",
2678"telephone": "+7 921 967-96-74",
2679"email": "[email protected]",
2680"availableLanguage": "ru",
2681"areaServed": "RU"
2682},
2683{
2684"@type": "ContactPoint",
2685"contactType": "sales",
2686"telephone": "+7 921 967-96-73",
2687"availableLanguage": "ru",
2688"areaServed": "RU"
2689},
2690{
2691"@type": "ContactPoint",
2692"contactType": "customer service",
2693"telephone": "+7 921 967-96-75",
2694"availableLanguage": "ru",
2695"areaServed": "RU"
2696}
2697],
2698"sameAs": [
2699"https://vk.com/modulcountryhouse",
2700"https://t.me/countryhousespb",
2701"https://dzen.ru/countryhousespb",
2702"https://rutube.ru/channel/49784225/",
2703"https://yandex.ru/maps/org/country_house/82308979593"
2704]
2705}
2706]
2707}
2708</script>
2708 <!-- nominify end --> </div> </div> </div> </div> <div id="rec3328374701" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ═══ БЛОК 99 · СКРИПТЫ ═══
2709     Вставить ПОСЛЕДНИМ блоком страницы, после всех секций.
2710     Отвечает за: мобильное меню, подсветку в шапке, аккордеон FAQ,
2711     появление блоков при скролле, оба калькулятора, перенос приёмщиков формы.
2712
2713     ВЕРСИЯ 8 (защищённая). Что изменилось против первой:
2714     каждая подсистема живёт в своём блоке и в своём try. Раньше весь скрипт
2715     был одной цепочкой: если на странице не оказывалось шапки (#nav, #bg, #mob)
2716     или картинки героя (#hi), первая же строка выбрасывала TypeError и всё
2717     ниже НЕ выполнялось — включая перенос приёмщиков. Заявки при этом
2718     переставали уходить молча, без ошибки в интерфейсе. Такой сценарий
2719     возникает на боевой, если Header Тильды оставлен, а блок 01-nav не вставлен.
2720     Теперь отсутствие любого узла лишь отключает свою подсистему.
2721     ЛОГИКА РАСЧЁТОВ, ТЕКСТЫ И КОЭФФИЦИЕНТЫ НЕ МЕНЯЛИСЬ.
2722
2723     Проверка после вставки: в консоли должно быть «CH: инициализировано»
2724     со списком включённых подсистем. Строка «блок-донор не найден» означает,
2725     что форма НЕ отправит заявку. --> 
2725<script>
2726(function(){
2727  var ok=[],fail=[];
2728  function part(name,fn){try{if(fn()!==false)ok.push(name);else fail.push(name)}catch(e){fail.push(name);console.warn('CH: подсистема «'+name+'» не запустилась —',e.message)}}
2729
2730  var nav=document.getElementById('nav'),
2731      up=document.getElementById('up'),
2732      hi=document.getElementById('hi'),
2733      bg=document.getElementById('bg'),
2734      mob=document.getElementById('mob');
2735
2736  /* ══ СКРОЛЛ: шапка, подсветка пункта, параллакс героя, кнопка «наверх» ══ */
2737  var secs=['catalog','stock','b2b','prod','video','faq'];
2738  var nml=document.querySelectorAll('.nm a');
2739  function sc(){
2740    if(document.body.style.overflow==='hidden')return;
2741    var y=window.scrollY;
2742    if(nav)nav.classList.toggle('on',y>window.innerHeight*.6);
2743    if(up)up.classList.toggle('show',y>700);
2744    if(hi&&y<window.innerHeight)hi.style.transform='translateY('+(y*.26)+'px)';
2745    if(nml.length){
2746      var c='';secs.forEach(function(id){var e=document.getElementById(id);if(e&&y>=e.offsetTop-160)c=id});
2747      nml.forEach(function(a){a.classList.toggle('act',a.getAttribute('href')==='#'+c)});
2748    }
2749  }
2750  part('скролл',function(){
2751    addEventListener('scroll',sc,{passive:true});sc();
2752    if(up)up.onclick=function(){scrollTo({top:0,behavior:'smooth'})};
2753  });
2754
2755  /* ══ МОБИЛЬНОЕ МЕНЮ ══
2756     cm() вызывается из onclick в блоке 01-nav, поэтому остаётся глобальной.
2757     Если шапки на странице нет — заглушка, чтобы разметка не ругалась. ══ */
2758  window.cm=function(){
2759    if(bg)bg.classList.remove('x');
2760    if(mob)mob.classList.remove('open');
2761    document.body.style.overflow='';sc();
2762  };
2763  part('мобильное меню',function(){
2764    if(!bg||!mob)return false;
2765    bg.onclick=function(){
2766      var o=!mob.classList.contains('open');
2767      bg.classList.toggle('x',o);mob.classList.toggle('open',o);
2768      document.body.style.overflow=o?'hidden':'';
2769      if(o){if(nav)nav.classList.add('on')}else sc();
2770    };
2771  });
2772
2773  /* ══ СЧЁТЧИКИ В ГЕРОЕ ══ */
2774  part('счётчики',function(){
2775    var hst=document.querySelector('.hstats');
2776    if(!hst||!('IntersectionObserver' in window))return false;
2777    function tk(el,to,d){if(!el)return;var s=null;
2778      (function f(t){if(!s)s=t;var p=Math.min((t-s)/d,1);
2779        el.textContent=Math.floor((1-Math.pow(1-p,4))*to);
2780        if(p<1)requestAnimationFrame(f)})(performance.now())}
2781    var dn=false;
2782    new IntersectionObserver(function(e){
2783      if(e[0].isIntersecting&&!dn){dn=true;
2784        tk(document.getElementById('n1'),380,2100);
2785        tk(document.getElementById('n2'),9,1300);   /* ЦИФРА ЛЕТ: сверить с Василием (вопрос 37), дублируется в hero, подвале и Schema */
2786        tk(document.getElementById('n3'),5,1100)}
2787    },{threshold:.4}).observe(hst);
2788  });
2789
2790  /* ══ ПОЯВЛЕНИЕ БЛОКОВ ПРИ СКРОЛЛЕ ══
2791     Если IntersectionObserver недоступен — показываем всё сразу,
2792     иначе страница осталась бы пустой. ══ */
2793  part('анимация появления',function(){
2794    var els=document.querySelectorAll('.rv');
2795    if(!els.length)return false;
2796    if(!('IntersectionObserver' in window)){els.forEach(function(el){el.classList.add('in')});return}
2797    var ob=new IntersectionObserver(function(es){
2798      es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');ob.unobserve(e.target)}})
2799    },{threshold:.05,rootMargin:'0px 0px -50px 0px'});
2800    els.forEach(function(el){ob.observe(el)});
2801    setTimeout(function(){document.querySelectorAll('.hero .rv').forEach(function(el){el.classList.add('in')})},80);
2802  });
2803
2804  /* ══ АККОРДЕОН FAQ ══ */
2805  part('аккордеон',function(){
2806    var qs=document.querySelectorAll('.fq');
2807    if(!qs.length)return false;
2808    qs.forEach(function(b){b.onclick=function(){
2809      var it=b.closest('.fi'),w=it.classList.contains('open');
2810      document.querySelectorAll('.fi').forEach(function(i){i.classList.remove('open')});
2811      if(!w)it.classList.add('open');
2812    }});
2813  });
2814
2815  /* ══ МАГНИТНЫЕ КНОПКИ ══ */
2816  part('магнитные кнопки',function(){
2817    if(!matchMedia('(hover:hover)').matches)return false;
2818    document.querySelectorAll('.b,.bc-go,.so,.ic,.arw').forEach(function(el){
2819      el.addEventListener('mousemove',function(e){
2820        var r=el.getBoundingClientRect();
2821        var x=(e.clientX-r.left-r.width/2)*.22;
2822        var y=(e.clientY-r.top-r.height/2)*.22;
2823        el.style.transform='translate('+x+'px,'+y+'px) translateY(-3px)';
2824      });
2825      el.addEventListener('mouseleave',function(){el.style.transform=''});
2826    });
2827  });
2828
2829  /* ══ КАЛЬКУЛЯТОР СТОИМОСТИ ══ */
2830  part('калькулятор стоимости',function(){
2831    var nf=function(n){return new Intl.NumberFormat('ru-RU').format(Math.round(n))};
2832    var rA=document.getElementById('rA'),rB=document.getElementById('rB'),
2833        cG=document.getElementById('cG'),cE=document.getElementById('cE');
2834    if(!rA||!rB||!cG||!cE)return false;
2835    var calc=function(){
2836      var on=cG.querySelector('.ch-b.on');if(!on)return;
2837      var a=+rA.value,b=+rB.value,k=+on.dataset.k,add=0;
2838      cE.querySelectorAll('.ch-b.on').forEach(function(c){add+=+c.dataset.a});
2839      /* КОЭФФИЦИЕНТ 62 000 ₽/м² — ЗАГЛУШКА. Заменить на реальный из прайса
2840         Василия (вопрос 41) ДО переноса на боевую: это публичная цена. */
2841      var sum=a*62000*k+(b-1)*180000+add;
2842      var term=Math.max(2,Math.round((1.6+a/70+(k>1.5?0.6:0))*10)/10);
2843      document.getElementById('cA').textContent=a+' м²';
2844      document.getElementById('cB').textContent=b;
2845      document.getElementById('cS').textContent=nf(sum)+' ₽';
2846      document.getElementById('cM').textContent=nf(sum/a)+' ₽';
2847      document.getElementById('cT').textContent=String(term).replace('.',',')+' мес';
2848    };
2849    rA.addEventListener('input',calc);rB.addEventListener('input',calc);
2850    cG.addEventListener('click',function(e){var c=e.target.closest('.ch-b');if(!c)return;
2851      cG.querySelectorAll('.ch-b').forEach(function(x){x.classList.remove('on')});c.classList.add('on');calc()});
2852    cE.addEventListener('click',function(e){var c=e.target.closest('.ch-b');if(!c)return;c.classList.toggle('on');calc()});
2853    calc();
2854  });
2855
2856  /* ══ КАЛЬКУЛЯТОР ОКУПАЕМОСТИ ══ */
2857  part('калькулятор окупаемости',function(){
2858    var nf=function(n){return new Intl.NumberFormat('ru-RU').format(Math.round(n))};
2859    var sC=document.getElementById('sC'),sN=document.getElementById('sN'),sL=document.getElementById('sL');
2860    if(!sC||!sN||!sL)return false;
2861    var wrd=function(n){if(n%1!==0)return 'года окупаемости';
2862      var x=Math.floor(n)%100,y=x%10;
2863      if(x>4&&x<20)return 'лет окупаемости';
2864      if(y===1&&x!==11)return 'год окупаемости';
2865      if(y>1&&y<5)return 'года окупаемости';
2866      return 'лет окупаемости'};
2867    var roi=function(){
2868      var n=+sC.value,p=+sN.value,l=+sL.value/100;
2869      /* МОДЕЛЬ ОКУПАЕМОСТИ. Домик под ключ для базы отдыха — 2,4 млн ₽ (отделка,
2870         мебель, подключение). Инфраструктура +45%: фундаменты, сети, дороги, ресепшен.
2871         Операционные расходы 65% выручки: персонал, бельё, коммуналка, реклама,
2872         комиссии площадок, налоги. Субсидия — до 1,5 млн ₽ за номер и не более
2873         половины проекта. Базовый сценарий даёт 3,8 года — совпадает с рыночной
2874         картиной. Не занижать: честный расчёт и есть наше отличие от конкурентов. */
2875      var mod=n*2400000,inf=mod*0.45,inv=mod+inf;
2876      var sub=Math.min(n*1500000,inv*0.5);
2877      var pay=(inv-sub)/(n*365*l*p*0.35);   /* 0.35 = доля выручки после операционных расходов */
2878      document.getElementById('rC').textContent=n;
2879      document.getElementById('rN').textContent=nf(p)+' ₽';
2880      document.getElementById('rL').textContent=Math.round(l*100)+'%';
2881      var payR=Math.round(pay*10)/10;
2882      document.getElementById('rP').textContent=payR.toString().replace('.',',');
2883      document.getElementById('rW').textContent=wrd(payR);
2884      var warn=document.getElementById('rWarn');
2885      if(warn){
2886        if(pay>7){warn.textContent='Слабый сценарий: при такой загрузке и цене ночи проект окупается медленно. Стоит пересмотреть локацию, класс домиков или сезонность.';
2887          warn.style.background='rgba(226,75,74,.12)';warn.style.borderColor='rgba(226,75,74,.3)';warn.style.color='#F0A9A8';warn.style.display='block';}
2888        else if(pay<1.5){warn.textContent='Слишком оптимистичный сценарий: такие загрузка и цена ночи круглый год встречаются редко. Ориентируйтесь на консервативную оценку.';
2889          warn.style.background='rgba(255,176,32,.12)';warn.style.borderColor='rgba(255,176,32,.35)';warn.style.color='#FFC95C';warn.style.display='block';}
2890        else warn.style.display='none';}
2891      document.getElementById('rI').textContent=(Math.round(inv/100000)/10).toString().replace('.',',')+' млн ₽';
2892      document.getElementById('rS').textContent=(Math.round((inv-sub)/100000)/10).toString().replace('.',',')+' млн ₽';
2893    };
2894    [sC,sN,sL].forEach(function(el){el.addEventListener('input',roi)});roi();
2895  });
2896
2897  /* ══ РАСЧЁТ, ПРИЕХАВШИЙ В ЗАЯВКУ ══ версия 6.
2898     Кнопка id="toForm": расчёт уезжает скрытым полем calc в ОБЕ формы
2899     (низовую и всплывающую), чипы показываются в обеих, открывается
2900     попап; если попапа на странице нет — плавный скролл к #cta. ══ */
2901  function chWrite(field,label,val){
2902    var mf=document.querySelector('form[name="zayavka-glavnaya"]');
2903    if(!mf)return 0;
2904    var h=mf.querySelector('input[name="'+field+'"]');
2905    if(!h){h=document.createElement('input');h.type='hidden';h.name=field;mf.appendChild(h)}
2906    h.value=val;
2907    var chip=mf.querySelector('.ccp');
2908    if(!chip){chip=document.createElement('div');chip.className='ccp';mf.insertBefore(chip,mf.firstChild)}
2909    chip.innerHTML=label+': <b></b>';
2910    chip.querySelector('b').textContent=val;
2911    chip.classList.add('ccp-on');
2912    return 1;
2913  }
2914  function chOpen(){
2915    if(window.chOpenPopup){window.chOpenPopup();return true}
2916    return false;
2917  }
2918  part('расчёт в заявку',function(){
2919    var btn=document.getElementById('toForm');if(!btn)return false;
2920    btn.addEventListener('click',function(){
2921      var sEl=document.getElementById('cS'),a=document.getElementById('cA'),tEl=document.getElementById('cT');
2922      var txt=(sEl&&a&&tEl&&sEl.textContent!=='\u2014')?('Дом '+a.textContent+', примерно '+sEl.textContent+', срок '+tEl.textContent):'';
2923      if(txt)chWrite('calc','Расчёт прикреплён',txt);
2924      if(!chOpen()){
2925        var cta=document.getElementById('cta');
2926        if(cta)cta.scrollIntoView({behavior:'smooth'});else location.hash='#cta';
2927      }
2928    });
2929  });
2930
2931  /* ══ ТИПИЗАЦИЯ ЗАЯВОК ══ версия 6.
2932     Элементы с data-lead кладут метку полем lead в обе формы,
2933     чип «Ваш запрос» в обеих, клик открывает попап (переход по якорю
2934     гасится в подсистеме попапа). ══ */
2935  part('типизация заявок',function(){
2936    var els=document.querySelectorAll('[data-lead]');
2937    if(!els.length)return false;
2938    for(var i=0;i<els.length;i++){
2939      els[i].addEventListener('click',function(){
2940        chWrite('lead','Ваш запрос',this.getAttribute('data-lead')||'');
2941      });
2942    }
2943  });
2944
2945  /* ══ МАСКА ТЕЛЕФОНА ══ добавлено в версии 5 (03.08).
2946     Поле type="tel" получает живую маску +7 (XXX) XXX-XX-XX:
2947     цифры раскладываются по формату при наборе, ведущие 8 и 7
2948     нормализуются, ввод обрезается на 11 цифрах. Удаление
2949     не форматируется — стирать можно свободно. Плейсхолдер
2950     остаётся подсказкой, маска работает поверх. Валидация
2951     Тильды (data-tilda-rule="phone") принимает формат штатно. ══ */
2952  part('маска телефона',function(){
2953    var els=document.querySelectorAll('input[type="tel"]');
2954    if(!els.length)return false;
2955    function fmt(v){
2956      var d=v.replace(/\D/g,'');
2957      if(d.charAt(0)==='8')d='7'+d.slice(1);
2958      if(d.charAt(0)!=='7')d='7'+d;
2959      d=d.slice(0,11);
2960      var r='+7';
2961      if(d.length>1)r+=' ('+d.slice(1,4);
2962      if(d.length>=5)r+=') '+d.slice(4,7);
2963      if(d.length>=8)r+='-'+d.slice(7,9);
2964      if(d.length>=10)r+='-'+d.slice(9,11);
2965      return r;
2966    }
2967    for(var i=0;i<els.length;i++){
2968      els[i].setAttribute('inputmode','tel');
2969      els[i].addEventListener('input',function(){
2970        var prev=this.getAttribute('data-p')||'';
2971        if(this.value.length<prev.length){this.setAttribute('data-p',this.value);return}
2972        if(this.value==='')return;
2973        this.value=fmt(this.value);
2974        this.setAttribute('data-p',this.value);
2975      });
2976      els[i].addEventListener('focus',function(){
2977        if(this.value==='')this.value='+7 (';
2978      });
2979      els[i].addEventListener('blur',function(){
2980        var v=this.value.replace(/\D/g,'');
2981        if(v==='7'||v==='')this.value='';
2982      });
2983    }
2984  });
2985
2986  /* ══ ПОПАП ЗАЯВКИ ══ версия 8.
2987     В окне не копия формы, а слот: при открытии сюда ПЕРЕЕЗЖАЕТ
2988     единственная форма страницы (та, что рассылается приёмщикам),
2989     при закрытии возвращается вниз. Бэкенд Тильды рассылает только
2990     «родную» форму — копия принималась в «Заявки», но письма
2991     и Telegram по ней молчали. Одна кочующая форма снимает это. ══ */
2992  part('попап заявки',function(){
2993    var mod=document.getElementById('ctqm');if(!mod)return false;
2994    var slot=mod.querySelector('.ctq-slot');if(!slot)return false;
2995    var mark=document.createElement('div');mark.style.display='none';mark.className='ctq-mark';
2996    function mainForm(){return document.querySelector('form[name="zayavka-glavnaya"]')}
2997    function open(){
2998      var f=mainForm();if(!f)return;
2999      if(f.parentNode!==slot){
3000        if(!mark.parentNode)f.parentNode.insertBefore(mark,f);
3001        slot.appendChild(f);
3002      }
3003      mod.classList.add('on');document.body.style.overflow='hidden';
3004      var t=f.querySelector('input[type="text"]');
3005      if(t)setTimeout(function(){try{t.focus()}catch(e){}},380);
3006    }
3007    function close(){
3008      mod.classList.remove('on');document.body.style.overflow='';
3009      var f=slot.querySelector('form');
3010      if(f&&mark.parentNode)mark.parentNode.insertBefore(f,mark);
3011    }
3012    window.chOpenPopup=open;
3013    window.chClosePopup=close;
3014    mod.addEventListener('click',function(e){if(e.target===mod)close()});
3015    var x=mod.querySelector('.ctq-mx');if(x)x.addEventListener('click',close);
3016    document.addEventListener('keydown',function(e){if(e.key==='Escape')close()});
3017    var links=document.querySelectorAll('a[href="#cta"]');
3018    for(var i=0;i<links.length;i++){
3019      links[i].addEventListener('click',function(e){e.preventDefault();open();});
3020    }
3021  });
3022
3023  /* ══ УСПЕХ ОТПРАВКИ ══ версия 8.
3024     После успешной отправки (в т.ч. через капчу) показываем
3025     «Заявка отправлена»; если форма в этот момент в попапе —
3026     через 2 секунды закрываем окно (форма вернётся вниз сама),
3027     чип сбрасываем. Лечит немоту после капчи и дубли. ══ */
3028  part('успех отправки',function(){
3029    document.addEventListener('tildaform:aftersuccess',function(e){
3030      var f=e.target;
3031      if(!f||!f.getAttribute)return;
3032      if((f.getAttribute('name')||'')!=='zayavka-glavnaya')return;
3033      var box=f.querySelector('.js-successbox');
3034      if(box)box.style.display='block';
3035      setTimeout(function(){
3036        if(window.chClosePopup)window.chClosePopup();
3037        if(box)box.style.display='none';
3038        var chip=f.querySelector('.ccp');
3039        if(chip)chip.classList.remove('ccp-on');
3040      },2200);
3041    },true);
3042  });
3043
3044  /* ══ ФОРМА: перенос приёмщиков ══
3045     У блока T123 нет панели «Приёмщики», поэтому на странице стоит скрытый
3046     стандартный блок формы Тильды (донор) — приёмщики настраиваются на нём.
3047     Скрипт перекладывает его formservices[] в нашу форму. Без этого заявки
3048     НЕ ОТПРАВЛЯЮТСЯ. Как поставить донор — см. инструкцию, раздел про форму.
3049     Запускается независимо от всего остального и повторяет попытку через 1,5 с:
3050     скрытый блок Тильды может отрисоваться позже нашего. ══ */
3051  function services(){
3052    var mf=document.querySelector('form[name="zayavka-glavnaya"]');
3053    if(!mf){console.warn('CH: форма zayavka-glavnaya не найдена на странице');return true}
3054    if(mf.querySelector('input[name="formservices[]"]'))return true;
3055    var donor=document.querySelectorAll('form:not([name="zayavka-glavnaya"]) input[name="formservices[]"]');
3056    if(!donor.length)return false;
3057    for(var d=0;d<donor.length;d++){
3058      var h=document.createElement('input');h.type='hidden';h.name='formservices[]';h.value=donor[d].value;
3059      mf.appendChild(h);
3060    }
3061    console.log('CH: приёмщики перенесены — '+donor.length+' шт.');
3062    return true;
3063  }
3064  function tryServices(){
3065    if(services())return;
3066    setTimeout(function(){
3067      if(!services())console.warn('CH: блок-донор с приёмщиками не найден — ФОРМА НЕ ОТПРАВИТ ЗАЯВКУ');
3068    },1500);
3069  }
3070  if(document.readyState==='complete')tryServices();
3071  else window.addEventListener('load',tryServices);
3072
3073  console.log('CH: инициализировано ['+ok.join(', ')+']'+(fail.length?' · выключено: ['+fail.join(', ')+']':''));
3074})();
3075</script>
3075 <!-- nominify end --> </div> </div> </div> </div> <!--footer--> <footer id="t-footer" class="t-records" data-hook="blocks-collection-content-node" data-tilda-project-id="10731239" data-tilda-page-id="57429803" data-tilda-formskey="f2b2add5692ef370bd3d00a810731239" data-tilda-cookie="no" data-tilda-lazy="yes" data-tilda-root-zone="com" data-tilda-project-headcode="yes" data-tilda-project-country="RU"> <div id="rec2840202101" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!-- ═══ ФУТТЕР · ВЕРСИЯ 2.7 · СКВОЗНОЙ ═══
3076Ставится в страницу ФУТТЕР Тильды, публикуется кнопкой «Опубликовать» на ней. Донор rec2750133601 не трогать.
3077ВЕРСИЯ 2.7 (01.10.2026) — ТРИ ПРАВКИ, стили и скрипт «наверх» не тронуты:
30781. Возвращена ссылка «Хозблоки, гаражи и навесы» → /tech (снята в 2.3, когда /tech
3079   была на 301). Страница пересобрана на эталоне и опубликована 01.10; ставится
3080   в колонку «Проекты» после «Дома для бизнеса» — технические строения рядом
3081   с B2B, выше «Базы отдыха» и «Индивидуальный дом».
30822. В словарь имён донора добавлен /tech → «Тех. строения» (на самой /tech есть своя
3083   форма, запись страхует попап из хедера на случай, если форма не отрисуется).
30843. В служебной строке между «Карта сайта» и «Вакансии» добавлен разделитель —
3085   в 2.6 его не было, ссылки слипались.
3086ВЕРСИЯ 2.6 (11.09.2026) — ДВЕ ПРАВКИ СТРУКТУРЫ, скрипты не тронуты:
30871. «Дома под ключ» → /pod-klyuch, ВТОРЫМ пунктом колонки «Проекты», сразу
3088   после «Наши проекты». Место выбрано не по алфавиту: Яндекс лепит быстрые
3089   ссылки из страниц с наибольшим внутренним весом, а вес внутри списка
3090   убывает сверху вниз. Страница опубликована 11.09 и до этой правки висела
3091   сиротой — единственный путь к ней шёл из сайтмапа.
30922. «Вакансии» вынесены из колонки «Компания» в служебную строку подвала,
3093   рядом с картой сайта. Причина: срез 11.09 показал, что Яндекс собрал
3094   из них быструю ссылку и отдал ей место в сниппете по коммерческим
3095   запросам. Ссылка остаётся на сайте и доступна, но сквозного веса
3096   наравне с гарантиями и ипотекой больше не получает.
3097ВЕРСИЯ 2.5 (09.09.2026): добавлен скрипт «имя донора» (в самом конце файла). Срез 09.09 показал: на страницах без своей кочующей формы (/proekti, /nalichie и др.) все кнопки открывают донор #popup:donorform напрямую, а у донора нет tildaspec-formname — заявки приходят без имени страницы, и в журнале их не опознать. Скрипт срабатывает ТОЛЬКО если на странице нет form[name="zayavka-glavnaya"]: дописывает донору скрытое поле «Заявка со страницы …» по адресу страницы и делает имя и телефон обязательными (у донора не было data-tilda-req — форму можно было отправить пустой). Чекбокс согласия со ссылкой на /privacy-agreement и страна телефона «Россия» ставятся в настройках самого донорского блока в Тильде — скрипт их не подменяет. Разметка, стили и реквизиты футтера без изменений.
3098ВЕРСИЯ 2.4 (31.08.2026): в правовую строку добавлена ссылка «Согласие на обработку данных» → /privacy-agreement. Требование 152-ФЗ: документ, с которым соглашается посетитель при отправке формы, должен быть доступен без регистрации. Больше ничего не менялось.
3099ВЕРСИЯ 2.3 (25.08.2026): убраны три ссылки на страницы, переведённые на 301: «Технические строения» (/tech → /nalichie), «Клуб Кантри Хаус» (/club → /proekti), «Инвесторам» (/investors → /tourism). Больше ничего не менялось.
3100ВЕРСИЯ 2.2 (25.08.2026): в колонку «Проекты» добавлена строка «Дома для круглогодичного проживания» → /kruglogodichnye (Ð
3100¿Ð¾ÑÐ°Ð´Ð¾Ñ‡Ð½Ð°Ñ в бою 25.08; сквозная ссылка со всех страниц — первый вход на страницу с сайта).
3101ВЕРСИЯ 2.1 (22.08.2026): «Банно-гостевые» → «Дом с баней» (/modulbaths пересобран на эталоне, разводка с /lampi) · «Туризм и B2B» → «Базы отдыха» · «Бани Lampi (Лампи)» → «Бани Лампи» (168-ФЗ: латиница в навигации не нужна, дубль есть на /lampi). Разметка, стили и реквизиты без изменений. История правок до 2.1 — в хэндоверах базы знаний. --> <style>
3102@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@200;300;400;500;600;700;800&display=swap');
3103/* СХЛОПЫВАНИЕ ОТСТУПОВ: у footer#t-footer нет своих padding и border, поэтому margin-top
3104внутреннего .ftq-f выносится наружу и становится отступом самого футера — в инспекторе
3105он виден как оранжевая полоса вокруг элемента. Обнуляем на обоих уровнях, иначе
3106правка одного .ftq-f визуально ничего не даёт. */
3107#t-footer, #allrecords #t-footer {
3108position: relative !important;
3109z-index: 2 !important;
3110margin-top: 0 !important;
3111padding-top: 0 !important;
3112background: transparent !important
3113}
3114.ftq-f {
3115background: #0B0B0C !important;
3116color: #fff !important;
3117border-radius: clamp(24px, 3vw, 42px) clamp(24px, 3vw, 42px) 0 0 !important;
3118margin-top: -40px !important;
3119position: relative !important;
3120z-index: 2 !important;
3121font-family: 'Manrope', system-ui, -apple-system, sans-serif !important
3122}
3123.ftq-f *, .ftq-f *::before, .ftq-f *::after {
3124box-sizing: border-box !important
3125}
3126.ftq-f a {
3127text-decoration: none !important
3128}
3129.ftq-wrap {
3130max-width: 1360px !important;
3131margin: 0 auto !important;
3132padding: 0 clamp(16px, 3.4vw, 44px) !important
3133}
3134.ftq-top {
3135display: grid !important;
3136grid-template-columns: 1.6fr .8fr .8fr 1.2fr !important;
3137gap: clamp(26px, 4vw, 56px) !important;
3138padding: clamp(44px, 7vh, 80px) 0 clamp(30px, 5vh, 52px) !important;
3139border-bottom: 1px solid rgba(255, 255, 255, .09) !important
3140}
3141.ftq-lg img {
3142height: 64px !important;
3143width: auto !important;
3144display: block !important;
3145margin-bottom: 20px !important
3146}
3147.ftq-ab {
3148font-size: 14px !important;
3149font-weight: 300 !important;
3150line-height: 1.68 !important;
3151color: rgba(255, 255, 255, .5) !important;
3152margin: 0 0 22px !important;
3153max-width: 34ch !important
3154}
3155.ftq-rq {
3156font-size: 11.5px !important;
3157font-weight: 300 !important;
3158line-height: 1.9 !important;
3159color: rgba(255, 255, 255, .28) !important
3160}
3161.ftq-c h5 {
3162font-size: 11px !important;
3163font-weight: 600 !important;
3164letter-spacing: .14em !important;
3165text-transform: uppercase !important;
3166color: rgba(255, 255, 255, .34) !important;
3167margin: 0 0 18px !important
3168}
3169.ftq-c ul {
3170list-style: none !important;
3171margin: 0 !important;
3172padding: 0 !important
3173}
3174.ftq-c li {
3175margin: 0 0 11px !important;
3176padding: 0 !important;
3177list-style: none !important
3178}
3179.ftq-c li::before {
3180display: none !important
3181}
3182.ftq-c a {
3183font-size: 14px !important;
3184font-weight: 300 !important;
3185color: rgba(255, 255, 255, .6) !important;
3186transition: all .3s cubic-bezier(.16, 1, .3, 1);
3187display: inline-block !important
3188}
3189.ftq-c a:hover {
3190color: #FFB020 !important;
3191transform: translateX(4px)
3192}
3193.ftq-c .ftq-tel {
3194display: block !important;
3195font-size: 23px !important;
3196font-weight: 800 !important;
3197letter-spacing: -.035em !important;
3198color: #fff !important;
3199margin-bottom: 8px !important;
3200transition: color .3s
3201}
3202.ftq-c .ftq-tel:hover {
3203color: #FFB020 !important
3204}
3205.ftq-c .ftq-tel.ftq-s {
3206font-size: 17px !important;
3207font-weight: 600 !important;
3208color: rgba(255, 255, 255, .55) !important
3209}
3210.ftq-ad {
3211font-size: 13px !important;
3212font-weight: 300 !important;
3213line-height: 1.6 !important;
3214color: rgba(255, 255, 255, .42) !important;
3215margin-top: 16px !important
3216}
3217.ftq-hr {
3218font-size: 12.5px !important;
3219font-weight: 300 !important;
3220color: rgba(255, 255, 255, .3) !important;
3221margin-top: 10px !important;
3222line-height: 1.6 !important
3223}
3224.ftq-so {
3225display: flex !important;
3226gap: 7px !important;
3227margin-top: 22px !important;
3228flex-wrap: wrap !important
3229}
3230.ftq-so a {
3231width: 36px !important;
3232height: 36px !important;
3233border-radius: 100px !important;
3234background: rgba(255, 255, 255, .06) !important;
3235border: 1px solid rgba(255, 255, 255, .1) !important;
3236display: flex !important;
3237align-items: center !important;
3238justify-content: center !important;
3239transition: all .5s cubic-bezier(.34, 1.4, .5, 1)
3240}
3241.ftq-so a:hover {
3242background: #FFB020 !important;
3243border-color: #FFB020 !important;
3244transform: translateY(-4px) scale(1.06)
3245}
3246.ftq-so svg {
3247width: 15px !important;
3248height: 15px !important;
3249fill: rgba(255, 255, 255, .68);
3250transition: fill .3s
3251}
3252.ftq-so a:hover svg {
3253fill: #0B0B0C
3254}
3255.ftq-so svg.ftq-max {
3256width: 14px !important;
3257height: 14px !important
3258}
3259.ftq-bot {
3260display: flex !important;
3261justify-content: space-between !important;
3262align-items: center !important;
3263gap: 14px !important;
3264flex-wrap: wrap !important;
3265padding: 24px 0 !important;
3266font-size: 12.5px !important;
3267font-weight: 300 !important;
3268color: rgba(255, 255, 255, .26) !important
3269}
3270.ftq-bot a {
3271color: rgba(255, 255, 255, .26) !important;
3272transition: color .3s
3273}
3274.ftq-bot a:hover {
3275color: rgba(255, 255, 255, .6) !important
3276}
3277@media (max-width: 1180px) {
3278.ftq-top {
3279grid-template-columns: 1fr 1fr !important
3280}
3281}
3282.ftq-up {
3283position: fixed !important;
3284right: 20px !important;
3285bottom: 20px !important;
3286z-index: 300 !important;
3287width: 52px !important;
3288height: 52px !important;
3289padding: 0 !important;
3290border-radius: 100px !important;
3291background: rgba(251, 250, 248, .9) !important;
3292-webkit-backdrop-filter: blur(20px);
3293backdrop-filter: blur(20px);
3294border: 1px solid rgba(11, 11, 12, .08) !important;
3295box-shadow: 0 8px 28px rgba(11, 11, 12, .14);
3296display: flex !important;
3297align-items: center !important;
3298justify-content: center !important;
3299cursor: pointer;
3300opacity: 0;
3301pointer-events: none;
3302transform: translateY(14px) scale(.9);
3303transition: all .5s cubic-bezier(.34, 1.4, .5, 1)
3304}
3305.ftq-up.ftq-show {
3306opacity: 1;
3307pointer-events: all;
3308transform: none
3309}
3310.ftq-up:hover {
3311background: #FFB020 !important;
3312border-color: #FFB020 !important;
3313transform: translateY(-4px)
3314}
3315.ftq-up svg {
3316width: 18px !important;
3317height: 18px !important;
3318stroke: #0B0B0C !important;
3319stroke-width: 2.4;
3320fill: none;
3321stroke-linecap: round;
3322stroke-linejoin: round
3323}
3324@media (max-width: 640px) {
3325.ftq-f {
3326margin-top: -24px !important
3327}
3328}
3329@media (max-width: 640px) {
3330.ftq-up {
3331right: 14px !important;
3332bottom: 14px !important;
3333width: 46px !important;
3334height: 46px !important
3335}
3336.ftq-top {
3337grid-template-columns: 1fr !important
3338}
3339.ftq-bot {
3340flex-direction: column !important;
3341text-align: center !important
3342}
3343.ftq-lg img {
3344height: 52px !important
3345}
3346}
3347</style> <footer class="ftq-f"> <div class="ftq-wrap"> <div class="ftq-top"> <div> <a href="https://modulniye-doma.ru/" class="ftq-lg" aria-label="Кантри Хаус — модульные дома и бани"> <img src="https://static.tildacdn.com/tild3437-3666-4166-a131-333336333238/CH-lokap-na-temnom.svg" alt="Кантри Хаус — модульные дома и бани"> </a> <p class="ftq-ab">Производим и строим модульные дома и бани. Собственный цех в Ленинградской области, доставка по всей России.</p> <div class="ftq-rq">
3348ООО «КАНТРИ ХАУС»
3349<br>
3350194156, г. Санкт-Петербург, ул. Зеленогорская, д. 4, литер А, помещ. 167-Н, оф. 3
3351<br>
3352ИНН 7804631263 · КПП 780201001
3353<br>
3354Генеральный директор Кузьмин В. М.
3355<br>
3356Товарный знак используется на законном основании
3357</div> </div> <div class="ftq-c"> <h5>Проекты</h5> <ul> <li> <a href="https://modulniye-doma.ru/proekti">Наши проекты</a> </li> <li> <a href="https://modulniye-doma.ru/pod-klyuch">Дома под ключ</a> </li> <li> <a href="https://modulniye-doma.ru/modulhightek">Дома хай-тек</a> </li> <li> <a href="https://modulniye-doma.ru/kruglogodichnye">Дома для круглогодичного проживания</a> </li> <li> <a href="https://modulniye-doma.ru/lampi">Бани Лампи</a> </li> <li> <a href="https://modulniye-doma.ru/modulbaths">Дом с баней</a> </li> <li> <a href="https://modulniye-doma.ru/modulbussines">Дома для бизнеса</a> </li> <li> <a href="https://modulniye-doma.ru/tech">Хозблоки, гаражи и навесы</a> </li> <li> <a href="https://modulniye-doma.ru/tourism">Базы отдыха</a> </li> <li> <a href="https://modulniye-doma.ru/modulhightek-m6">Индивидуальный дом</a> </li> </ul> </div> <div class="ftq-c"> <h5>Компания</h5> <ul> <li> <a href="https://modulniye-doma.ru/dopopcii">Доп. опции и мебель</a> </li> <li> <a href="https://modulniye-doma.ru/garantii">Гарантии</a> </li> <li> <a href="https://modulniye-doma.ru/ipoteka">Ипотека</a> </li> <li> <a href="https://modulniye-doma.ru/faqs">Вопрос — ответ</a> </li> <li> <a href="https://modulniye-doma.ru/news">Блог</a> </li> </ul> </div> <div class="ftq-c"> <h5>Контакты</h5> <a href="tel:+79219679674" class="ftq-tel">+7 921 967-96-74</a> <a href="tel:+79219679673" class="ftq-tel ftq-s">+7 921 967-96-73</a> <div class="ftq-ad">Ленинградская обл., Всеволожский р-н, Юкковское СП, тер. технопарк Суонтака</div> <div class="ftq-hr">
3358ПН–ПТ с 9:00 до 18:00
3359<br>
3360СБ–ВС по договорённости
3361</div> <ul style="margin-top:14px"> <li> <a href="https://modulniye-doma.ru/contacts">Все контакты и схема проезда</a> </li> </ul> <div class="ftq-so"> <a href="https://vk.com/modulcountryhouse" target="_blank" rel="noopener" aria-label="ВКонтакте" title="ВКонтакте"> <svg viewBox="0 0 24 24"> <path d="M15.68 0H8.32C1.59 0 0 1.59 0 8.32v7.36C0 22.41 1.59 24 8.32 24h7.36C22.41 24 24 22.41 24 15.68V8.32C24 1.59 22.41 0 15.68 0zm3.7 17.12h-1.75c-.66 0-.86-.52-2.05-1.71-1.03-1.01-1.49-.95-1.49.32v1.57c0 .42-.13.67-1.23.67-1.81 0-3.82-1.1-5.23-3.14C5.54 11.38 5 9.12 5 8.72c0-.25.13-.48.5-.48h1.75c.37 0 .52.17.66.57.73 2.1 1.95 3.94 2.45 3.94.19 0 .28-.09.28-.57V9.81c-.06-1.01-.6-1.1-.6-1.45 0-.19.16-.38.41-.38h2.74c.31 0 .42.17.42.53v2.86c0 .32.14.42.22.42.19 0 .35-.1.69-.45 1.06-1.19 1.82-3.03 1.82-3.03.1-.22.29-.42.63-.42h1.75c.52 0 .64.27.52.64-.22 1.02-2.34 4.01-2.34 4.01-.19.3-.25.43 0 .76.19.25.8.77 1.21 1.24.75.87 1.33 1.6 1.49 2.11.16.5-.09.76-.57.76z"/> </svg> </a> <a href="https://t.me/countryhousespb" target="_blank" rel="noopener" aria-label="Телеграм" title="Телеграм-канал"> <svg viewBox="0 0 24 24"> <path d="M12 0C5.37 0 0 5.37 0 12s5.37 12 12 12 12-5.37 12-12S18.63 0 12 0zm5.89 8.22l-1.97 9.28c-.14.66-.54.82-1.08.51l-3-2.21-1.45 1.39c-.16.16-.29.29-.6.29l.21-3.05 5.56-5.02c.24-.21-.05-.33-.37-.12l-6.87 4.33-2.96-.92c-.64-.2-.66-.64.14-.95l11.57-4.46c.54-.19 1.01.13.83.94z"/> </svg> </a> <a href="https://wa.me/79219679674" target="_blank" rel="noopener" aria-label="Вотсап" title="Написать в Вотсап"> <svg viewBox="0 0 24 24"> <path d="M12 0C5.37 0 0 5.37 0 12c0 2.12.55 4.11 1.51 5.84L0 24l6.34-1.66A11.94 11.94 0 0012 24c6.63 0 12-5.37 12-12S18.63 0 12 0zm5.68 16.9c-.24.68-1.42 1.3-1.98 1.38-.5.07-1.14.1-1.84-.12-.42-.13-.97-.31-1.66-.61-2.92-1.26-4.83-4.2-4.98-4.4-.14-.19-1.18-1.57-1.18-3s.75-2.13 1.02-2.42c.26-.29.57-.36.76-.36h.55c.18 0 .41-.03.64.49.24.53.82 1.84.89 1.97.07.13.12.29.02.47-.09.19-.14.3-.28.46-.14.16-.29.36-.42.48-.14.14-.28.29-.12.57.16.27.72 1.18 1.54 1.92 1.06.94 1.95 1.23 2.22 1.37.28.14.44.12.6-.07.16-.
336119.69-.8.87-1.08.19-.27.37-.23.63-.14.26.1 1.63.77 1.91.91.28.14.47.21.53.32.07.12.07.66-.17 1.34z"/> </svg> </a> <a href="https://max.ru/join/CT3VhV2vx1vMfhljktT0bD6Eql_bwNN5BFULFEYHQwc" target="_blank" rel="noopener" aria-label="MAX" title="Написать в MAX"> <svg class="ftq-max" viewBox="0 0 720 720"> <path d="M350.4 9.6C141.8 20.5 4.1 184.1 12.8 390.4c3.8 90.3 40.1 168 48.7 253.7 2.2 22.2-4.2 49.6 21.4 59.3 31.5 11.9 79.8-8.1 106.2-26.4 9-6.1 17.6-13.2 24.2-22 27.3 18.1 53.2 35.6 85.7 43.4 143.1 34.3 299.9-44.2 369.6-170.3C799.6 291.2 622.5-4.6 350.4 9.6zM269.4 504c-11.3 8.8-22.2 20.8-34.7 27.7-18.1 9.7-23.7-.4-30.5-16.4-21.4-50.9-24-137.6-11.5-190.9 16.8-72.5 72.9-136.3 150-143.1 78-6.9 150.4 32.7 183.1 104.2 72.4 159.1-112.9 316.2-256.4 218.6z"/> </svg> </a> <a href="https://youtube.com/@countryhousespb" target="_blank" rel="noopener" aria-label="Ютуб" title="Канал на Ютубе"> <svg viewBox="0 0 24 24"> <path d="M23.5 6.19a3.02 3.02 0 00-2.12-2.14C19.5 3.55 12 3.55 12 3.55s-7.5 0-9.38.5A3.02 3.02 0 00.5 6.19C0 8.07 0 12 0 12s0 3.93.5 5.81a3.02 3.02 0 002.12 2.14c1.87.5 9.38.5 9.38.5s7.5 0 9.38-.5a3.02 3.02 0 002.12-2.14C24 15.93 24 12 24 12s0-3.93-.5-5.81zM9.55 15.57V8.43L15.82 12l-6.27 3.57z"/> </svg> </a> <a href="https://rutube.ru/channel/49784225/" target="_blank" rel="noopener" aria-label="Рутуб" title="Канал на Рутубе"> <svg viewBox="0 0 24 24"> <path d="M12 0C5.37 0 0 5.37 0 12s5.37 12 12 12 12-5.37 12-12S18.63 0 12 0zM6.6 17.4V6.6h7.2c1.99 0 3.6 1.61 3.6 3.6 0 1.72-1.2 3.15-2.81 3.51l2.81 3.69h-2.7l-2.7-3.6H8.7v3.6H6.6zm2.1-5.4h4.8c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5H8.7v3z"/> </svg> </a> <a href="https://dzen.ru/countryhousespb" target="_blank" rel="noopener" aria-label="Дзен" title="Канал в Дзене"> <svg viewBox="0 0 24 24"> <path d="M12 0C5.37 0 0 5.37 0 12s5.37 12 12 12 12-5.37 12-12S18.63 0 12 0zm.6 11.4c.13-4.36.53-6.28 3.02-6.62 1.5-.2 2.98-.18 2.98-.18s.09 1.6-.1 3.1c-.33 2.5-2.25 2.9-6.6 3.03l.7.67zm-1.2 0l.7-.67C7.75 10.6 5.83 10.2 5.5 7.7c-.19-1.5-.1-3.1-.1-3.1s1.48-.02 2.98.18c2.49.34 2.89 2.26 3.02 6.62zm0 1.2c-.13 4.36-.53 6.28-3.02 6.62-1.5.2-2.98.18-2.98.18s-.09-1.6.1-3.1c.33-2.5 2.25-2.9 6.6-3.03l-.7-.67zm1.2 0l-.7.67c4.35.13 6.27.53 6.6 3.03.19 1.5.1 3.1.1 3.1s-1.48.02-2.98-.18c-2.49-.34-2.89-2.26-3.02-6.62z"/> </svg> </a> </div> </div> </div> <div class="ftq-bot"> <span>© 2026 Country House (Кантри Хаус) · Модульные дома и бани</span> <span> <a href="https://modulniye-doma.ru/privacy">Политика конфиденциальности</a>
3362&nbsp;·&nbsp;
3363<a href="https://modulniye-doma.ru/privacy-agreement">Согласие на обработку данных</a>
3364&nbsp;·&nbsp;
3365<a href="https://modulniye-doma.ru/sitemap">Карта сайта</a>
3366&nbsp;·&nbsp;
3367<a href="https://modulniye-doma.ru/vacansy">Вакансии</a> </span> </div> </div> </footer> <button class="ftq-up" id="ftqUp" aria-label="Наверх" title="Наверх"> <svg viewBox="0 0 24 24"> <path d="M18 15l-6-6-6 6"/> </svg> </button> 
3367<script>
3368(function() {
3369var up = document.getElementById('ftqUp');
3370if (!up)
3371return;
3372var sc = function() {
3373up.classList.toggle('ftq-show', window.scrollY > 700)
3374};
3375addEventListener('scroll', sc, {
3376passive: true
3377});
3378sc();
3379up.addEventListener('click', function() {
3380scrollTo({
3381top: 0,
3382behavior: 'smooth'
3383});
3384});
3385})();
3386</script>
3386 
3386<script>
3387/* ═══ ИМЯ ДОНОРА · v1.0 · 09.09.2026 ═══
3388   Работает только на страницах БЕЗ своей кочующей формы zayavka-glavnaya
3389   (там донор скрыт от людей, а имя страницы несёт value своей формы).
3390   На остальных: 1) дописывает донору tildaspec-formname «Заявка со страницы …»,
3391   2) делает Имя и Телефон обязательными. Идемпотентен, ждёт отрисовки донора
3392   до 10 с (футтер и попап могут прийти позже скрипта). Донорский блок не меняется. */
3393(function() {
3394    var NAMES = {
3395        '/proekti': 'Проекты', '/nalichie': 'В наличии', '/tourism': 'Базы отдыха',
3396        '/production': 'Производство', '/faqs': 'Вопросы', '/ipoteka': 'Ипотека',
3397        '/kruglogodichnye': 'Круглогодичные', '/modulhightek': 'Хай-тек',
3398        '/modulbaths': 'Дом с баней', '/modulbussines': 'Бизнес', '/dopopcii': 'Опции', '/tech': 'Тех. строения',
3399        '/garantii': 'Гарантии', '/contacts': 'Контакты', '/news': 'Блог',
3400        '/modulhightek-m1': 'М1', '/modulhightek-m15': 'М1,5', '/modulhightek-m2': 'М2',
3401        '/modulhightek-m3': 'М3', '/modulhightek-m4': 'М4', '/modulhightek-m5': 'М5',
3402        '/modulhightek-m6': 'М6', '/lampi': 'Лампи', '/': 'Главная'
3403    };
3404    function pageName() {
3405        var p = (location.pathname || '/').replace(/\/$/, '') || '/';
3406        if (NAMES[p]) return NAMES[p];
3407        var seg = p.split('/').filter(Boolean);
3408        return seg.length ? seg[seg.length - 1] : 'Главная';
3409    }
3410    function tag() {
3411        if (document.querySelector('form[name="zayavka-glavnaya"]')) return true;
3412        var f = document.getElementById('form2750133601');
3413        if (!f) return false;
3414        if (!f.querySelector('input[name="tildaspec-formname"]')) {
3415            var h = document.createElement('input');
3416            h.type = 'hidden';
3417            h.name = 'tildaspec-formname';
3418            h.value = 'Заявка со страницы ' + pageName();
3419            f.appendChild(h);
3420        }
3421        var nm = f.querySelector('input[name="Name"]'),
3422            ph = f.querySelector('input[type="tel"]');
3423        if (nm) { nm.setAttribute('data-tilda-req', '1'); nm.setAttribute('aria-required', 'true'); }
3424        if (ph) { ph.setAttribute('data-tilda-req', '1'); ph.setAttribute('aria-required', 'true'); ph.setAttribute('data-tilda-rule', 'phone'); }
3425        try { console.log('CH: донор помечен — ' + pageName()); } catch (e) {}
3426        return true;
3427    }
3428    if (!tag()) {
3429        var n = 0, t = setInterval(function() { if (tag() || ++n > 20) clearInterval(t); }, 500);
3430    }
3431})();
3432</script>
3432 <!-- nominify end --> </div> </div> </div> </div> <div id="rec2750133601" class="r t-rec" style=" " data-animationappear="off" data-record-type="702"> <!-- T702 --> <div class="t702"> <div
3433class="t-popup" data-tooltip-hook="#popup:donorform"
3434role="dialog"
3435aria-modal="true"
3436tabindex="-1"
3437aria-label="Оставить заявку"> <div class="t-popup__close t-popup__block-close"> <button
3438type="button"
3439class="t-popup__close-wrapper t-popup__block-close-button"
3440aria-label="Закрыть диалоговое окно"> <svg role="presentation" class="t-popup__close-icon" width="23px" height="23px" viewBox="0 0 23 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g stroke="none" stroke-width="1" fill="#fff" fill-rule="evenodd"> <rect transform="translate(11.313708, 11.313708) rotate(-45.000000) translate(-11.313708, -11.313708) " x="10.3137085" y="-3.6862915" width="2" height="30"></rect> <rect transform="translate(11.313708, 11.313708) rotate(-315.000000) translate(-11.313708, -11.313708) " x="10.3137085" y="-3.6862915" width="2" height="30"></rect> </g> </svg> </button> </div> <style>@media screen and (max-width:560px){#rec2750133601 .t-popup__close-icon g{fill:#ffffff !important;}}</style> <div class="t-popup__container t-width t-width_6" data-popup-type="702"> <div class="t702__wrapper"> <div class="t702__text-wrapper t-align_center"> <div class="t702__title t-title t-title_xxs" id="popuptitle_2750133601">Оставить заявку</div> <div class="t702__descr t-descr t-descr_xs">Ответим в течение рабочего дня</div> </div> <form
3441id="form2750133601" name='form2750133601' role="form" action='' method='POST' data-formactiontype="2" data-inputbox=".t-input-group" class="t-form js-form-proccess t-form_inputs-total_2 " data-success-callback="t702_onSuccess"> <input type="hidden" name="formservices[]" value="7f106144490ea807aeda1f13557c8464" class="js-formaction-services"> <input type="hidden" name="formservices[]" value="30a149d1c555cdcebb50510ae6a0b847" class="js-formaction-services"> <!-- @classes t-title t-text t-btn --> <div class="js-successbox t-form__successbox t-text t-text_md"
3442aria-live="polite"
3443style="display:none;" data-success-title="Заявка отправлена. Свяжемся с вами в рабочее время"></div> <div
3444class="t-form__inputsbox
3445t-form__inputsbox_vertical-form t-form__inputsbox_inrow
3446"> <div
3447class="t-input-group t-input-group_nm " data-input-lid="2511158238961" data-field-type="nm" data-field-name="Name"> <div class="t-input-block " style="border-radius:5px;"> <input
3448type="text"
3449autocomplete="name"
3450name="Name"
3451id="input_2511158238961"
3452class="t-input js-tilda-rule"
3453value=""
3454placeholder="Имя" data-tilda-rule="name"
3455aria-describedby="error_2511158238961"
3456style="color:#000000;border:1px solid #c9c9c9;border-radius:5px;"> </div> <div class="t-input-error" aria-live="polite" id="error_2511158238961"></div> </div> <div
3457class="t-input-group t-input-group_ph " data-input-lid="2511158238962" data-field-async="true" data-field-type="ph" data-field-name="Phone"> <div class="t-input-block " style="border-radius:5px;"> <input
3458type="tel"
3459autocomplete="tel"
3460name="Phone"
3461id="input_2511158238962" data-phonemask-init="no" data-phonemask-id="2750133601" data-phonemask-lid="2511158238962"
3462class="t-input js-phonemask-input js-tilda-rule"
3463value=""
3464placeholder="+1(000)000-0000"
3465aria-describedby="error_2511158238962"
3466style="color:#000000;border:1px solid #c9c9c9;border-radius:5px;"> 
3466<script type="text/javascript">t_onReady(function() {t_onFuncLoad('t_loadJsFile',function() {t_loadJsFile('https://static.tildacdn.com/js/tilda-phone-mask-1.1.min.js',function() {t_onFuncLoad('t_form_phonemask_load',function() {var phoneMasks=document.querySelectorAll('#rec2750133601 [data-phonemask-lid="2511158238962"]');t_form_phonemask_load(phoneMasks);});})})});</script>
3466 </div> <div class="t-input-error" aria-live="polite" id="error_2511158238962"></div> </div> <div class="t-form__errorbox-middle"> <!--noindex--> <div
3467class="js-errorbox-all t-form__errorbox-wrapper"
3468style="display:none;" data-nosnippet
3469tabindex="-1"
3470aria-label="Ошибки при заполнении формы"> <ul
3471role="list"
3472class="t-form__errorbox-text t-text t-text_md"> <li class="t-form__errorbox-item js-rule-error js-rule-error-all"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-req"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-email"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-name"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-phone"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-minlength"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-string"></li> </ul> </div> <!--/noindex--> </div> <div class="t-form__submit"> <button
3473class="t-submit t-btnflex t-btnflex_type_submit t-btnflex_md"
3474type="submit"><span class="t-btnflex__text">Отправить</span> <style>#rec2750133601 .t-btnflex.t-btnflex_type_submit{color:#ffffff;background-color:#000000;--border-width:0px;border-style:none !important;border-radius:5px;box-shadow:none !important;transition-duration:0.2s;transition-property:background-color,color,border-color,box-shadow,opacity,transform,gap;transition-timing-function:ease-in-out;}</style></button> </div> </div> <div class="t-form__errorbox-bottom"> <!--noindex--> <div
3475class="js-errorbox-all t-form__errorbox-wrapper"
3476style="display:none;" data-nosnippet
3477tabindex="-1"
3478aria-label="Ошибки при заполнении формы"> <ul
3479role="list"
3480class="t-form__errorbox-text t-text t-text_md"> <li class="t-form__errorbox-item js-rule-error js-rule-error-all"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-req"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-email"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-name"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-phone"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-minlength"></li> <li class="t-form__errorbox-item js-rule-error js-rule-error-string"></li> </ul> </div> <!--/noindex--> </div> </form> <style>#rec2750133601 input::-webkit-input-placeholder{color:#000000;opacity:0.5;}#rec2750133601 input::-moz-placeholder{color:#000000;opacity:0.5;}#rec2750133601 input:-moz-placeholder{color:#000000;opacity:0.5;}#rec2750133601 input:-ms-input-placeholder{color:#000000;opacity:0.5;}#rec2750133601 textarea::-webkit-input-placeholder{color:#000000;opacity:0.5;}#rec2750133601 textarea::-moz-placeholder{color:#000000;opacity:0.5;}#rec2750133601 textarea:-moz-placeholder{color:#000000;opacity:0.5;}#rec2750133601 textarea:-ms-input-placeholder{color:#000000;opacity:0.5;}</style> <div class="t702__form-bottom-text t-text t-text_xs t-align_center">Отправляя форму, вы даёте согласие на обработку персональных данных</div> </div> </div> </div> </div> 
3480<script>t_onReady(function() {t_onFuncLoad('t702_initPopup',function() {t702_initPopup('2750133601');});});</script>
3480 </div> </footer> <!--/footer--> </div> <!--/allrecords--> <!-- Stat --> 
3480<script type="text/javascript">if(!window.mainTracker) {window.mainTracker='tilda';}
3481window.tildastatcookie='no';setTimeout(function(){(function(d,w,k,o,g) {var n=d.getElementsByTagName(o)[0],s=d.createElement(o),f=function(){n.parentNode.insertBefore(s,n);};s.type="text/javascript";s.async=true;s.key=k;s.id="tildastatscript";s.src=g;if(w.opera=="[object Opera]") {d.addEventListener("DOMContentLoaded",f,false);} else {f();}})(document,window,'bb0a31db8657811fa9fdf0ff9b460325','script','https://static.tildacdn.com/js/tilda-stat-1.0.min.js');},2000);</script>
3481 </body> </html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.