PageSourceSearch

https://ukrteatr.odessa.ua/afisha-2

html ukrteatr.odessa.ua collected 2026-10-02 07:28:31 UTC 64,455 bytes, 1,206 lines download raw bytes

1<!DOCTYPE html><html lang="uk"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="theme-color" content="#d12027" /><meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /><link media="all" href="https://ukrteatr.odessa.ua/wp-content/cache/autoptimize/css/autoptimize_ec67737f4a886199076e888249f81aea.css" rel="stylesheet"><title>Афіша - Одеський академічний український музично-драматичний театр ім. В. Василька</title><link rel="canonical" href="https://ukrteatr.odessa.ua/afisha-2" /><meta property="article:modified_time" content="2025-09-29T05:25:22+00:00" />
1<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://ukrteatr.odessa.ua/afisha-2","url":"https://ukrteatr.odessa.ua/afisha-2","name":"Афіша - Одеський академічний український музично-драматичний театр ім. В. Василька","isPartOf":{"@id":"https://ukrteatr.odessa.ua/#website"},"datePublished":"2021-05-30T20:55:05+00:00","dateModified":"2025-09-29T05:25:22+00:00","breadcrumb":{"@id":"https://ukrteatr.odessa.ua/afisha-2#breadcrumb"},"inLanguage":"uk","potentialAction":[{"@type":"ReadAction","target":["https://ukrteatr.odessa.ua/afisha-2"]}]},{"@type":"BreadcrumbList","@id":"https://ukrteatr.odessa.ua/afisha-2#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Головна Сторінка","item":"https://ukrteatr.odessa.ua/"},{"@type":"ListItem","position":2,"name":"Афіша"}]},{"@type":"WebSite","@id":"https://ukrteatr.odessa.ua/#website","url":"https://ukrteatr.odessa.ua/","name":"Одеський академічний український музично-драматичний театр ім. В. Василька","description":"Одеський академічний український музично-драматичний театр ім. В. Василька","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://ukrteatr.odessa.ua/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"uk"}]}</script>
1 <link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://ukrteatr.odessa.ua/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fukrteatr.odessa.ua%2Fafisha-2" /><link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://ukrteatr.odessa.ua/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fukrteatr.odessa.ua%2Fafisha-2&#038;format=xml" /> 
1<script id="jquery-core-js" src="https://ukrteatr.odessa.ua/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
1 
1<script id="jquery-migrate-js" src="https://ukrteatr.odessa.ua/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
1 <link rel="https://api.w.org/" href="https://ukrteatr.odessa.ua/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://ukrteatr.odessa.ua/wp-json/wp/v2/pages/1005175" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://ukrteatr.odessa.ua/xmlrpc.php?rsd" /><meta name="generator" content="WordPress 7.1.2" /><link rel='shortlink' href='https://ukrteatr.odessa.ua/?p=1005175' /><meta name="redi-version" content="1.2.7" /><link rel="icon" href="https://ukrteatr.odessa.ua/wp-content/uploads/2021/04/favicon.png" sizes="32x32" /><link rel="icon" href="https://ukrteatr.odessa.ua/wp-content/uploads/2021/04/favicon.png" sizes="192x192" /><link rel="apple-touch-icon" href="https://ukrteatr.odessa.ua/wp-content/uploads/2021/04/favicon.png" /><meta name="msapplication-TileImage" content="https://ukrteatr.odessa.ua/wp-content/uploads/2021/04/favicon.png" /><style id="wp-custom-css">/* =========================================================
2   1. АДМІНКА ТА МЕНЮ
3   ========================================================= */
4
5#wpadminbar {
6    z-index: 9999999 !important;
7    position: fixed !important;
8    display: block !important;
9}
10
11header,
12.header,
13#header {
14    z-index: 99999 !important;
15}
16
17
18/* =========================================================
19   2. ГОЛОВНИЙ СЛАЙДЕР — ПЛАШКА h3
20   ========================================================= */
21
22/* Ховаємо всі плашки за замовчуванням */
23.image_wrap h3 {
24    display: none !important;
25    margin: 0 !important;
26    right: auto !important;
27    bottom: auto !important;
28    width: auto !important;
29    height: auto !important;
30    min-height: 0 !important;
31    max-width: none !important;
32    line-height: 1 !important;
33    box-sizing: border-box !important;
34}
35
36/* Показуємо тільки на потрібному слайді і його slick-клонах */
37.main_slider__slide[data-slick-index="5"] .image_wrap h3,
38.main_slider__slide[data-slick-index="-2"] .image_wrap h3,
39.main_slider__slide[data-slick-index="5"] .image_wrap h3 {
40    display: inline-flex !important;
41    align-items: center !important;
42    justify-content: center !important;
43
44    position: absolute !important;
45    top: 30px !important;
46    left: 40px !important;
47    right: auto !important;
48    bottom: auto !important;
49
50    width: auto !important;
51    min-width: 0 !important;
52    max-width: max-content !important;
53    height: auto !important;
54    min-height: 0 !important;
55
56    margin: 0 !important;
57    padding: 8px 24px !important;
58    white-space: nowrap !important;
59    line-height: 1 !important;
60    box-sizing: border-box !important;
61
62    z-index: 20 !important;
63
64    background: rgba(255, 255, 255, 0.25) !important;
65    backdrop-filter: blur(20px) saturate(180%) !important;
66    -webkit-backdrop-filter: blur(20px) saturate(180%) !important;
67
68    border: 1px solid rgba(255, 255, 255, 0.6) !important;
69    border-radius: 6px !important;
70
71    color: #ffffff !important;
72    font-size: 20px !important;
73    font-weight: 600 !important;
74    text-transform: uppercase !important;
75    box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08) !important;
76}
77
78/* Мобільна версія для плашки в головному слайдері */
79@media (max-width: 768px) {
80    .main_slider__slide[data-slick-index="5"] .image_wrap h3,
81    .main_slider__slide[data-slick-index="0"] .image_wrap h3 {
82        top: 13px !important;
83        left: 13px !important;
84
85        padding: 5px 13px !important;
86        font-size: 12px !important;
87        line-height: 1 !important;
88        letter-spacing: 0.9px !important;
89
90        width: auto !important;
91        min-width: 0 !important;
92        max-width: max-content !important;
93        height: auto !important;
94        min-height: 0 !important;
95
96        white-space: nowrap !important;
97
98        background: rgba(241, 140, 33, 0.94) !important;
99        color: #ffffff !important;
100        border: 1px solid rgba(255, 255, 255, 0.78) !important;
101        border-radius: 4px !important;
102        box-shadow: 0 3px 10px rgba(0, 0, 0, 0.24) !important;
103    }
104}
105
106
107/* =========================================================
108   3. ПЛАШКА "ПРЕМ'ЄРА" ДЛЯ АФІШ / РЕПЕРТУАРУ
109   ========================================================= */
110
111a[href*="nekhai-nikhto"] {
112    position: relative !important;
113}
114
115a[href*="nekhai-nikhto"]::after {
116    content: "ПРЕМ'ЄРА" !important;
117    position: absolute !important;
118    top: 15px !important;
119    left: 15px !important;
120    z-index: 10 !important;
121
122    display: inline-block !important;
123    width: auto !important;
124    min-width: 0 !important;
125    max-width: max-content !important;
126    height: auto !important;
127    min-height: 0 !important;
128
129    margin: 0 !important;
130    padding: 6px 16px !important;
131    white-space: nowrap !important;
132    line-height: 1 !important;
133    box-sizing: border-box !important;
134    pointer-events: none !important;
135
136    background: rgba(241, 140, 33, 0.95) !important;
137    backdrop-filter: blur(10px) !important;
138    -webkit-backdrop-filter: blur(10px) !important;
139
140    border: 1px solid rgba(255, 255, 255, 0.8) !important;
141    border-radius: 4px !important;
142
143    color: #ffffff !important;
144    font-size: 12px !important;
145    font-weight: 800 !important;
146    text-transform: uppercase !important;
147    letter-spacing: 1.5px !important;
148
149    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3) !important;
150}
151
152/* Мобільна версія для афіш / репертуару */
153@media (max-width: 768px) {
154    a[href*="nekhai-nikhto"]::after {
155        top: 10px !important;
156        left: 10px !important;
157        padding: 4px 12px !important;
158        font-size: 11px !important;
159        line-height: 1 !important;
160        white-space: nowrap !important;
161    }
162}
163
164
165/* =========================================================
166   4. ЖОРСТКІ ВИКЛЮЧЕННЯ
167   ========================================================= */
168
169/* Забороняємо ::after у головному слайдері */
170.main_slider a[href*="nekhai-nikhto"]::after,
171.main_slider__slide a[href*="nekhai-nikhto"]::after,
172.slider a[href*="nekhai-nikhto"]::after {
173    content: none !important;
174    display: none !important;
175}
176
177/* Забороняємо у шапці та адмінці */
178header a::after,
179.header a::after,
180#wpadminbar a::after {
181    content: none !important;
182    display: none !important;
183}
184
185/* Забороняємо на сторінках, де не треба */
186.single-personal a[href*="nekhai-nikhto"]::after,
187[class*="actor"] a[href*="nekhai-nikhto"]::after,
188.repertoire-list a[href*="nekhai-nikhto"]::after {
189    content: none !important;
190    display: none !important;
191}
192
193/* ---- Контейнер */
194.ticket-partners {
195    display: inline-flex;
196    align-items: center;
197}
198
199/* Concert.ua */
200.concert_img {
201    height: 52px !important; 
202    width: auto !important;
203}
204
205/* Карабас - додаємо відступ через margin і залишаємо зсув */
206.karabas_img {
207    height: 17px !important; 
208    width: auto !important;
209    transform: translateY(16px) !important; /* висота, на якій ми зупинилися */
210    margin-left: 20px !important; 
211} /* ВАЖЛИВО: тут тепер є закриваюча дужка */
212
213/* Мобільна версія */
214@media (max-width: 768px) {
215    /* Ховаємо весь блок з обома логотипами */
216    .ticket-partners,
217    .karabas,
218    .karabas_img {
219        display: none !important;
220    }
221}
222
223/* =========================================================
224   ПЛАШКА "ПРЕМ'ЄРА" ДЛЯ "ГОРГОНИ"
225   ========================================================= */
226
227a[href*="скоро-прем_єра.jpg"] {
228    position: relative !important;
229}
230
231a[href*="скоро-прем_єра.jpg"]::after {
232    content: "ПРЕМ'ЄРА" !important;
233    position: absolute !important;
234    top: 15px !important;
235    left: 15px !important;
236    z-index: 10 !important;
237
238    display: inline-block !important;
239    width: auto !important;
240    min-width: 0 !important;
241    max-width: max-content !important;
242    height: auto !important;
243    min-height: 0 !important;
244
245    margin: 0 !important;
246    padding: 6px 16px !important;
247    white-space: nowrap !important;
248    line-height: 1 !important;
249    box-sizing: border-box !important;
250    pointer-events: none !important;
251
252    background: rgba(227, 30, 36, 0.95) !important;
253    backdrop-filter: blur(10px) !important;
254    -webkit-backdrop-filter: blur(10px) !important;
255
256    border: 1px solid rgba(255, 255, 255, 0.85) !important;
257    border-radius: 4px !important;
258
259    color: #ffffff !important;
260    font-size: 12px !important;
261    font-weight: 800 !important;
262    text-transform: uppercase !important;
263    letter-spacing: 1.5px !important;
264
265    box-shadow: 0 4px 12px rgba(227, 30, 36, 0.35) !important;
266}
267
268/* Мобільна версія */
269@media (max-width: 768px) {
270    a[href*="скоро-прем_єра.jpg"]::after {
271        top: 10px !important;
272        left: 10px !important;
273        padding: 4px 12px !important;
274        font-size: 11px !important;
275        line-height: 1 !important;
276        white-space: nowrap !important;
277    }
278}
279
280
281/* =========================================================
282   ВИКЛЮЧЕННЯ ДЛЯ "ГОРГОНИ"
283   ========================================================= */
284
285/* Забороняємо ::after у головному слайдері */
286.main_slider a[href*="horhony"]::after,
287.main_slider__slide a[href*="horhony"]::after,
288.slider a[href*="horhony"]::after {
289    content: none !important;
290    display: none !important;
291}
292
293/* Забороняємо у шапці та адмінці */
294header a[href*="horhony"]::after,
295.header a[href*="horhony"]::after,
296#wpadminbar a[href*="horhony"]::after {
297    content: none !important;
298    display: none !important;
299}
300
301/* Забороняємо на сторінках, де не треба */
302.single-personal a[href*="horhony"]::after,
303[class*="actor"] a[href*="horhony"]::after,
304.repertoire-list a[href*="horhony"]::after {
305    content: none !important;
306    display: none !important;
307}
308
309/* --- Desktop Styles --- */
310
311/* Reset base padding and positioning */
312body.single-show .show__inner {
313    padding-top: 0 !important;
314    position: relative !important;
315}
316
317/* Create layout space for the notification block */
318body.single-show .show__inner:first-of-type {
319    margin-top: 100px !important; 
320}
321
322/* Notification block styling */
323body.single-show .show__inner:first-of-type::before {
324    content: "Пільгові квитки: студенти, пенсіонери, ТПО — від 200 грн (кількість обмежена). Вхід виключно за наявності посвідчення, що підтверджує право на пільгу.";
325    
326    position: absolute;
327    top: -70px;  
328    left: 0;
329    width: 100%;
330    
331    /* Visual style */
332    background-color: #f9f9f9 !important; 
333    border-left: 4px solid #e31e24 !important; 
334    border-radius: 0 4px 4px 0;
335    
336    /* Typography */
337    font-family: inherit !important; 
338    font-size: 15px !important; 
339    font-weight: 500 !important; 
340    color: #333333 !important;
341    font-style: normal !important;
342    line-height: 1.4 !important;
343    
344    /* Box model */
345    padding: 12px 15px !important;
346    box-sizing: border-box; 
347    
348    /* Layout */
349    display: flex;
350    align-items: center;
351    white-space: normal !important;
352    text-align: left;
353    z-index: 10;
354}
355
356/* Hide duplicate notifications on subsequent rows */
357body.single-show .show__inner:not(:first-of-type)::before {
358    display: none !important;
359}
360
361/* --- Mobile Styles (iOS & Android) --- */
362
363@media (max-width: 820px) {
364    /* iOS Fix: Using padding-top forces the container to expand vertically.
365       Margin is sometimes collapsed by Safari, but padding is robust.
366    */
367    body.single-show .show__inner:first-of-type {
368        margin-top: 20px !important;
369        padding-top: 100px !important; /* Creates internal space for the text */
370    }
371    
372    body.single-show .show__inner:first-of-type::before {
373        /* Reset absolute positioning relative to the new padding area */
374        top: 0 !important;
375        margin-top: 0 !important;
376        
377        /* Force hardware acceleration for iOS rendering */
378        transform: translateZ(0); 
379        
380        /* Mobile typography adjustment */
381        font-size: 13px !important;
382        line-height: 1.4 !important;
383        padding: 12px !important;
384        border-left: 3px solid #e31e24 !important;
385    }
386}
387
388/* ---- світла шапка ---- */
389header {
390  backdrop-filter: blur(22px) saturate(180%);
391  -webkit-backdrop-filter: blur(22px) saturate(180%);
392  background-color: rgba(255, 255, 255, 0.72);
393  border-bottom: 1px solid rgba(255, 255, 255, 0.35);
394  box-shadow: none; /* початково без тіні */
395  transition: 
396    background-color 0.4s ease,
397    backdrop-filter 0.4s ease,
398    box-shadow 0.4s ease,
399    opacity 0.4s ease;
400}
401
402/* той самий стиль для усіх внутрішніх станів */
403header.scrolled,
404header.loaded,
405header.fixed,
406body.scrolled header {
407  backdrop-filter: blur(22px) saturate(180%) !important;
408  -webkit-backdrop-filter: blur(22px) saturate(180%) !important;
409  background-color: rgba(255, 255, 255, 0.72) !important;
410  border-bottom: 1px solid rgba(255, 255, 255, 0.35);
411  box-shadow: none !important;
412}
413
414/* контрастний, але м’який текст */
415header a,
416header nav a {
417  color: #111 !important;
418  text-shadow: 0 1px 1px rgba(255,255,255,0.4);
419}
420
421/* ---- ефект при прокрутці ---- */
422body.scrolled header {
423  background-color: rgba(255, 255, 255, 0.8) !important;
424  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06); /* м’яка тінь */
425}
426
427/* плавна реакція на скрол */
428body:not(.scrolled) header {
429  box-shadow: none;
430}
431
432/* поки активний відео-прелоадер */
433.video__loader video[autoplay] ~ header,
434.video__loader.active ~ header,
435body.loading header {
436  opacity: 0;
437  pointer-events: none;
438  transition: opacity .5s ease;
439}
440
441/* коли прелоадер зникає */
442body.loaded header {
443  opacity: 1;
444  pointer-events: auto;
445}
446
447/* Зображення адаптивними в новинах */
448.post__content img {
449    max-width: 100%;
450    height: auto;
451    display: block; /* Прибрати можливі відступи знизу */
452	}
453
454
455/* --- КВАДРАТ (1:1) ТІЛЬКИ В РОЗДІЛІ НОВИН --- */
456
457/* 1. Налаштування для десктопів (екрани від 768px) */
458@media (min-width: 768px) {
459    /* Робимо блок з картинкою пропорційним */
460    .news .news__single .image {
461        flex: 0 0 30%; 
462        width: 30%;      
463        margin-right: 30px; 
464    }
465
466    /* Сама картинка: 100% ширини + примусовий квадрат */
467    .news .news__single .image img {
468        width: 100%;
469        aspect-ratio: 1 / 1; 
470        height: auto; 
471        object-fit: cover;  
472    }
473}
474
475/* 2. Адаптація для мобільних пристроїв (екрани до 767px) */
476@media (max-width: 767px) {
477    /* Переводимо картку в режим "стовпчик" */
478    .news .news__single.flex {
479        flex-direction: column;
480    }
481    
482    /* Блок зображення на всю ширину мобільного екрана */
483    .news .news__single .image {
484        width: 100%;
485        flex: 0 0 auto;
486        margin-right: 0;
487        margin-bottom: 20px;
488    }
489
490    /* Сама картинка: 100% ширини + примусовий квадрат */
491    .news .news__single .image img {
492        width: 100%;
493        aspect-ratio: 1 / 1; 
494        height: auto;
495        object-fit: cover;
496    }
497}
498
499/* 1. РОБИМО МІСЦЕ ДЛЯ ДВОХ БЛОКІВ ТА ПОВІТРЯ ЗНИЗУ (ДЕСКТОП) */
500body.single-show .show__inner:first-of-type {
501    margin-top: 130px !important; 
502}
503
504/* 2. ЧЕРВОНИЙ БЛОК (Піднімаємо найвище) */
505body.single-show .show__inner:first-of-type::before {
506    top: -160px !important; 
507}
508
509/* 3. БЛОК КАРАБАС (Сірий фон, капс, повітря, лого справа) */
510body.single-show .show__inner:first-of-type::after {
511    content: "Якщо квитки розпродані, перевірте їх наявність на сайті KARABAS.";
512    position: absolute;
513    top: -90px; /* ПОВІТРЯ: відступ від червоного блоку */
514    left: 0;
515    width: 100%;
516
517    /* Сірий фон, жовта смужка */
518    background-color: #f9f9f9 !important;
519    border-left: 4px solid #ffc107 !important;
520    border-radius: 0 4px 4px 0;
521
522    /* Логотип справа */
523    background-image: url('/wp-content/uploads/2025/10/logo-karabas.svg') !important;
524    background-repeat: no-repeat !important;
525    background-position: right 15px center !important;
526    background-size: 80px auto !important;
527
528    /* Текст і внутрішні відступи */
529    font-family: inherit !important;
530    font-size: 15px !important;
531    font-weight: 500 !important;
532    color: #333333 !important;
533    padding: 12px 110px 12px 15px !important; /* Відступ справа, щоб текст не наліз на лого */
534    box-sizing: border-box;
535    z-index: 10;
536    
537    display: flex;
538    align-items: center;
539}
540
541/* Ховаємо дублі на інших рядках */
542body.single-show .show__inner:not(:first-of-type)::after {
543    display: none !important;
544}
545
546/* =========================================================
547   МОБІЛЬНА ВЕРСІЯ (Ще менше повітря)
548   ========================================================= */
549@media (max-width: 820px) {
550    body.single-show .show__inner:first-of-type {
551        margin-top: 40px !important; 
552        padding-top: 165px !important; /* Ще трохи підтягнули загальну висоту */
553    }
554    
555    body.single-show .show__inner:first-of-type::before {
556        top: 0 !important; 
557        margin-top: 0 !important; transform: translateZ(0); 
558        
559        font-size: 13px !important;
560        padding: 12px !important;
561        border-left: 3px solid #e31e24 !important;
562    }
563    
564    body.single-show .show__inner:first-of-type::after {
565        top: 100px !important; /* ЩЕ МЕНША ВІДСТАНЬ (було 110) */
566        margin-top: 0 !important; transform: translateZ(0); 
567        
568        font-size: 13px !important;
569        border-left: 3px solid #ffc107 !important;
570        background-size: 60px auto !important;
571        background-position: right 10px center !important;
572        padding: 12px 85px 12px 15px !important; 
573    }
574}
575
576body.postid-1013628 .single__show__shows .show__inner:first-of-type::before,
577body.postid-1013628 .single__show__shows .show__inner:first-of-type::after {
578    display: none !important;
579    content: none !important;
580}</style>
vendor: 64 bytes, line 580
580 <script async src="https://www.googletagmanager.com/gtag/js?id=
580G-2ZMCLFZBS8
vendor: 12 bytes, line 580
580"></script> 
580<script>
vendor: 134 bytes, lines 580-584
580window.dataLayer = window.dataLayer || [];
581  function gtag(){dataLayer.push(arguments);}
582  gtag('js', new Date());
583
584  gtag('config', '
584G-2ZMCLFZBS8
vendor: 3 bytes, line 584
584');
584</script>
584  
584<script>
vendor: 398 bytes, lines 584-592
584!function(f,b,e,v,n,t,s)
585{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
586n.callMethod.apply(n,arguments):n.queue.push(arguments)};
587if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
588n.queue=[];t=b.createElement(e);t.async=!0;
589t.src=v;s=b.getElementsByTagName(e)[0];
590s.parentNode.insertBefore(t,s)}(window,document,'script',
591'https://connect.facebook.net/en_US/fbevents.js');
592 fbq('init', '
5921365156877221951
vendor: 30 bytes, lines 592-593
592'); 
593fbq('track', 'PageView');
593</script>
593 <noscript> <img height="1" width="1" 
594src="https://www.facebook.com/tr?id=1365156877221951&ev=PageView
595&noscript=1"/> </noscript><!-- Vasylko SEO Social v1.3.0 -->
596<meta property="og:locale" content="uk">
597<meta property="og:type" content="article">
598<meta property="og:title" content="Афіша">
599<meta property="og:url" content="https://ukrteatr.odessa.ua/afisha-2">
600<meta property="og:site_name" content="Одеський академічний український музично-драматичний театр ім. В. Василька">
601<meta name="twitter:card" content="summary">
602<meta name="twitter:title" content="Афіша">
603<!-- /Vasylko SEO Social -->
604</head><body data-rsssl=1 class="wp-singular page-template page-template-page-afisha page-template-page-afisha-php page page-id-1005175 wp-theme-odesa-theatre-theme loading non-logged-in"><header><div class="content flex"> <a class="logo" href="https://ukrteatr.odessa.ua"><img class="img_logo" src="https://ukrteatr.odessa.ua/wp-content/uploads/2021/04/logo_208x54px.svg"/></a><div class="divider"></div><nav class="menu-menu-container"><ul id="menu-menu" class="menu"><li id="menu-item-1005178" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-1005175 current_page_item menu-item-1005178"><a href="https://ukrteatr.odessa.ua/afisha-2" aria-current="page">Афіша</a></li><li id="menu-item-1004997" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1004997"><a href="https://ukrteatr.odessa.ua/repertuar">Репертуар</a></li><li id="menu-item-1009275" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1009275"><a href="https://ukrteatr.odessa.ua/kolektyv">Колектив</a></li><li id="menu-item-1005034" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1005034"><a href="https://ukrteatr.odessa.ua/news">Новини</a></li></ul></nav> <a class="concert" href="https://smart.concert.ua/uk/ukrteatr/c" rel="nofollow" target="_blank"> <img class="concert_img" src="/wp-content/uploads/2025/10/concertua-brand-logo-01_RED.svg" alt="Concert.ua"/> </a> <a class="karabas" href="https://odesa.karabas.com/hall/ukrajnskij-teatr" rel="nofollow" target="_blank"> <img class="karabas_img" src="/wp-content/uploads/2025/10/logo-karabas.svg" alt="Karabas"/> </a><div class="mobile_icon"> <span></span> <span></span> <span></span></div></div></header><div class="main_container"><div class="video__loader"><video muted="" attribute="" playsinline="" poster="" autoplay=""> <source src="/wp-content/uploads/2021/04/Logo_animation_mobile_800x400.mp4" type="video/mp4"></video></div><section class="near"><div class="content"><div class="near__shows grid col-3"> <a href="https://ukrteatr.odessa.ua/afisha/odruzhennia"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2018/08/476506286_1031432312181281_247246961523816256_n.jpg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-violet date">02</span><span class="_cl-violet month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-violet">Одруження</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="violet"></span><p>Цілком неймовірна подія</p></div><p class="show__text__director">Режисер: Іван Уривський</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/lisova-svoboda-buty-soboiu"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2026/09/lisova-svoboda-buty-soboiu-afisha.jpg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-blue date">04</span><span class="_cl-blue month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-blue">Лісова: свобода бути собою</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="blue"></span><p>Перцептивна містерія</p></div><p class="show__text__director">Режисер: Ярослав Бабич</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/kaidashi"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2021/05/kaidashi.png"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-yellow date">09</span><span class="_cl-yellow month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-yellow">Кайдаші</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="yellow"></span>
604<p>Сімейна хроніка на 2 частини</p></div><p class="show__text__director">Режисер: Костянтин <br /> Пивоваров</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/v-nediliu-rano-zillia-kopala"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2023/08/IMG_1386.png"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-blue date">16</span><span class="_cl-blue month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-blue">В неділю рано зілля копала</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="blue"></span><p>Історія справжнього кохання</p></div><p class="show__text__director">Режисер: Олександр Самусенко</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/vsi-moi-syny"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2026/09/vsi-moi-syny-afisha-scaled.jpg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-red date">18</span><span class="_cl-red month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-red">Всі мої сини</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="red"></span><p>Драма на 2 дії</p></div><p class="show__text__director">Режисер: Олександр Степанцов</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/tini-zabutykh-predkiv"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2021/05/tini-poster.png"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-violet date">21</span><span class="_cl-violet month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-violet">Тіні забутих предків</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="violet"></span><p>Вистава без антракту</p></div><p class="show__text__director">Режисер: Іван Уривський</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/stervy-ne-plachut"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/stervi-ne-plachut-poster.jpg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-red date">22</span><span class="_cl-red month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-red">Стерви не плачуть!</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="red"></span><p>Трагікомедія на 1 дію</p></div><p class="show__text__director">Режисер: Роман Федосєєв</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/1900-i"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2023/11/1080-1080.jpg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-blue date">23</span><span class="_cl-blue month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-blue">1900-й. Легенда про піаніста</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="blue"></span><p>Історія на 88 клавіш, яку треба почути</p></div><p class="show__text__director">Режисер: Олександр Самусенко</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/vsi-moi-syny"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2026/09/vsi-moi-syny-afisha-scaled.jpg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-red date">24</span><span class="_cl-red month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-red">Всі мої сини</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="red"></span>
604<p>Драма на 2 дії</p></div><p class="show__text__director">Режисер: Олександр Степанцов</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/hutsulskyi-vestern"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2023/01/IMG_1529.jpeg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-violet date">25</span><span class="_cl-violet month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-violet">Карпатський вестерн</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="violet"></span><p>Неймовірна історія про кохання, зраду та смерть на 2 дії</p></div><p class="show__text__director">Режисер: Максим Голенко</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/ia-pomshchusia-svitu-liubov-iu"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2023/06/IMG_1361.jpeg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-violet date">29</span><span class="_cl-violet month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-violet">Я помщуся світу любовʼю…</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="violet"></span><p>Музично-поетичний перформанс</p></div><p class="show__text__director">Режисерка: Валерія Романко</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/kamin"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2024/04/афіша-не-затверджена-scaled.jpg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-blue date">30</span><span class="_cl-blue month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-blue">Камінь</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="blue"></span><p>«Хроніка» однієї родини</p></div><p class="show__text__director">
604Режисер: Євгеній Резніченко</p></div></div></div> </a> <a href="https://ukrteatr.odessa.ua/afisha/prirecheni-tancjuvati"><div class="show second-wave" data-src="https://ukrteatr.odessa.ua/wp-content/uploads/2021/04/Horses-Final-scaled.jpg"></div><div class="show__inner flex"><div class="show__date flexColumn"> <span class="_cl-orange date">31</span><span class="_cl-orange month">Жовтня</span></div><div class="show__text flexColumn"><h2 class="_cl-orange">Приречені танцювати</h2><div class="right__part flex"><div class="flex"> <span class="triangle" data-color="orange"></span><p>Марафон тривалістю в життя</p></div><p class="show__text__director">Режисер: Павло Івлюшкін</p></div></div></div> </a></div></div></section></div><footer><div class="content flex"><div class="flexColumn justifyCenter borderRight"><a class="logo" href="https://ukrteatr.odessa.ua"><img class="footer__img_logo" src="https://ukrteatr.odessa.ua/wp-content/uploads/2021/05/footer_logo.png"/></a></div><div class="flexColumn justifyCenter"><p>Каса<br /> <a href="tel:0487238977">048-723-89-77</a></p><p>Адміністрація<br /> <a href="tel:0487235566">048-723-55-66</a></p></div><div class="flexColumn justifyCenter borderRight"><p>65026 м. Одеса,<br /> вул. Пастера, 15</p><p><a href="mailto:[email protected]">[email protected]</a></p></div><div class="flexColumn justifyCenter borderRight"><nav class="menu-nyzhnie-meniu-container"><ul id="menu-nyzhnie-meniu" class="menu"><li id="menu-item-1005177" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-1005175 current_page_item menu-item-1005177"><a href="https://ukrteatr.odessa.ua/afisha-2" aria-current="page">Афіша</a></li><li id="menu-item-1005068" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1005068"><a href="https://ukrteatr.odessa.ua/repertuar">Репертуар</a></li><li id="menu-item-1005067" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1005067"><a href="https://ukrteatr.odessa.ua/news">Новини</a></li><li id="menu-item-1005066" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1005066"><a href="https://ukrteatr.odessa.ua/tenders">Тендери</a></li></ul></nav></div><div class="divider"></div><div class="flex socials justifyCenter"> <a href="https://www.youtube.com/channel/UC_XxrXdBEU-nNWOlkq7UUfQ/featured" target="_blank" rel="nofollow"><img src="https://ukrteatr.odessa.ua/wp-content/uploads/2021/05/youtube-brands.svg"/></a> <a href="https://www.facebook.com/ODESSAUKRTHEATER" target="_blank" rel="nofollow"><img src="https://ukrteatr.odessa.ua/wp-content/uploads/2021/05/facebook-square-brands.svg"/></a> <a href="https://www.instagram.com/ukrtheater/" target="_blank" rel="nofollow"><img src="https://ukrteatr.odessa.ua/wp-content/uploads/2021/05/instagram-brands.svg"/></a> <a href="https://t.me/ukrteatr" target="_blank" rel="nofollow"><img src="https://ukrteatr.odessa.ua/wp-content/uploads/2022/07/telegram-brands.svg"/></a></div></div></footer> 
604<script type="speculationrules">{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/odesa-theatre-theme/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}</script>
604 
604<script id="wp-statistics-tracker-js-extra">var WP_Statistics_Tracker_Object = {"requestUrl":"https://ukrteatr.odessa.ua/wp-json/wp-statistics/v2","ajaxUrl":"https://ukrteatr.odessa.ua/wp-admin/admin-ajax.php","hitParams":{"wp_statistics_hit":1,"source_type":"page","source_id":1005175,"search_query":"","signature":"c81913052b22d31c1aed40464c60bf33","endpoint":"hit"},"option":{"dntEnabled":false,"bypassAdBlockers":false,"consentIntegration":{"name":null,"status":[]},"isPreview":false,"userOnline":false,"isWpConsentApiActive":false},"isLegacyEventLoaded":"","customEventAjaxUrl":"https://ukrteatr.odessa.ua/wp-admin/admin-ajax.php?action=wp_statistics_custom_event&nonce=5eb19ae409","onlineParams":{"wp_statistics_hit":1,"source_type":"page","source_id":1005175,"search_query":"","signature":"c81913052b22d31c1aed40464c60bf33","action":"wp_statistics_online_check"},"jsCheckTime":"60000"};
605//# sourceURL=wp-statistics-tracker-js-extra</script>
605 
605<script id="wp-statistics-tracker-js" src="https://ukrteatr.odessa.ua/wp-content/plugins/wp-statistics/assets/js/tracker.js?ver=14.16.13"></script>
605 
605<script id="vasylko-premiere-badges-js-extra">var VPB_DATA = {"items":[{"id":1013724,"title":"\u0412\u0441\u0456 \u043c\u043e\u0457 \u0441\u0438\u043d\u0438"},{"id":1013628,"title":"\u041b\u0456\u0441\u043e\u0432\u0430: \u0441\u0432\u043e\u0431\u043e\u0434\u0430 \u0431\u0443\u0442\u0438 \u0441\u043e\u0431\u043e\u044e"},{"id":1012964,"title":"\u0421\u0442\u0435\u0440\u0432\u0438 \u043d\u0435 \u043f\u043b\u0430\u0447\u0443\u0442\u044c!"}],"label":"\u041f\u0420\u0415\u041c\u2019\u0404\u0420\u0410","single":{"enabled":false,"id":0}};
606//# sourceURL=vasylko-premiere-badges-js-extra</script>
606 
606<script id="vasylko-premiere-badges-js" src="https://ukrteatr.odessa.ua/wp-content/plugins/vasylko-premiere-badges/assets/premiere.js?ver=1.5.2"></script>
606 
606<script id="slick-js" src="https://ukrteatr.odessa.ua/wp-content/themes/odesa-theatre-theme/js/slick/slick.min.js?ver=7.1.2"></script>
606 
606<script id="fancybox-js" src="https://ukrteatr.odessa.ua/wp-content/themes/odesa-theatre-theme/js/fancybox/fancybox.js?ver=7.1.2"></script>
606 
606<script id="lazy-js" src="https://ukrteatr.odessa.ua/wp-content/themes/odesa-theatre-theme/js/lazyload/lazyload.min.js?ver=7.1.2"></script>
606 
606<script id="masterslider-js" src="https://ukrteatr.odessa.ua/wp-content/themes/odesa-theatre-theme/js/masterslider/masterslider.min.js?ver=7.1.2"></script>
606 
606<script id="main-js" src="https://ukrteatr.odessa.ua/wp-content/themes/odesa-theatre-theme/js/main.js?ver=7.1.2"></script>
606 
606<script id="wp-emoji-settings" type="application/json">{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://ukrteatr.odessa.ua/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}}</script>
606 
606<script type="module">/*! This file is auto-generated */
607var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
608//# sourceURL=https://ukrteatr.odessa.ua/wp-includes/js/wp-emoji-loader.min.js</script>
608  
608<script type="text/javascript">jQuery(document).ready(function ($) {
609  var selectors = [
610    '.near_shows .grid .col-3',
611    '.show.second-wave',
612    '.content .grid .col-3',
613    '.repertoire .grid .col-3',
614    '.afisha .grid .col-3'
615  ].join(',');
616
617  var observer = new IntersectionObserver(function (entries) {
618    entries.forEach(function (entry) {
619      if (entry.isIntersecting) {
620        entry.target.classList.add('is-visible');
621        observer.unobserve(entry.target);
622      }
623    });
624  }, {
625    threshold: 0.12,
626    rootMargin: '0px 0px -45px 0px'
627  });
628
629  function initReveal() {
630    $(selectors).each(function () {
631      var item = $(this);
632
633      if (
634        item.closest('header, footer, .main_slider, .slick-slider, #wpadminbar').length ||
635        item.hasClass('reveal-on-scroll')
636      ) {
637        return;
638      }
639
640      item.addClass('reveal-on-scroll');
641      observer.observe(this);
642    });
643  }
644
645  initReveal();
646
647  setTimeout(initReveal, 600);
648  setTimeout(initReveal, 1500);
649});</script>
649 
650 
650<script type="text/javascript">jQuery(document).ready(function ($) {
651  var slider = $('.main_slider');
652
653  if (!slider.length) return;
654
655  function enableMainSliderAutoplay() {
656    if (slider.hasClass('slick-initialized')) {
657      slider.slick('slickSetOption', {
658        autoplay: true,
659        autoplaySpeed: 4000,
660        speed: 700,
661        pauseOnHover: false,
662        pauseOnFocus: false,
663        pauseOnDotsHover: false,
664        arrows: true,
665        infinite: true
666      }, true);
667
668      slider.slick('slickPlay');
669    }
670  }
671
672  enableMainSliderAutoplay();
673
674  setTimeout(enableMainSliderAutoplay, 1000);
675  setTimeout(enableMainSliderAutoplay, 2500);
676
677  $(window).on('scroll focus mousemove touchend', function () {
678    if (slider.hasClass('slick-initialized')) {
679      slider.slick('slickPlay');
680    }
681  });
682});</script>
682 
683 
683<script type="text/javascript">document.addEventListener('DOMContentLoaded', function () {
684  if (!document.body.classList.contains('postid-1010622')) return;
685
686  document.querySelectorAll(
687    '#vm-bessarab-audio, #vm-bessarab-audio-wide, #vasylko-clean-audio, #vasylko-orchestra-player'
688  ).forEach(function (el) {
689    el.remove();
690  });
691
692  const insertAfter =
693    document.querySelector('body.postid-1010622 section.content.flex.single_show_wrap.active') ||
694    document.querySelector('body.postid-1010622 section.content.flex') ||
695    document.querySelector('body.postid-1010622 .single_show_wrap.active') ||
696    document.querySelector('body.postid-1010622 .single_show_wrap');
697
698  if (!insertAfter) {
699    console.warn('Vasylko orchestra player: insert target not found');
700    return;
701  }
702
703  const COVER_URL = 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/SuspilneKultura.png';
704
705  const TRACKS = [
706    { title: 'Childhood', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/01_Childhood.mp3', duration: '5:49' },
707    { title: 'Elusive Wind', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/02_Elusive_Wind.mp3', duration: '6:19' },
708    { title: 'Moving Away Silhouette On The Shore', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/03_Moving_Away_Silhouette_On_The_Shore.mp3', duration: '7:53' },
709    { title: 'Intermezzo', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/04_Intermezzo.mp3', duration: '6:03' },
710    { title: 'The Game', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/05_The_Game.mp3', duration: '2:36' },
711    { title: 'Apprehension', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/06_Apprehension.mp3', duration: '6:45' },
712    { title: 'Dance for Chick', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/07_Dance_for_Chick.mp3', duration: '7:01' },
713    { title: 'So Short', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/08_So_Shirt.mp3', duration: '4:42' },
714    { title: 'Birth of a Dream', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/09_Birth_of_a_Dream.mp3', duration: '5:46' },
715    { title: 'Touch of Time', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/10_Touch_Of_Time.mp3', duration: '5:51' },
716    { title: 'City of the Sun', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/11_City_of_the_Sun.mp3', duration: '8:18' },
717    { title: 'Lumberjack Blues', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/12_Lumberjack_Blues.mp3', duration: '5:21' },
718    { title: 'The Shades of Silence', src: 'https://ukrteatr.odessa.ua/wp-content/uploads/2026/05/13_The_Shades_Of_Silence.mp3', duration: '5:30' }
719  ];
720
721  const audio = new Audio();
722  audio.preload = 'metadata';
723  audio.volume = 0.82;
724
725  let currentIndex = -1;
726  let isSeeking = false;
727
728  function iconPlay() {
729    return '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M8 5.3c0-.8.9-1.3 1.6-.9l8.7 5.1c.7.4.7 1.5 0 1.9l-8.7 5.1c-.7.4-1.6-.1-1.6-.9V5.3z"></path></svg>';
730  }
731
732  function iconPause() {
733    return '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 5h3.4v14H7V5zm6.6 0H17v14h-3.4V5z"></path></svg>';
734  }
735
736  function iconPrev() {
737    return '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6 5h2v14H6V5zm3.8 7L18 6.8v10.4L9.8 12z"></path></svg>';
738  }
739
740  function iconNext() {
741    return '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M16 5h2v14h-2V5zM6 17.2V6.8l8.2 5.2L6 17.2z"></path></svg>';
742  }
743
744  function iconVolume() {
745    return '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 10h4.1L13 5.7c.7-.6 1.7-.1 1.7.8v11c0 .9-1 1.4-1.7.8L8.1 14H4v-4zm13.5-2.8a1 1 0 0 1 1.4.1A7.9 7.9 0 0 1 21 12a7.9 7.9 0 0 1-2.1 4.7 1 1 0 0 1-1.5-1.3A5.9 5.9 0 0 0 19 12a5.9 5.9 0 0 0-1.6-3.4 1 1 0 0 1 .1-1.4z"></path></svg>';
746  }
747
748  function iconDownload() {
749    return '<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M11 4h2v8.2l2.8-2.8 1.4 1.4-5.2 5.2-5.2-5.2 1.4-1.4 2.8 2.8V4zm-5 13h12v2H6v-2z"></path></svg>';
750  }
751
752  function escapeAttr(value) {
753    return String(value).replace(/"/g, '"');
754  }
755
756  function formatTime(seconds) {
757    if (!isFinite(seconds) || seconds < 0) return '0:00';
758    const m = Math.floor(seconds / 60);
759    const s = Math.floor(seconds % 60).toString().padStart(2, '0');
760    return m + ':' + s;
761  }
762
763  function durationToSeconds(value) {
764    if (!value || !value.includes(':')) return 0;
765    const parts = value.split(':').map(Number);
766    return parts[0] * 60 + parts[1];
767  }
768
769  function totalDurationText() {
770    const total = TRACKS.reduce(function (sum, track) {
771      return sum + durationToSeconds(track.duration);
772    }, 0);
773    return Math.round(total / 60) + ' хв';
774  }
775
776  function fileName(track) {
777    return String(track.title || 'track')
778      .trim()
779      .replace(/[\\/:*?"<>|]/g, '')
780      .replace(/\s+/g, '_') + '.mp3';
781  }
782
783  function setRangeFill(range, playedColor, restColor) {
784    const min = Number(range.min || 0);
785    const max = Number(range.max || 100);
786    const val = Number(range.value || 0);
787    const p = max > min ? ((val - min) / (max - min)) * 100 : 0;
788
789    range.style.setProperty('--fill', p + '%');
790
791    if (playedColor) {
792      range.style.setProperty('--played', playedColor);
793      range.style.setProperty('--thumb', playedColor);
794    }
795
796    if (restColor) {
797      range.style.setProperty('--rest', restColor);
798    }
799  }
800
801  const section = document.createElement('section');
802  section.id = 'vasylko-orchestra-player';
803
804  section.innerHTML = [
805    '<div class="vop-head">',
806      '<div class="vop-kicker">Аудіозапис</div>',
807      '<h2 class="vop-title">Одеський джазовий концерт</h2>',
808      '<p class="vop-desc">Авторські композиції Вадима Бессараба у виконанні театрального бенду театру імені В. Василька, записані для ефіру Радіо Культура. Запис організувала команда Суспільне Одеса і Радіо Культура.</p>',
809    '</div>',
810
811    '<div class="vop-widget">',
812      '<div class="vop-left">',
813        '<div class="vop-left-inner">',
814          '<div class="vop-cover"><img src="' + COVER_URL + '" alt="Одеський джазовий концерт"></div>',
815          '<h3 class="vop-album">Одеський джазовий концерт</h3>',
816
817          '<div class="vop-actions">',
818            '<button class="vop-main-btn" type="button">',
819              '<span class="vop-main-icon">' + iconPlay() + '</span>',
820              '<span class="vop-main-text">Відтворити</span>',
821            '</button>',
822          '</div>',
823
824          '<div class="vop-controls">',
825            '<input class="vop-range vop-seek" type="range" min="0" max="100" value="0" step="0.1">',
826            '<div class="vop-time">',
827              '<span class="vop-current-time">0:00</span>',
828              '<span class="vop-remaining-time">-0:00</span>',
829            '</div>',
830
831            '<div class="vop-control-row">',
832              '<button class="vop-round vop-prev" type="button" aria-label="Попередній трек">' + iconPrev() + '</button>',
833              '<button class="vop-round vop-next" type="button" aria-label="Наступний трек">' + iconNext() + '</button>',
834
835              '<div class="vop-volume-wrap">',
836                '<div class="vop-volume">',
837                  '<button class="vop-volume-toggle" type="button" aria-label="Гучність">' + iconVolume() + '</button>',
838                  '<input class="vop-range vop-volume-range" type="range" min="0" max="1" step="0.01" value="0.82">',
839                '</div>',
840                '<button class="vop-download-bottom is-hidden" type="button" aria-label="Завантажити трек">' + iconDownload() + '</button>',
841              '</div>',
842            '</div>',
843          '</div>',
844        '</div>',
845      '</div>',
846
847      '<div class="vop-right">',
848        '<div class="vop-list"></div>',
849        '<div class="vop-footer"><span class="vop-note">' + TRACKS.length + ' треків, приблизно ' + totalDurationText() + '</span></div>',
850      '</div>',
851    '</div>'
852  ].join('');
853
854  insertAfter.insertAdjacentElement('afterend', section);
855
856  const mainIcon = section.querySelector('.vop-main-icon');
857  const mainText = section.querySelector('.vop-main-text');
858  const mainBtn = section.querySelector('.vop-main-btn');
859  const seek = section.querySelector('.vop-seek');
860  const currentTimeEl = section.querySelector('.vop-current-time');
861  const remainingTimeEl = section.querySelector('.vop-remaining-time');
862  const prevBtn = section.querySelector('.vop-prev');
863  const nextBtn = section.querySelector('.vop-next');
864  const volumeRange = section.querySelector('.vop-volume-range');
865  const downloadBtn = section.querySelector('.vop-download-bottom');
866  const list = section.querySelector('.vop-list');
867
868  function renderList() {
869    list.innerHTML = TRACKS.map(function (track, index) {
870      const isCurrent = index === currentIndex;
871      const isPlaying = isCurrent && !audio.paused;
872
873      return [
874        '<div class="vop-track' + (isCurrent ? ' is-current' : '') + '" data-index="' + index + '">',
875          '<div class="vop-num">' + String(index + 1).padStart(2, '0') + '</div>',
876          '<div class="vop-track-title" title="' + escapeAttr(track.title) + '">' + track.title + '</div>',
877          '<div class="vop-duration">' + track.duration + '</div>',
878          '<button class="vop-track-btn" type="button" aria-label="Відтворити трек">',
879            isPlaying ? iconPause() : iconPlay(),
880          '</button>',
881        '</div>'
882      ].join('');
883    }).join('');
884  }
885
886  function updateDownload() {
887    if (currentIndex < 0 || !TRACKS[currentIndex]) {
888      downloadBtn.classList.add('is-hidden');
889      downloadBtn.removeAttribute('data-url');
890      downloadBtn.removeAttribute('data-name');
891      return;
892    }
893
894    downloadBtn.classList.remove('is-hidden');
895    downloadBtn.setAttribute('data-url', TRACKS[currentIndex].src);
896    downloadBtn.setAttribute('data-name', fileName(TRACKS[currentIndex]));
897  }
898
899  function updateButtons() {
900    const playing = currentIndex >= 0 && !audio.paused;
901
902    mainIcon.innerHTML = playing ? iconPause() : iconPlay();
903
904    if (currentIndex < 0) {
905      mainText.textContent = 'Відтворити';
906      section.classList.remove('is-loaded', 'has-current');
907    } else {
908      mainText.textContent = playing ? 'Пауза' : 'Продовжити';
909      section.classList.add('is-loaded', 'has-current');
910    }
911
912    updateDownload();
913  }
914
915  function updateTime() {
916    if (currentIndex < 0) {
917      currentTimeEl.textContent = '0:00';
918      remainingTimeEl.textContent = '-0:00';
919      seek.value = 0;
920      seek.max = 100;
921      setRangeFill(seek, '#9ca0a8', '#d7dbe1');
922      return;
923    }
924
925    const fallbackDuration = durationToSeconds(TRACKS[currentIndex].duration);
926    const duration = isFinite(audio.duration) && audio.duration > 0 ? audio.duration : fallbackDuration;
927    const current = audio.currentTime || 0;
928    const remaining = Math.max(0, duration - current);
929
930    currentTimeEl.textContent = formatTime(current);
931    remainingTimeEl.textContent = '-' + formatTime(remaining);
932
933    if (!isSeeking && duration > 0) {
934      seek.max = duration;
935      seek.value = current;
936    }
937
938    setRangeFill(seek, '#9ca0a8', '#d7dbe1');
939  }
940
941  function updateAll() {
942    updateButtons();
943    updateTime();
944    renderList();
945  }
946
947  function loadTrack(index, autoplay) {
948    if (index < 0 || index >= TRACKS.length) return;
949
950    currentIndex = index;
951    audio.src = TRACKS[index].src;
952    audio.load();
953
954    if (autoplay) {
955      audio.play().catch(function (err) {
956        console.warn('Audio play blocked:', err);
957      });
958    }
959
960    updateAll();
961  }
962
963  function toggleMain() {
964    if (currentIndex < 0) {
965      loadTrack(0, true);
966      return;
967    }
968
969    if (audio.paused) {
970      audio.play().catch(function (err) {
971        console.warn(err);
972      });
973    } else {
974      audio.pause();
975    }
976
977    updateAll();
978  }
979
980  function toggleTrack(index) {
981    if (index === currentIndex) {
982      if (audio.paused) {
983        audio.play().catch(function (err) {
984          console.warn(err);
985        });
986      } else {
987        audio.pause();
988      }
989      updateAll();
990      return;
991    }
992
993    loadTrack(index, true);
994  }
995
996  function downloadCurrent() {
997    if (currentIndex < 0 || !TRACKS[currentIndex]) return;
998
999    const a = document.createElement('a');
1000    a.href = TRACKS[currentIndex].src;
1001    a.download = fileName(TRACKS[currentIndex]);
1002    document.body.appendChild(a);
1003    a.click();
1004    a.remove();
1005  }
1006
1007  mainBtn.addEventListener('click', toggleMain);
1008
1009  prevBtn.addEventListener('click', function () {
1010    if (currentIndex <= 0) {
1011      loadTrack(0, true);
1012    } else {
1013      loadTrack(currentIndex - 1, true);
1014    }
1015  });
1016
1017  nextBtn.addEventListener('click', function () {
1018    if (currentIndex < 0) {
1019      loadTrack(0, true);
1020    } else if (currentIndex < TRACKS.length - 1) {
1021      loadTrack(currentIndex + 1, true);
1022    }
1023  });
1024
1025  list.addEventListener('click', function (event) {
1026    const row = event.target.closest('.vop-track');
1027    if (!row) return;
1028
1029    const index = Number(row.dataset.index);
1030    if (!Number.isNaN(index)) toggleTrack(index);
1031  });
1032
1033  downloadBtn.addEventListener('click', downloadCurrent);
1034
1035  volumeRange.addEventListener('input', function () {
1036    audio.volume = Number(this.value);
1037    setRangeFill(this, '#b0b4bc', '#d7dbe1');
1038  });
1039
1040  seek.addEventListener('input', function () {
1041    isSeeking = true;
1042    const value = Number(this.value);
1043    const max = Number(this.max || 0);
1044
1045    currentTimeEl.textContent = formatTime(value);
1046    remainingTimeEl.textContent = '-' + formatTime(Math.max(0, max - value));
1047
1048    setRangeFill(this, '#9ca0a8', '#d7dbe1');
1049  });
1050
1051  seek.addEventListener('change', function () {
1052    if (currentIndex >= 0) {
1053      audio.currentTime = Number(this.value);
1054    }
1055
1056    isSeeking = false;
1057    updateTime();
1058  });
1059
1060  audio.addEventListener('loadedmetadata', updateTime);
1061  audio.addEventListener('timeupdate', updateTime);
1062  audio.addEventListener('play', updateAll);
1063  audio.addEventListener('pause', updateAll);
1064
1065  audio.addEventListener('ended', function () {
1066    if (currentIndex < TRACKS.length - 1) {
1067      loadTrack(currentIndex + 1, true);
1068    } else {
1069      audio.pause();
1070      audio.currentTime = 0;
1071      updateAll();
1072    }
1073  });
1074
1075  setRangeFill(seek, '#9ca0a8', '#d7dbe1');
1076  setRangeFill(volumeRange, '#b0b4bc', '#d7dbe1');
1077  renderList();
1078  updateAll();
1079});</script>
1079 
1080 
1080<script type="text/javascript">document.addEventListener('DOMContentLoaded', function () {
1081  if (!document.body.classList.contains('postid-1010622')) return;
1082
1083  const originalGallery = document.querySelector('body.postid-1010622 .single__show');
1084  if (!originalGallery) return;
1085
1086  const links = Array.from(
1087    originalGallery.querySelectorAll('a[data-fancybox="gallery"][href]')
1088  )
1089    .map(a => a.getAttribute('href'))
1090    .filter(Boolean)
1091    .filter((href, index, arr) => arr.indexOf(href) === index);
1092
1093  if (!links.length) return;
1094  if (document.querySelector('.orchestra-gallery-carousel')) return;
1095
1096  originalGallery.style.display = 'none';
1097
1098  const carousel = document.createElement('div');
1099  carousel.className = 'orchestra-gallery-carousel';
1100
1101  const stage = document.createElement('div');
1102  stage.className = 'orchestra-gallery-stage';
1103
1104  links.forEach((href, index) => {
1105    const slide = document.createElement('div');
1106    slide.className = 'orchestra-gallery-slide';
1107    slide.style.setProperty('--bg-image', `url("${href}")`);
1108
1109    const img = document.createElement('img');
1110    img.src = href;
1111    img.alt = `Фото ${index + 1}`;
1112    img.loading = index === 0 ? 'eager' : 'lazy';
1113    img.decoding = 'async';
1114
1115    slide.appendChild(img);
1116    stage.appendChild(slide);
1117  });
1118
1119  const controls = document.createElement('div');
1120  controls.className = 'orchestra-gallery-controls';
1121  controls.innerHTML = `
1122    <button type="button" class="orchestra-gallery-btn orchestra-gallery-prev" aria-label="Попереднє фото">←</button>
1123    <div class="orchestra-gallery-counter">1 / ${links.length}</div>
1124    <button type="button" class="orchestra-gallery-btn orchestra-gallery-next" aria-label="Наступне фото">→</button>
1125  `;
1126
1127  carousel.appendChild(stage);
1128  carousel.appendChild(controls);
1129
1130  originalGallery.parentNode.insertBefore(carousel, originalGallery);
1131
1132  const slides = Array.from(carousel.querySelectorAll('.orchestra-gallery-slide'));
1133  const counter = carousel.querySelector('.orchestra-gallery-counter');
1134  const prevBtn = carousel.querySelector('.orchestra-gallery-prev');
1135  const nextBtn = carousel.querySelector('.orchestra-gallery-next');
1136
1137  let current = 0;
1138
1139  function showSlide(index) {
1140    if (!slides.length) return;
1141
1142    if (index < 0) index = slides.length - 1;
1143    if (index >= slides.length) index = 0;
1144
1145    slides.forEach((slide, i) => {
1146      slide.classList.toggle('is-active', i === index);
1147    });
1148
1149    current = index;
1150    counter.textContent = `${current + 1} / ${slides.length}`;
1151  }
1152
1153  prevBtn.addEventListener('click', function () {
1154    showSlide(current - 1);
1155  });
1156
1157  nextBtn.addEventListener('click', function () {
1158    showSlide(current + 1);
1159  });
1160
1161  document.addEventListener('keydown', function (e) {
1162    if (!document.body.classList.contains('postid-1010622')) return;
1163
1164    if (e.key === 'ArrowLeft') {
1165      showSlide(current - 1);
1166    }
1167
1168    if (e.key === 'ArrowRight') {
1169      showSlide(current + 1);
1170    }
1171  });
1172
1173  showSlide(0);
1174});</script>
1174 
1175 
1175<script type="text/javascript">(function () {
1176  function insertBessarabAlbum() {
1177    if (!window.location.pathname.includes('/collective/bessarab-vadym')) return;
1178    if (document.querySelector('.bessarab-album')) return;
1179
1180    var showsBlock = document.querySelector('.actor__shows');
1181    if (!showsBlock) return;
1182
1183    var albumBlock = document.createElement('div');
1184    albumBlock.className = 'bessarab-album';
1185
1186    albumBlock.innerHTML = `
1187      <div class="bessarab-album-crop">
1188        <iframe
1189          allow="autoplay *; encrypted-media *; fullscreen *; clipboard-write"
1190          frameborder="0"
1191          sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation-by-user-activation"
1192          src="https://embed.music.apple.com/ua/album/night-and-day/1732265675?l=uk">
1193        </iframe>
1194      </div>
1195    `;
1196
1197    showsBlock.parentNode.insertBefore(albumBlock, showsBlock);
1198  }
1199
1200  document.addEventListener('DOMContentLoaded', insertBessarabAlbum);
1201  window.addEventListener('load', insertBessarabAlbum);
1202})();</script>
1202 </body></html>
1203<!-- Dynamic page generated in 0.383 seconds. -->
1204<!-- Cached page generated by WP-Super-Cache on 2026-10-02 10:28:30 -->
1205
1206<!-- Compression = gzip -->

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.