PageSourceSearch

https://alatantour.by/

html alatantour.by collected 2026-10-08 10:50:50 UTC 84,962 bytes, 1,364 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  <!-- SEO:начало (сгенерировано) -->
8  <meta name="description" content="АлатанТур — туроператор в Беларуси с 1993 года. Подбор туров по всему миру, горящие путёвки, авиабилеты, визы и страховки. Офисы в Минске и регионах.">
9  <meta name="keywords" content="туроператор минск, туры из минска, горящие туры, путёвки беларусь, отдых за границей">
10  <meta name="author" content="АлатанТур">
11  <meta name="robots" content="index, follow, max-image-preview:large">
12  <link rel="canonical" href="https://alatantour.by/">
13  <link rel="alternate" type="text/markdown" href="/llms.txt" title="Описание сайта для ИИ">
14  <!-- ПОДТВЕРЖДЕНИЕ ПРАВ НА САЙТ В ПОИСКОВЫХ СИСТЕМАХ.
15
16       Вставьте сюда мета-теги, которые выдадут Яндекс.Вебмастер
17       и Google Search Console при добавлении ресурса. Оба сервиса
18       предлагают несколько способов подтверждения — выбирайте
19       «мета-тег», он самый простой и не ломается при обновлении
20       сайта, в отличие от способа с файлом в корне.
21
22       Теги нужны ТОЛЬКО на главной странице: сервисы проверяют
23       именно её. После подтверждения удалять их нельзя — права
24       перепроверяются, и при отсутствии тега ресурс отвяжется.
25
26       Яндекс.Вебмастер подтверждён 1 сентября 2026 года.
27       Google Search Console подтверждён 1 сентября 2026 года.
28  -->
29
30  <meta name="yandex-verification" content="1ebcb10abaa7a460" />
31  <meta name="google-site-verification" content="DtH7UzoR1oz7JKM7Z3RNX-ksMCVhD_D4mYh8lHiUFEQ" />
32
33  <meta name="theme-color" content="#203864">
34  <meta name="format-detection" content="telephone=no">
35  <meta property="og:type" content="website">
36  <meta property="og:site_name" content="АлатанТур">
37  <meta property="og:title" content="АлатанТур — туроператор в Минске: туры, авиабилеты, визы">
38  <meta property="og:description" content="АлатанТур — туроператор в Беларуси с 1993 года. Подбор туров по всему миру, горящие путёвки, авиабилеты, визы и страховки. Офисы в Минске и регионах.">
39  <meta property="og:url" content="https://alatantour.by/">
40  <meta property="og:image" content="https://alatantour.by/img/og-home.jpg">
41  <meta property="og:image:width" content="1200">
42  <meta property="og:image:height" content="630">
43  <meta property="og:image:type" content="image/jpeg">
44  <meta property="og:image:alt" content="Закат на побережье — подбор туров по всему миру от туроператора АлатанТур">
45  <meta property="og:locale" content="ru_RU">
46  <meta name="twitter:card" content="summary_large_image">
47  <meta name="twitter:title" content="АлатанТур — туроператор в Минске: туры, авиабилеты, визы">
48  <meta name="twitter:description" content="АлатанТур — туроператор в Беларуси с 1993 года. Подбор туров по всему миру, горящие путёвки, авиабилеты, визы и страховки. Офисы в Минске и регионах.">
49  <meta name="twitter:image" content="https://alatantour.by/img/og-home.jpg">
50  <!-- SEO:конец -->
51  <link rel="icon" type="image/svg+xml" href="img/favicon.svg">
52  <link rel="icon" href="/favicon.ico" sizes="any">
53  <link rel="icon" type="image/png" sizes="32x32" href="img/icon-32.png">
54  <link rel="apple-touch-icon" sizes="180x180" href="img/icon-180.png">
55  <link rel="manifest" href="site.webmanifest">
56
57  <!-- LCP: hero-обложка подключена как CSS-фон (.hero), поэтому браузер
58       обнаруживает её только после загрузки и разбора styles.css.
59       Preload сообщает о картинке сразу — заметно ускоряет отрисовку
60       первого экрана. fetchpriority="high" поднимает её в очереди
61       выше шрифтов и скриптов виджетов. -->
62  <link rel="preload" as="image" href="img/hero-cover.webp" type="image/webp" fetchpriority="high">
63
64  <link rel="preconnect" href="https://fonts.googleapis.com">
65  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
66  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Playfair+Display:wght@500;600;700&display=swap" rel="stylesheet">
67
68  <!-- ВАЖНО: styles.css подключается ПОСЛЕДНИМ среди CSS-файлов
69       (после сторонних виджетов ETM и GoCruise) НАМЕРЕННО.
70       В CSS при равном приоритете правил (одинаковая специфичность
71       + !important с обеих сторон) побеждает тот файл, который
72       подключён ПОЗЖЕ в <head>. Раньше styles.css шёл первым, и
73       часть наших переопределений виджетов (например, цвет
74       включённого тумблера "Наличие кают" в модуле круизов) молча
75       перебивалась собственными стилями виджета, подключённого
76       после. Меняем порядок — теперь наши правила всегда в
77       приоритете. -->
78  <!-- Модуль авиабилетов ETM временно отключён. Не удалять — может
79       понадобиться позже. Чтобы вернуть: раскомментировать эту строку,
80       вкладку «Авиабилеты», её панель и скрипт app.min.js ниже.
81  <link href="https://etm.aviabilet.by/widget/style.min.css" rel="stylesheet">
82  -->
83
84  <!-- GoCruise: стили модуля поиска круизов -->
85  <link rel="stylesheet" href="https://widget.gocruise.ru/css/app.css">
86
87  <link rel="stylesheet" href="styles.css?v=61">
88<!-- SEO:schema -->
89<script type="application/ld+json">
90{
91  "@type": "TravelAgency",
92  "@id": "https://alatantour.by/#organization",
93  "name": "АлатанТур",
94  "legalName": "ООО «АлатанТур»",
95  "url": "https://alatantour.by/",
96  "logo": "https://alatantour.by/img/og-cover.png",
97  "image": "https://alatantour.by/img/og-cover.png",
98  "description": "Туроператор в Беларуси с 1993 года: туры по всему миру, авиабилеты, визы, страхование и корпоративный туризм.",
99  "foundingDate": "1993",
100  "telephone": "+375173111010",
101  "email": "[email protected]",
102  "priceRange": "$$",
103  "address": {
104    "@type": "PostalAddress",
105    "streetAddress": "пр-т Дзержинского, 104, пом. 25",
106    "addressLocality": "Минск",
107    "postalCode": "220083",
108    "addressCountry": "BY"
109  },
110  "openingHoursSpecification": [
111    {
112      "@type": "OpeningHoursSpecification",
113      "dayOfWeek": [
114        "Monday",
115        "Tuesday",
116        "Wednesday",
117        "Thursday",
118        "Friday"
119      ],
120      "opens": "09:00",
121      "closes": "20:00"
122    },
123    {
124      "@type": "OpeningHoursSpecification",
125      "dayOfWeek": [
126        "Saturday",
127        "Sunday"
128      ],
129      "opens": "10:00",
130      "closes": "16:00"
131    }
132  ],
133  "sameAs": [
134    "https://www.instagram.com/alatantour.by",
135    "https://t.me/alatantour_by",
136    "https://www.tiktok.com/@alatantour.by"
137  ],
138  "areaServed": {
139    "@type": "Country",
140    "name": "Беларусь"
141  },
142  "knowsLanguage": [
143    "ru",
144    "be"
145  ],
146  "@context": "https://schema.org",
147  "hasOfferCatalog": {
148    "@type": "OfferCatalog",
149    "name": "Услуги АлатанТур",
150    "itemListElement": [
151      {
152        "@type": "Offer",
153        "itemOffered": {
154          "@type": "Service",
155          "name": "Пакетные туры",
156          "description": "Туры по популярным направлениям с перелётом, отелем и трансфером."
157        }
158      },
159      {
160        "@type": "Offer",
161        "itemOffered": {
162          "@type": "Service",
163          "name": "Авторские туры",
164          "description": "Индивидуальные маршруты под интересы путешественника."
165        }
166      },
167      {
168        "@type": "Offer",
169        "itemOffered": {
170          "@type": "Service",
171          "name": "Авиабилеты",
172          "description": "Продажа билетов ведущих авиакомпаний, аккредитация IATA."
173        }
174      },
175      {
176        "@type": "Offer",
177        "itemOffered": {
178          "@type": "Service",
179          "name": "Визовая поддержка",
180          "description": "Оформление шенгенских и других виз, консультация по документам."
181        }
182      },
183      {
184        "@type": "Offer",
185        "itemOffered": {
186          "@type": "Service",
187          "name": "Страхование путешественников",
188          "description": "Медицинские страховые полисы для поездок за границу."
189        }
190      },
191      {
192        "@type": "Offer",
193        "itemOffered": {
194          "@type": "Service",
195          "name": "MICE и деловой туризм",
196          "description": "Организация конференций, инсентив-туров, выставок, приём делегаций."
197        }
198      }
199    ]
200  }
201}
202</script>
vendor: 1 bytes, line 202
202
203<script type="application/ld+json">
204{
205  "@context": "https://schema.org",
206  "@type": "WebSite",
207  "@id": "https://alatantour.by/#website",
208  "url": "https://alatantour.by/",
209  "name": "АлатанТур",
210  "inLanguage": "ru-RU",
211  "publisher": {
212    "@id": "https://alatantour.by/#organization"
213  }
214}
215</script>
vendor: 1 bytes, line 215
215
216<script type="application/ld+json">
217{
218  "@context": "https://schema.org",
219  "@type": "WebPage",
220  "@id": "https://alatantour.by/#webpage",
221  "url": "https://alatantour.by/",
222  "name": "АлатанТур — туроператор в Минске: туры, авиабилеты, визы",
223  "description": "АлатанТур — туроператор в Беларуси с 1993 года. Подбор туров по всему миру, горящие путёвки, авиабилеты, визы и страховки. Офисы в Минске и регионах.",
224  "inLanguage": "ru-RU",
225  "isPartOf": {
226    "@id": "https://alatantour.by/#website"
227  },
228  "about": {
229    "@id": "https://alatantour.by/#organization"
230  }
231}
232</script>
232
233<!-- /SEO:schema -->
234</head>
235<body>
236
237  <!-- HEADER -->
238  <header class="site-header">
239    <div class="container header-inner">
240      <a href="/" class="logo" aria-label="АлатанТур — на главную">
241        <img src="img/logo.svg" alt="АлатанТур" width="266" height="64">
242      </a>
243
244      <nav class="main-nav">
245        <a href="/" class="active">Туры</a>
246        <a href="author-tours.html">Авторские туры</a>
247        <a href="mice.html">MICE</a>
248        <a href="avia.html">Авиабилеты</a>
249        <a href="sales-offices.html">Офисы продаж</a>
250      </nav>
251
252      <div class="header-right">
253        <div class="header-socials">
254          <a href="https://www.instagram.com/alatantour.by" target="_blank" rel="noopener" class="header-social-link" aria-label="Instagram">
255            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line></svg>
256          </a>
257          <a href="https://t.me/+rvwc3kpiw9piNTMy" target="_blank" rel="noopener" class="header-social-link" aria-label="Telegram">
258            <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M22 2 11 13"></path><path d="M22 2 15 22l-4-9-9-4 20-7z"></path></svg>
259          </a>
260          <a href="https://invite.viber.com/?g2=AQARw7vT1OWCllHi0pdP4pDapr%2B38z4jzas1mW1djT5o2MbIaL4saPuu7pLSagK4" target="_blank" rel="noopener" class="header-social-link" aria-label="Viber">
261            <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><g transform="translate(2.1621,1.4000) scale(0.039280)"><g transform="translate(-48.997095,569.855580) scale(0.100000,-0.100000)"><path d="M2525 5685 c-697 -64 -1214 -253 -1516 -554 -240 -241 -401 -603
262-468 -1056 -62 -415 -68 -1050 -15 -1440 96 -698 390 -1163 889 -1405 66 -32
263157 -71 203 -86 l82 -27 0 -301 c0 -324 6 -374 51 -441 35 -51 96 -79 165 -73
26489 8 136 49 391 341 126 143 239 273 253 288 l25 27 130 -10 c168 -13 619 -3
265805 17 411 44 817 142 1058 255 293 138 546 394 691 700 108 229 160 440 195
266795 103 1025 -24 1820 -366 2280 -296 398 -907 641 -1743 695 -212 13 -656 11
267-830 -5z m645 -375 c582 -22 1007 -120 1339 -307 316 -178 509 -558 587 -1153
26845 -345 22 -1001 -47 -1345 -101 -505 -380 -844 -809 -983 -390 -127 -965
269-202 -1424 -187 l-161 5 -380 -423 -380 -423 -5 487 c-3 268 -7 489 -10 492
270-3 2 -36 15 -75 27 -435 143 -729 475 -849 960 -61 249 -78 421 -77 817 1 710
27179 1079 299 1413 246 372 774 583 1562 623 120 7 205 6 430 -3z"/><path d="M2000 4567 c-84 -31 -293 -194 -349 -273 -80 -111 -75 -194 25 -447
272339 -858 1037 -1567 1900 -1930 178 -75 277 -63 420 51 69 55 177 191 221 279
27343 87 44 158 2 218 -58 81 -426 358 -551 415 -58 27 -148 26 -204 0 -30 -15
274-61 -46 -109 -109 -37 -49 -81 -96 -97 -106 -165 -97 -655 249 -820 580 -67
275134 -89 267 -55 331 9 18 45 54 79 82 35 28 83 71 108 97 45 46 45 46 45 118
2760 60 -5 83 -32 141 -81 170 -335 491 -425 537 -50 26 -115 32 -158 16z"/><path d="M2937 4563 c-13 -12 -7 -42 11 -51 9 -5 62 -12 117 -15 441 -26 834
277-324 975 -741 40 -116 60 -218 73 -375 10 -110 15 -136 30 -145 50 -31 56 74
27817 314 -87 533 -460 914 -984 1005 -91 15 -227 20 -239 8z"/><path d="M3039 4234 c-25 -30 1 -47 96 -61 397 -57 635 -312 663 -711 6 -82
27910 -97 25 -100 40 -8 50 16 43 108 -34 415 -276 689 -676 764 -104 20 -134 20
280-151 0z"/><path d="M3136 3904 c-27 -26 -4 -50 55 -58 66 -9 141 -38 184 -70 45 -34 93
281-135 107 -221 17 -107 68 -127 68 -26 -1 190 -121 337 -309 377 -83 17 -86 17
282-105 -2z"/></g></g></svg>
283          </a>
284          <a href="https://www.tiktok.com/@alatantour.by?_t=ZM-8vdIb0VR02n&amp;_r=1" target="_blank" rel="noopener" class="header-social-link" aria-label="TikTok">
285            <svg viewBox="0 0 24 24" fill="currentColor"><path d="M16.5 3h-2.7v12.1a2.4 2.4 0 1 1-2.4-2.4c.2 0 .5 0 .7.1v-2.8a5.2 5.2 0 1 0 4.5 5.2V9.4a6.6 6.6 0 0 0 3.9 1.3V7.9a3.9 3.9 0 0 1-2.6-1 3.9 3.9 0 0 1-1.4-2.9V3z"></path></svg>
286          </a>
287        </div>
288
289        <div class="header-actions">
290          <div class="header-phone">
291          <a href="tel:+375173111010" class="header-phone-main">+375 17 311 10 10<svg class="header-phone-caret" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"></polyline></svg></a>
292          <div class="header-phone-pop" role="menu" aria-label="Дополнительные номера">
293            <a href="tel:+375292481616" class="header-phone-row"><span class="header-phone-num">+375 29 248 16 16</span><span class="header-phone-op">МТС</span></a>
294            <a href="tel:+375296881616" class="header-phone-row"><span class="header-phone-num">+375 29 688 16 16</span><span class="header-phone-op">A1</span></a>
295            <a href="tel:+375256881616" class="header-phone-row"><span class="header-phone-num">+375 25 688 16 16</span><span class="header-phone-op">Life</span></a>
296          </div>
297        </div>
298          <a href="contacts.html?topic=callback" class="header-callback">Заказать звонок</a>
299          <button type="button" class="header-callback header-chat-btn" onclick="window.dispatchEvent(new Event('openChatWidgetNB'))">Написать в чат</button>
300        </div>
301      </div>
302    </div>
303  </header>
304
305  <!-- HERO -->
306  <section class="hero">
307    <div class="hero-overlay"></div>
308
309    <div class="container hero-content">
310      <h1>
311        Путешествия,<br>
312        которые вдохновляют
313      </h1>
314
315      <p class="hero-subtitle">
316        Подберите идеальный тур
317        для вашего отдыха
318      </p>
319    </div>
320  </section>
321
322  <div class="container">
323    <div class="search-card-wrap" id="extra-services">
324      <!-- TOUR SEARCH -->
325      <div class="search-card">
326        <div class="search-tabs" data-active-tab="tours">
327          <button class="tab active" data-tab="tours">
328            <svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="7" width="18" height="13" rx="2"></rect><path d="M8 7V5a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="3" y1="12" x2="21" y2="12"></line></svg>
329            Туры
330          </button>
331          <button class="tab" data-tab="cruises">
332            <svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 14h18l-1.6 4.2a2 2 0 0 1-1.9 1.3H6.5a2 2 0 0 1-1.9-1.3z"></path><path d="M5 14V9h10l4 5"></path><path d="M9 9V5h3"></path><line x1="7" y1="14" x2="7" y2="9"></line></svg>
333            Круизы
334          </button>
335          <!-- Модуль поиска авиабилетов ETM не работает, поэтому вместо
336               него на вкладке стоит форма заявки: менеджер подберёт
337               перелёт вручную. Временное решение — когда модуль почините,
338               панель ниже заменяется обратно на виджет. -->
339          <a class="tab" href="/excursion-tours.html">
340            <svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M3 20h18M5 20V9l7-5 7 5v11M9 20v-7h6v7M3 10l9-7 9 7"/></svg>
341            Экскурсионные туры
342          </a>
343          <a class="tab" href="/bus-tours.html">
344            <svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="3" width="16" height="17" rx="3"></rect><path d="M4 12h16M8 20v2M16 20v2M4 7h16"></path><circle cx="8" cy="16" r="1"></circle><circle cx="16" cy="16" r="1"></circle></svg>
345            Автобусные туры
346          </a>
347          <button class="tab" data-tab="flights">
348            <svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M17.8 19.2 16 11l3.5-3.5C21 6 21.5 4 21 3c-1-.5-3 0-4.5 1.5L13 8 4.8 6.2c-.5-.1-1 .1-1.3.5l-.6.6c-.4.4-.3 1 .2 1.3L9 12l-2 3H4l-1 1 3 2 2 3 1-1v-3l3-2 3.6 6.2c.3.5.9.6 1.3.2l.6-.6c.4-.3.6-.8.5-1.3z"></path></svg>
349            Авиабилеты
350          </button>
351          <button class="tab" data-tab="services">
352            <svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="7" height="7" rx="1.5"></rect><rect x="14" y="3" width="7" height="7" rx="1.5"></rect><rect x="3" y="14" width="7" height="7" rx="1.5"></rect><rect x="14" y="14" width="7" height="7" rx="1.5"></rect></svg>
353            Доп. услуги
354          </button>
355          <button class="tab" data-tab="quiz" id="quizTabBtn" hidden>
356            <svg class="tab-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M9.1 9a3 3 0 0 1 5.8 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line><circle cx="12" cy="12" r="9"></circle></svg>
357            Подбор за 30 мин
358          </button>
359        </div>
360
361        <div class="search-placeholder tv-widget-wrap active" data-panel="tours">
362          <div class="tv-search-form tv-moduleid-9979933"></div>
363          
363<script type="text/javascript" src="//tourvisor.ru/module/init.js"></script>
363
364        </div>
365
366        <div class="search-placeholder" data-panel="quiz">
367          <div class="quiz-promo">
368            <p>
369              Ответьте на несколько вопросов и получите дополнительную
370              скидку на тур, который наш менеджер подберёт для вас!
371            </p>
372
373            <a href="quiz.html" class="cta-btn" id="quizPromoBtn">Начать подбор</a>
374          </div>
375        </div>
376
377        <div class="search-placeholder tv-widget-wrap" data-panel="cruises">
378          <div id="ces"></div>
379        </div>
380
381        <!-- Заявка на подбор авиабилета. Заменяет неработающий модуль ETM:
382             разметка виджета сохранена в комментарии ниже, вернуть можно
383             заменой этого блока. -->
384        <div class="search-placeholder flights-panel" data-panel="flights">
385          <form class="flight-form" id="flightForm" novalidate>
386            <div class="flight-row">
387              <label class="flight-field">
388                <span>Откуда <b>*</b></span>
389                <input type="text" name="from_city" maxlength="80" placeholder="Минск" required>
390              </label>
391              <label class="flight-field">
392                <span>Куда <b>*</b></span>
393                <input type="text" name="to_city" maxlength="80" placeholder="Стамбул" required>
394              </label>
395              <label class="flight-field flight-field--narrow">
396                <span>Туда</span>
397                <input type="date" name="depart_at">
398              </label>
399              <label class="flight-field flight-field--narrow">
400                <span>Обратно</span>
401                <input type="date" name="return_at">
402                <small>Пусто — билет в одну сторону</small>
403              </label>
404            </div>
405
406            <div class="flight-row">
407              <label class="flight-field flight-field--narrow">
408                <span>Взрослые</span>
409                <select name="adults">
410                            <option value="1" selected>1</option>
411                            <option value="2">2</option>
412                            <option value="3">3</option>
413                            <option value="4">4</option>
414                            <option value="5">5</option>
415                            <option value="6">6</option>
416                            <option value="7">7</option>
417                            <option value="8">8</option>
418                            <option value="9">9</option>
419                </select>
420              </label>
421              <label class="flight-field flight-field--narrow">
422                <span>Дети</span>
423                <select name="children" id="flightChildren">
424                            <option value="0" selected>0</option>
425                            <option value="1">1</option>
426                            <option value="2">2</option>
427                            <option value="3">3</option>
428                            <option value="4">4</option>
429                            <option value="5">5</option>
430                            <option value="6">6</option>
431                </select>
432              </label>
433              <!-- Поле показывается скриптом, когда выбран хотя бы один
434                   ребёнок: тариф зависит от возраста на дату вылета,
435                   и без него менеджер всё равно перезванивает. -->
436              <label class="flight-field" id="flightAgesField" hidden>
437                <span>Возраст детей <b>*</b></span>
438                <input type="text" name="children_ages" maxlength="60" placeholder="5, 12">
439                <small>Полных лет на дату вылета</small>
440              </label>
441              <label class="flight-field flight-field--narrow">
442                <span>Класс</span>
443                <select name="cabin">
444                  <option value="">Эконом</option>
445                  <option value="Комфорт">Комфорт</option>
446                  <option value="Бизнес">Бизнес</option>
447                </select>
448              </label>
449            </div>
450
451            <div class="flight-row">
452              <label class="flight-field">
453                <span>Город проживания <b>*</b></span>
454                <input type="text" name="city" maxlength="80" list="belarusCities"
455                       placeholder="Минск" autocomplete="address-level2" required>
456                <small>Подскажем ближайший офис продаж</small>
457              </label>
458              <label class="flight-field">
459                <span>Имя <b>*</b></span>
460                <input type="text" name="name" maxlength="80" autocomplete="name" required>
461              </label>
462              <label class="flight-field">
463                <span>Телефон или email <b>*</b></span>
464                <input type="text" name="contact" maxlength="160"
465                       placeholder="29 1234567" required>
466              </label>
467            </div>
468
469            <label class="flight-field">
470              <span>Пожелания</span>
471              <input type="text" name="comment" maxlength="500"
472                     placeholder="Например: прямой рейс, багаж 23 кг">
473            </label>
474
475            <!-- Подсказка для поля города. Список не ограничивает ввод:
476                 набрать можно любой населённый пункт. -->
477            <datalist id="belarusCities">
478                        <option value="Минск"></option>
479                        <option value="Брест"></option>
480                        <option value="Витебск"></option>
481                        <option value="Гомель"></option>
482                        <option value="Новополоцк"></option>
483                        <option value="Гродно"></option>
484                        <option value="Могилёв"></option>
485                        <option value="Бобруйск"></option>
486                        <option value="Барановичи"></option>
487                        <option value="Борисов"></option>
488                        <option value="Пинск"></option>
489                        <option value="Орша"></option>
490                        <option value="Мозырь"></option>
491                        <option value="Солигорск"></option>
492                        <option value="Лида"></option>
493                        <option value="Молодечно"></option>
494                        <option value="Полоцк"></option>
495                        <option value="Жлобин"></option>
496                        <option value="Светлогорск"></option>
497                        <option value="Речица"></option>
498            </datalist>
499
500            <!-- Ловушка для ботов: человек этого поля не видит -->
501            <div aria-hidden="true" style="position:absolute;left:-9999px;height:0;overflow:hidden">
502              <label>Компания<input type="text" name="company" tabindex="-1" autocomplete="off"></label>
503            </div>
504
505            <div class="flight-foot">
506              <label class="flight-consent">
507                <input type="checkbox" name="consent" required>
508                <span>Согласен на обработку <a href="/personal-data-policy.html" target="_blank" rel="noopener">персональных данных</a></span>
509              </label>
510              <button type="submit" class="cta-btn" id="flightSubmit">Подобрать билет</button>
511            </div>
512
513            <p class="flight-error" id="flightError" hidden></p>
514          </form>
515
516          <div class="flight-done" id="flightDone" hidden>
517            <div class="tour-done-mark" aria-hidden="true">
518              <svg width="30" height="30" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="m5 13 4 4L19 7"></path></svg>
519            </div>
520            <h3>Заявка отправлена</h3>
521            <p>Менеджер подберёт варианты перелёта и свяжется с Вами.</p>
522          </div>
523        </div>
524
525        <!-- Разметка модуля ETM, отключённого до починки:
526        <div class="search-placeholder tv-widget-wrap" data-panel="flights">
527          <div id="etm-widget-block" data-sid="5f4903e4ef" data-currency="BYN" data-locale="RU">
528            <div id="etm-widget-app"></div>
529          </div>
530        </div>
531        -->
532
533        <div class="search-placeholder services-panel" data-panel="services">
534          <div class="services-mini-grid">
535            <div class="mini-service" data-href="services.html#insurance">
536              <span class="mini-service-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2 4 5v6c0 5 3.4 8.5 8 10 4.6-1.5 8-5 8-10V5z"></path><path d="m9 12 2 2 4-4"></path></svg></span>
537              <span class="mini-service-title">Страхование</span>
538              <span class="mini-service-desc">Полисы для выезжающих за границу</span>
539              <span class="mini-service-actions"><a class="mini-service-btn mini-service-btn--ghost" href="services.html#insurance">Подробнее</a><button type="button" class="mini-service-btn" data-service-order="insurance">Оформить</button></span>
540            </div>
541
542            <div class="mini-service" data-href="services.html#esim">
543              <span class="mini-service-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M8 2h6l4 4v14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2z"></path><rect x="9" y="10" width="6" height="7" rx="1"></rect><path d="M12 10v7"></path><path d="M9 13.5h6"></path></svg></span>
544              <span class="mini-service-title">eSIM для путешествий</span>
545              <span class="mini-service-desc">Мобильный интернет за границей без роуминга</span>
546              <span class="mini-service-actions"><a class="mini-service-btn mini-service-btn--ghost" href="services.html#esim">Подробнее</a><button type="button" class="mini-service-btn" data-service-order="esim">Оформить</button></span>
547            </div>
548
549            <div class="mini-service" data-href="services.html#railway">
550              <span class="mini-service-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="3" width="16" height="16" rx="2"></rect><path d="M4 11h16"></path><path d="M12 3v8"></path><path d="m8 19-2 3"></path><path d="m18 22-2-3"></path><path d="M8 15h.01"></path><path d="M16 15h.01"></path></svg></span>
551              <span class="mini-service-title">Ж/д билеты</span>
552              <span class="mini-service-desc">По Беларуси, России и Европе</span>
553              <span class="mini-service-actions"><a class="mini-service-btn mini-service-btn--ghost" href="services.html#railway">Подробнее</a><button type="button" class="mini-service-btn" data-service-order="railway">Оформить</button></span>
554            </div>
555
556            <div class="mini-service" data-href="services.html#bus">
557              <span class="mini-service-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v6"></path><path d="M15 6v6"></path><path d="M2 12h19.6"></path><path d="M18 18h3s.5-1.7.8-2.8c.1-.4.2-.8.2-1.2V6c0-2-2-2-2-2H4C2 4 2 6 2 6v8c0 .4.1.8.2 1.2C2.5 16.3 3 18 3 18h3"></path><circle cx="7" cy="18" r="2"></circle><circle cx="17" cy="18" r="2"></circle></svg></span>
558              <span class="mini-service-title">Автобусные билеты</span>
559              <span class="mini-service-desc">Международные и внутренние маршруты</span>
560              <span class="mini-service-actions"><a class="mini-service-btn mini-service-btn--ghost" href="services.html#bus">Подробнее</a><button type="button" class="mini-service-btn" data-service-order="bus">Оформить</button></span>
561            </div>
562
563            <div class="mini-service" data-href="visas.html">
564              <span class="mini-service-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2z"></path><circle cx="12" cy="10" r="3"></circle><path d="M8 17h8"></path></svg></span>
565              <span class="mini-service-title">Визовая поддержка</span>
566              <span class="mini-service-desc">Помощь с оформлением виз в любую страну</span>
567              <span class="mini-service-actions"><a class="mini-service-btn mini-service-btn--ghost" href="visas.html">Подробнее</a></span>
568            </div>
569          </div>
570        </div>
571      </div>
572    </div>
573  </div>
574
575  <!-- DESTINATIONS -->
576  <section class="destinations section">
577    <div class="container">
578      <div class="section-head section-head--stacked">
579        <h2>Популярные направления</h2>
580      </div>
581
582      <div class="minprice-module" data-tv-lazy>
583        <!-- Tourvisor: модуль "Минимальные цены". Свой init.js сразу после
584             модуля — так Tourvisor корректно инициализирует несколько
585             модулей на одной странице (у каждого модуля свой init.js). -->
586        <div class="tv-min-price tv-moduleid-9993855"></div>
587        <!-- init.js подключает tourvisor-lazy.js, когда блок появится
588             на экране: до этого модуль не тянет свои запросы. -->
589      </div>
590    </div>
591  </section>
592
593  <!-- STATS -->
594  <section class="stats-section section">
595    <div class="container">
596      <div class="stats-box">
597        <div class="stats-grid">
598          <div class="stat-item">
599            <div class="stat-icon" aria-hidden="true">
600              <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="8" r="6"></circle><path d="m9 13.5-2 7.5 5-3 5 3-2-7.5"></path></svg>
601            </div>
602            <div class="stat-copy">
603              <span>30</span>
604              <p>лет<br>открываем мир</p>
605            </div>
606          </div>
607
608          <div class="stat-item">
609            <div class="stat-icon" aria-hidden="true">
610              <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"></circle><path d="M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18"></path></svg>
611            </div>
612            <div class="stat-copy">
613              <span>100+</span>
614              <p>стран<br>на выбор</p>
615            </div>
616          </div>
617
618          <div class="stat-item">
619            <div class="stat-icon" aria-hidden="true">
620              <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21s-7-6.1-7-11.5A7 7 0 0 1 19 9.5C19 14.9 12 21 12 21z"></path><circle cx="12" cy="9.5" r="2.5"></circle></svg>
621            </div>
622            <div class="stat-copy">
623              <span>10</span>
624              <p>офисов<br>по всей Беларуси</p>
625            </div>
626          </div>
627
628          <div class="stat-item">
629            <div class="stat-icon" aria-hidden="true">
630              <svg width="26" height="26" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"></circle><path d="M12 7v5l3.5 2"></path></svg>
631            </div>
632            <div class="stat-copy">
633              <span>24/7</span>
634              <p>поддержка<br>путешественников</p>
635            </div>
636          </div>
637        </div>
638      </div>
639    </div>
640  </section>
641
642  <!-- АКЦИИ -->
643  <section class="promos section" id="promos">
644    <div class="container">
645      <div class="section-head">
646        <h2>Привилегии АлатанТур</h2>
647        <div class="section-head-right">
648          <div class="dest-arrows">
649            <button class="dest-arrow" id="promoPrev" aria-label="Предыдущая акция">
650              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg>
651            </button>
652            <button class="dest-arrow" id="promoNext" aria-label="Следующая акция">
653              <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg>
654            </button>
655          </div>
656        </div>
657      </div>
658
659      <!-- Карточки подставляет nginx через SSI: директива ниже
660           заменяется готовой разметкой с сервера (см.
661           backend/app/routers/fragments.py). Так робот, не
662           выполняющий скрипты, получает карточки и ссылки.
663           Скрипт перерисовывает список только при смене фильтра. -->
664      <div class="promo-track" id="promoTrack" data-ssi><article class="promo-card"><div class="promo-media"><picture><source srcset="/uploads/promo/2026-08/c0ea31856ed7463e85136032935bffea-thumb.webp" type="image/webp"><img src="/uploads/promo/2026-08/c0ea31856ed7463e85136032935bffea-thumb.jpg" alt="Прикоснуться к вечности" loading="lazy" class="promo-img" width="1280" height="720"></picture></div><span class="promo-badge">Комплимент от АлатанТур</span><h3>Прикоснуться к вечности</h3><p>Путешествие в Каир, Великий Египетский музей и к пирамидам Гизы — в подарок!</p><div class="promo-foot"><a class="promo-link" href="/promo/prikosnutsya-k-vechnosti">Подробнее</a></div></article><article class="promo-card"><div class="promo-media"><picture><source srcset="/uploads/promo/2026-08/d1fb4a7f3be74626aa066bc996a97ac3-thumb.webp" type="image/webp"><img src="/uploads/promo/2026-08/d1fb4a7f3be74626aa066bc996a97ac3-thumb.jpg" alt="Таиланд. Путешествие с привилегиями" loading="lazy" class="promo-img" width="1280" height="720"></picture></div><span class="promo-badge">Комплимент от АлатанТур</span><h3>Таиланд. Путешествие с привилегиями</h3><p>Обзорная экскурсия по острову Пхукет — в подарок при бронировании тура.</p><div class="promo-foot"><span class="promo-term">До 31.03.2027</span><a class="promo-link" href="/promo/tailand-puteshestvie-s-privilegiyami">Подробнее</a></div></article><article class="promo-card"><div class="promo-media"><picture><source srcset="/uploads/promo/2026-08/2bdfadcc02a7438faaec3d03b619b474-thumb.webp" type="image/webp"><img src="/uploads/promo/2026-08/2bdfadcc02a7438faaec3d03b619b474-thumb.jpg" alt="Бронируйте заранее" loading="lazy" class="promo-img" width="1280" height="720"></picture></div><span class="promo-badge">Раннее бронирование</span><div class="promo-figure">До 45%</div><h3>Бронируйте заранее</h3><p>Планируйте отдых заранее и выбирайте среди лучших курортов, востребованных отелей с выгодой до 45% на отдельные предложения по раннему бронированию.</p><div class="promo-foot"><span class="promo-term">Осень · Зима 2026/27</span><a class="promo-link" href="/promo/broniruyte-zaranee">Подробнее</a></div></article><article class="promo-card"><div class="promo-media"><picture><source srcset="/uploads/promo/2026-08/8c6abd3453e14380bd4989721fd34bef-thumb.webp" type="image/webp"><img src="/uploads/promo/2026-08/8c6abd3453e14380bd4989721fd34bef-thumb.jpg" alt="Оставайтесь на связи." loading="lazy" class="promo-img" width="1280" height="720"></picture></div><span class="promo-badge">Комплимент от АлатанТур</span><h3>Оставайтесь на связи.</h3><p>При покупке любого авиатура в Европу или Азию — 10 ГБ мобильного интернета в роуминге в подарок от АлатанТур.</p><div class="promo-foot"><a class="promo-link" href="/promo/ostavaytes-na-svyazi">Подробнее</a></div></article><article class="promo-card"><div class="promo-media"><picture><source srcset="/uploads/promo/2026-08/ed94cb3dfecd45d19bbab4c05dd95cc3-thumb.webp" type="image/webp"><img src="/uploads/promo/2026-08/ed94cb3dfecd45d19bbab4c05dd95cc3-thumb.jpg" alt="Индивидуальный трансфер" loading="lazy" class="promo-img" width="1280" height="720"></picture></div><span class="promo-badge">Комплимент от АлатанТур</span><h3>Индивидуальный трансфер</h3><p>При бронировании тура от 10 000 BYN в отели 4★ и 5★ мы организуем для вас индивидуальный трансфер в подарок.</p><div class="promo-foot"><span class="promo-term">До 31 марта 2027 года.</span><a class="promo-link" href="/promo/individualnyy-transfer">Подробнее</a></div></article><article class="promo-card"><div class="promo-media"><picture><source srcset="/uploads/promo/2026-08/3c6f8ddecaa14790ad5e4c8ce873734f-thumb.webp" type="image/webp"><img src="/uploads/promo/2026-08/3c6f8ddecaa14790ad5e4c8ce873734f-thumb.jpg" alt="Пять эмиратов. Один особенный день." loading="lazy" class="promo-img" width="1280" height="720"></picture></div><span class="promo-badge">Комплимент от АлатанТур</span><h3>Пять эмиратов. Один особенный день.</h3><p>Экскурсия «5 эмиратов за 1 день» — в подарок при бронировании путешествия в ОАЭ от 13 000 BYN</p><div class="promo-foot"><span class="promo-term">До 31.03.2027</span><a class="promo-link" href="/promo/pyat-emiratov">Подробнее</a></div></article></div>
665    </div>
666  </section>
667
668  <!-- OFFERS -->
669  <section class="offers section">
670    <div class="container">
671      <div class="section-head">
672        <h2>Специальные предложения</h2>
673        <a href="hot-tours.html">Смотреть все</a>
674      </div>
675
676      <div class="offers-module" data-tv-lazy>
677        <!-- Tourvisor: модуль "Горящие туры". Свой init.js сразу после
678             модуля — так Tourvisor корректно инициализирует несколько
679             модулей на одной странице (у каждого модуля свой init.js). -->
680        <div class="tv-hot-tours tv-moduleid-9993522"></div>
681        <!-- init.js подключает tourvisor-lazy.js, когда блок появится
682             на экране: до этого модуль не тянет свои запросы. -->
683      </div>
684    </div>
685  </section>
686
687  <!-- REVIEWS -->
688  <section class="reviews section">
689    <div class="container">
690      <div class="section-head">
691        <h2>Отзывы путешественников</h2>
692      </div>
693
694      <div class="review-feature">
695        <div class="review-photo">
696          <img id="reviewPhoto" src="img/review-spain.webp" width="720" height="720" loading="lazy" alt="Отзыв клиента турагентства АлатанТур — семейный отдых в Испании, Майорка">
697        </div>
698
699        <div>
700          <div class="review-quote-mark">&ldquo;</div>
701
702          <div id="reviewSlides">
703            <div class="review-slide active" data-index="0" data-photo="img/review-spain.webp" data-alt
703="Отзыв клиента турагентства АлатанТур — семейный отдых в Испании, Майорка">
704            <p class="review-text">
705              Отдыхали в Испании всей семьёй. Всё было организовано на высшем
706              уровне — перелёт, отель, трансферы. Спасибо АлатанТур за
707              прекрасный отпуск!
708            </p>
709            <span class="review-author">Елена и семья</span>
710            <span class="review-location">Испания, Майорка</span>
711          </div>
712
713          <div class="review-slide" data-index="1" data-photo="img/review-loyal.webp" data-alt="Отзыв постоянного клиента АлатанТур из Бреста">
714            <p class="review-text">
715              Пользуемся услугами АлатанТур уже много лет. Всегда уверены
716              в качестве сервиса и внимании к деталям.
717            </p>
718            <span class="review-author">Сергей</span>
719            <span class="review-location">Брест</span>
720          </div>
721
722          <div class="review-slide" data-index="2" data-photo="img/review-visa-help.webp" data-alt="Отзыв клиента АлатанТур о помощи с оформлением визы, Гродно">
723            <p class="review-text">
724              Отличный подбор тура и очень внимательные менеджеры. Помогли
725              разобраться со всеми вопросами по визе.
726            </p>
727            <span class="review-author">Марина</span>
728            <span class="review-location">Гродно</span>
729          </div>
730
731          <div class="review-slide" data-index="3" data-photo="img/review-turkey.webp" data-alt="Отзыв клиента турагентства АлатанТур — горящий тур в Турцию, Анталья">
732            <p class="review-text">
733              Летали в Турцию по горящему туру — нашли отличный вариант
734              буквально за один день. Отель полностью соответствовал описанию.
735            </p>
736            <span class="review-author">Дмитрий</span>
737            <span class="review-location">Турция, Анталья</span>
738          </div>
739
740          <div class="review-slide" data-index="4" data-photo="img/review-visa-first.webp" data-alt="Отзыв клиента о первой визе, оформленной через АлатанТур, Витебск">
741            <p class="review-text">
742              Первый раз оформляли визу через турагентство — оказалось
743              намного проще, чем самостоятельно. Все сроки выдержали.
744            </p>
745            <span class="review-author">Ольга</span>
746            <span class="review-location">Витебск</span>
747          </div>
748
749          <div class="review-slide" data-index="5" data-photo="img/review-thailand.webp" data-alt="Отзыв клиента турагентства АлатанТур — отдых в Таиланде, Пхукет">
750            <p class="review-text">
751              Ездили в Таиланд на годовщину свадьбы. Менеджер подобрал
752              романтичный отель и помог с экскурсиями на месте.
753            </p>
754            <span class="review-author">Андрей и Татьяна</span>
755            <span class="review-location">Таиланд, Пхукет</span>
756          </div>
757
758          <div class="review-slide" data-index="6" data-photo="img/review-maldives.webp" data-alt="Отзыв клиента турагентства АлатанТур — путешествие на Мальдивы">
759            <p class="review-text">
760              Мальдивы превзошли все ожидания. Отдельное спасибо за то, что
761              помогли уложиться в бюджет и подобрали удобные даты перелёта.
762            </p>
763            <span class="review-author">Наталья</span>
764            <span class="review-location">Мальдивы</span>
765          </div>
766
767          <div class="review-slide" data-index="7" data-photo="img/review-georgia.webp" data-alt="Отзыв клиента турагентства АлатанТур — тур в Грузию, Тбилиси">
768            <p class="review-text">
769              Открыли для себя Грузию благодаря рекомендациям менеджера.
770              Маршрут получился насыщенным и при этом совсем не утомительным.
771            </p>
772            <span class="review-author">Игорь</span>
773            <span class="review-location">Грузия, Тбилиси</span>
774          </div>
775
776          <div class="review-slide" data-index="8" data-photo="img/review-srilanka.webp" data-alt="Отзыв клиента турагентства АлатанТур — путешествие на Шри-Ланку">
777            <p class="review-text">
778              Долго выбирали между несколькими странами — в АлатанТур
779              терпеливо помогли определиться со Шри-Ланкой. Не пожалели ни дня.
780            </p>
781            <span class="review-author">Светлана</span>
782            <span class="review-location">Шри-Ланка</span>
783          </div>
784
785          <div class="review-slide" data-index="9" data-photo="img/review-egypt.webp" data-alt="Отзыв клиента турагентства АлатанТур — тур в Египет, Хургада">
786            <p class="review-text">
787              Уже третий раз летаем в Египет с этим туроператором. Стабильно
788              хорошие отели и быстрая помощь, если возникают вопросы на месте.
789            </p>
790            <span class="review-author">Виктор</span>
791            <span class="review-location">Египет, Хургада</span>
792          </div>
793          </div>
794
795          <div class="review-footer">
796            <div class="review-dots" id="reviewDots">
797              <span class="review-dot active" data-index="0"></span>
798              <span class="review-dot" data-index="1"></span>
799              <span class="review-dot" data-index="2"></span>
800              <span class="review-dot" data-index="3"></span>
801              <span class="review-dot" data-index="4"></span>
802              <span class="review-dot" data-index="5"></span>
803              <span class="review-dot" data-index="6"></span>
804              <span class="review-dot" data-index="7"></span>
805              <span class="review-dot" data-index="8"></span>
806              <span class="review-dot" data-index="9"></span>
807            </div>
808
809            <div class="review-arrows">
810              <button class="review-arrow" id="reviewPrev" aria-label="Предыдущий отзыв">
811                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg>
812              </button>
813              <button class="review-arrow" id="reviewNext" aria-label="Следующий отзыв">
814                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg>
815              </button>
816            </div>
817          </div>
818        </div>
819      </div>
820
821      <div class="reviews-cta">
822        <a href="reviews.html" class="cta-btn cta-btn--ghost">Все отзывы</a>
823        <a href="reviews.html#reviewFormOpen" class="cta-btn">Оставить отзыв</a>
824      </div>
825    </div>
826  </section>
827
828  <!-- FOOTER -->
829  <footer class="site-footer">
830    <div class="container">
831      <div class="footer-grid">
832        <div>
833          <div class="footer-logo">
834            <img src="img/logo.svg" alt="АлатанТур" width="266" height="64">
835          </div>
836          <p>Ваш надёжный партнёр в мире путешествий</p>
837          <div class="footer-socials">
838            <a href="https://www.instagram.com/alatantour.by" target="_blank" rel="noopener" class="footer-social-link" aria-label="Instagram"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"></rect><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"></path><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"></line></svg></a>
839            <a href="https://t.me/+rvwc3kpiw9piNTMy" target="_blank" rel="noopener" class="footer-social-link" aria-label="Telegram"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M22 2 11 13"></path><path d="M22 2 15 22l-4-9-9-4 20-7z"></path></svg></a>
840            <a href="https://invite.viber.com/?g2=AQARw7vT1OWCllHi0pdP4pDapr%2B38z4jzas1mW1djT5o2MbIaL4saPuu7pLSagK4" target="_blank" rel="noopener" class="footer-social-link" aria-label="Viber"><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor"><g transform="translate(2.1621,1.4000) scale(0.039280)"><g transform="translate(-48.997095,569.855580) scale(0.100000,-0.100000)"><path d="M2525 5685 c-697 -64 -1214 -253 -1516 -554 -240 -241 -401 -603
841-468 -1056 -62 -415 -68 -1050 -15 -1440 96 -698 390 -1163 889 -1405 66 -32
842157 -71 203 -86 l82 -27 0 -301 c0 -324 6 -374 51 -441 35 -51 96 -79 165 -73
84389 8 136 49 391 341 126 143 239 273 253 288 l25 27 130 -10 c168 -13 619 -3
844805 17 411 44 817 142 1058 255 293 138 546 394 691 700 108 229 160 440 195
845795 103 1025 -24 1820 -366 2280 -296 398 -907 641 -1743 695 -212 13 -656 11
846-830 -5z m645 -375 c582 -22 1007 -120 1339 -307 316 -178 509 -558 587 -1153
84745 -345 22 -1001 -47 -1345 -101 -505 -380 -844 -809 -983 -390 -127 -965
848-202 -1424 -187 l-161 5 -380 -423 -380 -423 -5 487 c-3 268 -7 489 -10 492
849-3 2 -36 15 -75 27 -435 143 -729 475 -849 960 -61 249 -78 421 -77 817 1 710
85079 1079 299 1413 246 372 774 583 1562 623 120 7 205 6 430 -3z"/><path d="M2000 4567 c-84 -31 -293 -194 -349 -273 -80 -111 -75 -194 25 -447
851339 -858 1037 -1567 1900 -1930 178 -75 277 -63 420 51 69 55 177 191 221 279
85243 87 44 158 2 218 -58 81 -426 358 -551 415 -58 27 -148 26 -204 0 -30 -15
853-61 -46 -109 -109 -37 -49 -81 -96 -97 -106 -165 -97 -655 249 -820 580 -67
854134 -89 267 -55 331 9 18 45 54 79 82 35 28 83 71 108 97 45 46 45 46 45 118
8550 60 -5 83 -32 141 -81 170 -335 491 -425 537 -50 26 -115 32 -158 16z"/>
855<path d="M2937 4563 c-13 -12 -7 -42 11 -51 9 -5 62 -12 117 -15 441 -26 834
856-324 975 -741 40 -116 60 -218 73 -375 10 -110 15 -136 30 -145 50 -31 56 74
85717 314 -87 533 -460 914 -984 1005 -91 15 -227 20 -239 8z"/><path d="M3039 4234 c-25 -30 1 -47 96 -61 397 -57 635 -312 663 -711 6 -82
85810 -97 25 -100 40 -8 50 16 43 108 -34 415 -276 689 -676 764 -104 20 -134 20
859-151 0z"/><path d="M3136 3904 c-27 -26 -4 -50 55 -58 66 -9 141 -38 184 -70 45 -34 93
860-135 107 -221 17 -107 68 -127 68 -26 -1 190 -121 337 -309 377 -83 17 -86 17
861-105 -2z"/></g></g></svg></a>
862            <a href="https://www.tiktok.com/@alatantour.by?_t=ZM-8vdIb0VR02n&amp;_r=1" target="_blank" rel="noopener" class="footer-social-link" aria-label="TikTok"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M16.5 3h-2.7v12.1a2.4 2.4 0 1 1-2.4-2.4c.2 0 .5 0 .7.1v-2.8a5.2 5.2 0 1 0 4.5 5.2V9.4a6.6 6.6 0 0 0 3.9 1.3V7.9a3.9 3.9 0 0 1-2.6-1 3.9 3.9 0 0 1-1.4-2.9V3z"></path></svg></a>
863          </div>
864        </div>
865
866        <div>
867          <h4>Туры</h4>
868          <a href="/">Поиск туров</a>
869          <a href="hot-tours.html">Специальные предложения</a>
870          <a href="author-tours.html">Авторские туры</a>
871          <a href="/bus-tours.html">Автобусные туры</a>
872          <a href="/excursion-tours.html">Экскурсионные туры</a>
873          <a href="/#promos">Акции</a>
874          <a href="quiz.html">Подбор тура</a>
875          <a href="reviews.html">Отзывы туристов</a>
876        </div>
877
878        <div>
879          <h4>Компания</h4>
880          <a href="about.html">О компании</a>
881          <a href="/news.html">Новости</a>
882          <a href="documents.html">Документы</a>
883          <a href="sales-offices.html">Офисы продаж</a>
884          <a href="contacts.html">Контакты</a>
885        </div>
886
887        <div>
888          <h4>Услуги</h4>
889          <a href="visas.html">Визы</a>
890          <a href="mice.html">MICE</a>
891          <a href="services.html">Доп. услуги</a>
892        </div>
893
894
895        <div>
896          <h4>Контакты</h4>
897          <a href="tel:+375173111010">+375 17 311 10 10</a>
898          <a href="mailto:[email protected]">[email protected]</a>
899          <a href="sales-offices.html">220083, г. Минск, пр-т Дзержинского, 104, пом. 25</a>
900        </div>
901      </div>
902
903      <div class="footer-currency-row">
904        <span class="footer-currency-label">Курсы валют</span>
905        <div class="header-currency footer-currency" aria-label="Курсы валют">
906          <span class="currency-item"><span class="currency-code">USD</span> <span class="currency-value">3.02</span></span>
907          <span class="currency-item"><span class="currency-code">EUR</span> <span class="currency-value">3.48</span></span>
908          <span class="currency-item"><span class="currency-code">RUB</span> <span class="currency-value">3.72</span></span>
909        </div>
910      </div>
911
912      <!-- Юридические сведения. Постановление о защите прав потребителей
913           требует, чтобы наименование продавца, адрес и данные
914           о разрешительных документах были доступны покупателю.
915           Реквизиты совпадают со страницей «Документы» — при их
916           изменении править оба места. -->
917      <div class="footer-legal">
918        <p>
919          ООО «АлатанТур», УНП 101143922 ·
920          220083, Республика Беларусь, г. Минск, пр-т Дзержинского, 104, пом. 25
921        </p>
922        <p>
923          Сертификат соответствия № BY/112 04.03.071.01 00121
924          на услуги туроператора и турагентства
925        </p>
926        <nav class="footer-legal-links" aria-label="Правовые документы">
927          <a href="/documents.html">Документы и реквизиты</a>
928          <a href="/privacy-policy.html">Политика конфиденциальности</a>
929          <a href="/personal-data-policy.html">Обработка персональных данных</a>
930          <a href="/cookie-policy.html">Файлы cookie</a>
931        </nav>
932      </div>
933
934      <div class="footer-bottom">
935        <div class="footer-bottom-left">
936          <span>© <span id="footerYear">2026</span> АлатанТур</span>
937          <a href="#" data-cc-open>Настройки cookie</a>
938          <!-- Указание источника базы геолокации. Обязательно по условиям
939               лицензии CC BY 4.0, под которой распространяется DB-IP City
940               Lite: пользоваться базой бесплатно можно, но со ссылкой
941               на источник. Убирать эту строку нельзя, пока база
942               используется для определения города в заявках. -->
943          <span class="footer-attribution">Город по IP — <a href="https://db-ip.com" target="_blank" rel="noopener nofollow">DB-IP</a></span>
944        </div>
945        <!-- Ник копируется по нажатию: ссылка на профиль в Telegram
946             открывалась бы приложением, а скопировать имя удобнее
947             для тех, кто ищет разработчика вручную. -->
948        <div class="footer-credit">Разработка сайта —
949          <button type="button" class="footer-credit-copy" data-copy="@theiinwg"
950                  title="Нажмите, чтобы скопировать">tg:@theiinwg</button>
951        </div>
952      </div>
953    </div>
954  </footer>
955
956  
956<script>
957    (function () {
958      // --- search tabs (Туры / Круизы / Авиабилеты) ---
959      const tabsRow = document.querySelector('.search-tabs');
960      const tabs = document.querySelectorAll('.search-tabs button.tab');
961      const panels = document.querySelectorAll('.search-placeholder');
962
963      tabs.forEach(tab => {
964        tab.addEventListener('click', () => {
965          tabs.forEach(t => t.classList.remove('active'));
966          tab.classList.add('active');
967          panels.forEach(p => p.classList.toggle('active', p.dataset.panel === tab.dataset.tab));
968          // Кнопка "Избранное" (см. relocateFavoriteButton ниже) должна
969          // быть видна только на вкладке "Туры" — на "Круизах" и
970          // "Авиабилетах" у неё нет смысла, там своя логика избранного нет.
971          if (tabsRow) tabsRow.dataset.activeTab = tab.dataset.tab;
972        });
973      });
974
975      // Переход по ссылке из футтера «Доп. услуги» (/#extra-services):
976      // открываем вкладку услуг и прокручиваем к поисковой форме.
977      // load — при заходе с другой страницы, hashchange — при клике уже на главной.
978      function openServicesFromHash() {
979        if (location.hash !== '#extra-services') return;
980        var servicesTab = document.querySelector('.search-tabs .tab[data-tab="services"]');
981        if (servicesTab) servicesTab.click();
982        var target = document.getElementById('extra-services');
983        if (target) target.scrollIntoView({ behavior: 'smooth', block: 'start' });
984      }
985      window.addEventListener('load', openServicesFromHash);
986      window.addEventListener('hashchange', openServicesFromHash);
987
988      // --- вкладка «Квиз» ---
989      // Вкладка спрятана в разметке и появляется только если в админке
990      // есть активный квиз хотя бы с одним видимым вопросом. Пустой квиз
991      // хуже отсутствующего: человек нажмёт и попадёт в никуда.
992      (function () {
993        var btn = document.getElementById('quizTabBtn');
994        if (!btn) return;
995        var api = (window.ALATAN_CONFIG && window.ALATAN_CONFIG.apiBase) || '/api';
996
997        fetch(api + '/quiz')
998          .then(function (r) { return r.json(); })
999          .then(function (data) {
1000            if (data && data.quiz && data.quiz.questions && data.quiz.questions.length) {
1001              btn.hidden = false;
1002            }
1003          })
1004          .catch(function () { /* нет бэкенда — вкладки просто не будет */ });
1005
1006      })();
1007    })();
1008
1009    // Карусель акций. Раньше карточки лежали в HTML и скрипт запускался
1010    // сразу. Теперь они приходят из API, поэтому инициализацию вызывает
1011    // content.js после отрисовки — иначе трек окажется пустым.
1012    window.initPromoCarousel = function () {
1013  // --- карусель акций ---
1014  // Каждая акция показывается ровно один раз, без клонов. Прокрутка со
1015  // стрелками включается ТОЛЬКО когда карточки физически не помещаются
1016  // в ряд. Если их одна-две или все влезают — стоят по левому краю,
1017  // стрелки скрыты, никакого зацикливания.
1018  const track = document.getElementById('promoTrack');
1019  const prevBtn = document.getElementById('promoPrev');
1020  const nextBtn = document.getElementById('promoNext');
1021  if (!track) return;
1022
1023  const cardCount = track.children.length;
1024
1025  function fitsWithoutScroll() {
1026    // +2 — допуск на субпиксельные округления.
1027    return track.scrollWidth <= track.clientWidth + 2;
1028  }
1029
1030  function refresh() {
1031    const scrollable = cardCount > 0 && !fitsWithoutScroll();
1032    // Мало карточек — раскладываем в ряд без растягивания и прячем стрелки.
1033    track.classList.toggle('promo-track--fit', !scrollable);
1034    [prevBtn, nextBtn].forEach(function (btn) {
1035      if (btn) btn.style.display = scrollable ? '' : 'none';
1036    });
1037  }
1038
1039  refresh();
1040  // Пересчитываем при изменении ширины окна: на узком экране три
1041  // карточки перестают помещаться и стрелки должны появиться.
1042  if (!track.dataset.resizeBound) {
1043    track.dataset.resizeBound = '1';
1044    let t;
1045    window.addEventListener('resize', function () {
1046      clearTimeout(t);
1047      t = setTimeout(refresh, 150);
1048    });
1049  }
1050
1051  function step() {
1052    const card = track.querySelector('.promo-card');
1053    if (!card) return 0;
1054    const gap = parseFloat(getComputedStyle(track).gap) || 24;
1055    return card.offsetWidth + gap;
1056  }
1057
1058  // Простая прокрутка по краю, без клонов и перестановок. На краях
1059  // прокрутка естественно останавливается.
1060  function scroll(dir) {
1061    track.scrollBy({ left: dir * step(), behavior: 'smooth' });
1062  }
1063
1064  if (!track.dataset.bound) {
1065    track.dataset.bound = '1';
1066    nextBtn?.addEventListener('click', function () { scroll(1); });
1067    prevBtn?.addEventListener('click', function () { scroll(-1); });
1068  }
1069};
1070
1071    (function () {
1072      /* Карусель отзывов.
1073       *
1074       * Фото и его описание берутся из data-атрибутов самого слайда,
1075       * а не из отдельных массивов рядом. Раньше массивы шли параллельно
1076       * слайдам, и любое изменение порядка рассыпало соответствие:
1077       * подпись под фото переставала совпадать с текстом отзыва.
1078       *
1079       * Второе следствие: отзывы, пришедшие из админки, отрисовываются
1080       * той же разметкой, и карусель работает с ними без единой правки —
1081       * см. renderReviews() в content.js.
1082       */
1083      var photoEl = document.getElementById('reviewPhoto');
1084      var current = 0;
1085      var slides = [];
1086      var dots = [];
1087
1088      function show(index) {
1089        if (!slides.length) return;
1090        slides.forEach(function (s) {
1091          s.classList.toggle('active', +s.dataset.index === index);
1092        });
1093        dots.forEach(function (d) {
1094          d.classList.toggle('active', +d.dataset.index === index);
1095        });
1096
1097        var active = slides[index];
1098        if (photoEl && active) {
1099          if (active.dataset.photo) photoEl.src = active.dataset.photo;
1100          photoEl.alt = active.dataset.alt || '';
1101        }
1102        current = index;
1103      }
1104
1105      function setup() {
1106        slides = Array.prototype.slice.call(document.querySelectorAll('.review-slide'));
1107        dots = Array.prototype.slice.call(document.querySelectorAll('.review-dot'));
1108        dots.forEach(function (d) {
1109          if (d.dataset.bound) return;
1110          d.dataset.bound = '1';
1111          d.addEventListener('click', function () { show(+d.dataset.index); });
1112        });
1113        show(0);
1114      }
1115
1116      document.getElementById('reviewNext')?.addEventListener('click', function () {
1117        if (slides.length) show((current + 1) % slides.length);
1118      });
1119
1120      document.getElementById('reviewPrev')?.addEventListener('click', function () {
1121        if (slides.length) show((current - 1 + slides.length) % slides.length);
1122      });
1123
1124      // Свайп на телефоне. Остальные горизонтальные ленты сайта
1125      // (карточки акций, список офисов на sales-offices.html)
1126      // листаются жестом сами — они сделаны через overflow-x:auto,
1127      // и браузер обрабатывает перетаскивание пальцем без единой
1128      // строчки JS. Отзывы устроены иначе: это не прокручиваемая
1129      // лента, а один активный слайд, переключаемый кнопками, —
1130      // жест сюда сам собой не приходит, его Ð
1130½ÑƒÐ¶Ð½Ð¾ добавить явно.
1131      var feature = document.querySelector('.review-feature');
1132      if (feature) {
1133        var touchX = 0;
1134        var touchY = 0;
1135        var SWIPE_MIN = 40; // короткое касание — это тап, не листание
1136
1137        feature.addEventListener('touchstart', function (e) {
1138          touchX = e.changedTouches[0].clientX;
1139          touchY = e.changedTouches[0].clientY;
1140        }, { passive: true });
1141
1142        feature.addEventListener('touchend', function (e) {
1143          if (!slides.length) return;
1144          var dx = e.changedTouches[0].clientX - touchX;
1145          var dy = e.changedTouches[0].clientY - touchY;
1146
1147          // Палец шёл в основном вниз/вверх — это прокрутка страницы,
1148          // а не листание отзывов. Не перехватываем такой жест.
1149          if (Math.abs(dx) < SWIPE_MIN || Math.abs(dx) < Math.abs(dy)) return;
1150
1151          if (dx < 0) show((current + 1) % slides.length);       // влево → вперёд
1152          else show((current - 1 + slides.length) % slides.length); // вправо → назад
1153        }, { passive: true });
1154      }
1155
1156      setup();
1157
1158      // Точка входа для content.js: после подстановки отзывов из админки
1159      // карусель нужно связать с новыми элементами заново.
1160      window.AlatanReviews = { setup: setup };
1161    })();
1162  </script>
1162
1163
1164
1165  <!--
1166    GoCruise: модуль поиска круизов (вкладка "Круизы").
1167    cesSettings ОБЯЗАТЕЛЬНО объявляется до подключения app.js —
1168    виджет читает эти параметры из window.cesSettings в момент
1169    инициализации. Сам виджет встраивается в блок <div id="ces"></div>
1170    (см. вкладку "Круизы" в .search-tabs выше).
1171    email — адрес агентства, на который будут приходить заявки
1172    на бронирование круизов, оформленные через виджет.
1173    Оформление виджета под палитру сайта задано в styles.css
1174    (селектор .ces-app — тема "по умолчанию", см. документацию
1175    виджета, раздел 4).
1176  -->
1177  
1177<script>
1178    var cesSettings = {
1179      email: '[email protected]',
1180      currencies: ['BYN', 'RUB', 'USD', 'EUR'],
1181      defaultVendor: 'MSC',
1182      lang: 'ru',
1183      showResults: false
1184    };
1185  </script>
1185
1186  
1186<script src="https://widget.gocruise.ru/js/app.js"></script>
1186
1187
1188  <!-- Сопровождение окна виджета круизов: прячет шапку и фиксирует
1189       страницу, пока окно открыто. Подробности — в самом файле. -->
1190  
1190<script src="cruise-modal.js?v=1" defer></script>
1190
1191
1192  <!--
1193    GoCruise: страховка для цвета включённых тумблеров (Люкс /
1194    Рус-яз группа / Наличие кают). Основной фикс — в styles.css
1195    (селектор #ces .ces-app.ces-app ...:checked, там же подробный
1196    комментарий, почему обычного :checked с !important не хватило —
1197    тумблер "Наличие кают", включённый по умолчанию, рендерился
1198    чёрным). CSS-фикс с усиленной специфичностью перебивает почти
1199    любое стороннее правило, КРОМЕ одного случая: если сам виджет
1200    красит включённый тумблер инлайн-стилем через JS с приоритетом
1201    important (style.setProperty(..., 'important')) — такое внешний
1202    файл стилей в принципе перебить не может, только другой инлайн-
1203    стиль. Скрипт ниже — именно такая подстраховка на этот случай:
1204    находит внутри #ces все включённые тумблеры (чекбоксы/радио,
1205    а также доступные компоненты на aria-checked/aria-pressed/
1206    data-checked/data-state — на случай, если виджет размечает
1207    тумблеры не через input) и принудительно красит их в фирменный
1208    оранжевый тем же способом (инлайн + important), отслеживая и
1209    клики, и асинхронную отрисовку виджета через MutationObserver
1210    (виджет монтируется не сразу — см. аналогичный приём для кнопки
1211    "Избранное" у Tourvisor ниже).
1212  -->
1213  
1213<script>
1214    (function () {
1215      var container = document.getElementById('ces');
1216      if (!container) return;
1217
1218      var orange = getComputedStyle(document.documentElement)
1219        .getPropertyValue('--orange').trim() || '#ff6500';
1220
1221      function isToggle(el) {
1222        return el && el.nodeType === 1 && (
1223          (el.matches && el.matches('input[type="checkbox"], input[type="radio"]')) ||
1224          el.hasAttribute('aria-checked') ||
1225          el.hasAttribute('aria-pressed') ||
1226          el.hasAttribute('data-checked') ||
1227          el.hasAttribute('data-state')
1228        );
1229      }
1230
1231      function isOn(el) {
1232        if (el.matches('input[type="checkbox"], input[type="radio"]')) {
1233          return el.checked;
1234        }
1235        return el.getAttribute('aria-checked') === 'true' ||
1236          el.getAttribute('aria-pressed') === 'true' ||
1237          el.getAttribute('data-checked') === 'true' ||
1238          el.getAttribute('data-state') === 'checked';
1239      }
1240
1241      function paintToggle(el) {
1242        if (!isToggle(el)) return;
1243        if (isOn(el)) {
1244          el.style.setProperty('background-color', orange, 'important');
1245        } else {
1246          el.style.removeProperty('background-color');
1247        }
1248      }
1249
1250      function paintAll() {
1251        container
1252          .querySelectorAll('input[type="checkbox"], input[type="radio"], [aria-checked], [aria-pressed], [data-checked], [data-state]')
1253          .forEach(paintToggle);
1254      }
1255
1256      paintAll();
1257
1258      container.addEventListener('change', function (e) {
1259        paintToggle(e.target);
1260      });
1261
1262      container.addEventListener('click', function (e) {
1263        var el = e.target.closest('[aria-checked], [aria-pressed], [data-checked], [data-state]');
1264        if (el) setTimeout(function () { paintToggle(el); }, 0);
1265      });
1266
1267      var toggleObserver = new MutationObserver(function () { paintAll(); });
1268      toggleObserver.observe(container, {
1269        childList: true,
1270        subtree: true,
1271        attributes: true,
1272        attributeFilter: ['checked', 'aria-checked', 'aria-pressed', 'data-checked', 'data-state', 'class']
1273      });
1274    })();
1275  </script>
1275
1276
1277  <!--
1278    ETM (aviabilet.by): модуль поиска авиабилетов.
1279    ВАЖНО: data-url — это не "домен вашего сайта", а базовый адрес,
1280    с которого сам виджет грузит свои служебные файлы (js/i18n/*.json,
1281    api/login/*). Если сюда подставить домен сайта (как было раньше),
1282    виджет будет пытаться получить эти файлы с вашего сервера и
1283    сыпать 404 — своих файлов там нет. Поэтому здесь должен быть
1284    домен ETM. Если по документации ETM всё же нужно "закрывать"
1285    виджет через ваш собственный домен (белый лейбл), для этого
1286    обычно требуется reverse-proxy на сервере (переадресация путей
1287    /js/* и /api/* на etm.aviabilet.by) — уточните это у поддержки
1288    ETM/aviabilet.by, здесь такого проксирования пока нет.
1289  -->
1290  <!-- Скрипты авиабилетов ETM временно отключены. Чтобы вернуть модуль,
1291       раскомментируйте этот блок вместе с CSS, вкладкой и панелью выше.
1292  
1292<script>
1293    (function () {
1294      var etmBlock = document.getElementById('etm-widget-block');
1295      if (etmBlock) {
1296        etmBlock.setAttribute('data-url', 'https://etm.aviabilet.by');
1297      }
1298    })();
1299  </script>
1299
1300  
1300<script src="https://etm.aviabilet.by/widget/app.min.js"></script>
1300
1301  -->
1302
1303  <!--
1304    Виджет Tourvisor сам добавляет кнопку "Избранное" отдельным
1305    "плавающим" (position: fixed) блоком в конец <body>, слева внизу.
1306    Скрипт ниже находит этот блок и переносит его в строку табов
1307    "Туры / Отели / Авиабилеты" (.search-tabs), в правую часть строки.
1308    Оформление кнопки под стиль строки задано в styles.css
1309    (класс .tv-fav-in-tabs).
1310  -->
1311  
1311<script>
1312    (function () {
1313      function relocateFavoriteButton() {
1314        var tabsRow = document.querySelector('.search-tabs');
1315        if (!tabsRow) return;
1316
1317        var favButton = document.querySelector('.TVCartStickyButton');
1318        if (favButton && favButton.parentElement !== tabsRow) {
1319          favButton.classList.add('tv-fav-in-tabs');
1320          tabsRow.appendChild(favButton);
1321        }
1322      }
1323
1324      relocateFavoriteButton();
1325
1326      // Виджет создаёт кнопку асинхронно И может пересоздавать её заново,
1327      // поэтому наблюдаем постоянно. Чтобы это не тормозило страницу,
1328      // объединяем частые мутации в один вызов через requestAnimationFrame
1329      // (обработчик срабатывает максимум раз за кадр, а не на каждую мутацию).
1330      var scheduled = false;
1331      var observer = new MutationObserver(function () {
1332        if (scheduled) return;
1333        scheduled = true;
1334        requestAnimationFrame(function () {
1335          scheduled = false;
1336          relocateFavoriteButton();
1337        });
1338      });
1339      observer.observe(document.body, { childList: true, subtree: true });
1340    })();
1341  </script>
1341
1342
1343  
1343<script src="/nextbot.js?v=2" defer></script>
1343
1344
1345<script src="config.js?v=9"></script>
vendor: 1 bytes, line 1345
1345
1346<script src="content.js?v=12" defer></script>
vendor: 1 bytes, line 1346
1346
1347<script src="site.js?v=4" defer></script>
vendor: 1 bytes, line 1347
1347
1348<script src="phone.js?v=2"></script>
vendor: 1 bytes, line 1348
1348
1349<script src="email.js?v=1"></script>
vendor: 1 bytes, line 1349
1349
1350<script src="service-request.js?v=1" defer></script>
vendor: 1 bytes, line 1350
1350
1351<script src="flight-request.js?v=2" defer></script>
vendor: 1 bytes, line 1351
1351
1352<script src="tourvisor-lazy.js?v=1" defer></script>
1352
1353  
1353<script src="cookie-consent.js?v=11" defer></script>
1353
1354  <!-- Счётчики статистики. type="text/plain" не выполняется браузером:
1355       механизм согласия заменит эти теги на настоящие скрипты только
1356       после того, как посетитель включит соответствующую категорию.
1357       До согласия ни одного запроса к Яндексу и Google не уходит.
1358       Номера счётчиков задаются в config.js. -->
1359  
1359<script type="text/plain" data-cc="analytics" data-cc-src="/metrika.js?v=5"></script>
1359
1360  
1360<script type="text/plain" data-cc="analytics_intl" data-cc-src="/google-analytics.js?v=2"></script>
1360
1361  
1361<script src="mobile-layout.js?v=1" defer></script>
1361
1362  
1362<script src="rates.js?v=1" defer></script>
1362
1363</body>
1364</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.