{"id":22760,"date":"2025-04-01T12:31:38","date_gmt":"2025-04-01T09:31:38","guid":{"rendered":"https:\/\/extur.by\/?page_id=22760"},"modified":"2026-06-17T14:41:28","modified_gmt":"2026-06-17T11:41:28","slug":"otdyh-v-bolgarii-ceny-2026","status":"publish","type":"page","link":"https:\/\/extur.by\/ru\/otdyh-v-bolgarii-ceny-2026\/","title":{"rendered":"&#x1f3e8; \u041e\u0442\u0435\u043b\u0438 \u0438 \u0446\u0435\u043d\u044b. \u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044f 2026 \u2014 \u043f\u043e\u0434\u0431\u0435\u0440\u0451\u043c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442"},"content":{"rendered":"<p><!DOCTYPE html><br \/>\n<html lang=\"ru\"><br \/>\n<head><br \/>\n    <meta charset=\"UTF-8\"\/><br \/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\"\/><br \/>\n    <title>\u042d\u043a\u0441\u043f\u0435\u0440\u0442\u0422\u0443\u0440 | \u0422\u0443\u0440\u044b \u0432 \u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044e 2026 | \u0412\u044b\u043b\u0435\u0442 \u0438\u0437 \u0412\u0430\u0440\u0448\u0430\u0432\u044b<\/title><\/head><\/html><\/p>\n<style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n<p>        body {\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            background: linear-gradient(135deg, #ff7e5f 0%, #feb47b 100%);\n            min-height: 100vh;\n            padding: 20px;\n        }<\/p>\n<p>        .container {\n            max-width: 1400px;\n            margin: 0 auto;\n        }<\/p>\n<p>        .hero {\n            background: linear-gradient(135deg, #ff6b35, #f7931e);\n            border-radius: 40px;\n            padding: 30px 20px;\n            text-align: center;\n            color: white;\n            margin-bottom: 24px;\n            box-shadow: 0 15px 35px rgba(0,0,0,0.2);\n        }<\/p>\n<p>        .hero h1 { font-size: 2.5rem; margin-bottom: 10px; }\n        .hero .subtitle { font-size: 1.2rem; opacity: 0.95; }<\/p>\n<p>        .upload-section {\n            background: white;\n            border-radius: 35px;\n            padding: 30px;\n            margin-bottom: 24px;\n            text-align: center;\n            box-shadow: 0 10px 25px rgba(0,0,0,0.1);\n        }<\/p>\n<p>        .upload-area {\n            border: 3px dashed #ff6b35;\n            border-radius: 30px;\n            padding: 40px;\n            background: #fffaf5;\n            cursor: pointer;\n            transition: all 0.3s;\n        }<\/p>\n<p>        .upload-area:hover {\n            background: #fff0e6;\n            border-color: #c0401a;\n        }<\/p>\n<p>        .upload-area h3 {\n            color: #ff6b35;\n            margin-bottom: 10px;\n        }<\/p>\n<p>        .upload-area p {\n            color: #7f8c8d;\n            font-size: 0.9rem;\n        }<\/p>\n<p>        .file-info {\n            margin-top: 15px;\n            padding: 10px;\n            background: #e8f5e9;\n            border-radius: 20px;\n            color: #2e7d32;\n            display: none;\n            font-size: 0.85rem;\n        }<\/p>\n<p>        .formula-panel {\n            background: #fff3cd;\n            border-left: 4px solid #ffc107;\n            padding: 15px 20px;\n            margin-bottom: 20px;\n            border-radius: 20px;\n            font-size: 0.8rem;\n            color: #856404;\n            display: none;\n        }<\/p>\n<p>        .dates-block {\n            background: white;\n            border-radius: 35px;\n            padding: 20px;\n            margin-bottom: 24px;\n            box-shadow: 0 10px 25px rgba(0,0,0,0.1);\n            display: none;\n        }<\/p>\n<p>        .dates-title {\n            font-size: 1.2rem;\n            font-weight: 700;\n            color: #ff6b35;\n            margin-bottom: 15px;\n            text-align: center;\n        }<\/p>\n<p>        .dates-grid {\n            display: flex;\n            flex-wrap: wrap;\n            justify-content: center;\n            gap: 12px;\n        }<\/p>\n<p>        .date-badge {\n            background: #ffe0d0;\n            padding: 10px 18px;\n            border-radius: 40px;\n            font-size: 0.85rem;\n            font-weight: 600;\n            color: #ff6b35;\n            cursor: pointer;\n            transition: all 0.2s;\n            border: 2px solid transparent;\n        }<\/p>\n<p>        .date-badge:hover {\n            background: #ff6b35;\n            color: white;\n            transform: translateY(-2px);\n        }<\/p>\n<p>        .date-badge.active {\n            background: #ff6b35;\n            color: white;\n            border-color: #c0401a;\n        }<\/p>\n<p>        .filters-section {\n            background: white;\n            border-radius: 35px;\n            padding: 20px;\n            margin-bottom: 24px;\n            box-shadow: 0 10px 25px rgba(0,0,0,0.1);\n            display: none;\n        }<\/p>\n<p>        .hotel-filters {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 12px;\n            align-items: flex-end;\n        }<\/p>\n<p>        .filter-group {\n            display: flex;\n            flex-direction: column;\n            gap: 5px;\n        }<\/p>\n<p>        .filter-group label {\n            font-size: 0.7rem;\n            font-weight: 700;\n            text-transform: uppercase;\n            color: #ff6b35;\n        }<\/p>\n<p>        .filter-group select {\n            padding: 10px 16px;\n            border: 2px solid #ffe0d0;\n            border-radius: 30px;\n            font-size: 0.85rem;\n            background: white;\n            cursor: pointer;\n            min-width: 140px;\n        }<\/p>\n<p>        .reset-filters {\n            background: #ff6b35;\n            color: white;\n            border: none;\n            padding: 10px 24px;\n            border-radius: 40px;\n            font-weight: 600;\n            cursor: pointer;\n        }<\/p>\n<p>        .hotels-count {\n            background: #ff6b35;\n            color: white;\n            padding: 6px 16px;\n            border-radius: 40px;\n            font-size: 0.8rem;\n            font-weight: 600;\n            margin-left: auto;\n        }<\/p>\n<p>        .hotels-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n            gap: 24px;\n            margin-bottom: 30px;\n        }<\/p>\n<p>        .hotel-card {\n            background: white;\n            border-radius: 28px;\n            overflow: hidden;\n            transition: transform 0.3s, box-shadow 0.3s;\n            border: 1px solid #ffe0d0;\n            box-shadow: 0 5px 15px rgba(0,0,0,0.05);\n        }<\/p>\n<p>        .hotel-card:hover { transform: translateY(-6px); box-shadow: 0 20px 35px rgba(0,0,0,0.12); }<\/p>\n<p>        .hotel-img {\n            height: 150px;\n            background: linear-gradient(135deg, #ffd6b0, #ffb380);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            position: relative;\n        }<\/p>\n<p>        .hotel-icon { font-size: 60px; }\n        .flight-badge {\n            position: absolute;\n            bottom: 12px;\n            left: 12px;\n            background: rgba(0,0,0,0.65);\n            backdrop-filter: blur(4px);\n            color: white;\n            font-size: 0.7rem;\n            padding: 5px 12px;\n            border-radius: 25px;\n        }<\/p>\n<p>        .hotel-info { padding: 18px; }\n        .hotel-name { font-size: 1.2rem; font-weight: 800; margin-bottom: 5px; color: #2c3e50; }\n        .hotel-stars { color: #f5b042; font-size: 0.75rem; letter-spacing: 2px; margin-bottom: 6px; }\n        .hotel-resort { font-size: 0.75rem; color: #7f8c8d; margin-bottom: 10px; }\n        .hotel-board {\n            display: inline-block;\n            background: #ffe0d0;\n            padding: 4px 12px;\n            border-radius: 20px;\n            font-size: 0.7rem;\n            font-weight: 600;\n            color: #ff6b35;\n            margin-bottom: 12px;\n        }<\/p>\n<p>        .room-item {\n            background: #fff9f5;\n            border-radius: 18px;\n            padding: 12px;\n            margin-bottom: 10px;\n            border: 1px solid #ffe0d0;\n        }<\/p>\n<p>        .room-name { font-weight: 700; font-size: 0.9rem; color: #2c3e50; }\n        .room-view { font-size: 0.7rem; color: #7f8c8d; margin: 4px 0; }\n        .room-guests { font-size: 0.7rem; color: #ff6b35; font-weight: 600; }<\/p>\n<p>        .room-price {\n            display: flex;\n            justify-content: space-between;\n            align-items: baseline;\n            margin-top: 10px;\n            padding-top: 8px;\n            border-top: 1px solid #ffe0d0;\n        }<\/p>\n<p>        .price-value { font-size: 1.3rem; font-weight: 800; color: #28a745; }\n        .free-badge {\n            background: #ffc107;\n            color: #333;\n            font-size: 0.65rem;\n            padding: 2px 8px;\n            border-radius: 20px;\n            margin-left: 8px;\n        }<\/p>\n<p>        .select-hotel-btn {\n            background: #ff6b35;\n            color: white;\n            border: none;\n            padding: 8px;\n            border-radius: 30px;\n            width: 100%;\n            font-size: 0.75rem;\n            font-weight: 600;\n            cursor: pointer;\n            margin-top: 8px;\n            transition: all 0.2s;\n        }<\/p>\n<p>        .select-hotel-btn:hover { background: #e55a2b; transform: translateY(-2px); }<\/p>\n<p>        .empty-hotels {\n            text-align: center;\n            padding: 60px;\n            background: white;\n            border-radius: 28px;\n            color: #7f8c8d;\n            grid-column: 1 \/ -1;\n        }<\/p>\n<p>        .form-card {\n            background: white;\n            border-radius: 35px;\n            padding: 28px 24px;\n            margin-top: 30px;\n            box-shadow: 0 15px 35px rgba(0,0,0,0.15);\n            display: none;\n        }<\/p>\n<p>        .form-title { font-size: 1.6rem; font-weight: 700; color: #ff6b35; text-align: center; margin-bottom: 8px; }<\/p>\n<p>        .price-note {\n            background: #e8f8f5;\n            padding: 14px;\n            border-radius: 20px;\n            margin-bottom: 20px;\n            font-size: 13px;\n            color: #2c3e50;\n            border-left: 4px solid #ff6b35;\n        }<\/p>\n<p>        .selected-hotel-info {\n            background: #fff5f0;\n            padding: 14px;\n            border-radius: 20px;\n            margin-bottom: 20px;\n            border: 1px solid #ffe0d0;\n            display: none;\n        }<\/p>\n<p>        .form-group { margin-bottom: 18px; }\n        label { font-weight: 600; display: block; margin-bottom: 6px; color: #2c3e50; font-size: 0.85rem; }\n        .required::after { content: \" *\"; color: #ff6b35; }\n        input, select, textarea {\n            width: 100%;\n            padding: 12px 14px;\n            font-size: 0.9rem;\n            border: 2px solid #ffe0d0;\n            border-radius: 25px;\n            background: #ffffff;\n        }<\/p>\n<p>        .radio-group { display: flex; flex-wrap: wrap; gap: 15px; margin-top: 5px; }\n        .radio-group label { font-weight: normal; display: inline-flex; align-items: center; gap: 6px; font-size: 0.8rem; }\n        .radio-group input { width: auto; margin: 0; }<\/p>\n<p>        .hidden { display: none; }<\/p>\n<p>        button[type=\"submit\"] {\n            background: linear-gradient(135deg, #ff6b35, #f7931e);\n            color: white;\n            border: none;\n            padding: 14px;\n            font-size: 1rem;\n            font-weight: 700;\n            border-radius: 50px;\n            width: 100%;\n            cursor: pointer;\n            margin-top: 10px;\n        }<\/p>\n<p>        .status { margin-top: 15px; padding: 10px; border-radius: 30px; text-align: center; font-size: 0.8rem; display: none; }\n        .success { background: #d4edda; color: #155724; }\n        .error { background: #f8d7da; color: #721c24; }<\/p>\n<p>        .footer {\n            text-align: center;\n            margin-top: 30px;\n            font-size: 0.7rem;\n            color: white;\n            background: rgba(0,0,0,0.2);\n            padding: 12px;\n            border-radius: 30px;\n        }<\/p>\n<p>        @media (max-width: 900px) {\n            .hotel-filters { flex-direction: column; align-items: stretch; }\n            .hotels-count { margin-left: 0; text-align: center; }\n        }\n    <\/p><\/style>\n<p><br \/>\n<body><\/body><\/p>\n<div class=\"container\">\n<div class=\"hero\">\n<h1>&#x1f1e7;&#x1f1ec; \u042d\u041a\u0421\u041f\u0415\u0420\u0422\u0422\u0423\u0420<\/h1>\n<div class=\"subtitle\">&#x2708;&#xfe0f; \u0410\u0432\u0438\u0430\u0442\u0443\u0440 \u0432 \u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044e \u0438\u0437 \u0412\u0430\u0440\u0448\u0430\u0432\u044b<\/div><\/div>\n<div class=\"upload-section\" id=\"uploadSection\">\n<div class=\"upload-area\" id=\"uploadArea\">\n<h3>&#x1f4c1; \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 XML \u0444\u0430\u0439\u043b\u044b \u0441 \u0446\u0435\u043d\u0430\u043c\u0438 \u043e\u0442 \u0442\u0443\u0440\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u044e\u0434\u0430 \u0438\u043b\u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 (\u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e)<\/p>\n<p>            <input type=\"file\" id=\"fileInput\" accept=\".xml\" multiple style=\"display: none;\"\/>\n        <\/p><\/div>\n<div class=\"file-info\" id=\"fileInfo\"><\/div><\/div>\n<div class=\"formula-panel\" id=\"formulaPanel\">\n        &#x1f4d0; <strong>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0440\u0430\u0441\u0447\u0451\u0442\u0430:<\/strong><br \/>\n        \u2460 \u0426\u0435\u043d\u0430 \u0442\u0443\u0440\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0437\u0430 1 \u043d\u043e\u0447\u044c \u2192 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 9 \u043d\u043e\u0447\u0435\u0439<br \/>\n        \u2461 \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0430\u043a\u0446\u0438\u0438 (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043d\u043e\u0447\u0438 \u0438\u0437 XML)<br \/>\n        \u2462 \u041d\u0430\u0446\u0435\u043d\u043a\u0430 +3% \u2192 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u0412\u0412\u0415\u0420\u0425<br \/>\n        \u2463 \u0422\u0440\u0430\u043d\u0441\u0444\u0435\u0440: 140 \u20ac \u043d\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 (\u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e)<br \/>\n        \u2464 \u041f\u0440\u0438\u0431\u044b\u043b\u044c: 40 \u20ac \u0437\u0430 \u0432\u0437\u0440\u043e\u0441\u043b\u043e\u0433\u043e, 30 \u20ac \u0437\u0430 \u0440\u0435\u0431\u0451\u043d\u043a\u0430\n    <\/div>\n<div class=\"dates-block\" id=\"datesBlock\">\n<div class=\"dates-title\">&#x1f4c5; \u0412\u042b\u0411\u0415\u0420\u0418\u0422\u0415 \u0414\u0410\u0422\u0423 \u0412\u042b\u041b\u0415\u0422\u0410 (9 \u043d\u043e\u0447\u0435\u0439)<\/div>\n<div class=\"dates-grid\" id=\"datesGrid\"><\/div><\/div>\n<div class=\"filters-section\" id=\"filtersSection\">\n<div class=\"hotel-filters\">\n<div class=\"filter-group\"><label>&#x1f3e8; \u041e\u0422\u0415\u041b\u042c<\/label><select id=\"filterHotel\"><option value=\"all\">\u0412\u0441\u0435 \u043e\u0442\u0435\u043b\u0438<\/option><\/select><\/div>\n<div class=\"filter-group\"><label>&#x2b50; \u0417\u0412\u0415\u0417\u0414\u042b<\/label><select id=\"filterStars\"><option value=\"all\">\u0412\u0441\u0435 \u0437\u0432\u0435\u0437\u0434\u044b<\/option><\/select><\/div>\n<div class=\"filter-group\"><label>&#x1f37d; \u041f\u0418\u0422\u0410\u041d\u0418\u0415<\/label><select id=\"filterBoard\"><option value=\"all\">\u0412\u0441\u0435 \u0442\u0438\u043f\u044b<\/option><\/select><\/div>\n<div class=\"filter-group\"><label>&#x1f465; \u0413\u041e\u0421\u0422\u0418<\/label><select id=\"filterGuests\"><option value=\"all\">\u0412\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b<\/option><option value=\"1\">1 \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0439<\/option><option value=\"2\">2 \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0445<\/option><option value=\"3\">3 \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u0445<\/option><option value=\"1+1\">1+1<\/option><option value=\"2+1\">2+1<\/option><option value=\"2+2\">2+2<\/option><\/select><\/div>\n<p>            <button class=\"reset-filters\" onclick=\"resetFilters()\">&#x1f504; \u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c<\/button><\/p>\n<div class=\"hotels-count\" id=\"hotelsCount\">0 \u043e\u0442\u0435\u043b\u0435\u0439<\/div><\/div><\/div>\n<div class=\"hotels-grid\" id=\"hotelsGrid\"><\/div>\n<div class=\"form-card\" id=\"formCard\">\n<div class=\"form-title\">&#x1f4cb; \u0417\u0410\u0411\u0420\u041e\u041d\u0418\u0420\u041e\u0412\u0410\u0422\u042c \u0422\u0423\u0420<\/div>\n<div id=\"selectedHotelDisplay\" class=\"selected-hotel-info\">\n<p>&#x1f3e8; <strong>\u041e\u0442\u0435\u043b\u044c:<\/strong> <span id=\"selectedHotelName\"><\/span><\/p>\n<p>&#x1f6cf;&#xfe0f; <span id=\"selectedRoomName\"><\/span><\/p>\n<p>&#x1f4b0; <span id=\"selectedRoomPrice\"><\/span> \u20ac \u0437\u0430 9 \u043d\u043e\u0447\u0435\u0439<\/p>\n<\/div>\n<div class=\"price-note\">\n            <strong>&#x2705; \u0412 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e:<\/strong><br \/>\n            &#x1f3e8; 9 \u043d\u043e\u0447\u0435\u0439 + &#x1f690; \u0422\u0440\u0430\u043d\u0441\u0444\u0435\u0440 \u0413\u0440\u043e\u0434\u043d\u043e\u2013\u0412\u0430\u0440\u0448\u0430\u0432\u0430\u2013\u0413\u0440\u043e\u0434\u043d\u043e (140\u20ac \u043d\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430)<br \/>\n            &#x1f68c; \u0422\u0440\u0430\u043d\u0441\u0444\u0435\u0440 \u0411\u0443\u0440\u0433\u0430\u0441\u2013\u043e\u0442\u0435\u043b\u044c\u2013\u0411\u0443\u0440\u0433\u0430\u0441 + &#x2708;&#xfe0f; \u0410\u0432\u0438\u0430\u043f\u0435\u0440\u0435\u043b\u0451\u0442\n        <\/div>\n<form id=\"bookingForm\">\n<div style=\"display: flex; gap: 12px;\">\n<div class=\"form-group\" style=\"flex:1\"><label class=\"required\">\u0418\u043c\u044f<\/label><input type=\"text\" id=\"name\" required\/><\/div>\n<div class=\"form-group\" style=\"flex:1\"><label class=\"required\">\u0422\u0435\u043b\u0435\u0444\u043e\u043d<\/label><input type=\"tel\" id=\"phone\" required\/><\/div><\/div>\n<div class=\"form-group\"><label class=\"required\">Email<\/label><input type=\"email\" id=\"email\" required\/><\/div>\n<div class=\"form-group hidden\" id=\"childrenAgeGroup\">\n                <label>\u0412\u043e\u0437\u0440\u0430\u0441\u0442 \u0434\u0435\u0442\u0435\u0439<\/label><br \/>\n                <textarea rows=\"2\" id=\"childrenAges\" placeholder=\"\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: 5 \u043b\u0435\u0442 \u0438 8 \u043b\u0435\u0442\"><\/textarea>\n            <\/div>\n<div class=\"form-group\"><label>\u041f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f<\/label><textarea rows=\"2\" id=\"comment\"><\/textarea><\/div>\n<p>            <button type=\"submit\">&#x1f30a; \u041e\u0422\u041f\u0420\u0410\u0412\u0418\u0422\u042c \u0417\u0410\u042f\u0412\u041a\u0423<\/button><\/p>\n<div id=\"statusMsg\" class=\"status\"><\/div><\/form>\n<hr style=\"margin: 20px 0;\"\/>\n<div style=\"font-size:0.7rem; text-align:center;\">&#x1f4cd; \u041c\u043e\u0441\u0442\u043e\u0432\u0430\u044f 31, \u043e\u0444\u0438\u0441 28.1, \u0413\u0440\u043e\u0434\u043d\u043e<br \/>&#x1f4de; +375 29 782-14-27<\/div><\/div>\n<div class=\"footer\">&#x1f30a; \u0422\u0412\u041e\u0419 \u041e\u0422\u041f\u0423\u0421\u041a. \u0422\u0412\u041e\u0418 \u0412\u041f\u0415\u0427\u0410\u0422\u041b\u0415\u041d\u0418\u042f. \u0422\u0412\u041e\u0401 \u041b\u0415\u0422\u041e!<\/div>\n<\/div>\n<p><script>\n    \/\/ =====================================================\n    \/\/ \u041f\u0410\u0420\u0410\u041c\u0415\u0422\u0420\u042b \u0420\u0410\u0421\u0427\u0401\u0422\u0410\n    \/\/ =====================================================\n    const MARKUP = 3;\n    const TRANSFER_PER_PERSON = 140;\n    const PROFIT_ADULT = 40;\n    const PROFIT_CHILD = 30;\n    const NIGHTS = 9;<\/script><\/p>\n<p>    let allPrices = [];\n    let hotelsData = [];\n    let selectedHotel = null;\n    let selectedRoom = null;\n    let selectedPrice = 0;<\/p>\n<p>    \/\/ =====================================================\n    \/\/ \u0424\u0423\u041d\u041a\u0426\u0418\u042f \u0420\u0410\u0421\u0427\u0401\u0422\u0410 (\u0421 \u0423\u0427\u0401\u0422\u041e\u041c \u0411\u0415\u0421\u041f\u041b\u0410\u0422\u041d\u042b\u0425 \u041d\u041e\u0427\u0415\u0419)\n    \/\/ =====================================================\n    function calculateFinalPrice(pricePerNight, freeNights, adults, children) {\n        const paidNights = Math.max(0, NIGHTS - freeNights);\n        const hotelCost = pricePerNight * paidNights;\n        const afterMarkup = hotelCost * (1 + MARKUP \/ 100);\n        const afterRound = Math.ceil(afterMarkup);\n        const totalPersons = adults + children;\n        const transfer = TRANSFER_PER_PERSON * totalPersons;\n        const profit = (adults * PROFIT_ADULT) + (children * PROFIT_CHILD);\n        return afterRound + transfer + profit;\n    }<\/p>\n<p>    \/\/ =====================================================\n    \/\/ \u041f\u0410\u0420\u0421\u0415\u0420 XML\n    \/\/ =====================================================\n    function parseXML(xmlString, fileName) {\n        const parser = new DOMParser();\n        const xmlDoc = parser.parseFromString(xmlString, \"text\/xml\");<\/p>\n<p>        if (xmlDoc.querySelector('parsererror')) {\n            console.warn(`\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 ${fileName}`);\n            return [];\n        }<\/p>\n<p>        const results = [];\n        const offers = xmlDoc.querySelectorAll('offer');<\/p>\n<p>        for (let offer of offers) {\n            const offerSeasons = offer.querySelectorAll('offer_season');<\/p>\n<p>            for (let os of offerSeasons) {\n                \/\/ ===== \u041e\u0421\u041d\u041e\u0412\u041d\u0410\u042f \u0418\u041d\u0424\u041e\u0420\u041c\u0410\u0426\u0418\u042f =====\n                let hotelName = os.querySelector('Hotel')?.textContent?.trim() || \"\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043e\u0442\u0435\u043b\u044c\";\n                let stars = os.querySelector('IdStar')?.textContent?.trim() || \"3*\";\n                stars = parseInt(stars.replace('*', '')) || 3;<\/p>\n<p>                let resort = \"\u0421\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0439 \u0431\u0435\u0440\u0435\u0433\";\n                const market = os.querySelector('Market')?.textContent?.trim();\n                if (market && market !== \"ALL MARKETS\") resort = market;<\/p>\n<p>                \/\/ ===== \u041f\u0418\u0422\u0410\u041d\u0418\u0415 =====\n                let board = \"BB\";\n                const firstBoard = os.querySelector('season_price IdBoard')?.textContent?.trim();\n                if (firstBoard) board = firstBoard;\n                if (board === \"BO\") board = \"BO\";\n                if (board === \"All Inclusive\") board = \"All Inclusive\";<\/p>\n<p>                \/\/ ===== \u0410\u041a\u0426\u0418\u0418: \u0411\u0415\u0421\u041f\u041b\u0410\u0422\u041d\u042b\u0415 \u041d\u041e\u0427\u0418 =====\n                let freeNights = 0;\n                const extrasGroup = os.querySelector('extras_group');\n                if (extrasGroup) {\n                    const extras = extrasGroup.querySelectorAll('extras');\n                    for (let ex of extras) {\n                        const fromDays = parseInt(ex.querySelector('FromDays')?.textContent) || 0;\n                        const toDays = parseInt(ex.querySelector('ToDays')?.textContent) || 0;\n                        const freeDays = parseInt(ex.querySelector('FreeDays')?.textContent) || 0;\n                        if (NIGHTS >= fromDays && NIGHTS <= toDays &#038;&#038; freeDays > 0) {\n                            freeNights = freeDays;\n                        }\n                    }\n                }<\/p>\n<p>                \/\/ ===== \u0414\u0410\u0422\u042b \u0421\u0415\u0417\u041e\u041d\u041e\u0412 =====\n                const seasons = {};\n                const seasonTags = os.querySelectorAll('season');\n                for (let st of seasonTags) {\n                    const no = st.querySelector('No')?.textContent;\n                    const from = st.querySelector('FromDate')?.textContent;\n                    const to = st.querySelector('ToDate')?.textContent;\n                    if (no && from && to) {\n                        seasons[no] = { from, to };\n                    }\n                }<\/p>\n<p>                \/\/ ===== \u0426\u0415\u041d\u042b =====\n                const seasonPrices = os.querySelectorAll('season_price');<\/p>\n<p>                for (let sp of seasonPrices) {\n                    const roomName = sp.querySelector('IdRoom')?.textContent?.trim() || \"Standard\";<\/p>\n<p>                    let adults = 0, children = 0;\n                    const adt = sp.querySelector('adt')?.textContent;\n                    const chd = sp.querySelector('chd')?.textContent;\n                    if (adt) adults = parseInt(adt);\n                    if (chd) children = parseInt(chd);<\/p>\n<p>                    if (adults === 0 && children === 0) continue;<\/p>\n<p>                    const persText = sp.querySelector('pers')?.textContent || `${adults} Adults, ${children} Children`;<\/p>\n<p>                    for (let s = 1; s <= 5; s++) {\n                        const priceElem = sp.querySelector(`season${s}`);\n                        if (priceElem) {\n                            let pricePerNight = parseFloat(priceElem.textContent);\n                            if (pricePerNight > 0) {\n                                const finalPrice = calculateFinalPrice(pricePerNight, freeNights, adults, children);<\/p>\n<p>                                let seasonName = `\u0421\u0435\u0437\u043e\u043d ${s}`;\n                                if (seasons[s]) {\n                                    seasonName = `${seasons[s].from} \u2192 ${seasons[s].to}`;\n                                }<\/p>\n<p>                                results.push({\n                                    hotel: hotelName,\n                                    stars: stars,\n                                    resort: resort,\n                                    board: board,\n                                    roomName: roomName,\n                                    viewName: persText,\n                                    adults: adults,\n                                    children: children,\n                                    season: s,\n                                    seasonName: seasonName,\n                                    pricePerNight: pricePerNight,\n                                    finalPrice: finalPrice,\n                                    freeNights: freeNights\n                                });\n                            }\n                        }\n                    }\n                }\n            }\n        }<\/p>\n<p>        return results;\n    }<\/p>\n<p>    \/\/ =====================================================\n    \/\/ \u0413\u0420\u0423\u041f\u041f\u0418\u0420\u041e\u0412\u041a\u0410 \u041f\u041e \u041e\u0422\u0415\u041b\u042f\u041c\n    \/\/ =====================================================\n    function groupByHotel(prices) {\n        const grouped = new Map();<\/p>\n<p>        for (let item of prices) {\n            const key = `${item.hotel}|${item.stars}|${item.resort}|${item.board}`;<\/p>\n<p>            if (!grouped.has(key)) {\n                grouped.set(key, {\n                    name: item.hotel,\n                    stars: item.stars,\n                    resort: item.resort,\n                    board: item.board,\n                    rooms: []\n                });\n            }<\/p>\n<p>            const hotel = grouped.get(key);\n            const roomExists = hotel.rooms.some(r => \n                r.name === item.roomName && \n                r.adults === item.adults && \n                r.children === item.children\n            );<\/p>\n<p>            if (!roomExists) {\n                hotel.rooms.push({\n                    name: item.roomName,\n                    view: item.viewName,\n                    adults: item.adults,\n                    children: item.children,\n                    price: item.finalPrice,\n                    freeNights: item.freeNights\n                });\n            }\n        }<\/p>\n<p>        return Array.from(grouped.values());\n    }<\/p>\n<p>    \/\/ =====================================================\n    \/\/ \u0417\u0410\u0413\u0420\u0423\u0417\u041a\u0410 XML (\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432)\n    \/\/ =====================================================\n    let filesProcessed = 0;\n    let totalFiles = 0;<\/p>\n<p>    function loadXMLFiles(files) {\n        allPrices = [];\n        filesProcessed = 0;\n        totalFiles = files.length;<\/p>\n<p>        const fileInfo = document.getElementById('fileInfo');\n        fileInfo.innerHTML = `&#x23f3; \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e 0 \u0438\u0437 ${totalFiles} \u0444\u0430\u0439\u043b\u043e\u0432...`;\n        fileInfo.style.display = 'block';\n        fileInfo.style.background = '#fff3cd';\n        fileInfo.style.color = '#856404';<\/p>\n<p>        for (let file of files) {\n            const reader = new FileReader();\n            reader.onload = function(e) {\n                try {\n                    const parsed = parseXML(e.target.result, file.name);\n                    allPrices.push(...parsed);\n                    filesProcessed++;\n                    fileInfo.innerHTML = `&#x23f3; \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e ${filesProcessed} \u0438\u0437 ${totalFiles} \u0444\u0430\u0439\u043b\u043e\u0432... \u041d\u0430\u0439\u0434\u0435\u043d\u043e ${allPrices.length} \u043f\u043e\u0437\u0438\u0446\u0438\u0439`;<\/p>\n<p>                    if (filesProcessed === totalFiles) {\n                        finishLoading();\n                    }\n                } catch(err) {\n                    console.error(err);\n                    filesProcessed++;\n                    if (filesProcessed === totalFiles) {\n                        finishLoading();\n                    }\n                }\n            };\n            reader.readAsText(file, 'UTF-8');\n        }\n    }<\/p>\n<p>    function finishLoading() {\n        if (allPrices.length === 0) {\n            document.getElementById('fileInfo').innerHTML = '&#x26a0;&#xfe0f; \u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0446\u0435\u043d\u044b. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 XML \u0444\u0430\u0439\u043b\u044b.';\n            document.getElementById('fileInfo').style.background = '#ffebee';\n            document.getElementById('fileInfo').style.color = '#c62828';\n            return;\n        }<\/p>\n<p>        hotelsData = groupByHotel(allPrices);<\/p>\n<p>        document.getElementById('fileInfo').innerHTML = `&#x2705; \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e ${hotelsData.length} \u043e\u0442\u0435\u043b\u0435\u0439, ${allPrices.length} \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u043e\u043c\u0435\u0440\u043e\u0432.`;\n        document.getElementById('fileInfo').style.background = '#e8f5e9';\n        document.getElementById('fileInfo').style.color = '#2e7d32';<\/p>\n<p>        document.getElementById('formulaPanel').style.display = 'block';\n        document.getElementById('datesBlock').style.display = 'block';\n        document.getElementById('filtersSection').style.display = 'block';\n        document.getElementById('formCard').style.display = 'block';<\/p>\n<p>        initFilters();\n        renderDates();\n        renderHotels();\n    }<\/p>\n<p>    \/\/ =====================================================\n    \/\/ \u0414\u0410\u0422\u042b \u0412\u042b\u041b\u0415\u0422\u0410\n    \/\/ =====================================================\n    const FLIGHT_DATES = [\n        \"06.07 \u2013 15.07\", \"13.07 \u2013 22.07\", \"20.07 \u2013 29.07\", \"27.07 \u2013 05.08\",\n        \"03.08 \u2013 12.08\", \"10.08 \u2013 19.08\", \"17.08 \u2013 26.08\", \"24.08 \u2013 02.09\", \"31.08 \u2013 09.09\"\n    ];\n    let selectedDateIndex = 0;<\/p>\n<p>    function renderDates() {\n        const container = document.getElementById('datesGrid');\n        container.innerHTML = '';\n        FLIGHT_DATES.forEach((date, idx) => {\n            const badge = document.createElement('div');\n            badge.className = `date-badge ${idx === selectedDateIndex ? 'active' : ''}`;\n            badge.innerText = date;\n            badge.onclick = () => {\n                selectedDateIndex = idx;\n                renderDates();\n                renderHotels();\n            };\n            container.appendChild(badge);\n        });\n    }<\/p>\n<p>    function getStarsHtml(stars) {\n        return '\u2605'.repeat(stars) + '\u2606'.repeat(5 - stars);\n    }<\/p>\n<p>    function getBoardName(board) {\n        const map = { 'BB': '\u0417\u0430\u0432\u0442\u0440\u0430\u043a', 'HB': '\u041f\u043e\u043b\u0443\u043f\u0430\u043d\u0441\u0438\u043e\u043d', 'BO': '\u0411\u0435\u0437 \u043f\u0438\u0442\u0430\u043d\u0438\u044f', 'All Inclusive': 'All Inclusive' };\n        return map[board] || board;\n    }<\/p>\n<p>    function renderHotels() {\n        const hotelFilter = document.getElementById('filterHotel').value;\n        const starsFilter = document.getElementById('filterStars').value;\n        const boardFilter = document.getElementById('filterBoard').value;\n        const guestsFilter = document.getElementById('filterGuests').value;<\/p>\n<p>        let filtered = hotelsData.filter(hotel => {\n            if (hotelFilter !== 'all' && hotel.name !== hotelFilter) return false;\n            if (starsFilter !== 'all' && hotel.stars != starsFilter) return false;\n            if (boardFilter !== 'all' && hotel.board !== boardFilter) return false;\n            return true;\n        });<\/p>\n<p>        let results = [];\n        for (let hotel of filtered) {\n            let availableRooms = hotel.rooms.filter(room => {\n                if (guestsFilter === 'all') return true;\n                if (guestsFilter === '1' && room.adults === 1 && room.children === 0) return true;\n                if (guestsFilter === '2' && room.adults === 2 && room.children === 0) return true;\n                if (guestsFilter === '3' && room.adults === 3 && room.children === 0) return true;\n                if (guestsFilter === '1+1' && room.adults === 1 && room.children === 1) return true;\n                if (guestsFilter === '2+1' && room.adults === 2 && room.children === 1) return true;\n                if (guestsFilter === '2+2' && room.adults === 2 && room.children === 2) return true;\n                return false;\n            });\n            if (availableRooms.length > 0) {\n                results.push({ ...hotel, availableRooms });\n            }\n        }<\/p>\n<p>        document.getElementById('hotelsCount').innerText = `${results.length} ${getDeclension(results.length)}`;<\/p>\n<p>        const hotelsGrid = document.getElementById('hotelsGrid');\n        if (results.length === 0) {\n            hotelsGrid.innerHTML = '<\/p>\n<div class=\"empty-hotels\">&#x1f614; \u041d\u0435\u0442 \u043e\u0442\u0435\u043b\u0435\u0439 \u043f\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c<\/div>\n<p>';\n            return;\n        }<\/p>\n<p>        let html = '';\n        for (let hotel of results) {\n            let roomsHtml = '';\n            for (let room of hotel.availableRooms) {\n                const freeBadge = room.freeNights > 0 ? `<span class=\"free-badge\">&#x1f381; +${room.freeNights} \u043d\u043e\u0447\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e!<\/span>` : '';\n                roomsHtml += `<\/p>\n<div class=\"room-item\">\n<div class=\"room-name\">&#x1f6cf;&#xfe0f; ${room.name} ${freeBadge}<\/div>\n<div class=\"room-view\">&#x1f441;&#xfe0f; ${room.view}<\/div>\n<div class=\"room-guests\">&#x1f465; ${room.adults} \u0432\u0437\u0440 + ${room.children} \u0434\u0435\u0442<\/div>\n<div class=\"room-price\">\n<div><span class=\"price-value\">${room.price} \u20ac<\/span> <span style=\"font-size:0.7rem;\">\u0437\u0430 9 \u043d\u043e\u0447\u0435\u0439<\/span><\/div>\n<p>                            <button class=\"select-hotel-btn\" onclick=\"selectHotel('${escapeHtml(hotel.name)}', '${escapeHtml(room.name)}', ${room.price}, ${room.adults}, ${room.children})\">&#x2705; \u0412\u044b\u0431\u0440\u0430\u0442\u044c<\/button>\n                        <\/p><\/div><\/div>\n<p>                `;\n            }\n            html += `<\/p>\n<div class=\"hotel-card\">\n<div class=\"hotel-img\">\n<div class=\"hotel-icon\">&#x1f3e8;<\/div>\n<p>                        <span class=\"flight-badge\">&#x2708;&#xfe0f; \u041f\u0440\u044f\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u043b\u0451\u0442 + \u0442\u0440\u0430\u043d\u0441\u0444\u0435\u0440<\/span>\n                    <\/p><\/div>\n<div class=\"hotel-info\">\n<div class=\"hotel-name\">${escapeHtml(hotel.name)}<\/div>\n<div class=\"hotel-stars\">${getStarsHtml(hotel.stars)}<\/div>\n<div class=\"hotel-resort\">&#x1f4cd; ${escapeHtml(hotel.resort)}<\/div>\n<div class=\"hotel-board\">&#x1f37d;&#xfe0f; ${getBoardName(hotel.board)}<\/div>\n<p>                        ${roomsHtml}\n                    <\/p><\/div><\/div>\n<p>            `;\n        }\n        hotelsGrid.innerHTML = html;\n    }<\/p>\n<p>    function getDeclension(n) {\n        if (n % 10 === 1 && n % 100 !== 11) return '\u043e\u0442\u0435\u043b\u044c';\n        if (n % 10 >= 2 && n % 10 <= 4 &#038;&#038; (n % 100 < 10 || n % 100 >= 20)) return '\u043e\u0442\u0435\u043b\u044f';\n        return '\u043e\u0442\u0435\u043b\u0435\u0439';\n    }<\/p>\n<p>    function escapeHtml(text) {\n        if (!text) return '';\n        const div = document.createElement('div');\n        div.textContent = text;\n        return div.innerHTML;\n    }<\/p>\n<p>    window.selectHotel = function(hotelName, roomName, price, adults, children) {\n        selectedHotel = hotelName;\n        selectedRoom = roomName;\n        selectedPrice = price;\n        const display = document.getElementById('selectedHotelDisplay');\n        display.style.display = 'block';\n        document.getElementById('selectedHotelName').innerText = hotelName;\n        document.getElementById('selectedRoomName').innerText = `${roomName} (${adults} \u0432\u0437\u0440 + ${children} \u0434\u0435\u0442)`;\n        document.getElementById('selectedRoomPrice').innerText = price;\n        document.getElementById('formCard').scrollIntoView({ behavior: 'smooth', block: 'start' });\n    };<\/p>\n<p>    window.resetFilters = function() {\n        document.getElementById('filterHotel').value = 'all';\n        document.getElementById('filterStars').value = 'all';\n        document.getElementById('filterBoard').value = 'all';\n        document.getElementById('filterGuests').value = 'all';\n        renderHotels();\n    };<\/p>\n<p>    function initFilters() {\n        const hotels = [...new Set(hotelsData.map(h => h.name))];\n        const starsSet = [...new Set(hotelsData.map(h => h.stars))].sort((a,b) => a-b);\n        const boardSet = [...new Set(hotelsData.map(h => h.board))];<\/p>\n<p>        const hotelSelect = document.getElementById('filterHotel');\n        hotels.forEach(h => {\n            const opt = document.createElement('option');\n            opt.value = h;\n            opt.textContent = h;\n            hotelSelect.appendChild(opt);\n        });<\/p>\n<p>        const starsSelect = document.getElementById('filterStars');\n        starsSet.forEach(s => {\n            const opt = document.createElement('option');\n            opt.value = s;\n            opt.textContent = '\u2605'.repeat(s) + ' \u2606'.repeat(5-s);\n            starsSelect.appendChild(opt);\n        });<\/p>\n<p>        const boardSelect = document.getElementById('filterBoard');\n        boardSet.forEach(b => {\n            const opt = document.createElement('option');\n            opt.value = b;\n            opt.textContent = getBoardName(b);\n            boardSelect.appendChild(opt);\n        });<\/p>\n<p>        document.getElementById('filterHotel').addEventListener('change', renderHotels);\n        document.getElementById('filterStars').addEventListener('change', renderHotels);\n        document.getElementById('filterBoard').addEventListener('change', renderHotels);\n        document.getElementById('filterGuests').addEventListener('change', renderHotels);\n    }<\/p>\n<p>    \/\/ =====================================================\n    \/\/ TELEGRAM \u041e\u0422\u041f\u0420\u0410\u0412\u041a\u0410\n    \/\/ =====================================================\n    const BOT_TOKEN = '8976489216:AAH6vm4v7kU3mwgYxkozcYH_K59JpfEEOBs';\n    const CHAT_ID = '-5247212886';<\/p>\n<p>    document.getElementById('bookingForm').addEventListener('submit', async function(e) {\n        e.preventDefault();<\/p>\n<p>        const name = document.getElementById('name').value.trim();\n        const phone = document.getElementById('phone').value.trim();\n        const email = document.getElementById('email').value.trim();\n        const childrenAges = document.getElementById('childrenAges').value.trim();\n        const comment = document.getElementById('comment').value.trim();<\/p>\n<p>        if (!name || !phone || !email) {\n            showStatus('&#x26a0;&#xfe0f; \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0438\u043c\u044f \u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d', 'error');\n            return;\n        }<\/p>\n<p>        const selectedDate = FLIGHT_DATES[selectedDateIndex];\n        const hotelInfo = selectedHotel ? `&#x1f3e8; \u041e\u0442\u0435\u043b\u044c: ${selectedHotel}\\n&#x1f6cf;&#xfe0f; \u041d\u043e\u043c\u0435\u0440: ${selectedRoom}\\n&#x1f4b0; \u0426\u0435\u043d\u0430: ${selectedPrice} \u20ac` : '&#x1f3e8; \u041e\u0442\u0435\u043b\u044c \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d';<\/p>\n<p>        const message = `&#x2708;&#xfe0f; \u041d\u041e\u0412\u0410\u042f \u0417\u0410\u042f\u0412\u041a\u0410: \u0411\u041e\u041b\u0413\u0410\u0420\u0418\u042f<\/p>\n<p>&#x1f464; \u0418\u043c\u044f: ${name}\n&#x1f4de; \u0422\u0435\u043b\u0435\u0444\u043e\u043d: ${phone}\n&#x1f4e7; Email: ${email}<\/p>\n<p>${hotelInfo}\n&#x1f4c5; \u0414\u0430\u0442\u044b: ${selectedDate}\n&#x1f476; \u0412\u043e\u0437\u0440\u0430\u0441\u0442 \u0434\u0435\u0442\u0435\u0439: ${childrenAges || '\u043d\u0435\u0442'}\n&#x1f4dd; \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439: ${comment || '\u043d\u0435\u0442'}<\/p>\n<p>&#x23f0; \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e: ${new Date().toLocaleString('ru-RU')}`;<\/p>\n<p>        const submitBtn = document.querySelector('button[type=\"submit\"]');\n        submitBtn.disabled = true;\n        submitBtn.innerHTML = '&#x23f3; \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430...';<\/p>\n<p>        try {\n            const response = await fetch(`https:\/\/api.telegram.org\/bot${BOT_TOKEN}\/sendMessage`, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application\/json' },\n                body: JSON.stringify({ chat_id: CHAT_ID, text: message })\n            });\n            if (response.ok) {\n                showStatus('&#x2705; \u0417\u0430\u044f\u0432\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430! \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441\u0432\u044f\u0436\u0435\u0442\u0441\u044f \u0441 \u0432\u0430\u043c\u0438', 'success');\n                document.getElementById('bookingForm').reset();\n                document.getElementById('selectedHotelDisplay').style.display = 'none';\n                selectedHotel = null;\n            } else {\n                showStatus('&#x274c; \u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438', 'error');\n            }\n        } catch(err) {\n            showStatus('&#x274c; \u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f', 'error');\n        } finally {\n            submitBtn.disabled = false;\n            submitBtn.innerHTML = '&#x1f30a; \u041e\u0422\u041f\u0420\u0410\u0412\u0418\u0422\u042c \u0417\u0410\u042f\u0412\u041a\u0423';\n        }\n    });<\/p>\n<p>    function showStatus(text, type) {\n        const div = document.getElementById('statusMsg');\n        div.textContent = text;\n        div.className = `status ${type}`;\n        div.style.display = 'block';\n        setTimeout(() => { div.style.display = 'none'; }, 5000);\n    }<\/p>\n<p>    \/\/ =====================================================\n    \/\/ DRAG & DROP\n    \/\/ =====================================================\n    const uploadArea = document.getElementById('uploadArea');\n    const fileInput = document.getElementById('fileInput');<\/p>\n<p>    uploadArea.addEventListener('click', () => fileInput.click());\n    uploadArea.addEventListener('dragover', (e) => {\n        e.preventDefault();\n        uploadArea.style.background = '#fff0e6';\n    });\n    uploadArea.addEventListener('dragleave', () => {\n        uploadArea.style.background = '#fffaf5';\n    });\n    uploadArea.addEventListener('drop', (e) => {\n        e.preventDefault();\n        uploadArea.style.background = '#fffaf5';\n        const files = e.dataTransfer.files;\n        if (files.length > 0) {\n            const xmlFiles = Array.from(files).filter(f => f.name.endsWith('.xml'));\n            if (xmlFiles.length > 0) {\n                loadXMLFiles(xmlFiles);\n            } else {\n                alert('\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 XML \u0444\u0430\u0439\u043b\u044b');\n            }\n        }\n    });<\/p>\n<p>    fileInput.addEventListener('change', (e) => {\n        if (e.target.files.length) {\n            const xmlFiles = Array.from(e.target.files).filter(f => f.name.endsWith('.xml'));\n            if (xmlFiles.length > 0) {\n                loadXMLFiles(xmlFiles);\n            } else {\n                alert('\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 XML \u0444\u0430\u0439\u043b\u044b');\n            }\n        }\n    });\n<br \/>\n<br \/>\n<\/p>\n","protected":false},"excerpt":{"rendered":"\u042d\u043a\u0441\u043f\u0435\u0440\u0442\u0422\u0443\u0440 | \u0422\u0443\u0440\u044b \u0432 \u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044e 2026 | \u0412\u044b\u043b\u0435\u0442 \u0438\u0437 \u0412\u0430\u0440\u0448\u0430\u0432\u044b &#x1f1e7;&#x1f1ec; \u042d\u041a\u0421\u041f\u0415\u0420\u0422\u0422\u0423\u0420 &#x2708;&#xfe0f; \u0410\u0432\u0438\u0430\u0442\u0443\u0440 \u0432 \u0411\u043e\u043b\u0433\u0430\u0440\u0438\u044e \u0438\u0437 \u0412\u0430\u0440\u0448\u0430\u0432\u044b &#x1f4c1; \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 XML \u0444\u0430\u0439\u043b\u044b \u0441 \u0446\u0435\u043d\u0430\u043c\u0438 \u043e\u0442 \u0442\u0443\u0440\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u044e\u0434\u0430 \u0438\u043b\u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 (\u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e) &#x1f4d0; \u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0440\u0430\u0441\u0447\u0451\u0442\u0430: \u2460 \u0426\u0435\u043d\u0430 \u0442\u0443\u0440\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0437\u0430 1 \u043d\u043e\u0447\u044c \u2192 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u043d\u0430 9 \u043d\u043e\u0447\u0435\u0439 \u2461 \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0430\u043a\u0446\u0438\u0438 (\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043d\u043e\u0447\u0438 \u0438\u0437 XML) \u2462 \u041d\u0430\u0446\u0435\u043d\u043a\u0430 +3% \u2192 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u0412\u0412\u0415\u0420\u0425 \u2463 \u0422\u0440\u0430\u043d\u0441\u0444\u0435\u0440: 140 \u20ac \u043d\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 (\u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e) \u2464 \u041f\u0440\u0438\u0431\u044b\u043b\u044c: 40 \u20ac \u0437\u0430 \u0432\u0437\u0440\u043e\u0441\u043b\u043e\u0433\u043e, 30 \u20ac \u0437\u0430 \u0440\u0435\u0431\u0451\u043d\u043a\u0430 &#x1f4c5; \u0412\u042b\u0411\u0415\u0420\u0418\u0422\u0415 \u0414\u0410\u0422\u0423 \u0412\u042b\u041b\u0415\u0422\u0410 (9 \u043d\u043e\u0447\u0435\u0439) &#x1f3e8; \u041e\u0422\u0415\u041b\u042c\u0412\u0441\u0435 \u043e\u0442\u0435\u043b\u0438 &#x2b50; \u0417\u0412\u0415\u0417\u0414\u042b\u0412\u0441\u0435 \u0437\u0432\u0435\u0437\u0434\u044b &#x1f37d; \u041f\u0418\u0422\u0410\u041d\u0418\u0415\u0412\u0441\u0435 \u0442\u0438\u043f\u044b &#x1f465; \u0413\u041e\u0421\u0422\u0418\u0412\u0441\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b1 \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u04392 \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u04453 \u0432\u0437\u0440\u043e\u0441\u043b\u044b\u04451+12+12+2 &#x1f504; \u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c 0 \u043e\u0442\u0435\u043b\u0435\u0439 &#x1f4cb; \u0417\u0410\u0411\u0420\u041e\u041d\u0418\u0420\u041e\u0412\u0410\u0422\u042c \u0422\u0423\u0420 &#x1f3e8; \u041e\u0442\u0435\u043b\u044c: &#x1f6cf;&#xfe0f; &#x1f4b0; \u20ac \u0437\u0430 9 \u043d\u043e\u0447\u0435\u0439 &#x2705; \u0412 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e: &#x1f3e8; 9 \u043d\u043e\u0447\u0435\u0439 + &#x1f690; \u0422\u0440\u0430\u043d\u0441\u0444\u0435\u0440 \u0413\u0440\u043e\u0434\u043d\u043e\u2013\u0412\u0430\u0440\u0448\u0430\u0432\u0430\u2013\u0413\u0440\u043e\u0434\u043d\u043e (140\u20ac \u043d\u0430 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430) &#x1f68c; \u0422\u0440\u0430\u043d\u0441\u0444\u0435\u0440 \u0411\u0443\u0440\u0433\u0430\u0441\u2013\u043e\u0442\u0435\u043b\u044c\u2013\u0411\u0443\u0440\u0433\u0430\u0441 + &#x2708;&#xfe0f; \u0410\u0432\u0438\u0430\u043f\u0435\u0440\u0435\u043b\u0451\u0442 \u0418\u043c\u044f \u0422\u0435\u043b\u0435\u0444\u043e\u043d Email \u0412\u043e\u0437\u0440\u0430\u0441\u0442 \u0434\u0435\u0442\u0435\u0439 \u041f\u043e\u0436\u0435\u043b\u0430\u043d\u0438\u044f &#x1f30a; \u041e\u0422\u041f\u0420\u0410\u0412\u0418\u0422\u042c \u0417\u0410\u042f\u0412\u041a\u0423 &#x1f4cd; \u041c\u043e\u0441\u0442\u043e\u0432\u0430\u044f 31, \u043e\u0444\u0438\u0441 28.1, \u0413\u0440\u043e\u0434\u043d\u043e&#x1f4de; +375 29 782-14-27 &#x1f30a; \u0422\u0412\u041e\u0419 \u041e\u0422\u041f\u0423\u0421\u041a. \u0422\u0412\u041e\u0418 \u0412\u041f\u0415\u0427\u0410\u0422\u041b\u0415\u041d\u0418\u042f. \u0422\u0412\u041e\u0401 \u041b\u0415\u0422\u041e! let allPrices = []; let hotelsData = []; let selectedHotel = null; let selectedRoom = null; let selectedPrice = 0; \/\/ ===================================================== \/\/ \u0424\u0423\u041d\u041a\u0426\u0418\u042f \u0420\u0410\u0421\u0427\u0401\u0422\u0410 (\u0421 \u0423\u0427\u0401\u0422\u041e\u041c \u0411\u0415\u0421\u041f\u041b\u0410\u0422\u041d\u042b\u0425 \u041d\u041e\u0427\u0415\u0419) \/\/ ===================================================== function calculateFinalPrice(pricePerNight, freeNights, adults, children) { const paidNights = Math.max(0, NIGHTS &#8211; freeNights); const hotelCost = pricePerNight * paidNights; const afterMarkup = hotelCost * (1 + MARKUP \/ 100); const afterRound = Math.ceil(afterMarkup); const totalPersons = adults + children; const transfer = TRANSFER_PER_PERSON * totalPersons; const profit = (adults * PROFIT_ADULT) + (children * PROFIT_CHILD); return afterRound + transfer + profit; } \/\/ ===================================================== \/\/ \u041f\u0410\u0420\u0421\u0415\u0420 XML \/\/ ===================================================== function parseXML(xmlString, fileName) { const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlString, &#8220;text\/xml&#8221;); if (xmlDoc.querySelector(&#8216;parsererror&#8217;)) { console.warn(`\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 ${fileName}`); return []; } const results = []; const offers = xmlDoc.querySelectorAll(&#8216;offer&#8217;); for (let offer of offers) { const offerSeasons = offer.querySelectorAll(&#8216;offer_season&#8217;); for (let os of offerSeasons) { \/\/ ===== \u041e\u0421\u041d\u041e\u0412\u041d\u0410\u042f \u0418\u041d\u0424\u041e\u0420\u041c\u0410\u0426\u0418\u042f ===== let hotelName = os.querySelector(&#8216;Hotel&#8217;)?.textContent?.trim() || &#8220;\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043e\u0442\u0435\u043b\u044c&#8221;; let stars = os.querySelector(&#8216;IdStar&#8217;)?.textContent?.trim() || &#8220;3*&#8221;; stars = parseInt(stars.replace(&#8216;*&#8217;, &#8221;)) || 3; let resort = &#8220;\u0421\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0439 \u0431\u0435\u0440\u0435\u0433&#8221;; const market = os.querySelector(&#8216;Market&#8217;)?.textContent?.trim(); if (market &#038;&#038; market !== &#8220;ALL MARKETS&#8221;) resort = market; \/\/ ===== \u041f\u0418\u0422\u0410\u041d\u0418\u0415 ===== let board = &#8220;BB&#8221;; const firstBoard = os.querySelector(&#8216;season_price IdBoard&#8217;)?.textContent?.trim(); if (firstBoard) board = firstBoard; if (board === &#8220;BO&#8221;) board = &#8220;BO&#8221;; if (board === &#8220;All Inclusive&#8221;) board = &#8220;All Inclusive&#8221;; \/\/ ===== \u0410\u041a\u0426\u0418\u0418: \u0411\u0415\u0421\u041f\u041b\u0410\u0422\u041d\u042b\u0415 \u041d\u041e\u0427\u0418 ===== let freeNights = 0; const extrasGroup = os.querySelector(&#8216;extras_group&#8217;); if (extrasGroup) { const extras = extrasGroup.querySelectorAll(&#8216;extras&#8217;); for (let ex of extras) { const fromDays = parseInt(ex.querySelector(&#8216;FromDays&#8217;)?.textContent) || 0; const toDays = parseInt(ex.querySelector(&#8216;ToDays&#8217;)?.textContent) || 0; const freeDays = parseInt(ex.querySelector(&#8216;FreeDays&#8217;)?.textContent) || 0; if (NIGHTS >= fromDays &#038;&#038; NIGHTS 0) { freeNights = freeDays; } } } \/\/ ===== \u0414\u0410\u0422\u042b \u0421\u0415\u0417\u041e\u041d\u041e\u0412 ===== const seasons = {}; const seasonTags = os.querySelectorAll(&#8216;season&#8217;); for (let st of seasonTags) { const no = st.querySelector(&#8216;No&#8217;)?.textContent; const from = st.querySelector(&#8216;FromDate&#8217;)?.textContent; const to = st.querySelector(&#8216;ToDate&#8217;)?.textContent; if (no &#038;&#038; from &#038;&#038; to) { seasons[no] = { from, to }; } } \/\/ ===== \u0426\u0415\u041d\u042b ===== const seasonPrices = os.querySelectorAll(&#8216;season_price&#8217;); for (let sp of seasonPrices) { const roomName = sp.querySelector(&#8216;IdRoom&#8217;)?.textContent?.trim() || &#8220;Standard&#8221;; let adults = 0, children = 0; const adt = sp.querySelector(&#8216;adt&#8217;)?.textContent; const chd = sp.querySelector(&#8216;chd&#8217;)?.textContent; if (adt) adults = parseInt(adt); if (chd) children = parseInt(chd); if (adults === 0 &#038;&#038; children === 0) continue; const persText = sp.querySelector(&#8216;pers&#8217;)?.textContent || `${adults} Adults, ${children} Children`; for (let s = 1; s 0) { const finalPrice = calculateFinalPrice(pricePerNight, freeNights, adults, children); let seasonName = `\u0421\u0435\u0437\u043e\u043d ${s}`; if (seasons[s]) { seasonName = `${seasons[s].from} \u2192 ${seasons[s].to}`; } results.push({ hotel: hotelName, stars: stars, resort: resort, board: board, roomName: roomName, viewName: persText, adults: adults, children: children, season: s, seasonName: seasonName, pricePerNight: pricePerNight, finalPrice: finalPrice, freeNights: freeNights }); } } } } } } return results; } \/\/ ===================================================== \/\/ \u0413\u0420\u0423\u041f\u041f\u0418\u0420\u041e\u0412\u041a\u0410 \u041f\u041e \u041e\u0422\u0415\u041b\u042f\u041c \/\/ ===================================================== function groupByHotel(prices) { const grouped = new Map(); for (let item of prices) { const key = `${item.hotel}|${item.stars}|${item.resort}|${item.board}`; if (!grouped.has(key)) { grouped.set(key, { name: item.hotel, stars: item.stars, resort: item.resort, board: item.board, rooms: [] }); } const hotel = grouped.get(key); const roomExists = hotel.rooms.some(r => r.name === item.roomName &#038;&#038; r.adults === item.adults &#038;&#038; r.children === item.children ); if (!roomExists) { hotel.rooms.push({ name: item.roomName, view: item.viewName, adults: item.adults, children: item.children, price: item.finalPrice, freeNights: item.freeNights }); } } return Array.from(grouped.values()); } \/\/ ===================================================== \/\/ \u0417\u0410\u0413\u0420\u0423\u0417\u041a\u0410 XML (\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432) \/\/ ===================================================== let filesProcessed = 0; let totalFiles = 0; function loadXMLFiles(files) { allPrices = []; filesProcessed = 0; totalFiles = files.length; const fileInfo = document.getElementById(&#8216;fileInfo&#8217;); fileInfo.innerHTML = `&#x23f3; \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e 0 \u0438\u0437 ${totalFiles} \u0444\u0430\u0439\u043b\u043e\u0432&#8230;`; fileInfo.style.display = &#8216;block&#8217;; fileInfo.style.background = &#8216;#fff3cd&#8217;; fileInfo.style.color = &#8216;#856404&#8217;; for (let file of files) { const reader = new FileReader(); reader.onload = function(e) { try { const parsed = parseXML(e.target.result, file.name); allPrices.push(&#8230;parsed); filesProcessed++; fileInfo.innerHTML = `&#x23f3; \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e ${filesProcessed} \u0438\u0437 ${totalFiles} \u0444\u0430\u0439\u043b\u043e\u0432&#8230; \u041d\u0430\u0439\u0434\u0435\u043d\u043e ${allPrices.length} \u043f\u043e\u0437\u0438\u0446\u0438\u0439`; if (filesProcessed === totalFiles) { finishLoading(); } } catch(err) { console.error(err); filesProcessed++; if (filesProcessed === totalFiles) { finishLoading(); } } }; reader.readAsText(file, &#8216;UTF-8&#8217;); } } function finishLoading() { if (allPrices.length === 0) { document.getElementById(&#8216;fileInfo&#8217;).innerHTML = &#8216;&#x26a0;&#xfe0f; \u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0446\u0435\u043d\u044b. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 XML \u0444\u0430\u0439\u043b\u044b.&#8217;; document.getElementById(&#8216;fileInfo&#8217;).style.background = &#8216;#ffebee&#8217;; document.getElementById(&#8216;fileInfo&#8217;).style.color = &#8216;#c62828&#8217;; return; } hotelsData = groupByHotel(allPrices); document.getElementById(&#8216;fileInfo&#8217;).innerHTML = `&#x2705; \u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e ${hotelsData.length} \u043e\u0442\u0435\u043b\u0435\u0439, ${allPrices.length} \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u043e\u043c\u0435\u0440\u043e\u0432.`; document.getElementById(&#8216;fileInfo&#8217;).style.background = &#8216;#e8f5e9&#8217;; document.getElementById(&#8216;fileInfo&#8217;).style.color = &#8216;#2e7d32&#8217;; document.getElementById(&#8216;formulaPanel&#8217;).style.display = &#8216;block&#8217;; document.getElementById(&#8216;datesBlock&#8217;).style.display = &#8216;block&#8217;; document.getElementById(&#8216;filtersSection&#8217;).style.display = &#8216;block&#8217;; document.getElementById(&#8216;formCard&#8217;).style.display = &#8216;block&#8217;; initFilters(); renderDates(); renderHotels(); } \/\/ ===================================================== \/\/ \u0414\u0410\u0422\u042b \u0412\u042b\u041b\u0415\u0422\u0410 \/\/ ===================================================== const FLIGHT_DATES = [ &#8220;06.07 \u2013 15.07&#8221;, &#8220;13.07 \u2013 22.07&#8221;, &#8220;20.07 \u2013 29.07&#8221;, &#8220;27.07 \u2013 05.08&#8221;, &#8220;03.08 \u2013 12.08&#8221;, &#8220;10.08 \u2013 19.08&#8221;, &#8220;17.08 \u2013 26.08&#8221;, &#8220;24.08 \u2013 02.09&#8221;, &#8220;31.08 \u2013 09.09&#8243; ]; let selectedDateIndex = 0; function renderDates() { const container = document.getElementById(&#8216;datesGrid&#8217;); container.innerHTML = &#8221;; FLIGHT_DATES.forEach((date, idx) => { const badge = document.createElement(&#8216;div&#8217;); badge.className = `date-badge ${idx === selectedDateIndex ? &#8216;active&#8217; : &#8221;}`; badge.innerText = date; badge.onclick = () => { selectedDateIndex = idx; renderDates(); renderHotels(); }; container.appendChild(badge); }); } function getStarsHtml(stars) { return &#8216;\u2605&#8217;.repeat(stars) + &#8216;\u2606&#8217;.repeat(5 &#8211; stars); } function getBoardName(board) { const map = { &#8216;BB&#8217;: &#8216;\u0417\u0430\u0432\u0442\u0440\u0430\u043a&#8217;, &#8216;HB&#8217;: &#8216;\u041f\u043e\u043b\u0443\u043f\u0430\u043d\u0441\u0438\u043e\u043d&#8217;, &#8216;BO&#8217;: &#8216;\u0411\u0435\u0437 \u043f\u0438\u0442\u0430\u043d\u0438\u044f&#8217;, &#8216;All Inclusive&#8217;: &#8216;All Inclusive&#8217; }; return map[board] || board; [&hellip;]","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/extur.by\/ru\/wp-json\/wp\/v2\/pages\/22760\/"}],"collection":[{"href":"https:\/\/extur.by\/ru\/wp-json\/wp\/v2\/pages\/"}],"about":[{"href":"https:\/\/extur.by\/ru\/wp-json\/wp\/v2\/types\/page\/"}],"author":[{"embeddable":true,"href":"https:\/\/extur.by\/ru\/wp-json\/wp\/v2\/users\/1\/"}],"replies":[{"embeddable":true,"href":"https:\/\/extur.by\/ru\/wp-json\/wp\/v2\/comments\/?post=22760"}],"version-history":[{"count":123,"href":"https:\/\/extur.by\/ru\/wp-json\/wp\/v2\/pages\/22760\/revisions\/"}],"predecessor-version":[{"id":22762,"href":"https:\/\/extur.by\/ru\/wp-json\/wp\/v2\/pages\/22760\/revisions\/22762\/"}],"wp:attachment":[{"href":"https:\/\/extur.by\/ru\/wp-json\/wp\/v2\/media\/?parent=22760"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}