PageSourceSearch

http://auto-remont.by/remont-generatorov/diagnostika/

html auto-remont.by collected 2026-10-08 16:21:26 UTC 108,988 bytes, 1,521 lines download raw bytes

1<!DOCTYPE html>
2<html lang="ru">
3<head>
4    <meta charset="UTF-8">
5    <meta name="viewport" content="width=device-width, initial-scale=1.0">
6    <title>Технодельта — диагностика генератора в Минске | На стенде и на автомобиле</title>
7    <meta name="description" content="Профессиональная диагностика генератора на стенде и на автомобиле. Проверка напряжения, регулятора, диодного моста, подшипников. Определяем причину неисправности. Любые марки.">
8    
9    <!-- ===== OG TAGS ===== -->
10    <meta property="og:title" content="Технодельта — диагностика генератора в Минске | На стенде и на автомобиле">
11    <meta property="og:description" content="Профессиональная диагностика генератора на стенде и на автомобиле. Проверка напряжения, регулятора, диодного моста, подшипников. Определяем причину неисправности. Любые марки.">
12    <meta property="og:image" content="https://auto-remont.by/d/diagnostika-generatora.webp">
13    <meta property="og:url" content="https://auto-remont.by/remont-generatorov/diagnostika/">
14    <meta property="og:type" content="website">
15    <meta property="og:site_name" content="Технодельта">
16    <meta property="og:locale" content="ru_RU">
17    
18    <!-- ===== TWITTER CARDS ===== -->
19    <meta name="twitter:card" content="summary_large_image">
20    <meta name="twitter:title" content="Технодельта — диагностика генератора в Минске | На стенде и на автомобиле">
21    <meta name="twitter:description" content="Профессиональная диагностика генератора на стенде и на автомобиле. Проверка напряжения, регулятора, диодного моста, подшипников. Определяем причину неисправности. Любые марки.">
22    <meta name="twitter:image" content="https://auto-remont.by/d/diagnostika-generatora.webp">
23    
24    <!-- ===== МЕТА-ТЕГИ ДЛЯ КОНСОЛЕЙ И МЕТРИКИ ===== -->
25        <meta name="yandex-verification" content="01b411399719d278" />
26<meta name="google-site-verification" content="3mpj_rkq6BnDhEkMp3eBYx7EjTLEH8esGAH292ebofs" />
27<!-- Yandex Metrika -->
28<script type="text/javascript">
vendor: 406 bytes, lines 28-35
28
29   (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
30   m[i].l=1*new Date();
31   for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
32   k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
33   (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
34
35   ym(
35102069334
vendor: 123 bytes, lines 35-40
35, "init", {
36        clickmap:true,
37        trackLinks:true,
38        accurateTrackBounce:true,
39        webvisor:true
40   });
41</script>
41
42<noscript><div><img src="https://mc.yandex.ru/watch/102069334" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
43<!-- /Yandex Metrika -->    
44        <link rel="canonical" href="https://auto-remont.by/remont-generatorov/diagnostika/">
45        
46        <meta name="geo.region" content="BY-HM">
47    <meta name="geo.placename" content="Минск">
48        <meta name="ICBM" content="53.899277, 27.656973">
49        
50        <link rel="stylesheet" href="/assets/css/main.css?v=1791104821">
51
52    
52<script type="application/ld+json">{"@context":"https://schema.org","@type":"AutoRepair","@id":"https://auto-remont.by/#organization","name":"Технодельта","description":"Ремонт стартеров и генераторов в Минске с 1998 года","url":"https://auto-remont.by","image":"https://auto-remont.by/uploads/media/folder_2/5b7c0d19951411f18e1782d6dc1823f5-1-83ee.webp","logo":{"@type":"ImageObject","url":"https://auto-remont.by/uploads/media/folder_2/5b7c0d19951411f18e1782d6dc1823f5-1-83ee.webp"},"telephone":"+375 (29) 112-84-84","email":"[email protected]","address":{"@type":"PostalAddress","addressLocality":"Минск","streetAddress":"Минск, ул. Ваупшасова, 22","addressCountry":"BY"},"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["https://schema.org/Monday","https://schema.org/Tuesday","https://schema.org/Wednesday","https://schema.org/Thursday","https://schema.org/Friday"],"opens":"09:00","closes":"20:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":["https://schema.org/Saturday","https://schema.org/Sunday"],"opens":"09:00","closes":"18:00"}],"priceRange":"$$","paymentAccepted":"Наличные, карта","currenciesAccepted":"BYN","areaServed":[{"@type":"City","name":"Минск"},{"@type":"AdministrativeArea","name":"Центральный район"},{"@type":"AdministrativeArea","name":"Советский район"},{"@type":"AdministrativeArea","name":"Первомайский район"},{"@type":"AdministrativeArea","name":"Партизанский район"},{"@type":"AdministrativeArea","name":"Заводской район"},{"@type":"AdministrativeArea","name":"Ленинский район"},{"@type":"AdministrativeArea","name":"Октябрьский район"},{"@type":"AdministrativeArea","name":"Московский район"},{"@type":"AdministrativeArea","name":"Фрунзенский район"}],"geo":{"@type":"GeoCoordinates","latitude":53.899277,"longitude":27.656973},"hasMap":"https://yandex.ru/maps/?pt=27.656973,53.899277&z=17&l=map"}</script>
vendor: 1 bytes, line 52
52
53<script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","url":"https://auto-remont.by","name":"Технодельта","potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://auto-remont.by/baza-znanij/search/?q={search_term_string}"},"query-input":"required name=search_term_string"}}</script>
vendor: 1 bytes, line 53
53
54<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Стартера и генераторы","item":"https://auto-remont.by/remont-starterov-generatorov/"},{"@type":"ListItem","position":2,"name":"Ремонт генераторов","item":"https://auto-remont.by/remont-generatorov/"},{"@type":"ListItem","position":3,"name":"Диагностика генератора","item":"https://auto-remont.by/remont-generatorov/diagnostika/"}]}</script>
vendor: 1 bytes, line 54
54
55<script type="application/ld+json">{"@context":"https://schema.org","@type":"Service","name":"Диагностика генератора","description":"Профессиональная диагностика генератора на стенде и на автомобиле. Проверка напряжения, регулятора, диодного моста, подшипников. Определяем причину неисправности. Любые марки.","serviceType":"Диагностика генератора","provider":{"@id":"https://auto-remont.by/#organization"},"areaServed":{"@type":"City","name":"Минск"}}</script>
vendor: 1 bytes, line 55
55
56<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Можно приехать без записи?","acceptedAnswer":{"@type":"Answer","text":"Да, по диагностике генераторов чаще всего работаем без предварительной записи. По сложным случаям рекомендуем позвонить заранее."}},{"@type":"Question","name":"Диагностика генератора — это на автомобиле или нужно снимать?","acceptedAnswer":{"@type":"Answer","text":"Начинаем с проверки на автомобиле. Если нужно — снимаем и проводим стендовую диагностику. Можно привезти уже снятый генератор — выполним проверку на стенде."}},{"@type":"Question","name":"Сколько времени занимает диагностика?","acceptedA
56nswer":{"@type":"Answer","text":"В большинстве случаев 20–30 минут. Сложные случаи с разборкой могут занять до часа."}},{"@type":"Question","name":"Диагностика платная, если ремонт не нужен?","acceptedAnswer":{"@type":"Answer","text":"Да, диагностика оплачивается отдельно, если вы решили не ремонтироваться. При последующем ремонте стоимость диагностики не взимается."}},{"@type":"Question","name":"Диагностируете ли генераторы микроавтобусов и грузовых?","acceptedAnswer":{"@type":"Answer","text":"Да, для грузовых и микроавтобусов отдельный цех на пер. Солтыса, 5. Мощные генераторы с высокой токоотдачей требуют особого подхода — у нас есть опыт и оборудование."}},{"@type":"Question","name":"Что делать, если генератор не заряжает, но лампа не горит?","acceptedA
56nswer":{"@type":"Answer","text":"Такое возможно при неисправности диодного моста или проблемах в цепи управления. Нужна диагностика — часто неисправность не очевидна без измерительных приборов."}}]}</script>
56
57</head>
58<body>
59
60<style>
61:root {
62    --color-primary: #ec7404;
63    --color-dark: #011846;
64    --color-bg-warm: #faf8f5;
65    --color-white: #fff;
66    --color-text: #1a1a1a;
67    --color-text-secondary: #666;
68    --color-text-muted: #999;
69    --color-border: #e8e4df;
70    --color-card-shadow: rgba(0,0,0,0.04);
71    --color-card-shadow-hover: rgba(0,0,0,0.08);
72}
73</style>
74
75<header class="td-header" id="tdHeader">
76    <!-- Верхний ряд: логотип | меню | заявка | бургер -->
77    <div class="td-header-top">
78        <div class="td-header-inner">
79            <div class="td-header-left">
80                <a href="/" class="td-logo" aria-label="Технодельта — на главную">
81                                            <img src="/uploads/media/folder_2/5b7c0d19951411f18e1782d6dc1823f5-1-83ee.webp" alt="Технодельта" class="td-logo-img">
82                                        <span class="td-logo-text">
83                        Технодельта                        <span class="td-logo-sub">Стартеры и генераторы</span>                    </span>
84                </a>
85            </div>
86
87            <button class="td-burger" onclick="toggleMobileMenu()" aria-label="Меню">☰</button>
88
89            <nav class="td-nav" id="tdNav">
90                                        <div class="td-nav-item" data-level="0">
91        <a href="/main" class="td-nav-link">Главная</a>
92            </div>
93                                            <div class="td-nav-item has-children" data-level="0">
94        <a href="/remont-starterov-generatorov" class="td-nav-link">Стартера и генераторы</a>
95                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
96                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
97            </button>
98            <div class="td-dropdown">
99                                        <div class="td-dropdown-item has-children" data-level="1">
100        <a href="/remont-generatorov" class="td-dropdown-link">Ремонт генераторов</a>
101                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
102                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
103            </button>
104            <div class="td-dropdown-submenu">
105                                        <div class="td-dropdown-item" data-level="2">
106        <a href="/remont-generatorov/diagnostika" class="td-dropdown-link">Диагностика генератора</a>
107            </div>
108                                            <div class="td-dropdown-item" data-level="2">
109        <a href="/remont-generatorov/remont" class="td-dropdown-link">Восстановление генератора</a>
110            </div>
111                                            <div class="td-dropdown-item" data-level="2">
112        <a href="/remont-generatorov/peremotka-statora" class="td-dropdown-link">Перемотка статора генератора</a>
113            </div>
114                                </div>
115            </div>
116                                            <div class="td-dropdown-item has-children" data-level="1">
117        <a href="/remont-starterov" class="td-dropdown-link">Ремонт стартеров</a>
118                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
119                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
120            </button>
121            <div class="td-dropdown-submenu">
122                                        <div class="td-dropdown-item" data-level="2">
123        <a href="/remont-starterov/diagnostika" class="td-dropdown-link">Диагностика стартера</a>
124            </div>
125                                            <div class="td-dropdown-item" data-level="2">
126        <a href="/remont-starterov/remont" class="td-dropdown-link">Ремонт и восстановление стартера</a>
127            </div>
128                                            <div class="td-dropdown-item" data-level="2">
129        <a href="/remont-starterov/zamena-bendiksa" class="td-dropdown-link">
129Замена бендикса</a>
130            </div>
131                                            <div class="td-dropdown-item" data-level="2">
132        <a href="/remont-starterov/snyatie-ustanovka" class="td-dropdown-link">Снятие и установка стартера</a>
133            </div>
134                                </div>
135            </div>
136                                            <div class="td-dropdown-item" data-level="1">
137        <a href="/remont-starterov-generatorov/snyatie-ustanovka-startera-generatora" class="td-dropdown-link">Снятие и установка стартера и генератора</a>
138            </div>
139                                            <div class="td-dropdown-item" data-level="1">
140        <a href="/remont-starter-generatorov-48v" class="td-dropdown-link">Ремонт стартер-генераторов 48V</a>
141            </div>
142                                            <div class="td-dropdown-item" data-level="1">
143        <a href="/remont-generatorov-mikroavtobusov" class="td-dropdown-link">Ремонт генераторов микроавтобусов</a>
144            </div>
145                                            <div class="td-dropdown-item" data-level="1">
146        <a href="/remont-starterov-mikroavtobusov" class="td-dropdown-link">Ремонт стартеров микроавтобусов</a>
147            </div>
148                                            <div class="td-dropdown-item" data-level="1">
149        <a href="/remont-generatorov-gruzovyh" class="td-dropdown-link">Ремонт генераторов грузовых</a>
150            </div>
151                                            <div class="td-dropdown-item" data-level="1">
152        <a href="/remont-starterov-gruzovyh" class="td-dropdown-link">Ремонт стартеров грузовых</a>
153            </div>
154                                            <div class="td-dropdown-item" data-level="1">
155        <a href="/remont-starterov-avtobusov" class="td-dropdown-link">Ремонт стартеров автобусов</a>
156            </div>
157                                            <div class="td-dropdown-item" data-level="1">
158        <a href="/garantiya" class="td-dropdown-link">Гарантия</a>
159            </div>
160                                </div>
161            </div>
162                                            <div class="td-nav-item has-children" data-level="0">
163        <a href="/elektromehanika" class="td-nav-link">Электромеханика</a>
164                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
165                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
166            </button>
167            <div class="td-dropdown">
168                                        <div class="td-dropdown-item" data-level="1">
169        <a href="/remont-motorchikov-pechki" class="td-dropdown-link">Ремонт моторчиков печки</a>
170            </div>
171                                            <div class="td-dropdown-item" data-level="1">
172        <a href="/remont-ventilyatora-radiatora" class="td-dropdown-link">Ремонт вентилятора радиатора</a>
173            </div>
174                                            <div class="td-dropdown-item" data-level="1">
175        <a href="/remont-privodov-dverey" class="td-dropdown-link">Моторчики люков и приводы дверей</a>
176            </div>
177                                            <div class="td-dropdown-item" data-level="1">
178        <a href="/remont-ventilyatorov-ohlazhdeniya-elektromobilej" class="td-dropdown-link">Ремонт вентиляторов охлаждения электромобилей</a>
179            </div>
180                                            <div class="td-dropdown-item" data-level="1">
181        <a href="/avtoelektrika" class="td-dropdown-link">Автоэлектрика</a>
182            </div>
183                                </div>
184            </div>
185                                            <div class="td-nav-item has-children" data-level="0">
186        <a href="/diagnostika-i-to" class="td-nav-link">Диагностика и ТО</a>
187                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
188                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
189            </button>
190            <div class="td-dropdown">
191                                        <div class="td-dropdown-item" data-level="1">
192        <a href="/kompyuternaya-diagnostika" class="td-dropdown-link">Компьютерная диагностика</a>
193            </div>
194                                            <div class="td-dropdown-item" data-level="1">
195        <a href="/diagnostika-dymogeneratorom" class="td-dropdown-link">Диагностика дымогенератором</a>
196            </div>
197                                            <div class="td-dropdown-item" data-level="1">
198        <a href="/to-avtomobilej-v-minske" class="td-dropdown-link">Техническое обслуживание автомобилей</a>
199            </div>
200                                            <div class="td-dropdown-item" data-level="1">
201        <a href="/oshibki-pribornoj-paneli" class="td-dropdown-link">Ошибки приборной панели</a>
202            </div>
203                                </div>
204            </div>
205                                            <div class="td-nav-item has-children" data-level="0">
206        <a href="/avtoservis" class="td-nav-link">Автосервис</a>
207                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
208                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
209            </button>
210            <div class="td-dropdown">
211                                        <div class="td-dropdown-item" data-level="1">
212        <a href="/remont-dvigatelya" class="td-dropdown-link">Ремонт двигателя</a>
213            </div>
214                                            <div class="td-dropdown-item" data-level="1">
215        <a href="/zamena-grm-v-minske" class="td-dropdown-link">Замена ГРМ</a>
216            </div>
217                                            <div class="td-dropdown-item" data-level="1">
218        <a href="/remont-hodovoj-tormozov" class="td-dropdown-link">Ремонт ходовой | тормозов</a>
219            </div>
220                                            <div class="td-dropdown-item" data-level="1">
221        <a href="/remont-transmissii" class="td-dropdown-link">Ремонт трансмиссии</a>
222            </div>
223                                            <div class="td-dropdown-item" data-level="1">
224        <a href="/zamena-masla-i-zhidkostej" class="td-dropdown-link">Замена масла и жидкостей в авто</a>
225            </div>
226                                            <div class="td-dropdown-item" data-level="1">
227        <a href="/remont-vyhlopnoj" class="td-dropdown-link">Ремонт выхлопной</a>
228            </div>
229                                            <div class="td-dropdown-item" data-level="1">
230        <a href="/razval-shozhdenie" class="td-dropdown-link">Развал-схождение</a>
231            </div>
232                                            <div class="td-dropdown-item" data-level="1">
233        <a href="/avtopomoshch" class="td-dropdown-link">Автопомощь</a>
234            </div>
235                                </div>
236            </div>
237                                            <div class="td-nav-item has-children" data-level="0">
238        <a href="/klimat-i-ohlazhdeniye" class="td-nav-link">Климат и охлаждение</a>
239                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
240                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
241            </button>
242            <div class="td-dropdown">
243                                        <div class="td-dropdown-item" data-level="1">
244        <a href="/remont-kondicionerov" class="td-dropdown-link">Ремонт кондиционеров</a>
245            </div>
246                                            <div class="td-dropdown-item" data-level="1">
247        <a href="/zapravka-kondicionerov" class="td-dropdown-link">Заправка кондиционеров</a>
248            </div>
249                                            <div class="td-dropdown-item" data-level="1">
250        <a href="/promyvka-sistemy-ohlazhdeniya" class="td-dropdown-link">Промывка системы охлаждения</a>
251            </div>
252                                            <div class="td-dropdown-item" data-level="1">
253        <a href="/remont-sistemy-ohlazhdeniya" class="td-dropdown-link">Ремонт системы охлаждения</a>
254            </div>
255                                            <div class="td-dropdown-item" data-level="1">
256        <a href="/remont-sistemy-otopleniya" class="td-dropdown-link">Ремонт системы отопления</a>
257            </div>
258                                </div>
259            </div>
260                                            <div class="td-nav-item has-children" data-level="0">
261        <a href="/specuslugi" class="td-nav-link">Спецуслуги</a>
262                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
263                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
264            </button>
265            <div class="td-dropdown">
266                                        <div class="td-dropdown-item" data-level="1">
267        <a href="/antikorrozijnaja-obrabotka" class="td-dropdown-link">Антикоррозийная обработка</a>
268            </div>
269                                            <div class="td-dropdown-item" data-level="1">
270        <a href="/lazernaya-ochistka" class="td-dropdown-link">Лазерная очистка</a>
271            </div>
272                                            <div class="td-dropdown-item" data-level="1">
273        <a href="/argonnaya-svarka-avto-minsk" class="td-dropdown-link">Аргонная сварка</a>
274            </div>
275                                </div>
276            </div>
277                                            <div class="td-nav-item has-children" data-level="0">
278        <a href="/kommercheskij-transport" class="td-nav-link">Коммерческий транспорт</a>
279                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
280                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
281            </button>
282            <div class="td-dropdown">
283                                        <div class="td-dropdown-item" data-level="1">
284        <a href="/remont-mikroavtobusov" class="td-dropdown-link">Ремонт микроавтобусов</a>
285            </div>
286                                            <div class="td-dropdown-item" data-level="1">
287        <a href="/remont-gruzovyh" class="td-dropdown-link">Ремонт грузовых</a>
288            </div>
289                                            <div class="td-dropdown-item" data-level="1">
290        <a href="/remont-avtobusov" class="td-dropdown-link">Ремонт автобусов</a>
291            </div>
292                                            <div class="td-dropdown-item" data-level="1">
293        <a href="/diagnostika-i-to-kommercheskogo-transporta" class="td-dropdown-link">Диагностика и ТО</a>
294            </div>
295                                            <div class="td-dropdown-item" data-level="1">
296        <a href="/remont-dvigatelya-i-transmissii-kommercheskogo-transporta" class="td-dropdown-link">Ремонт двигателя и трансмиссии</a>
297            </div>
298                                            <div class="td-dropdown-item" data-level="1">
299        <a href="/remont-podveski-i-tormozov-kommercheskogo-transporta" class="td-dropdown-link">Ремонт подвески и тормозов</a>
300            </div>
301                                            <div class="td-dropdown-item" data-level="1">
302        <a href="/remont-elektrooborudovaniya-kommercheskogo-transporta" class="td-dropdown-link">Ремонт электрооборудования</a>
303            </div>
304                                            <div class="td-dropdown-item" data-level="1">
305        <a href="/promyvka-sistemy-ohlazhdeniya-kommercheskogo-transporta" class="td-dropdown-link">Промывка системы охлаждения</a>
306            </div>
307                                            <div class="td-dropdown-item" data-level="1">
308        <a href="/promyvka-pechki-kommercheskogo-transporta" class="td-dropdown-link">Промывка печки</a>
309            </div>
310                                            <div class="td-dropdown-item" data-level="1">
311        <a href="/razval-shozhdenie-kommercheskogo-transporta" class="td-dropdown-link">Развал-схождение</a>
312            </div>
313                                </div>
314            </div>
315                                            <div class="td-nav-item" data-level="0">
316        <a href="/ii-konsultant" class="td-nav-link">ИИ консультант</a>
317            </div>
318                                            <div class="td-nav-item has-children" data-level="0">
319        <a href="/o-kompanii" class="td-nav-link">О компании</a>
320                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
321                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
322            </button>
323            <div class="td-dropdown">
324                                        <div class="td-dropdown-item" data-level="1">
325        <a href="/kontakty" class="td-dropdown-link">Контакты</a>
326            </div>
327                                            <div class="td-dropdown-item" data-level="1">
328        <a href="/politika-konfidencialnosti" class="td-dropdown-link">Политика конфиденциальности</a>
329            </div>
330                                </div>
331            </div>
332                                            <div class="td-nav-item" data-level="0">
333        <a href="/stati/" class="td-nav-link">Статьи</a>
334            </div>
335                                            <div class="td-nav-item" data-level="0">
336        <a href="/baza-znanij/" class="td-nav-link">База знаний</a>
337            </div>
338                                            <div class="td-nav-item" data-level="0">
339        <a href="/partnery" class="td-nav-link">Наши партнеры</a>
340            </div>
341                                            <div class="td-nav-item has-children" data-level="0">
342        <a href="/avtomobili" class="td-nav-link">Автомобили</a>
343                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
344                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
345            </button>
346            <div class="td-dropdown">
347                                        <div class="td-dropdown-item" data-level="1">
348        <a href="/mazda" cla
348ss="td-dropdown-link">Мазда</a>
349            </div>
350                                            <div class="td-dropdown-item" data-level="1">
351        <a href="/peugeot" class="td-dropdown-link">Пежо</a>
352            </div>
353                                            <div class="td-dropdown-item" data-level="1">
354        <a href="/renault" class="td-dropdown-link">Рено</a>
355            </div>
356                                </div>
357            </div>
358                                            <div class="td-nav-item has-children" data-level="0">
359        <a href="/yuridicheskaya-pomoshch" class="td-nav-link">Юридическая помощь</a>
360                    <button class="td-nav-toggle" aria-label="Подменю" onclick="toggleSubmenu(this)">
361                <svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M1 1L5 5L9 1"/></svg>
362            </button>
363            <div class="td-dropdown">
364                                        <div class="td-dropdown-item" data-level="1">
365        <a href="/yuridicheskaya-pomoshch-avtovladelcam" class="td-dropdown-link">Помощь автовладельцам</a>
366            </div>
367                                            <div class="td-dropdown-item" data-level="1">
368        <a href="/yuridicheskaya-zashchita-avtoservisov" class="td-dropdown-link">Защита автосервисов</a>
369            </div>
370                                </div>
371            </div>
372                                    <!-- Overflow пункт "Ещё" -->
373                <div class="td-nav-item td-nav-more" id="tdNavMore" style="display:none;">
374                    <a href="#" class="td-nav-link" onclick="event.preventDefault();">Ещё&nbsp;☰</a>
375                    <div class="td-dropdown" id="tdNavMoreDropdown"></div>
376                </div>
377            </nav>
378        </div>
379    </div>
380
381    <!-- Нижний ряд: телефоны из БД -->
382    <div class="td-header-bottom">
383        <div class="td-header-inner">
384            <div class="td-header-phones">
385                                    <a href="tel:+375291128484" class="td-phone-header" title="Легковой сервис">
386                        <span class="td-phone-label">Легковой сервис</span>                        +375 (29) 112-84-84                    </a>
387                                    <a href="tel:+375291051919" class="td-phone-header" title="Грузовой сервис">
388                        <span class="td-phone-label">Грузовой сервис</span>                        +375 (29) 105-19-19                    </a>
389                            </div>
390                        <div class="td-header-actions">
391                <a href="#callback-form" class="td-btn td-btn-small">Заявка</a>
392            </div>
393                    </div>
394    </div>
395</header>
396
397<script>
398(function() {
399    const header = document.getElementById('tdHeader');
400    const nav    = document.getElementById('tdNav');
401    const more   = document.getElementById('tdNavMore');
402    const moreDropdown = document.getElementById('tdNavMoreDropdown');
403    if (!nav || !more) return;
404
405    // Сбрасываем инлайновый display:none из HTML
406    more.style.display = '';
407    more.classList.add('td-nav-hidden');
408
409    const items = Array.from(nav.children).filter(function(el) {
410        return el.classList.contains('td-nav-item') && !el.classList.contains('td-nav-more');
411    });
412
413    var widths = [];
414    var moreWidth = 0;
415
416    function measure() {
417        items.forEach(function(i) { i.classList.remove('td-nav-hidden'); });
418        more.classList.remove('td-nav-hidden');
419        more.style.visibility = 'hidden';
420        more.style.position = 'absolute';
421        more.style.left = '-9999px';
422
423        widths = items.map(function(i) {
424            return Math.ceil(i.getBoundingClientRect().width);
425        });
426        moreWidth = Math.ceil(more.getBoundingClientRect().width);
427
428        more.style.visibility = '';
429        more.style.position = '';
430        more.style.left = '';
431        more.classList.add('td-nav-hidden');
432    }
433
434    function toDropdownClone(node) {
435        var clone = node.cloneNode(true);
436        clone.removeAttribute('id');
437        clone.classList.remove('td-nav-item', 'td-nav-hidden');
438        clone.classList.add('td-dropdown-item');
439
440        var link = clone.querySelector('.td-nav-link');
441        if (link) {
442            link.classList.remove('td-nav-link');
443            link.classList.add('td-dropdown-link');
444        }
445
446        var dd = clone.querySelector('.td-dropdown');
447        if (dd) {
448            dd.classList.remove('td-dropdown');
449            dd.classList.add('td-dropdown-submenu');
450        }
451
452        clone.querySelectorAll('.td-nav-item').forEach(function(c) {
453            c.classList.remove('td-nav-item');
454            c.classList.add('td-dropdown-item');
455        });
456        clone.querySelectorAll('.td-nav-link').forEach(function(c) {
457            c.classList.remove('td-nav-link');
458            c.classList.add('td-dropdown-link');
459        });
460        clone.querySelectorAll('.td-dropdown').forEach(function(c) {
461            c.classList.remove('td-dropdown');
462            c.classList.add('td-dropdown-submenu');
463        });
464
465        return clone;
466    }
467
468    function checkFit() {
469        var isMobile = window.innerWidth <= 768;
470
471        if (isMobile) {
472            items.forEach(function(i) { i.classList.remove('td-nav-hidden'); });
473            more.classList.add('td-nav-hidden');
474            moreDropdown.innerHTML = '';
475            if (header) nav.style.top = header.offsetHeight + 'px';
476            return;
477        }
478
479        nav.style.top = '';
480        measure();
481
482        var cs = getComputedStyle(nav);
483        var gap = parseFloat(cs.columnGap || cs.gap) || 0;
484        var available = nav.clientWidth;
485
486        var totalWidth = 0;
487        for (var i = 0; i < widths.length; i++) {
488            totalWidth += widths[i] + (i > 0 ? gap : 0);
489        }
490
491        if (totalWidth <= available) {
492            more.classList.add('td-nav-hidden');
493            more.classList.remove('is-visible');
494            moreDropdown.innerHTML = '';
495            return;
496        }
497
498        var limit = available - moreWidth - gap;
499        var acc = 0;
500        var fitCount = 0;
501
502        for (var i = 0; i < widths.length; i++) {
503            var w = widths[i] + (i > 0 ? gap : 0);
504            if (acc + w > limit) break;
505            acc += w;
506            fitCount++;
507        }
508
509        moreDropdown.innerHTML = '';
510        for (var i = fitCount; i < items.length; i++) {
511            items[i].classList.add('td-nav-hidden');
512            moreDropdown.appendChild(toDropdownClone(items[i]));
513        }
514
515        if (fitCount < items.length) {
516            more.classList.remove('td-nav-hidden');
517            more.classList.add('is-visible');
518        } else {
519            more.classList.add('td-nav-hidden');
520            more.classList.remove('is-visible');
521        }
522    }
523
524    window.addEventListener('resize', checkFit);
525    window.addEventListener('load', checkFit);
526    setTimeout(checkFit, 50);
527    setTimeout(checkFit, 300);
528    if (document.fonts && document.fonts.ready) document.fonts.ready.then(checkFit);
529
530    window.toggleMobileMenu = function() {
531        nav.classList.toggle('open');
532    };
533
534    window.toggleSubmenu = function(btn) {
535        if (window.innerWidth > 768) return;
536        btn.classList.toggle('active');
537        var dropdown = btn.nextElementSibling;
538        if (dropdown) dropdown.classList.toggle('active');
539    };
540
541    document.querySelectorAll('.td-nav-link, .td-dropdown-link').forEach(function(link) {
542        link.addEventListener('click', function() {
543            var hasDropdown = link.parentElement.querySelector('.td-dropdown, .td-dropdown-submenu');
544            if (!hasDropdown) {
545                nav.classList.remove('open');
546            }
547        });
548    });
549
550    // === Автофлип: если dropdown вылезает за правый край экрана ===
551    function fixDropdownFlip() {
552        if (window.innerWidth <= 768) return;
553        document.querySelectorAll('.td-nav-item.has-children, .td-dropdown-item.has-children').forEach(function(item) {
554            var dd = item.querySelector(':scope > .td-dropdown, :scope > .td-dropdown-submenu');
555            if (!dd) return;
556            dd.classList.remove('flip-left');
557            var rect = dd.getBoundingClientRect();
558            if (rect.right > window.innerWidth - 16) {
559                dd.classList.add('flip-left');
560            }
561        });
562    }
563
564    // Проверяем перед открытием
565    document.querySelectorAll('.td-nav-item, .td-dropdown-item').forEach(function(item) {
566        item.addEventListener('mouseenter', function() {
567            if (window.innerWidth > 768) fixDropdownFlip();
568        });
569    });
570})();
571</script>
571
572
573    <nav class="td-breadcrumbs" aria-label="breadcrumb">
574    <ol class="td-breadcrumb-list">
575                    <li class="td-breadcrumb-item">
576                                    <a href="/remont-starterov-generatorov">Стартера и генераторы</a>
577                            </li>
578                    <li class="td-breadcrumb-item">
579                                    <a href="/remont-generatorov">Ремонт генераторов</a>
580                            </li>
581                    <li class="td-breadcrumb-item">
582                                    <span>Диагностика генератора</span>
583                            </li>
584            </ol>
585</nav>
586    <div class="td-section td-section-light" style="padding-top: 10px; padding-bottom: 10px;">
587        <div class="td-container" style="max-width:1200px;margin:0 auto;padding:0 24px;">
588            <h1 class="td-page-title" style="font-size:32px;font-weight:700;margin:0;">Диагностика генератора</h1>
589        </div>
590    </div>
591
592<main>
593    <section class="td-section td-section-light">
594    <div class="td-hero">
595        <div class="td-hero-main">
596                            <p class="td-eyebrow">Технодельта — с 1998 года</p>
597            
598                            <p class="td-subtitle">Профессиональная диагностика генератора на стенде и на автомобиле. Проверка напряжения, регулятора, диодного моста, подшипников. Точно определяем причину неисправности. Работаем с легковыми, микроавтобусами, грузовыми и спецтехникой.</p>
599            
600                            <div class="td-chips">
601                                            <span class="td-chip td-chip-accent">от 25 BYN</span>
602                                            <span class="td-chip ">На стенде и на авто</span>
603                                            <span class="td-chip ">Любые марки</span>
604                                    </div>
605            
606            <div class="td-contact-row">
607                                                    <a href="tel:+375291128484" class="td-phone-big">📞 +375 (29) 112-84-84</a>
608                                                    <a href="#kontakty" class="td-address-big">📍 ул. Ваупшасова, 22</a>
609                                <a href="#callback-form" class="td-callback-btn">📝 Оставить заявку</a>
610            </div>
611        </div>
612
613                    <div class="td-hero-side">
614                <div class="td-media td-media-frame td-media-fixed-md">
615                    <img src="/d/diagnostika-generatora.webp" alt="Диагностика генератора" class="td-img-cover" loading="eager">
616                </div>
617            </div>
618            </div>
619</section>
620<section class="td-section td-section-light">
621            <div class="td-section-head">
622            <h2 class="td-title">Когда нужна диагностика генератора</h2>
623        </div>
624        <div class="td-grid">
625                    <div class="td-card td-card-warm" style="text-align:center;">
626                                                            
627                        <div style="font-size:40px;margin-bottom:12px;">⚠️</div>
628                                                    <h3 class="td-card-title">Горит лампа аккумулятора</h3>
629                                    <p class="td-card-text">Самый частый признак проблем с зарядкой.</p>
630                                
631                                
632            </div>
633                    <div class="td-card td-card-warm" style="text-align:center;">
634                                                            
635                        <div style="font-size:40px;margin-bottom:12px;">🔋</div>
636                                                    <h3 class="td-card-title">Аккумулятор быстро разряжается</h3>
637                                    <p class="td-card-text">Машина плохо заводится после ночной стоянки.</p>
638                                
639                                
640            </div>
641                    <div class="td-card td-card-warm" style="text-align:center;">
642                                                            
643                        <div style="font-size:40px;margin-bottom:12px;">💡</div>
644                                                    <h3 class="td-card-title">Тусклый свет фар</h3>
645                                    <p class="td-card-text">Или мигание при работе двигателя.</p>
646                                
647                                
648            </div>
649                    <div class="td-card td-card-warm" style="text-align:center;">
650                                                            
651                        <div style="font-size:40px;margin-bottom:12px;">🔊</div>
652                                                    <h3 class="td-card-title">Посторонние звуки</h3>
653                                    <p class="td-card-text">Свист, гул, скрежет со стороны генератора.</p>
654                                
655                                
656            </div>
657                    <div class="td-card td-card-warm" style="text-align:center;">
658                                                            
659                        <div style="font-size:40px;margin-bottom:12px;">📊</div>
660                                                    <h3 class="td-card-title">Напряжение нестабильно</h3>
661                                    <p class="td-card-text">Скачки, просадки, электроника работает некорректно.</p>
662                                
663                                
664            </div>
665                    <div class="td-card td-card-warm" style="text-align:center;">
666                                                            
667                        <div style="font-size:40px;margin-bottom:12px;">🔥</div>
668                                                    <h3 class="td-card-title">Запах гари или дым</h3>
669                                    <p class="td-card-text">Из-под капота.</p>
670                                
671                                
672            </div>
673            </div>
674</section><section class="td-section td-section-light">
675            <div class="td-section-head">
676            <h2 class="td-title">Что проверяем при диагностике генератора</h2>
677        </div>
678        <div class="td-grid">
679                    <div class="td-card td-card-warm" style="text-align:center;">
680                                                            
681                        <div style="font-size:40px;margin-bottom:12px;">⚡</div>
682                                                    <h3 class="td-card-title">Выходное напряжение</h3>
683                                    <p class="td-card-text">Проверяем напряжение на холостом ходу и под нагрузкой. Норма: 13.8–14.4 В.</p>
684                                
685                                
686            </div>
687                    <div class="td-card td-card-warm" style="text-align:center;">
688                                                            
689                        <div style="font-size:40px;margin-bottom:12px;">🔌</div>
690                                                    <h3 class="td-card-title">Регулятор напряжения</h3>
691                                    <p class="td-card-text">Проверяем стабильность поддержания напряжения.</p>
692                                
693                                
694            </div>
695                    <div class="td-card td-card-warm" style="text-align:center;">
696                                                            
697                        <div style="font-size:40px;margin-bottom:12px;">🔄</div>
698                                                    <h3 class="td-card-title">Диодный мост</h3>
699                                    <p class="td-card-text">Проверяем диоды на пробой и обрыв.</p>
700                                
701                                
702            </div>
703                    <div class="td-card td-card-warm" style="text-align:center;">
704                                                            
705                        <div style="font-size:40px;margin-bottom:12px;">🔩</div>
706                                                    <h3 class="td-card-title">Подшипники и ротор</h3>
707                                    <p class="td-card-text">Оцениваем состояние подшипников, люфт, шумы.</p>
708                                
709                                
710            </div>
711                    <div class="td-card td-card-warm" style="text-align:center;">
712                                                            
713                        <div style="font-size:40px;margin-bottom:12px;">🪥</div>
714                                                    <h3 class="td-card-title">Щёточный узел</h3>
715                                    <p class="td-card-text">Проверяем износ щёток и состояние контактных колец.</p>
716                                
717                                
718            </div>
719                    <div class="td-card td-card-warm" style="text-align:center;">
720                                                            
721                        <div style="font-size:40px;margin-bottom:12px;">🔧</div>
722                                                    <h3 class="td-card-title">Цепь зарядки</h3>
723                                    <p class="td-card-text">Проверяем силовые провода, массу, клеммы.</p>
724                                
725                                
726            </div>
727            </div>
728</section><section class="td-section td-section-light">
729        <div class="td-grid">
730                    <div class="td-card td-card-warm" style="text-align:center;">
731                                                            
732                        <div style="font-size:40px;margin-bottom:12px;">💰</div>
733                                                    <h3 class="td-card-title">Экономия на ремонте</h3>
734                                    <p class="td-card-text">Раннее выявление проблемы дешевле, чем замена генератора после полного отказа.</p>
735                                
736                                
737            </div>
738                    <div class="td-card td-card-warm" style="text-align:center;">
739                                                            
740                        <div style="font-size:40px;margin-bottom:12px;">🔍</div>
741                                                    <h3 class="td-card-title">Точная причина</h3>
742                                    <p class="td-card-text">
742Не гадаем — проверяем. Вы знаете, что именно сломалось и сколько будет стоить ремонт.</p>
743                                
744                                
745            </div>
746                    <div class="td-card td-card-warm" style="text-align:center;">
747                                                            
748                        <div style="font-size:40px;margin-bottom:12px;">🛡️</div>
749                                                    <h3 class="td-card-title">Безопасность</h3>
750                                    <p class="td-card-text">Исключаем риск внезапной остановки двигателя из-за разряженного аккумулятора.</p>
751                                
752                                
753            </div>
754            </div>
755</section><section class="td-section td-section-warm">
756    <div class="td-section-head">
757                <h2 class="td-title">Как проходит диагностика генератора</h2>
758    </div>
759    <div class="td-grid" style="grid-template-columns:repeat(auto-fit,minmax(220px,1fr));">
760                    <div class="td-card" style="position:relative;padding-top:48px;">
761                <div class="td-card-number" style="position:absolute;top:16px;left:28px;">1</div>
762                <h3 class="td-card-title" style="margin-top:8px;">Визуальный осмотр</h3>
763                <p class="td-card-text">Проверяем ремень, проводку, клеммы, наличие подтёков масла или ОЖ.</p>
764            </div>
765                    <div class="td-card" style="position:relative;padding-top:48px;">
766                <div class="td-card-number" style="position:absolute;top:16px;left:28px;">2</div>
767                <h3 class="td-card-title" style="margin-top:8px;">Проверка на автомобиле</h3>
768                <p class="td-card-text">Замеряем напряжение на холостом ходу и под нагрузкой, проверяем цепь зарядки.</p>
769            </div>
770                    <div class="td-card" style="position:relative;padding-top:48px;">
771                <div class="td-card-number" style="position:absolute;top:16px;left:28px;">3</div>
772                <h3 class="td-card-title" style="margin-top:8px;">Стендовая диагностика</h3>
773                <p class="td-card-text">Снимаем генератор, подключаем к стенду. Проверяем токоотдачу, пульсации, работу регулятора.</p>
774            </div>
775                    <div class="td-card" style="position:relative;padding-top:48px;">
776                <div class="td-card-number" style="position:absolute;top:16px;left:28px;">4</div>
777                <h3 class="td-card-title" style="margin-top:8px;">Заключение</h3>
778                <p class="td-card-text">Определяем точную причину неисправности, называем стоимость и сроки ремонта.</p>
779            </div>
780            </div>
781</section><section class="td-section td-section-light">
782    <div class="td-section-head">
783        <h2 class="td-title">Стоимость диагностики генератора</h2>
784    </div>
785    <div class="td-price-table">
786                            <div class="td-price-row">
787                <span class="td-price-name">Диагностика на автомобиле</span>
788                <span class="td-price-value">
789                                            от 25                                        BYN                </span>
790            </div>
791                    <div class="td-price-row">
792                <span class="td-price-name">Диагностика снятого генератора (на стенде)</span>
793                <span class="td-price-value">
794                                            от 20                                        BYN                </span>
795            </div>
796                    <div class="td-price-row">
797                <span class="td-price-name">✓ При последующем ремонте</span>
798                <span class="td-price-value">
799                                            Бесплатно                                                        </span>
800            </div>
801            </div>
802</section><section class="td-section td-section-light">
803            <div class="td-section-head">
804            <h2 class="td-title">Почему важно провести диагностику у профессионалов</h2>
805        </div>
806        <div class="td-grid">
807                    <div class="td-card td-card-warm" style="text-align:center;">
808                                                            
809                        <div style="font-size:40px;margin-bottom:12px;">🔬</div>
810                                                    <h3 class="td-card-title">Не все неисправности видны</h3>
811                                    <p class="td-card-text">Проблема может быть в диодном мосте или регуляторе. Стендовая диагностика показывает скрытые дефекты.</p>
812                                
813                                
814            </div>
815                    <div class="td-card td-card-warm" style="text-align:center;">
816                                                            
817                        <div style="font-size:40px;margin-bottom:12px;">🔗</div>
818                                                    <h3 class="td-card-title">Проверяем всю цепь, а не только генератор</h3>
819                                    <p class="td-card-text">Часто проблема в проводке, клеммах, ремне или АКБ. Проверяем всё, чтобы проблема не вернулась.</p>
820                                
821                                
822            </div>
823                    <div class="td-card td-card-warm" style="text-align:center;">
824                                                            
825                        <div style="font-size:40px;margin-bottom:12px;">🛠️</div>
826                                                    <h3 class="td-card-title">Специализированное оборудование</h3>
827                                    <p class="td-card-text">Стенды под нагрузкой, осциллографы, мультиметры высокой точности.</p>
828                                
829                                
830            </div>
831                    <div class="td-card td-card-warm" style="text-align:center;">
832                                                            
833                        <div style="font-size:40px;margin-bottom:12px;">⭐</div>
834                                                    <h3 class="td-card-title">Опыт с 1998 года</h3>
835                                    <p class="td-card-text">Генераторы — наша профильная специализация. Знаем типичные неисправности для разных марок.</p>
836                                
837                                
838            </div>
839            </div>
840</section><section class="td-section td-section-warm" id="faq">
841    <div class="td-section-head">
842        <h2 class="td-title">Частые вопросы о диагностике генератора</h2>
843    </div>
844    <div class="td-faq-list">
845                    <details class="td-faq-item" open>
846                <summary class="td-faq-question">Можно приехать без записи?</summary>
847                <div class="td-faq-answer">Да, по диагностике генераторов чаще всего работаем без предварительной записи. По сложным случаям рекомендуем позвонить заранее.</div>
848            </details>
849                    <details class="td-faq-item" >
850                <summary class="td-faq-question">Диагностика генератора — это на автомобиле или нужно снимать?</summary>
851                <div class="td-faq-answer">Начинаем с проверки на автомобиле. Если нужно — снимаем и проводим стендовую диагностику. Можно привезти уже снятый генератор — выполним проверку на стенде.</div>
852            </details>
853                    <details class="td-faq-item" >
854                <summary class="td-faq-question">Сколько времени занимает диагностика?</summary>
855                <div class="td-faq-answer">В большинстве случаев 20–30 минут. Сложные случаи с разборкой могут занять до часа.</div>
856            </details>
857                    <details class="td-faq-item" >
858                <summary class="td-faq-question">Диагностика платная, если ремонт не нужен?</summary>
859                <div class="td-faq-answer">Да, диагностика оплачивается отдельно, если вы решили не ремонтироваться. При последующем ремонте стоимость диагностики не взимается.</div>
860            </details>
861                    <details class="td-faq-item" >
862                <summary class="td-faq-question">Диагностируете ли генераторы микроавтобусов и грузовых?</summary>
863                <div class="td-faq-answer">Да, для грузовых и микроавтобусов отдельный цех на пер. Солтыса, 5. Мощные генераторы с высокой токоотдачей требуют особого подхода — у нас есть опыт и оборудование.</div>
864            </details>
865                    <details class="td-faq-item" >
866                <summary class="td-faq-question">Что делать, если генератор не заряжает, но лампа не горит?</summary>
867                <div class="td-faq-answer">Такое возможно при неисправности диодного моста или проблемах в цепи управления. Нужна диагностика — часто неисправность не очевидна без измерительных приборов.</div>
868            </details>
869            </div>
870</section>
871</main>
872
873<section class="td-section td-section-warm td-form-section" id="callback-form">
874    <div class="td-section-head" style="margin-bottom:20px;">
875        <h2 class="td-title" style="font-size:20px;">Оставить заявку</h2>
876        <p class="td-subtitle" style="font-size:13px;">Перезвоним в течение 15 минут</p>
877    </div>
878    
879    <form class="td-form-compact" method="post" action="/api/form-submit" data-ajax="1">
880        <input type="hidden" name="page_url" value="/remont-generatorov/diagnostika/">
881
882        <!-- Антиспам: подписанный токен времени загрузки формы. Человек заполняет форму дольше 4 секунд, бот - мгновенно. -->
883        <input type="hidden" name="form_ts" value="1791476486.be40a3754d338877">        
884        <!-- Honeypot: человек поле не видит, боты заполняют. Заполнил = бот. -->
885        <input type="text" name="website" value="" tabindex="-1" autocomplete="off"
886               aria-hidden="true" style="position:absolute;left:-10000px;top:-10000px;width:1px;height:1px;opacity:0;">
887        
888        <div class="td-form-grid">
889                                                <div class="td-form-field">
890                        <input type="text"
891                            name="name" 
892                            placeholder="Иван" 
893                            required>
894                    </div>
895                                                                <div class="td-form-field">
896                        <input type="tel"
897                            name="phone" 
898                            placeholder="+375 (29) 000-00-00" 
899                            required>
900                    </div>
901                                                                <div class="td-form-field">
902                        <select name="service" aria-label="Услуга" >
903                            <option value="">Услуга</option>
904                                                            <option value="Ремонт стартера">Ремонт стартера</option>
905                                                            <option value="Ремонт генератора">Ремонт генератора</option>
906                                                            <option value="Диагностика">Диагностика</option>
907                                                            <option value="Покупка запчастей">Покупка запчастей</option>
908                                                    </select>
909                    </div>
910                                                                <div class="td-form-field td-form-full">
911                        <textarea name="comment" placeholder="Опишите проблему"  rows="2"></textarea>
912                    </div>
913                            
914                            <div class="td-form-field">
915                    <select name="recipient_service" aria-label="Услуга">
916                                                    <option value="1">🚗 Легковой сервис</option>
917                                                    <option value="2">🚚 Грузовой автосервис</option>
918                                            </select>
919                </div>
920                    </div>
921
922        <button type="submit" class="td-btn td-btn-submit">Отправить заявку</button>
923        
924        <p class="td-form-agree">Нажимая кнопку, вы соглашаетесь с обработкой персональных данных</p>
925    </form>
926</section>
927
928<!--
929    ВАЖНО: inline-скрипт отправки здесь НЕ нужен.
930    AJAX-обработчик формы уже подключается ОДИН раз в assets/js/main.js (секция 9).
931    Раньше скрипт дублировался здесь: на одну форму вешалось ДВА обработчика submit
932    (main.js + этот inline), и заявка уходила дважды — отсюда дубли в Telegram.
933-->
934
935
936<div class="td-social-bar">
937    <p class="td-social-title">Мы в соцсетях</p>
938    <div class="td-social-list">
939                    <a href="https://www.tiktok.com/@tehnodelta" target="_blank" class="td-social-link" title="Мы в Тикток">
940                <span class="td-social-icon"><svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M12.525.02c1.31-.02 2.61-.01 3.91-.02.08 1.53.63 3.09 1.75 4.17 1.12 1.11 2.7 1.62 4.24 1.79v4.03c-1.44-.05-2.89-.35-4.2-.97-.57-.26-1.1-.59-1.62-.93-.01 2.92.01 5.84-.02 8.75-.08 1.4-.54 2.79-1.35 3.94-1.31 1.92-3.58 3.17-5.91 3.21-1.43.08-2.86-.31-4.08-1.03-2.02-1.19-3.44-3.37-3.65-5.71-.02-.5-.03-1-.01-1.49.18-1.9 1.12-3.72 2.58-4.96 1.66-1.44 3.98-2.13 6.15-1.72.02 1.48-.04 2.96-.04 4.44-.99-.32-2.15-.23-3.02.37-.63.41-1.11 1.04-1.36 1.75-.21.51-.15 1.07-.14 1.61.24 1.64 1.82 3.02 3.5 2.87 1.12-.01 2.19-.66 2.77-1.61.19-.33.4-.67.41-1.06.1-1.79.06-3.57.07-5.36.01-4.03-.01-8.05.02-12.07z"/></svg></span>
941                <span class="td-social-label">Мы в Тикток</span>
942            </a>
943                    <a href="https://www.instagram.com/autoserviceminsk/" target="_blank" class="td-social-link" title="Мы в инстаграм">
944                <span class="td-social-icon"><svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M7.0301.084c-1.2768.0602-2.1487.264-2.911.5634-.7888.3075-1.4575.72-2.1228 1.3877-.6652.6677-1.075 1.3368-1.3802 2.127-.2954.7638-.4956 1.6365-.552 2.914-.0564 1.2775-.0689 1.6882-.0626 4.947.0062 3.2586.0206 3.6671.0825 4.9473.061 1.2765.264 2.1482.5635 2.9107.308.7889.72 1.4573 1.388 2.1228.6679.6655 1.3365 1.0743 2.1285 1.38.7632.295 1.6361.4961 2.9134.552 1.2773.056 1.6884.069 4.9462.0627 3.2578-.0062 3.668-.0207 4.9478-.0814 1.28-.0607 2.147-.2652 2.9098-.5633.7889-.3086 1.4578-.72 2.1228-1.3881.665-.6682 1.0745-1.3378 1.3795-2.1284.2957-.7632.4966-1.636.552-2.9124.056-1.2809.0692-1.6898.063-4.948-.0063-3.2583-.021-3.6668-.0817-4.9465-.0607-1.2797-.264-2.1487-.5633-2.9117-.3084-.7889-.72-1.4568-1.3876-2.1228C21.2982 1.33 20.628.9208 19.8378.6165 19.074.321 18.2017.1197 16.9244.0645 15.6471.0093 15.236-.005 11.977.0014 8.718.0076 8.31.0215 7.0301.0839m.1402 21.6932c-1.17-.0509-1.8053-.2453-2.2287-.408-.5606-.216-.96-.4771-1.3819-.895-.422-.4178-.6811-.8186-.9-1.378-.1644-.4234-.3624-1.058-.4171-2.228-.0595-1.2645-.072-1.6442-.079-4.848-.007-3.2037.0053-3.583.0607-4.848.05-1.169.2456-1.805.408-2.2282.216-.5613.4762-.96.895-1.3816.4188-.4217.8184-.6814 1.3783-.9003.423-.1651 1.0575-.3614 2.227-.4171 1.2655-.06 1.6447-.072 4.848-.079 3.2033-.007 3.5835.005 4.8495.0608 1.169.0508 1.8053.2445 2.228.408.5608.216.96.4754 1.3816.895.4217.4194.6816.8176.9005 1.3787.1653.4217.3617 1.056.4169 2.2263.0602 1.2655.0739 1.645.0796 4.848.0058 3.203-.0055 3.5834-.061 4.848-.051 1.17-.245 1.8055-.408 2.2294-.216.5604-.4763.96-.8954 1.3814-.419.4215-.8181.6811-1.3783.9-.4224.1649-1.0577.3617-2.2262.4174-1.2656.0595-1.6448.072-4.8493.079-3.2045.007-3.5825-.006-4.848-.0608M16.953 5.5864A1.44 1.44 0 1 0 18.39 4.144a1.44 1.44 0 0 0-1.437 1.4424M5.8385 12.012c.0067 3.4032 2.7706 6.1557 6.173 6.1493 3.4026-.0065 6.157-2.7701 6.1506-6.1733-.0065-3.4032-2.771-6.1565-6.174-6.1498-3.403.0067-6.156 2.771-6.1496 6.1738M8 12.0077a4 4 0 1 1 4.008 3.9921A3.9996 3.9996 0 0 1 8 12.0077"/></svg></span>
945                <span class="td-social-label">Мы в инстаграм</span>
946            </a>
947                    <a href="https://www.youtube.com/@%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C%D1%82%D0%B0" target="_blank" class="td-social-link" title="Мы в Ютуб">
948                <span class="td-social-icon"><svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z"/></svg></span>
949                <span class="td-social-label">Мы в Ютуб</span>
950            </a>
951            </div>
952</div>
953<footer class="td-footer">
954    <div class="td-footer-inner">
955        <div class="td-footer-col">
956            <strong>Технодельта</strong>
957            <p style="color:#bbb;font-size:13px;margin-top:6px;">Ремонт стартеров и генераторов</p>
958        </div>
959        <div class="td-footer-col">
960            <p style="color:#bbb;font-size:13px;line-height:1.6;">Минск, ул. Ваупшасова, 22<br />
961Пн–Пт 9:00–20:00<br />
962Сб-вс 9:00-18:00</p>
963        </div>
964        <div class="td-footer-col">
965            <p style="color:#888;font-size:12px;">© 2026 Технодельта</p>
966        </div>
967    </div>
968</footer>
969
970<div class="td-bottom-bar">
971    <a href="tel:+375291128484" class="td-bottom-btn td-bottom-call">
972        <span class="td-bottom-icon">📞</span>
973        <span>Позвонить</span>
974    </a>
975
976                    <a href="viber://chat?number=%2B375291128484" class="td-bottom-btn td-bottom-msg" target="_blank">
977            <span class="td-bottom-icon"><svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M11.4 0C9.473.028 5.333.344 3.02 2.467 1.302 4.187.696 6.7.633 9.817.57 12.933.488 18.776 6.12 20.36h.003l-.004 2.416s-.037.977.61 1.177c.777.242 1.234-.5 1.98-1.302.407-.44.972-1.084 1.397-1.58 3.85.326 6.812-.416 7.15-.525.776-.252 5.176-.816 5.892-6.657.74-6.02-.36-9.83-2.34-11.546-.596-.55-3.006-2.3-8.375-2.323 0 0-.395-.025-1.037-.017zm.058 1.693c.545-.004.88.017.88.017 4.542.02 6.717 1.388 7.222 1.846 1.675 1.435 2.53 4.868 1.906 9.897v.002c-.604 4.878-4.174 5.184-4.832 5.395-.28.09-2.882.737-6.153.524 0 0-2.436 2.94-3.197 3.704-.12.12-.26.167-.352.144-.13-.033-.166-.188-.165-.414l.02-4.018c-4.762-1.32-4.485-6.292-4.43-8.895.054-2.604.543-4.738 1.996-6.173 1.96-1.773 5.474-2.018 7.11-2.03zm.38 2.602c-.167 0-.303.135-.304.302 0 .167.133.303.3.305 1.624.01 2.946.537 4.028 1.592 1.073 1.046 1.62 2.468 1.633 4.334.002.167.14.3.307.3.166-.002.3-.138.3-.304-.014-1.984-.618-3.596-1.816-4.764-1.19-1.16-2.692-1.753-4.447-1.765zm-3.96.695c-.19-.032-.4.005-.616.117l-.01.002c-.43.247-.816.562-1.146.932-.002.004-.006.004-.008.008-.267.323-.42.638-.46.948-.008.046-.01.093-.007.14 0 .136.022.27.065.4l.013.01c.135.48.473 1.276 1.205 2.604.42.768.903 1.5 1.446 2.186.27.344.56.673.87.984l.132.132c.31.308.64.6.984.87.686.543 1.418 1.027 2.186 1.447 1.328.733 2.126 1.07 2.604 1.206l.01.014c.13.042.265.064.402.063.046.002.092 0 .138-.008.31-.036.627-.19.948-.46.004 0 .003-.002.008-.005.37-.33.683-.72.93-1.148l.003-.01c.225-.432.15-.842-.18-1.12-.004 0-.698-.58-1.037-.83-.36-.255-.73-.492-1.113-.71-.51-.285-1.032-.106-1.248.174l-.447.564c-.23.283-.657.246-.657.246-3.12-.796-3.955-3.955-3.955-3.955s-.037-.426.248-.656l.563-.448c.277-.215.456-.737.17-1.248-.217-.383-.454-.756-.71-1.115-.25-.34-.826-1.033-.83-1.035-.137-.165-.31-.265-.502-.297zm4.49.88c-.158.002-.29.124-.3.282-.01.167.115.312.282.324 1.16.085 2.017.466 2.645 1.15.63.688.93 1.524.906 2.57-.002.168.13.306.3.31.166.003.305-.13.31-.297.025-1.175-.334-2.193-1.067-2.994-.74-.81-1.777-1.253-3.05-1.346h-.024zm.463 1.63c-.16.002-.29.127-.3.287-.008.167.12.31.288.32.523.028.875.175 1.113.422.24.245.388.62.416 1.164.01.167.15.295.318.287.167-.008.295-.15.287-.317-.03-.644-.215-1.178-.58-1.557-.367-.378-.893-.574-1.52-.607h-.018z"/></svg></span>
978            <span>Вайбер</span>
979        </a>
980    
981    <a href="#callback-form" class="td-bottom-btn td-bottom-action">
982        <span class="td-bottom-icon">📝</span>
983        <span>Заявка</span>
984    </a>
985</div>
986
987<!-- ===== МЕТА-ТЕГИ ДЛЯ МЕТРИКИ (BODY) ===== -->
988
989<script src="/assets/js/main.js?v=1789493060"></script>
989
990<style>
991.booking-float{position:fixed;right:18px;bottom:18px;z-index:9980;display:inline-flex;align-items:center;gap:9px;padding:13px 20px;border-radius:999px;background:linear-gradient(135deg,var(--ap-primary,#2563eb) 0%,#3b82f6 60%,var(--ap-cyan,#06b6d4) 140%);color:#fff;font-weight:700;font-size:15px;line-height:1;text-decoration:none;box-shadow:0 6px 20px rgba(37,99,235,.35);transition:transform .18s ease,box-shadow .18s ease;animation:bfPulse 3.2s ease-in-out infinite;}
992.booking-float:hover{transform:translateY(-2px);box-shadow:0 10px 28px rgba(37,99,235,.45);color:#fff;}
993.booking-float svg{flex:none;}
994@keyframes bfPulse{0%,100%{box-shadow:0 6px 20px rgba(37,99,235,.35)}50%{box-shadow:0 6px 20px rgba(37,99,235,.35),0 0 0 10px rgba(37,99,235,.08)}}
995@media (max-width:768px){.booking-float{right:14px;bottom:calc(14px + env(safe-area-inset-bottom, 0px));padding:12px 16px;font-size:14px;}}
996@media (prefers-reduced-motion:reduce){.booking-float{animation:none;transition:none;}}
997@media print{.booking-float{display:none!important;}}
998</style>
999<a class="booking-float" href="/zapis/" aria-label="Онлайн-запись">
1000    <svg width="19" height="19" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="16" rx="3"/><path d="M8 3v4M16 3v4M3 10h18M9.5 15.5l2 2 3.5-3.5"/></svg>
1001    <span>Онлайн-запись</span>
1002</a>
1003<div id="tdChat" class="td-chat" data-online="1">
1004    <style>
1005        /* ===== Онлайн-чат: стили (инлайн — внешних запросов нет) ===== */
1006        .td-chat *{box-sizing:border-box;margin:0;padding:0;font-family:inherit}
1007        .td-chat-btn{position:fixed;right:18px;bottom:18px;z-index:9970;width:56px;height:56px;border-radius:50%;
1008            border:none;cursor:pointer;background:var(--color-primary,#ec7404);color:#fff;
1009            display:flex;align-items:center;justify-content:center;
1010            box-shadow:0 6px 20px rgba(0,0,0,.25);transition:transform .18s ease,box-shadow .18s ease}
1011        .td-chat-btn:hover{transform:translateY(-2px);box-shadow:0 10px 26px rgba(0,0,0,.3)}
1012        .td-chat-btn svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
1013        .td-chat-btn .td-chat-ico-x{display:none}
1014        .td-chat.open .td-chat-btn .td-chat-ico-x{display:block}
1015        .td-chat.open .td-chat-btn .td-chat-ico-chat{display:none}
1016        .td-chat-dot{position:absolute;top:-2px;right:-2px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;
1017            background:#e53935;color:#fff;font-size:11px;font-weight:700;line-height:18px;text-align:center;display:none}
1018        .td-chat-dot.show{display:block}
1019        .td-chat-panel{position:fixed;right:18px;bottom:86px;z-index:9990;width:min(360px,calc(100vw - 24px));
1020            max-height:min(560px,calc(100vh - 120px));display:none;flex-direction:column;overflow:hidden;
1021            background:#fff;border-radius:16px;box-shadow:0 12px 40px rgba(0,0,0,.28);border:1px solid rgba(0,0,0,.06)}
1022        .td-chat.open .td-chat-panel{display:flex;animation:tdChatIn .18s ease}
1023        @keyframes tdChatIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
1024        .td-chat-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 16px;
1025            background:var(--color-dark,#011846);color:#fff;flex:none}
1026        .td-chat-head-txt strong{display:block;font-size:15px;line-height:1.2}
1027        .td-chat-status{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:rgba(255,255,255,.75);margin-top:2px}
1028        .td-chat-status i{width:8px;height:8px;border-radius:50%;background:#9aa3ad;flex:none}
1029        .td-chat[data-online="1"] .td-chat-status i{background:#43d477}
1030        .td-chat-close{background:none;border:none;color:rgba(255,255,255,.8);cursor:pointer;padding:6px;border-radius:8px;display:flex;flex:none}
1031        .td-chat-close:hover{background:rgba(255,255,255,.12);color:#fff}
1032        .td-chat-close svg{width:16px;height:16px;stroke:currentColor;stroke-width:2;stroke-linecap:round;fill:none}
1033        .td-chat-msgs{flex:1 1 auto;overflow-y:auto;padding:14px 12px;display:flex;flex-direction:column;gap:8px;background:#faf8f5;-webkit-overflow-scrolling:touch}
1034        .td-chat-msg{max-width:82%;padding:9px 12px;border-radius:12px;font-size:14px;line-height:1.45;word-wrap:break-word;white-space:pre-wrap}
1035        .td-chat-msg .td-chat-t{display:block;font-size:10.5px;opacity:.6;margin-top:3px}
1036        .td-chat-msg.client{align-self:flex-end;background:var(--color-primary,#ec7404);color:#fff;border-bottom-right-radius:4px}
1037        .td-chat-msg.admin{align-self:flex-start;background:#fff;
1037color:#1a1a1a;border:1px solid #e8e4df;border-bottom-left-radius:4px}
1038        .td-chat-msg.system{align-self:center;background:none;color:#8a8f98;font-size:12px;max-width:95%;text-align:center;padding:2px 8px}
1039        .td-chat-contacts{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:8px 12px;background:#fff;border-top:1px solid #efece7;flex:none}
1040        .td-chat-contacts input{width:100%;padding:8px 10px;border:1px solid #ddd8d2;border-radius:8px;font-size:13px;outline:none;background:#faf8f5}
1041        .td-chat-contacts input:focus{border-color:var(--color-primary,#ec7404);background:#fff}
1042        .td-chat-inputrow{display:flex;align-items:flex-end;gap:8px;padding:10px 12px;background:#fff;flex:none}
1043        .td-chat-inputrow textarea{flex:1 1 auto;resize:none;border:1px solid #ddd8d2;border-radius:10px;padding:9px 12px;
1044            font-size:14px;line-height:1.4;max-height:96px;outline:none;background:#faf8f5}
1045        .td-chat-inputrow textarea:focus{border-color:var(--color-primary,#ec7404);background:#fff}
1046        .td-chat-send{flex:none;width:40px;height:40px;border-radius:10px;border:none;cursor:pointer;
1047            background:var(--color-primary,#ec7404);color:#fff;display:flex;align-items:center;justify-content:center}
1048        .td-chat-send:hover{filter:brightness(.92)}
1049        .td-chat-send svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
1050        .td-chat-privacy{flex:none;padding:0 12px 8px;font-size:10.5px;color:#a8a29a;background:#fff;text-align:center}
1051        @media (max-width:768px){
1052            .td-chat-btn{right:12px;width:52px;height:52px}
1053            .td-chat-panel{right:8px;left:8px;width:auto;max-height:min(480px,72vh)}
1054        }
1055        /* v1.4.5: если на странице есть плавающая кнопка онлайн-записи —
1056           чат СРАЗУ занимает место НАД ней (без ожидания JS; точную
1057           позицию до миллиметра потом ставит place() инлайн-стилем).
1058           @supports selector(:has()) — правило действует только там,
1059           где браузер понимает :has(); остальным хватает place(). */
1060        @supports selector(body:has(*)){
1061            body:has(.booking-float) .td-chat-btn{bottom:82px}
1062            body:has(.booking-float) .td-chat-panel{bottom:150px}
1063        }
1064        @media (prefers-reduced-motion:reduce){.td-chat.open .td-chat-panel{animation:none}.td-chat-btn{transition:none}}
1065    </style>
1066
1067    <button class="td-chat-btn" id="tdChatBtn" type="button" aria-label="Открыть чат" aria-expanded="false">
1068        <svg class="td-chat-ico-chat" viewBox="0 0 24 24" aria-hidden="true"><path d="M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z"/></svg>
1069        <svg class="td-chat-ico-x" viewBox="0 0 24 24" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12"/></svg>
1070        <span class="td-chat-dot" id="tdChatDot"></span>
1071    </button>
1072
1073    <section class="td-chat-panel" id="tdChatPanel" role="dialog" aria-label="Чат поддержки" hidden>
1074        <header class="td-chat-head">
1075            <div class="td-chat-head-txt">
1076                <strong>Технодельта</strong>
1077                <span class="td-chat-status"><i></i>Мы онлайн</span>
1078                            </div>
1079            <button class="td-chat-close" id="tdChatClose" type="button" aria-label="Свернуть чат">
1080                <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12"/></svg>
1081            </button>
1082        </header>
1083        <div class="td-chat-msgs" id="tdChatMsgs" aria-live="polite"></div>
1084        <div class="td-chat-contacts">
1085            <input type="text" id="tdChatName" maxlength="60" placeholder="Ваше имя" autocomplete="name">
1086            <input type="tel" id="tdChatPhone" maxlength="30" placeholder="Телефон для ответа" autocomplete="tel">
1087        </div>
1088        <form class="td-chat-inputrow" id="tdChatForm">
1089            <textarea id="tdChatText" rows="1" maxlength="1000" placeholder="Напишите сообщение…" aria-label="Текст сообщения"></textarea>
1090            <button class="td-chat-send" type="submit" aria-label="Отправить сообщение">
1091                <svg viewBox="0 0 24 24" aria-hidden="true"><path d="m22 2-7 20-4-9-9-4z"/><path d="M22 2 11 13"/></svg>
1092            </button>
1093        </form>
1094        <p class="td-chat-privacy">Отвечаем в чате в рабочее время. Сообщения сохраняются, чтобы мы не потеряли ваш вопрос.</p>
1095    </section>
1096
1097    
1097<script>
1098    // v1.4.4: конфиг для JS виджета — приветствие из «Настроек» и токен
1099    // антиспама. Раньше window.tdChatCfg никто не заполнял: настроенное
1100    // приветствие не показывалось, а токен уходил пустым.
1101    window.tdChatCfg = {"greeting":"Здравствуйте! Опишите ваш вопрос — ответим здесь же.","ts":"1791476486.be40a3754d338877"};
1102    </script>
1102
1103
1104    
1104<script>
1105    (function () {
1106        'use strict';
1107        var cfg = window.tdChatCfg || {};
1108        var d = document;
1109        var root = d.getElementById('tdChat');
1110        if (!root) return;
1111        var btn = d.getElementById('tdChatBtn'),
1112            panel = d.getElementById('tdChatPanel'),
1113            msgs = d.getElementById('tdChatMsgs'),
1114            dot = d.getElementById('tdChatDot'),
1115            form = d.getElementById('tdChatForm'),
1116            input = d.getElementById('tdChatText'),
1117            nameI = d.getElementById('tdChatName'),
1118            phoneI = d.getElementById('tdChatPhone'),
1119            closeBtn = d.getElementById('tdChatClose');
1120
1121        // --- uid диалога: случайный 32-символьный ключ в localStorage.
1122        // Он же — доступ к своему диалогу на сервере (угадать нельзя).
1123        function makeUid() {
1124            var hex = '0123456789abcdef', s = '';
1125            try {
1126                var a = new Uint8Array(16);
1127                (window.crypto || window.msCrypto).getRandomValues(a);
1128                for (var i = 0; i < a.length; i++) s += hex[a[i] >> 4] + hex[a[i] & 15];
1129            } catch (e) {
1130                for (var j = 0; j < 32; j++) s += hex[Math.floor(Math.random() * 16)];
1131            }
1132            return s;
1133        }
1134        function store(k, v) { try { localStorage.setItem(k, v); } catch (e) {} }
1135        function load(k) { try { return localStorage.getItem(k); } catch (e) { return null; } }
1136
1137        var uid = load('tdChatUid');
1138        if (!uid || !/^[a-f0-9]{32}$/.test(uid)) { uid = makeUid(); store('tdChatUid', uid); }
1139        // v1.4.1: история НЕ держится в localStorage — она вся на сервере
1140        // и подтягивается при загрузке страницы (boot-опрос after=0).
1141        // seenId — последний ответ оператора, который клиент уже видел
1142        // (открывал чат): по нему считается бейдж непрочитанных после
1143        // перезагрузки страницы.
1144        var lastId = 0;
1145        var seenId = parseInt(load('tdChatSeen'), 10) || 0;
1146        var unread = 0;
1147        var isOpen = false;
1148        var booted = false;       // первичная подгрузка истории завершена
1149        var greetPending = false; // чат открыт, приветствие ждёт boot
1150        var pollTimer = null, pollDelayOpen = 5000, pollDelayClosed = 20000, pollDelayError = 15000;
1151        var pending = []; // свои неотправленные тексты (для сверки при опросе)
1152
1153        function markSeen() {
1154            // «Видел» = чат открыт на экране. Пока закрыт — непрочитанное
1155            // остаётся непрочитанным (бейдж переживёт перезагрузку).
1156            if (isOpen && lastId > seenId) { seenId = lastId; store('tdChatSeen', String(seenId)); }
1157        }
1158        function ensureGreeting() {
1159            if (msgs.children.length) return; // история уже есть — приветствие не нужно
1160            sysLine('Чат открыт');
1161            bubble('admin', cfg.greeting || 'Здравствуйте! Напишите ваш вопрос — ответим здесь же.', '');
1162            sysLine('Оставьте имя и телефон ниже — так мы сможем ответить, даже если вы закроете страницу.');
1163        }
1164
1165        // --- утилиты DOM (только textContent — XSS исключён) ---
1166        function bubble(sender, text, time, cls) {
1167            var el = d.createElement('div');
1168            el.className = 'td-chat-msg ' + (cls || sender);
1169            el.textContent = text;
1170            if (time) {
1171                var t = d.createElement('span');
1172                t.className = 'td-chat-t';
1173                t.textContent = time;
1174                el.appendChild(t);
1175            }
1176            msgs.appendChild(el);
1177            return el;
1178        }
1179        function sysLine(text) { bubble('system', text, ''); }
1180        function scrollDown() { msgs.scrollTop = msgs.scrollHeight; }
1181        function setUnread(n) {
1182            unread = n;
1183            if (n > 0) { dot.textContent = n > 9 ? '9+' : String(n); dot.classList.add('show'); }
1184            else { dot.classList.remove('show'); }
1185        }
1186
1187        // --- позиция: не наезжаем на кнопку «Запись» и мобильную нижнюю панель.
1188        // ВАЖНО: у position:fixed элементов offsetParent всегда null —
1189        // видимость проверяем через offsetHeight (0 = скрыт display:none).
1190        function vis(el) { return !!(el && el.offsetHeight > 0); }
1191        function place() {
1192            var b = 18;
1193            var bf = d.querySelector('.booking-float');
1194            if (vis(bf)) {
1195                b = Math.max(b, Math.round(window.innerHeight - bf.getBoundingClientRect().top) + 12);
1196            } else {
1197                var bar = d.querySelector('.td-bottom-bar');
1198                if (vis(bar)) b = bar.offsetHeight + 12;
1199            }
1200            btn.style.bottom = b + 'px';
1201            panel.style.bottom = (b + 68) + 'px';
1202        }
1203
1204        // ===== v1.4.4: KEEP-ALIVE — звук при выключенном экране =====
1205        // Chrome «замораживает» страницы без активного звука: опрос
1206        // замирает, и новый ответ никто не услышит. Держим невидимую
1207        // звуковую петлю — синус 30 Гц: телефонный динамик такую частоту
1208        // физически не воспроизводит (полная тишина), но для браузера
1209        // страница «играет звук» — не замерзает, опрос живёт, и сигнал
1210        // о новом сообщении срабатывает, даже когда экран погашен.
1211        // В шторке появится карточка плеера «звук включён» — это норма;
1212        // пауза на этой карточке выключит и звук уведомлений.
1213        var KA = (function () {
1214            var el = null, url = null, want = false;
1215            function src() {
1216                var sr = 8000, n = sr * 10;
1217                var buf = new ArrayBuffer(44 + n * 2), v = new DataView(buf);
1218                function w(o, s) { for (var i = 0; i < s.length; i++) v.setUint8(o + i, s.charCodeAt(i)); }
1219                w(0, 'RIFF'); v.setUint32(4, 36 + n * 2, true); w(8, 'WAVEfmt '); 
1220                v.setUint32(16, 16, true); v.setUint16(20, 1, true); v.setUint16(22, 1, true);
1221                v.setUint32(24, sr, true); v.setUint32(28, sr * 2, true);
1222                v.setUint16(32, 2, true); v.setUint16(34, 16, true);
1223                w(36, 'data'); v.setUint32(40, n * 2, true);
1224                for (var i = 0; i < n; i++) {
1225                    v.setInt16(44 + i * 2, Math.round(15000 * Math.sin(2 * Math.PI * 30 * i / sr)), true);
1226                }
1227                url = URL.createObjectURL(new Blob([buf], { type: 'audio/wav' }));
1228                return url;
1229            }
1230            function alive() { return !!(el && !el.paused && !el.ended); }
1231            function start() {
1232                want = true;
1233                if (alive()) return;
1234                try {
1235                    if (!el) { el = new Audio(url || src()); el.loop = true; el.volume = 0.35; }
1236                    var p = el.play();
1237                    if (p && p.then) p.then(function () {}, function () {});
1238                    try {
1239                        if ('mediaSession' in navigator && navigator.mediaSession && !navigator.mediaSession.metadata) {
1240                            navigator.mediaSession.metadata = new window.MediaMetadata({
1241                                title: 'Чат — звук ответа включён', artist: document.title || ''
1242                            });
1243                        }
1244                    } catch (e2) {}
1245                } catch (e) {}
1246            }
1247            document.addEventListener('visibilitychange', function () {
1248                if (document.visibilityState === 'visible' && want) setTimeout(start, 300);
1249            });
1250            return {
1251                start: start,
1252                alive: alive,
1253                check: function () { if (want) start(); } // добор: луп мог не стартовать без жеста
1254            };
1255        })();
1256
1257        // --- звук нового сообщения (v1.4.1: и при открытом чате тоже —
1258        // клиент слышит ответ, даже если читает другое) ---
1259        // v1.4.3: заметно громче и выше тоном (1.2/1.
12596 кГц) — телефонные
1260        // динамики плохо отыгрывают тихий низкий бип; AudioContext
1261        // разблокируется первым касанием (мобильные браузеры требуют
1262        // жест пользователя, иначе контекст «висит» suspended и молчит).
1263        // v1.4.4: при свёрнутой/погашенной странице сигнал играется тем же
1264        // WAV-файлом через <audio>: фоновое воспроизведение аудио-элемента
1265        // (как у интернет-радио) надёжнее WebAudio, который в фоне может
1266        // молчать даже на живой странице.
1267        var audioCtx = null;
1268        // Тот же сигнал (1175→1568 Гц) в виде WAV — для фона/выключенного экрана
1269        var chimeEl = null;
1270        function chime() {
1271            try {
1272                if (!chimeEl) {
1273                    var sr = 22050, n = Math.floor(sr * 0.62);
1274                    var buf = new ArrayBuffer(44 + n * 2), v = new DataView(buf);
1275                    function w(o, s) { for (var i = 0; i < s.length; i++) v.setUint8(o + i, s.charCodeAt(i)); }
1276                    w(0, 'RIFF'); v.setUint32(4, 36 + n * 2, true); w(8, 'WAVEfmt ');
1277                    v.setUint32(16, 16, true); v.setUint16(20, 1, true); v.setUint16(22, 1, true);
1278                    v.setUint32(24, sr, true); v.setUint32(28, sr * 2, true);
1279                    v.setUint16(32, 2, true); v.setUint16(34, 16, true);
1280                    w(36, 'data'); v.setUint32(40, n * 2, true);
1281                    for (var i = 0; i < n; i++) {
1282                        var t = i / sr, g = 0, f = 1175;
1283                        if (t >= 0.02 && t < 0.18) { f = 1175; g = Math.min(1, (t - 0.02) / 0.025); }
1284                        else if (t >= 0.18 && t < 0.60) {
1285                            f = 1568; g = Math.min(1, (t - 0.18) / 0.025) * Math.pow(0.0003, (t - 0.18) / 0.40);
1286                        }
1287                        var s = g > 0 ? Math.round(27800 * g * Math.sin(2 * Math.PI * f * (t - 0.02))) : 0;
1288                        v.setInt16(44 + i * 2, s, true);
1289                    }
1290                    chimeEl = new Audio(URL.createObjectURL(new Blob([buf], { type: 'audio/wav' })));
1291                    chimeEl.volume = 1;
1292                }
1293                var p = chimeEl.play();
1294                if (p && p.catch) p.catch(function () {});
1295            } catch (e) {}
1296        }
1297        function toneWA() {
1298            try {
1299                var AC = window.AudioContext || window.webkitAudioContext;
1300                if (AC) {
1301                    audioCtx = audioCtx || new AC();
1302                    if (audioCtx.state === 'suspended') { try { audioCtx.resume(); } catch (e2) {} }
1303                    if (audioCtx.state === 'running') {
1304                        var t0 = audioCtx.currentTime + 0.02;
1305                        [[1175, 0], [1568, 0.16]].forEach(function (p) {
1306                            var o = audioCtx.createOscillator(), g = audioCtx.createGain();
1307                            o.type = 'sine'; o.frequency.value = p[0];
1308                            g.gain.setValueAtTime(0.0001, t0 + p[1]);
1309                            g.gain.exponentialRampToValueAtTime(0.85, t0 + p[1] + 0.025);
1310                            g.gain.exponentialRampToValueAtTime(0.0001, t0 + p[1] + 0.38);
1311                            o.connect(g); g.connect(audioCtx.destination);
1312                            o.start(t0 + p[1]); o.stop(t0 + p[1] + 0.42);
1313                        });
1314                        return;
1315                    }
1316                }
1317            } catch (e) {}
1318            chime(); // WebAudio недоступен/спит — WAV-фолбэк
1319        }
1320        function beep() {
1321            // v1.4.4: guard «только на видимой вкладке» снят — при
1322            // выключенном экране keep-alive держит страницу живой,
1323            // и звук должен звучать; выбор пути — по видимости.
1324            if (d.visibilityState === 'visible') { toneWA(); return; }
1325            chime();
1326        }
1327        function unlockAudio() {
1328            try {
1329                var AC = window.AudioContext || window.webkitAudioContext;
1330                if (!AC) return;
1331                audioCtx = audioCtx || new AC();
1332                if (audioCtx.state === 'suspended') audioCtx.resume();
1333            } catch (e) {}
1334            if (isOpen) KA.start(); // v1.4.4: луп нужен только тем, кто ждёт ответ
1335        }
1336        d.addEventListener('pointerdown', unlockAudio, true);
1337        d.addEventListener('touchstart', unlockAudio, true);
1338
1339        // --- опрос сервера: цепочка setTimeout (без утечек интервалов) ---
1340        // boot=true — первичная загрузка ИСТОРИИ (after=0): рисуем весь
1341        // диалог в пустой контейнер (дубликатов быть не может), без
1342        // звука; по ней же восстанавливаем бейдж непрочитанных.
1343        function poll(boot) {
1344            clearTimeout(pollTimer);
1345            api('/api/chat/poll', { uid: uid, after: boot ? 0 : lastId }, function (err, r) {
1346                if (!err && r && r.ok) {
1347                    var arr = r.messages || [];
1348                    var adminNew = 0;
1349                    for (var i = 0; i < arr.length; i++) {
1350                        var m = arr[i];
1351                        if (!boot && m.id <= lastId) continue;
1352                        if (m.id >
1352 lastId) lastId = m.id;
1353                        if (m.s === 'client') {
1354                            // своё сообщение: если такой текст ещё ждёт
1355                            // подтверждения — пузырь уже нарисован (merge),
1356                            // иначе это история/недоставленное — рисуем
1357                            var pi = pending.indexOf(m.b);
1358                            if (pi >= 0) { pending.splice(pi, 1); }
1359                            else { bubble('client', m.b, m.t); }
1360                        } else {
1361                            bubble('admin', m.b, m.t);
1362                            if (!boot) adminNew++;
1363                        }
1364                    }
1365                    if (boot) {
1366                        // непрочитанные ответы оператора с прошлого визита:
1367                        // считаем только в живом диалоге (не closed/spam)
1368                        if (!isOpen && r.status !== 'closed' && r.status !== 'spam') {
1369                            var cnt = 0;
1370                            for (var j = 0; j < arr.length; j++) {
1371                                if (arr[j].s === 'admin' && arr[j].id > seenId) cnt++;
1372                            }
1373                            if (cnt > 0) setUnread(cnt);
1374                        }
1375                        // контакты, оставленные раньше, — обратно в поля
1376                        if (r.name && !nameI.value) nameI.value = r.name;
1377                        if (r.phone && !phoneI.value) phoneI.value = r.phone;
1378                        booted = true;
1379                        if (greetPending) { greetPending = false; if (isOpen) ensureGreeting(); }
1380                    } else if (adminNew > 0) {
1381                        if (!isOpen) setUnread(unread + adminNew);
1382                        beep();
1383                    }
1384                    if (r.status === 'closed' && !root.dataset.closedShown) {
1385                        root.dataset.closedShown = '1';
1386                        sysLine('Диалог закрыт. Напишите новое сообщение — мы снова подключимся.');
1387                    } else if (r.status !== 'closed') {
1388                        delete root.dataset.closedShown;
1389                    }
1390                    markSeen();
1391                    if (arr.length) scrollDown();
1392                }
1393                var delay = err ? pollDelayError : (isOpen ? pollDelayOpen : pollDelayClosed);
1394                KA.check(); // v1.4.4: если луп не стартовал (нет жеста) — пробуем снова
1395                pollTimer = setTimeout(function () { poll(false); }, delay);
1396            });
1397        }
1398        function kickPoll() { clearTimeout(pollTimer); pollTimer = setTimeout(function () { poll(false); }, 300); }
1399
1400        d.addEventListener('visibilitychange', function () {
1401            if (d.visibilityState === 'visible') kickPoll();
1402        });
1403        window.addEventListener('pagehide', function () { clearTimeout(pollTimer); });
1404
1405        // --- отправка сообщения ---
1406        form.addEventListener('submit', function (e) {
1407            e.preventDefault();
1408            var text = (input.value || '').trim();
1409            if (!text) return;
1410            var el = bubble('client', text, '');          // оптимистичный пузырь
1411            pending.push(text);
1412            KA.start(); // v1.4.4: ждём ответ — держим страницу живой и со звуком
1413            input.value = '';
1414            autosize();
1415            scrollDown();
1416            api('/api/chat/post', {
1417                uid: uid, text: text,
1418                name: (nameI.value || '').trim(),
1419                phone: (phoneI.value || '').trim(),
1420                hp: '', ts: cfg.ts || '',
1421                page: location.href
1422            }, function (err, r) {
1423                if (!err && r && r.ok) {
1424                    // v1.4.1: pending НЕ чистим — пузырь уже нарисован, а
1425                    // опрос подтвердит его через pending-сверку и НЕ нарисует
1426                    // второй. (Раньше текст удалялся из pending здесь, и
1427                    // опрос рисовал сообщение повторно — тот самый дубль.)
1428                    if (r.time) {
1429                        var t = d.createElement('span'); t.className = 'td-chat-t'; t.textContent = r.time;
1430                        el.appendChild(t);
1431                    }
1432                    kickPoll();
1433                } else {
1434                    el.remove();
1435                    var idx = pending.indexOf(text); if (idx >= 0) pending.splice(idx, 1);
1436                    input.value = text;
1437                    autosize();
1438                    sysLine(err && r && r.error ? r.error : 'Не отправлено — проверьте связь и попробуйте ещё раз');
1439                    scrollDown();
1440                }
1441            });
1442        });
1443
1444        function autosize() {
1445            input.style.height = 'auto';
1446            input.style.height = Math.min(input.scrollHeight, 96) + 'px';
1447        }
1448        input.addEventListener('input', autosize);
1449        input.addEventListener('keydown', function (e) {
1450            if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); form.dispatchEvent(new Event('submit', { cancelable: true })); }
1451        });
1452
1453        // --- открыть/закрыть (состояние переживает переходы между страницами) ---
1454        function openPanel() {
1455            root.classList.add('open');
1456            panel.hidden = false;
1457            btn.setAttribute('aria-expanded', 'true');
1458            isOpen = true;
1459            setUnread(0);
1460            place();
1461            try { sessionStorage.setItem('tdChatOpen', '1'); } catch (e) {}
1462            // Приветствие — только если истории ещё нет. Пока boot не
1463            // дошёл — ждём его (greetPending), чтобы не вклиниться
1464            // посреди восстановленной переписки.
1465            if (booted) ensureGreeting(); else greetPending = true;
1466            scrollDown();
1467            setTimeout(function () { input.focus(); }, 120);
1468            kickPoll();
1469            KA.start(); // v1.4.4: открытый чат = ждём ответ со звуком (даже с погашенным экраном)
1470        }
1471        function closePanel() {
1472            root.classList.remove('open');
1473            panel.hidden = true;
1474            btn.setAttribute('aria-expanded', 'false');
1475            isOpen = false;
1476            try { sessionStorage.setItem('tdChatOpen', '0'); } catch (e) {}
1477        }
1478
1479        btn.addEventListener('click', function () { unlockAudio(); isOpen ? closePanel() : openPanel(); });
1480        closeBtn.addEventListener('click', closePanel);
1481        d.addEventListener('keydown', function (e) { if (e.key === 'Escape' && isOpen) closePanel(); });
1482        window.addEventListener('resize', place);
1483        // v1.4.5: позиция уточняется повторно — пилюля «Онлайн-запись» и
1484        // шрифты могут догрузиться после первого расчёта, а при возврате
1485        // на вкладку раскладка могла смениться (мобильная панель и т.п.)
1486        window.addEventListener('load', place);
1487        setTimeout(place, 250);
1488        setTimeout(place, 900);
1489        d.addEventListener('visibilitychange', function () { if (d.visibilityState === 'visible') place(); });
1490
1491        // --- API-помощник ---
1492        function api(url, body, cb) {
1493            try {
1494                var xhr = new XMLHttpRequest();
1495                xhr.open('POST', url, true);
1496                xhr.setRequestHeader('Content-Type', 'application/json');
1497                xhr.timeout = 15000;
1498                xhr.onreadystatechange = function () {
1499                    if (xhr.readyState !== 4) return;
1500                    var r = null;
1501                    try { r = JSON.parse(xhr.responseText); } catch (e) {}
1502                    if (xhr.status >= 200 && xhr.status < 300 && r) cb(null, r);
1503                    else cb(true, r);
1504                };
1505                xhr.ontimeout = function () { cb(true, null); };
1506                xhr.send(JSON.stringify(body));
1507            } catch (e) { cb(true, null); }
1508        }
1509
1510        // --- старт: если чат был открыт до перехода на другую страницу — открываем снова ---
1511        var wasOpen = false;
1512        try { wasOpen = sessionStorage.getItem('tdChatOpen') === '1'; } catch (e) {}
1513        if (wasOpen === true) openPanel();
1514
1515        place();
1516        poll(true); // v1.4.1: сначала вся история диалога, дальше — инкрементально
1517    })();
1518    </script>
1518
1519</div>
1520</body>
1521</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.