{"id":2066,"date":"2026-09-03T14:43:46","date_gmt":"2026-09-03T14:43:46","guid":{"rendered":"https:\/\/www.kuiavets.com\/?page_id=2066"},"modified":"2026-09-04T00:37:36","modified_gmt":"2026-09-04T00:37:36","slug":"booking-widget","status":"publish","type":"page","link":"https:\/\/www.kuiavets.com\/en\/booking-widget\/","title":{"rendered":"Booking Widget"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2066\" class=\"elementor elementor-2066\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e8aeed3 e-flex e-con-boxed e-con e-parent\" data-id=\"e8aeed3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3edf6e1 elementor-widget elementor-widget-template\" data-id=\"3edf6e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-template\">\n\t\t\t\t\t<div data-elementor-type=\"container\" data-elementor-id=\"2400\" class=\"elementor elementor-2400\" data-elementor-post-type=\"elementor_library\">\n\t\t\t\t<div class=\"elementor-element elementor-element-77e0c543 e-con-full booking-height e-flex e-con e-child\" data-id=\"77e0c543\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3bf02595 booking-ui elementor-widget elementor-widget-shortcode\" data-id=\"3bf02595\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"fcal_cal_wrap fcal-light-mode\">\n    <div class=\"fluent_booking_app\" data-calendar_id=\"1\"\n         data-event_id=\"1\"><\/div>\n    <\/div>\n\n<style>\n    .fcal_phone_wrapper .flag {\n        background: url(https:\/\/www.kuiavets.com\/wp-content\/plugins\/fluent-booking\/assets\/images\/flags_responsive.png) no-repeat;\n        background-size: 100%;\n    }\n<\/style>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-33e1cbe3 elementor-widget elementor-widget-html\" data-id=\"33e1cbe3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n.booking-ui .kb-select-time,\n.booking-ui .kb-enter-details {\n    width: 100% !important;\n    max-width: none !important;\n    flex: none !important;\n\n    margin: 16px 0 0 !important;\n    height: 52px;\n    padding: 0 16px;\n\n    border: 2px solid #E7B494 !important;\n    border-radius: 999px;\n    background: #D9895F;\n    color: #FAFAF7;\n\n    font-family: \"Montserrat\", sans-serif;\n    font-size: 16px;\n    font-weight: 400;\n    line-height: 1;\n\n    cursor: pointer;\n    transition: opacity .18s ease, background-color .18s ease;\n}\n\n.booking-ui .kb-select-time:hover,\n.booking-ui .kb-enter-details:hover {\n    background: #C97C4A;\n}\n\n.booking-ui .kb-select-time:disabled,\n.booking-ui .kb-enter-details:disabled {\n    opacity: .45;\n    cursor: default;\n}\n\n.booking-ui .kb-native-next {\n    display: none !important;\n}\n<\/style>\n\n<script>\n(function () {\n\n    function initBookingCalendar() {\n\n        document\n            .querySelectorAll('.booking-ui .fluent_booking_app')\n            .forEach(function (app) {\n\n                if (app.dataset.kbStableInit === '1') {\n                    return;\n                }\n\n                app.dataset.kbStableInit = '1';\n\n                let selectedDay = null;\n                let selectedSlot = null;\n\n                let selectedDayValue = null;\n                let selectedMonthValue = null;\n                let selectedSlotValue = null;\n\n                let allowNativeDayClick = false;\n                let allowNativeSlotClick = false;\n                let allowNativeDetailsBack = false;\n\n                let syncFrame = null;\n\n                const language =\n                    detectLanguage();\n\n                \/* Language and labels *\/\n                const i18n = {\n                    uk: {\n                        locale: 'uk-UA',\n                        weekdays: [\n                            '\u041d\u0434', '\u041f\u043d', '\u0412\u0442',\n                            '\u0421\u0440', '\u0427\u0442', '\u041f\u0442', '\u0421\u0431'\n                        ],\n                        months: [\n                            '\u0421\u0456\u0447\u0435\u043d\u044c',\n                            '\u041b\u044e\u0442\u0438\u0439',\n                            '\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c',\n                            '\u041a\u0432\u0456\u0442\u0435\u043d\u044c',\n                            '\u0422\u0440\u0430\u0432\u0435\u043d\u044c',\n                            '\u0427\u0435\u0440\u0432\u0435\u043d\u044c',\n                            '\u041b\u0438\u043f\u0435\u043d\u044c',\n                            '\u0421\u0435\u0440\u043f\u0435\u043d\u044c',\n                            '\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c',\n                            '\u0416\u043e\u0432\u0442\u0435\u043d\u044c',\n                            '\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434',\n                            '\u0413\u0440\u0443\u0434\u0435\u043d\u044c'\n                        ],\n                        back: '\u041d\u0430\u0437\u0430\u0434',\n                        selectTimeTitle: '\u041e\u0431\u0435\u0440\u0456\u0442\u044c \u0447\u0430\u0441',\n                        selectTimeButton: '\u041e\u0431\u0440\u0430\u0442\u0438 \u0447\u0430\u0441',\n                        enterDetails: '\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u0434\u0430\u043d\u0456',\n                        confirmBooking: '\u041f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438 \u0437\u0430\u043f\u0438\u0441',\n                        namePlaceholder: \"\u0412\u0430\u0448\u0435 \u0456\u043c'\u044f\",\n                        emailPlaceholder: '\u0420\u043e\u0431\u043e\u0447\u0430 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430 \u043f\u043e\u0448\u0442\u0430',\n                        messagePlaceholder:\n                            '\u0429\u043e \u0441\u0430\u043c\u0435 \u0437\u0430\u0440\u0430\u0437 \u0433\u0430\u043b\u044c\u043c\u0443\u0454 \u0440\u043e\u0437\u0432\u0438\u0442\u043e\u043a \u0432\u0430\u0448\u043e\u0433\u043e \u0431\u0456\u0437\u043d\u0435\u0441\u0443?',\n                        confirmedTitle:\n                            '\u041a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u0446\u0456\u044e \u043f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043d\u043e',\n                        confirmedDescription:\n                            '\u0414\u0435\u0442\u0430\u043b\u0456 \u043f\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0436\u0435\u043d\u043d\u044f \u043d\u0430\u0434\u0456\u0441\u043b\u0430\u043d\u043e \u043d\u0430 \u0432\u0430\u0448\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443 \u043f\u043e\u0448\u0442\u0443.',\n                        date: '\u0414\u0430\u0442\u0430',\n                        time: '\u0427\u0430\u0441',\n                        duration: '\u0422\u0440\u0438\u0432\u0430\u043b\u0456\u0441\u0442\u044c',\n                        minutes: '\u0445\u0432\u0438\u043b\u0438\u043d',\n                        onlineMeeting: '\u041e\u043d\u043b\u0430\u0439\u043d-\u0437\u0443\u0441\u0442\u0440\u0456\u0447',\n                        joinMeeting: '\u041f\u0440\u0438\u0454\u0434\u043d\u0430\u0442\u0438\u0441\u044f',\n                        scheduleAnother:\n                            '\u0417\u0430\u043f\u043b\u0430\u043d\u0443\u0432\u0430\u0442\u0438 \u0456\u043d\u0448\u0443 \u0437\u0443\u0441\u0442\u0440\u0456\u0447',\n                        previousMonth:\n                            '\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043c\u0456\u0441\u044f\u0446\u044c',\n                        nextMonth:\n                            '\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u043c\u0456\u0441\u044f\u0446\u044c',\n                        defaultTimeMode: '24h'\n                    },\n\n                    en: {\n                        locale: 'en-US',\n                        weekdays: [\n                            'Sun', 'Mon', 'Tue',\n                            'Wed', 'Thu', 'Fri', 'Sat'\n                        ],\n                        months: [\n                            'January',\n                            'February',\n                            'March',\n                            'April',\n                            'May',\n                            'June',\n                            'July',\n                            'August',\n                            'September',\n                            'October',\n                            'November',\n                            'December'\n                        ],\n                        back: 'Back',\n                        selectTimeTitle: 'Select a Time',\n                        selectTimeButton: 'Select a Time',\n                        enterDetails: 'Enter Your Details',\n                        confirmBooking: 'Confirm Appointment',\n                        namePlaceholder: 'Your Name',\n                        emailPlaceholder: 'Work Email',\n                        messagePlaceholder:\n                            'What is currently slowing down your business growth?',\n                        confirmedTitle:\n                            'Consultation Confirmed',\n                        confirmedDescription:\n                            'Confirmation details have been sent to your email.',\n                        date: 'Date',\n                        time: 'Time',\n                        duration: 'Duration',\n                        minutes: 'minutes',\n                        onlineMeeting: 'Online Meeting',\n                        joinMeeting: 'Join Meeting',\n                        scheduleAnother:\n                            'Schedule Another Appointment',\n                        previousMonth:\n                            'Previous Month',\n                        nextMonth:\n                            'Next Month',\n                        defaultTimeMode: '12h'\n                    }\n                };\n\n                const t = i18n[language];\n\n                let preferredTimeMode =\n                    t.defaultTimeMode;\n\n                function detectLanguage() {\n\n                    function resolve(\n                        langValue,\n                        pathValue\n                    ) {\n\n                        const lang =\n                            String(\n                                langValue || ''\n                            ).toLowerCase();\n\n                        const path =\n                            String(\n                                pathValue || ''\n                            ).toLowerCase();\n\n                        if (\n                            lang.startsWith('en') ||\n                            \/^\\\/en(?:\\\/|$)\/.test(path)\n                        ) {\n                            return 'en';\n                        }\n\n                        if (\n                            lang.startsWith('uk') ||\n                            lang.startsWith('ua')\n                        ) {\n                            return 'uk';\n                        }\n\n                        return null;\n                    }\n\n                    try {\n\n                        if (\n                            window.parent &&\n                            window.parent !== window\n                        ) {\n\n                            const parentLanguage =\n                                resolve(\n                                    window.parent\n                                        .document\n                                        .documentElement\n                                        .lang,\n                                    window.parent\n                                        .location\n                                        .pathname\n                                );\n\n                            if (parentLanguage) {\n                                return parentLanguage;\n                            }\n                        }\n\n                    } catch (error) {\n\n                    }\n\n                    return (\n                        resolve(\n                            document.documentElement.lang,\n                            window.location.pathname\n                        ) ||\n                        'uk'\n                    );\n                }\n\n                function capitalizeFirst(value) {\n\n                    if (!value) return '';\n\n                    return (\n                        value.charAt(0).toUpperCase() +\n                        value.slice(1)\n                    );\n                }\n\n                function isDetailsStepOpen() {\n\n                    const details =\n                        app.querySelector(\n                            '.fcal_date_event_details.is_active'\n                        );\n\n                    return !!(\n                        details &&\n                        details.querySelector(\n                            '.fcal_booking_form_wrap'\n                        )\n                    );\n                }\n\n                function isSlotStepOpen() {\n\n                    if (isDetailsStepOpen()) {\n                        return false;\n                    }\n\n                    const slotPicker =\n                        app.querySelector(\n                            '.fcal_slot_picker.is_active'\n                        );\n\n                    return !!slotPicker;\n                }\n\n                function rememberSelectedDay(day) {\n\n                    if (!day) return;\n\n                    selectedDayValue =\n                        day.textContent.trim();\n\n                    const monthTitle =\n                        app.querySelector(\n                            '.calendar-month-year h2'\n                        );\n\n                    selectedMonthValue =\n                        monthTitle\n                            ? monthTitle.textContent.trim()\n                            : null;\n                }\n\n                function localizeCalendarUI() {\n\n                    const monthTitle =\n                        app.querySelector(\n                            '.calendar-month-year h2'\n                        );\n\n                    if (monthTitle) {\n\n                        const match =\n                            monthTitle.textContent\n                                .trim()\n                                .match(\n                                    \/^([A-Za-z\u0410-\u042f\u0430-\u044f\u0406\u0456\u0407\u0457\u0404\u0454\u0490\u0491]+)\\s+(\\d{4})$\/\n                                );\n\n                        if (match) {\n\n                            const monthIndex =\n                                getMonthIndex(\n                                    match[1]\n                                );\n\n                            if (monthIndex !== null) {\n\n                                const monthName =\n                                    t.months[\n                                        monthIndex\n                                    ];\n\n                                const yearNode =\n                                    monthTitle\n                                        .querySelector(\n                                            'span'\n                                        );\n\n                                const textNode =\n                                    Array.from(\n                                        monthTitle\n                                            .childNodes\n                                    ).find(\n                                        function (node) {\n                                            return (\n                                                node.nodeType ===\n                                                Node.TEXT_NODE\n                                            );\n                                        }\n                                    );\n\n                                if (textNode) {\n                                    textNode.nodeValue =\n                                        monthName + ' ';\n                                }\n\n                                if (\n                                    yearNode &&\n                                    yearNode\n                                        .textContent\n                                        .trim() !==\n                                        match[2]\n                                ) {\n                                    yearNode.textContent =\n                                        match[2];\n                                }\n                            }\n                        }\n                    }\n\n                    app\n                        .querySelectorAll(\n                            '.calendar .day-name'\n                        )\n                        .forEach(\n                            function (item, index) {\n\n                                if (\n                                    t.weekdays[index] &&\n                                    item.textContent.trim() !==\n                                        t.weekdays[index]\n                                ) {\n                                    item.textContent =\n                                        t.weekdays[index];\n                                }\n                            }\n                        );\n\n                    app\n                        .querySelectorAll(\n                            '.calendar .day[role=\"button\"]'\n                        )\n                        .forEach(function (day) {\n\n                            const value =\n                                day.textContent.trim();\n\n                            if (!value) return;\n\n                            day.setAttribute(\n                                'aria-label',\n                                language === 'uk'\n                                    ? '\u041e\u0431\u0440\u0430\u0442\u0438 \u0434\u0435\u043d\u044c ' +\n                                      value\n                                    : 'Select Day ' +\n                                      value\n                            );\n                        });\n\n                    const previous =\n                        app.querySelector(\n                            '.calendar_nav button[aria-label]'\n                        );\n\n                    const navButtons =\n                        app.querySelectorAll(\n                            '.calendar_nav button'\n                        );\n\n                    if (navButtons[0]) {\n                        navButtons[0].setAttribute(\n                            'aria-label',\n                            t.previousMonth\n                        );\n                    }\n\n                    if (navButtons[1]) {\n                        navButtons[1].setAttribute(\n                            'aria-label',\n                            t.nextMonth\n                        );\n                    }\n\n                    const slotHeader =\n                        app.querySelector(\n                            '.fcal_slot_picker_header'\n                        );\n\n                    if (slotHeader) {\n                        slotHeader.setAttribute(\n                            'data-kb-title',\n                            t.selectTimeTitle\n                        );\n                    }\n\n                    app\n                        .querySelectorAll(\n                            '.fcal_slot_picker .fcal_back button,' +\n                            '.fcal_date_event_details .fcal_back button'\n                        )\n                        .forEach(function (button) {\n\n                            button.setAttribute(\n                                'data-kb-label',\n                                t.back\n                            );\n\n                            button.setAttribute(\n                                'aria-label',\n                                language === 'uk'\n                                    ? '\u041d\u0430\u0437\u0430\u0434'\n                                    : 'Back'\n                            );\n                        });\n\n                    app\n                        .querySelectorAll(\n                            '.fcal_slot_picker_header_action button'\n                        )\n                        .forEach(function (button) {\n\n                            const is24 =\n                                button.textContent\n                                    .trim()\n                                    .startsWith('24');\n\n                            const visibleLabel =\n                                language === 'uk'\n                                    ? (is24 ? '24 \u0433\u043e\u0434' : '12 \u0433\u043e\u0434')\n                                    : (is24 ? '24 hr' : '12 hr');\n\n                            if (\n                                button.textContent.trim() !==\n                                visibleLabel\n                            ) {\n                                button.textContent =\n                                    visibleLabel;\n                            }\n\n                            button.setAttribute(\n                                'aria-label',\n                                language === 'uk'\n                                    ? (\n                                        is24\n                                            ? '24-\u0433\u043e\u0434\u0438\u043d\u043d\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0447\u0430\u0441\u0443'\n                                            : '12-\u0433\u043e\u0434\u0438\u043d\u043d\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0447\u0430\u0441\u0443'\n                                    )\n                                    : (\n                                        is24\n                                            ? '24 hour time format'\n                                            : '12 hour time format'\n                                    )\n                            );\n                        });\n                }\n\n                function getMonthIndex(value) {\n\n                    const normalized =\n                        String(value || '')\n                            .trim()\n                            .toLowerCase();\n\n                    const aliases = {\n                        january: 0,\n                        february: 1,\n                        march: 2,\n                        april: 3,\n                        may: 4,\n                        june: 5,\n                        july: 6,\n                        august: 7,\n                        september: 8,\n                        october: 9,\n                        november: 10,\n                        december: 11,\n\n                        '\u0441\u0456\u0447\u0435\u043d\u044c': 0,\n                        '\u043b\u044e\u0442\u0438\u0439': 1,\n                        '\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c': 2,\n                        '\u043a\u0432\u0456\u0442\u0435\u043d\u044c': 3,\n                        '\u0442\u0440\u0430\u0432\u0435\u043d\u044c': 4,\n                        '\u0447\u0435\u0440\u0432\u0435\u043d\u044c': 5,\n                        '\u043b\u0438\u043f\u0435\u043d\u044c': 6,\n                        '\u0441\u0435\u0440\u043f\u0435\u043d\u044c': 7,\n                        '\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c': 8,\n                        '\u0436\u043e\u0432\u0442\u0435\u043d\u044c': 9,\n                        '\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434': 10,\n                        '\u0433\u0440\u0443\u0434\u0435\u043d\u044c': 11\n                    };\n\n                    return (\n                        Object.prototype\n                            .hasOwnProperty.call(\n                                aliases,\n                                normalized\n                            )\n                            ? aliases[normalized]\n                            : null\n                    );\n                }\n\n                function getCurrentTimeMode() {\n\n                    const active =\n                        Array.from(\n                            app.querySelectorAll(\n                                '.fcal_slot_picker_header_action button'\n                            )\n                        ).find(function (button) {\n\n                            return (\n                                button.getAttribute(\n                                    'aria-pressed'\n                                ) === 'true' ||\n                                button.classList\n                                    .contains('active')\n                            );\n                        });\n\n                    if (!active) {\n                        return preferredTimeMode;\n                    }\n\n                    return (\n                        active.textContent\n                            .trim()\n                            .startsWith('24')\n                            ? '24h'\n                            : '12h'\n                    );\n                }\n\n                function syncTimeFormat() {\n\n                    const buttons =\n                        Array.from(\n                            app.querySelectorAll(\n                                '.fcal_slot_picker_header_action button'\n                            )\n                        );\n\n                    if (!buttons.length) {\n                        return;\n                    }\n\n                    const target =\n                        buttons.find(\n                            function (button) {\n\n                                const text =\n                                    button.textContent\n                                        .trim()\n                                        .toLowerCase();\n\n                                return (\n                                    preferredTimeMode === '24h'\n                                        ? text.startsWith('24')\n                                        : text.startsWith('12')\n                                );\n                            }\n                        );\n\n                    if (\n                        target &&\n                        target.getAttribute(\n                            'aria-pressed'\n                        ) !== 'true' &&\n                        !target.classList\n                            .contains('active')\n                    ) {\n                        target.click();\n                    }\n                }\n\n                function syncConfirmedUI() {\n\n                    const confirmed =\n                        app.querySelector(\n                            '.fcal_booking_confirmed'\n                        );\n\n                    if (!confirmed) {\n                        return;\n                    }\n\n                    const cleanUrl =\n                        new URL(\n                            window.location.href\n                        );\n\n                    [\n                        'fluent-booking',\n                        'type',\n                        'meeting_hash',\n                        'ics'\n                    ].forEach(function (key) {\n                        cleanUrl.searchParams.delete(\n                            key\n                        );\n                    });\n\n                    window.history.replaceState(\n                        {},\n                        '',\n                        cleanUrl.pathname +\n                        cleanUrl.search +\n                        cleanUrl.hash\n                    );\n\n                    const confirmation =\n                        confirmed.querySelector(\n                            '.fcal_confirmation'\n                        );\n\n                    if (!confirmation) {\n                        return;\n                    }\n\n                    if (\n                        confirmed.dataset\n                            .kbConfirmReady === '1'\n                    ) {\n                        return;\n                    }\n\n                    const sections =\n                        Array.from(\n                            confirmation\n                                .querySelectorAll(\n                                    '.fcal_confirm_section'\n                                )\n                        );\n\n                    function findSection(names) {\n\n                        const accepted =\n                            names.map(\n                                function (name) {\n                                    return name\n                                        .toLowerCase();\n                                }\n                            );\n\n                        return sections.find(\n                            function (section) {\n\n                                const title =\n                                    section\n                                        .querySelector(\n                                            'h4'\n                                        );\n\n                                return (\n                                    title &&\n                                    accepted.includes(\n                                        title.textContent\n                                            .trim()\n                                            .toLowerCase()\n                                    )\n                                );\n                            }\n                        );\n                    }\n\n                    const whenSection =\n                        findSection(\n                            ['When', '\u041a\u043e\u043b\u0438']\n                        );\n\n                    const whereSection =\n                        findSection(\n                            ['Where', '\u0414\u0435']\n                        );\n\n                    if (!whenSection) {\n                        return;\n                    }\n\n                    const heading =\n                        confirmation.querySelector(\n                            '.fcal_confirm_header h2'\n                        );\n\n                    const description =\n                        confirmation.querySelector(\n                            '.fcal_confirm_header p'\n                        );\n\n                    if (heading) {\n                        heading.textContent =\n                            t.confirmedTitle;\n                    }\n\n                    if (description) {\n                        description.textContent =\n                            t.confirmedDescription;\n                    }\n\n                    const whenContent =\n                        whenSection.querySelector(\n                            '.fcal_confirm_section_content'\n                        );\n\n                    const rawWhen =\n                        whenContent\n                            ? whenContent\n                                .textContent\n                                .replace(\/\\s+\/g, ' ')\n                                .trim()\n                            : '';\n\n                    let dateText = '';\n                    let timeText = '';\n                    let durationText =\n                        '30 ' + t.minutes;\n\n                    const timeMatch =\n                        rawWhen.match(\n                            \/(\\d{1,2}:\\d{2}(?:\\s*(?:am|pm))?)\\s*-\\s*(\\d{1,2}:\\d{2}(?:\\s*(?:am|pm))?)\/i\n                        );\n\n                    if (timeMatch) {\n\n                        const start =\n                            parseTime(\n                                timeMatch[1]\n                            );\n\n                        const end =\n                            parseTime(\n                                timeMatch[2]\n                            );\n\n                        if (\n                            start !== null &&\n                            end !== null\n                        ) {\n\n                            timeText =\n                                formatMinutes(\n                                    start\n                                ) +\n                                ' \u2013 ' +\n                                formatMinutes(\n                                    end\n                                );\n\n                            let duration =\n                                end - start;\n\n                            if (duration < 0) {\n                                duration +=\n                                    24 * 60;\n                            }\n\n                            durationText =\n                                duration +\n                                ' ' +\n                                t.minutes;\n                        }\n                    }\n\n                    const dateMatch =\n                        rawWhen.match(\n                            \/([A-Za-z\u0410-\u042f\u0430-\u044f\u0406\u0456\u0407\u0457\u0404\u0454\u0490\u0491]+)\\s+(\\d{1,2}),\\s*(\\d{4})\/\n                        );\n\n                    if (dateMatch) {\n\n                        const month =\n                            getMonthIndex(\n                                dateMatch[1]\n                            );\n\n                        const day =\n                            Number(\n                                dateMatch[2]\n                            );\n\n                        const year =\n                            Number(\n                                dateMatch[3]\n                            );\n\n                        if (month !== null) {\n\n                            const date =\n                                new Date(\n                                    year,\n                                    month,\n                                    day\n                                );\n\n                            dateText =\n                                formatDateObject(\n                                    date\n                                );\n                        }\n                    }\n\n                    const summary =\n                        document.createElement(\n                            'div'\n                        );\n\n                    summary.className =\n                        'kb-confirm-summary';\n\n                    const left =\n                        document.createElement(\n                            'div'\n                        );\n\n                    left.className =\n                        'kb-confirm-left';\n\n                    function addItem(\n                        label,\n                        value\n                    ) {\n\n                        const item =\n                            document\n                                .createElement(\n                                    'div'\n                                );\n\n                        item.className =\n                            'kb-confirm-item';\n\n                        const labelEl =\n                            document\n                                .createElement(\n                                    'div'\n                                );\n\n                        labelEl.className =\n                            'kb-confirm-label';\n\n                        labelEl.textContent =\n                            label;\n\n                        const valueEl =\n                            document\n                                .createElement(\n                                    'div'\n                                );\n\n                        valueEl.className =\n                            'kb-confirm-value';\n\n                        valueEl.textContent =\n                            value;\n\n                        item.appendChild(\n                            labelEl\n                        );\n\n                        item.appendChild(\n                            valueEl\n                        );\n\n                        left.appendChild(\n                            item\n                        );\n                    }\n\n                    addItem(\n                        t.date,\n                        dateText || '\u2014'\n                    );\n\n                    addItem(\n                        t.time,\n                        timeText || '\u2014'\n                    );\n\n                    addItem(\n                        t.duration,\n                        durationText\n                    );\n\n                    const right =\n                        document.createElement(\n                            'div'\n                        );\n\n                    right.className =\n                        'kb-confirm-right';\n\n                    if (whereSection) {\n\n                        const whereContent =\n                            whereSection\n                                .querySelector(\n                                    '.fcal_confirm_section_content'\n                                );\n\n                        if (whereContent) {\n\n                            const where =\n                                document\n                                    .createElement(\n                                        'div'\n                                    );\n\n                            where.className =\n                                'kb-confirm-where';\n\n                            const title =\n                                document\n                                    .createElement(\n                                        'div'\n                                    );\n\n                            title.className =\n                                'kb-confirm-where-title';\n\n                            title.textContent =\n                                t.onlineMeeting;\n\n                            const nativeLink =\n                                whereContent\n                                    .querySelector(\n                                        'a'\n                                    );\n\n                            where.appendChild(\n                                title\n                            );\n\n                            if (nativeLink) {\n\n                                const link =\n                                    nativeLink\n                                        .cloneNode(\n                                            true\n                                        );\n\n                                link.textContent =\n                                    t.joinMeeting;\n\n                                where.appendChild(\n                                    link\n                                );\n                            }\n\n                            right.appendChild(\n                                where\n                            );\n                        }\n                    }\n\n                    summary.appendChild(\n                        left\n                    );\n\n                    summary.appendChild(\n                        right\n                    );\n\n                    const body =\n                        confirmation.querySelector(\n                            '.fcal_confirm_body'\n                        );\n\n                    if (body) {\n                        body.before(\n                            summary\n                        );\n                    } else {\n                        confirmation\n                            .appendChild(\n                                summary\n                            );\n                    }\n\n                    let again =\n                        confirmed.querySelector(\n                            '.kb-book-again'\n                        );\n\n                    if (!again) {\n\n                        again =\n                            document\n                                .createElement(\n                                    'button'\n                                );\n\n                        again.type =\n                            'button';\n\n                        again.className =\n                            'kb-book-again';\n\n                        again.textContent =\n                            t.scheduleAnother;\n\n                        again.addEventListener(\n                            'click',\n                            function () {\n\n                                const url =\n                                    new URL(\n                                        window\n                                            .location\n                                            .href\n                                    );\n\n                                [\n                                    'fluent-booking',\n                                    'meeting_hash',\n                                    'type',\n                                    'ics'\n                                ].forEach(\n                                    function (key) {\n                                        url\n                                            .searchParams\n                                            .delete(\n                                                key\n                                            );\n                                    }\n                                );\n\n                                url.hash = '';\n\n                                window.location.href =\n                                    url.toString();\n                            }\n                        );\n\n                        confirmed.appendChild(\n                            again\n                        );\n                    }\n\n                    confirmed.dataset\n                        .kbConfirmReady =\n                        '1';\n                }\n\n                function restoreSelectedDay() {\n\n                    if (!selectedDayValue) return;\n\n                    const monthTitle =\n                        app.querySelector(\n                            '.calendar-month-year h2'\n                        );\n\n                    const currentMonth =\n                        monthTitle\n                            ? monthTitle.textContent.trim()\n                            : null;\n\n                    if (\n                        selectedMonthValue &&\n                        currentMonth &&\n                        selectedMonthValue !== currentMonth\n                    ) {\n                        return;\n                    }\n\n                    let restored =\n                        app.querySelector(\n                            '.calendar .day.day_is_selected'\n                        );\n\n                    if (!restored) {\n\n                        restored =\n                            Array.from(\n                                app.querySelectorAll(\n                                    '.calendar .day.day-enabled'\n                                )\n                            ).find(function (day) {\n\n                                return (\n                                    day.textContent.trim() ===\n                                    selectedDayValue\n                                );\n                            });\n                    }\n\n                    if (!restored) return;\n\n                    app\n                        .querySelectorAll(\n                            '.calendar .day.kb-selected-day'\n                        )\n                        .forEach(function (item) {\n\n                            if (item !== restored) {\n                                item.classList.remove(\n                                    'kb-selected-day'\n                                );\n                            }\n                        });\n\n                    restored.classList.add(\n                        'kb-selected-day'\n                    );\n\n                    selectedDay = restored;\n                }\n\n                function getSelectedDate() {\n\n                    if (\n                        !selectedDayValue ||\n                        !selectedMonthValue\n                    ) {\n                        return null;\n                    }\n\n                    const day =\n                        parseInt(\n                            selectedDayValue,\n                            10\n                        );\n\n                    const match =\n                        selectedMonthValue.match(\n                            \/^([A-Za-z\u0410-\u042f\u0430-\u044f\u0406\u0456\u0407\u0457\u0404\u0454\u0490\u0491]+)\\s+(\\d{4})$\/\n                        );\n\n                    if (!match || !day) {\n                        return null;\n                    }\n\n                    const month =\n                        getMonthIndex(\n                            match[1]\n                        );\n\n                    const year =\n                        Number(\n                            match[2]\n                        );\n\n                    if (month === null) {\n                        return null;\n                    }\n\n                    return new Date(\n                        year,\n                        month,\n                        day\n                    );\n                }\n\n                function formatDateObject(date) {\n\n                    if (!date) {\n                        return '';\n                    }\n\n                    let text =\n                        new Intl.DateTimeFormat(\n                            t.locale,\n                            {\n                                weekday: 'long',\n                                day: 'numeric',\n                                month: 'long',\n                                year: 'numeric'\n                            }\n                        ).format(date);\n\n                    if (language === 'uk') {\n                        text =\n                            text.replace(\n                                \/\\s?\u0440\\.$\/,\n                                ''\n                            );\n                    }\n\n                    return capitalizeFirst(\n                        text\n                    );\n                }\n\n                function formatDate() {\n\n                    return formatDateObject(\n                        getSelectedDate()\n                    );\n                }\n\n                function updateSlotDate() {\n\n                    const dateInfo =\n                        app.querySelector(\n                            '.fcal_slot_date_info'\n                        );\n\n                    if (!dateInfo) return;\n\n                    const text = formatDate();\n\n                    if (\n                        text &&\n                        dateInfo.textContent.trim() !== text\n                    ) {\n                        dateInfo.textContent = text;\n                    }\n                }\n\n                function rememberSelectedSlot(slot) {\n\n                    if (!slot) return;\n\n                    const text =\n                        slot.querySelector(\n                            'span:not(.fcal_sr_only)'\n                        );\n\n                    selectedSlotValue =\n                        text\n                            ? text.textContent.trim()\n                            : slot.textContent.trim();\n                }\n\n                function restoreSelectedSlot() {\n\n                    if (!selectedSlotValue) return;\n\n                    const restored =\n                        Array.from(\n                            app.querySelectorAll(\n                                '.fcal_spot_name'\n                            )\n                        ).find(function (slot) {\n\n                            const text =\n                                slot.querySelector(\n                                    'span:not(.fcal_sr_only)'\n                                );\n\n                            const value =\n                                text\n                                    ? text.textContent.trim()\n                                    : slot.textContent.trim();\n\n                            return value === selectedSlotValue;\n                        });\n\n                    if (!restored) return;\n\n                    app\n                        .querySelectorAll(\n                            '.fcal_spot.kb-selected-slot'\n                        )\n                        .forEach(function (item) {\n                            item.classList.remove(\n                                'kb-selected-slot'\n                            );\n                        });\n\n                    const wrapper =\n                        restored.closest('.fcal_spot');\n\n                    if (wrapper) {\n                        wrapper.classList.add(\n                            'kb-selected-slot'\n                        );\n                    }\n\n                    selectedSlot = restored;\n                }\n\n                \/* Time formatting *\/\n                function parseTime(value) {\n\n                    if (!value) {\n                        return null;\n                    }\n\n                    const normalized =\n                        String(value)\n                            .replace(\/\\u00A0\/g, ' ')\n                            .trim()\n                            .replace(\n                                \/\\s*[\u0410\u0430Aa][\u041c\u043cMm]\\s*$\/u,\n                                ' AM'\n                            )\n                            .replace(\n                                \/\\s*[\u041f\u043fPp][\u041c\u043cMm]\\s*$\/u,\n                                ' PM'\n                            );\n\n                    const twelveHour =\n                        normalized.match(\n                            \/^(\\d{1,2}):(\\d{2})\\s*(AM|PM)$\/i\n                        );\n\n                    if (twelveHour) {\n\n                        let hour =\n                            Number(twelveHour[1]);\n\n                        const minute =\n                            Number(twelveHour[2]);\n\n                        const period =\n                            twelveHour[3].toUpperCase();\n\n                        if (\n                            period === 'PM' &&\n                            hour !== 12\n                        ) {\n                            hour += 12;\n                        }\n\n                        if (\n                            period === 'AM' &&\n                            hour === 12\n                        ) {\n                            hour = 0;\n                        }\n\n                        return (\n                            hour * 60 +\n                            minute\n                        );\n                    }\n\n                    const twentyFourHour =\n                        normalized.match(\n                            \/^(\\d{1,2}):(\\d{2})$\/\n                        );\n\n                    if (!twentyFourHour) {\n                        return null;\n                    }\n\n                    return (\n                        Number(twentyFourHour[1]) * 60 +\n                        Number(twentyFourHour[2])\n                    );\n                }\n\n                function formatMinutes(\n                    minutes,\n                    mode\n                ) {\n\n                    const normalized =\n                        (\n                            minutes %\n                            (24 * 60) +\n                            (24 * 60)\n                        ) %\n                        (24 * 60);\n\n                    const hour =\n                        Math.floor(\n                            normalized \/ 60\n                        );\n\n                    const minute =\n                        normalized % 60;\n\n                    const timeMode =\n                        mode ||\n                        getCurrentTimeMode();\n\n                    if (timeMode === '12h') {\n\n                        const period =\n                            hour >= 12\n                                ? 'PM'\n                                : 'AM';\n\n                        const hour12 =\n                            hour % 12 || 12;\n\n                        return (\n                            hour12 +\n                            ':' +\n                            String(minute)\n                                .padStart(\n                                    2,\n                                    '0'\n                                ) +\n                            ' ' +\n                            period\n                        );\n                    }\n\n                    return (\n                        String(hour)\n                            .padStart(\n                                2,\n                                '0'\n                            ) +\n                        ':' +\n                        String(minute)\n                            .padStart(\n                                2,\n                                '0'\n                            )\n                    );\n                }\n\n                function getVisibleSlotText(slot) {\n\n                    const span =\n                        slot.querySelector(\n                            'span:not(.fcal_sr_only)'\n                        );\n\n                    if (span) {\n                        return {\n                            node: span,\n                            value: span.textContent.trim(),\n                            type: 'element'\n                        };\n                    }\n\n                    const textNode =\n                        Array.from(\n                            slot.childNodes\n                        ).find(function (node) {\n                            return (\n                                node.nodeType ===\n                                    Node.TEXT_NODE &&\n                                node.nodeValue.trim()\n                            );\n                        });\n\n                    return {\n                        node: textNode || null,\n                        value: textNode\n                            ? textNode.nodeValue.trim()\n                            : '',\n                        type: 'text'\n                    };\n                }\n\n                function syncEnglishSlotTimes() {\n\n                    if (language !== 'en') {\n                        return;\n                    }\n\n                    const mode =\n                        preferredTimeMode;\n\n                    app\n                        .querySelectorAll(\n                            '.fcal_spot_name'\n                        )\n                        .forEach(function (slot) {\n\n                            const visible =\n                                getVisibleSlotText(slot);\n\n                            if (\n                                !visible.node ||\n                                !visible.value\n                            ) {\n                                return;\n                            }\n\n                            const minutes =\n                                parseTime(\n                                    visible.value\n                                );\n\n                            if (minutes === null) {\n                                return;\n                            }\n\n                            let output =\n                                formatMinutes(\n                                    minutes,\n                                    mode\n                                );\n\n                            if (mode === '12h') {\n\n                                output =\n                                    output.replace(\n                                        \/^(\\d):\/,\n                                        '0$1:'\n                                    );\n                            }\n\n                            if (\n                                visible.value ===\n                                output\n                            ) {\n                                return;\n                            }\n\n                            if (\n                                visible.type ===\n                                'element'\n                            ) {\n                                visible.node.textContent =\n                                    output;\n                            } else {\n                                visible.node.nodeValue =\n                                    output;\n                            }\n                        });\n                }\n\n                function formatTimeRange() {\n\n                    const start =\n                        parseTime(\n                            selectedSlotValue\n                        );\n\n                    if (start === null) {\n                        return (\n                            selectedSlotValue ||\n                            ''\n                        );\n                    }\n\n                    const durationText =\n                        app.querySelector(\n                            '.fcal_duration_title'\n                        )?.textContent || '';\n\n                    const duration =\n                        parseInt(\n                            durationText,\n                            10\n                        ) || 30;\n\n                    const mode =\n                        getCurrentTimeMode();\n\n                    return (\n                        formatMinutes(\n                            start,\n                            mode\n                        ) +\n                        '\u2013' +\n                        formatMinutes(\n                            start + duration,\n                            mode\n                        )\n                    );\n                }\n\n                function hideNativeNext() {\n\n                    const button =\n                        Array.from(\n                            app.querySelectorAll(\n                                '.fcal_slot_picker button'\n                            )\n                        ).find(function (item) {\n\n                            const text =\n                                item.textContent\n                                    .trim()\n                                    .toLowerCase();\n\n                            return (\n                                text === 'next' ||\n                                text === '\u0434\u0430\u043b\u0456'\n                            );\n                        });\n\n                    if (button) {\n                        button.classList.add(\n                            'kb-native-next'\n                        );\n                    }\n\n                    return button;\n                }\n\n                function ensureDayButton() {\n\n                    const dayPicker =\n                        app.querySelector(\n                            '.fcal_day_picker'\n                        );\n\n                    if (!dayPicker) return null;\n\n                    let button =\n                        app.querySelector(\n                            '.kb-select-time'\n                        );\n\n                    if (!button) {\n\n                        button =\n                            document.createElement(\n                                'button'\n                            );\n\n                        button.type = 'button';\n                        button.className =\n                            'kb-select-time';\n                        button.textContent =\n                            t.selectTimeButton;\n\n                        dayPicker.appendChild(button);\n\n                        button.addEventListener(\n                            'click',\n                            function () {\n\n                                if (\n                                    !selectedDay ||\n                                    !selectedDay.isConnected\n                                ) {\n                                    restoreSelectedDay();\n                                }\n\n                                if (\n                                    !selectedDay ||\n                                    !selectedDay.isConnected\n                                ) {\n                                    return;\n                                }\n\n                                allowNativeDayClick = true;\n                                selectedDay.click();\n                                allowNativeDayClick = false;\n\n                                selectedSlot = null;\n                                selectedSlotValue = null;\n\n                                scheduleSync();\n\n                                setTimeout(\n                                    scheduleSync,\n                                    100\n                                );\n\n                                setTimeout(\n                                    scheduleSync,\n                                    250\n                                );\n                            }\n                        );\n                    }\n\n                    button.disabled =\n                        !selectedDayValue;\n\n                    return button;\n                }\n\n                function ensureSlotButton() {\n\n                    const dayPicker =\n                        app.querySelector(\n                            '.fcal_day_picker'\n                        );\n\n                    if (!dayPicker) return null;\n\n                    let button =\n                        app.querySelector(\n                            '.kb-enter-details'\n                        );\n\n                    if (!button) {\n\n                        button =\n                            document.createElement(\n                                'button'\n                            );\n\n                        button.type = 'button';\n                        button.className =\n                            'kb-enter-details';\n                        button.textContent =\n                            t.enterDetails;\n\n                        dayPicker.appendChild(button);\n\n                        button.addEventListener(\n                            'click',\n                            function () {\n\n                                if (\n                                    !selectedSlot ||\n                                    !selectedSlot.isConnected\n                                ) {\n                                    restoreSelectedSlot();\n                                }\n\n                                if (\n                                    !selectedSlot ||\n                                    !selectedSlot.isConnected\n                                ) {\n                                    return;\n                                }\n\n                                allowNativeSlotClick = true;\n                                selectedSlot.click();\n                                allowNativeSlotClick = false;\n\n                                syncDetailsUI();\n\n                                let attempts = 0;\n\n                                function goNext() {\n\n                                    attempts++;\n\n                                    const nativeNext =\n                                        hideNativeNext();\n\n                                    if (nativeNext) {\n                                        syncDetailsUI();\n                                        nativeNext.click();\n                                        scheduleSync();\n                                        return;\n                                    }\n\n                                    if (attempts < 20) {\n                                        setTimeout(\n                                            goNext,\n                                            30\n                                        );\n                                    }\n                                }\n\n                                setTimeout(goNext, 0);\n                            }\n                        );\n                    }\n\n                    button.disabled =\n                        !selectedSlotValue;\n\n                    return button;\n                }\n\n                function cleanupButtons() {\n\n                    app\n                        .querySelectorAll(\n                            '.kb-select-time'\n                        )\n                        .forEach(function (button, index) {\n                            if (index > 0) {\n                                button.remove();\n                            }\n                        });\n\n                    app\n                        .querySelectorAll(\n                            '.kb-enter-details'\n                        )\n                        .forEach(function (button, index) {\n                            if (index > 0) {\n                                button.remove();\n                            }\n                        });\n                }\n\n                function syncDetailsUI() {\n\n                    const details =\n                        app.querySelector(\n                            '.fcal_date_event_details'\n                        );\n\n                    if (!details) return;\n\n                    const title =\n                        details.querySelector('h3');\n\n                    if (\n                        title &&\n                        title.textContent.trim() !==\n                            t.enterDetails\n                    ) {\n                        title.textContent =\n                            t.enterDetails;\n                    }\n\n                    let dateLine =\n                        details.querySelector(\n                            '.kb-details-date'\n                        );\n\n                    if (!dateLine) {\n\n                        dateLine =\n                            document.createElement('div');\n\n                        dateLine.className =\n                            'kb-details-date';\n\n                        const header =\n                            details.querySelector(\n                                '.fcal_date_event_details_header'\n                            );\n\n                        if (header) {\n                            header.after(dateLine);\n                        }\n                    }\n\n                    if (dateLine) {\n\n                        const text =\n                            formatDate() +\n                            (\n                                formatTimeRange()\n                                    ? ' \u00b7 ' +\n                                      formatTimeRange()\n                                    : ''\n                            );\n\n                        if (\n                            dateLine.textContent.trim() !==\n                            text\n                        ) {\n                            dateLine.textContent = text;\n                        }\n                    }\n\n                    const name =\n                        details.querySelector(\n                            'input[type=\"text\"]'\n                        );\n\n                    const email =\n                        details.querySelector(\n                            'input[type=\"email\"]'\n                        );\n\n                    const message =\n                        details.querySelector(\n                            'textarea'\n                        );\n\n                    const submit =\n                        details.querySelector(\n                            '.fcal_btn_submit'\n                        );\n\n                    if (name) {\n                        name.placeholder =\n                            t.namePlaceholder;\n                    }\n\n                    if (email) {\n                        email.placeholder =\n                            t.emailPlaceholder;\n                    }\n\n                    if (message) {\n                        message.placeholder =\n                            t.messagePlaceholder;\n                    }\n\n                    if (\n                        submit &&\n                        submit.textContent.trim() !==\n                            t.confirmBooking\n                    ) {\n                        submit.textContent =\n                            t.confirmBooking;\n                    }\n                }\n\n                \/* UI synchronization *\/\n                function syncUI() {\n\n                    localizeCalendarUI();\n                    syncConfirmedUI();\n\n                    cleanupButtons();\n                    hideNativeNext();\n\n                    const detailsOpen =\n                        isDetailsStepOpen();\n\n                    const slotOpen =\n                        isSlotStepOpen();\n\n                    if (!slotOpen && !detailsOpen) {\n                        restoreSelectedDay();\n                    }\n\n                    if (slotOpen) {\n                        syncTimeFormat();\n                        syncEnglishSlotTimes();\n                        restoreSelectedSlot();\n                        updateSlotDate();\n                    }\n\n                    const dayButton =\n                        ensureDayButton();\n\n                    const slotButton =\n                        ensureSlotButton();\n\n                    if (dayButton) {\n\n                        dayButton.style.setProperty(\n                            'display',\n                            (!slotOpen && !detailsOpen)\n                                ? 'block'\n                                : 'none',\n                            'important'\n                        );\n\n                        dayButton.disabled =\n                            !selectedDayValue;\n                    }\n\n                    if (slotButton) {\n\n                        slotButton.style.setProperty(\n                            'display',\n                            slotOpen\n                                ? 'block'\n                                : 'none',\n                            'important'\n                        );\n\n                        slotButton.disabled =\n                            !selectedSlotValue;\n                    }\n\n                    if (detailsOpen) {\n                        syncDetailsUI();\n                    }\n                }\n\n                function scheduleSync() {\n\n                    if (syncFrame) {\n                        cancelAnimationFrame(\n                            syncFrame\n                        );\n                    }\n\n                    syncFrame =\n                        requestAnimationFrame(\n                            function () {\n                                syncFrame = null;\n                                syncUI();\n                            }\n                        );\n                }\n\n                function returnToSlots(nativeBack) {\n\n                    if (!nativeBack) return;\n\n                    allowNativeDetailsBack = true;\n                    nativeBack.click();\n                    allowNativeDetailsBack = false;\n\n                    let attempts = 0;\n\n                    function reopenSlots() {\n\n                        attempts++;\n\n                        if (!isDetailsStepOpen()) {\n\n                            restoreSelectedDay();\n\n                            if (\n                                selectedDay &&\n                                selectedDay.isConnected\n                            ) {\n                                allowNativeDayClick = true;\n                                selectedDay.click();\n                                allowNativeDayClick = false;\n\n                                setTimeout(\n                                    function () {\n                                        restoreSelectedSlot();\n                                        scheduleSync();\n                                    },\n                                    120\n                                );\n\n                                return;\n                            }\n                        }\n\n                        if (attempts < 20) {\n                            setTimeout(\n                                reopenSlots,\n                                30\n                            );\n                        }\n                    }\n\n                    setTimeout(reopenSlots, 30);\n                }\n\n                \/* Event handling *\/\n                app.addEventListener(\n                    'click',\n                    function (event) {\n\n                        const formatButton =\n                            event.target.closest(\n                                '.fcal_slot_picker_header_action button'\n                            );\n\n                        if (\n                            formatButton &&\n                            app.contains(\n                                formatButton\n                            )\n                        ) {\n\n                            preferredTimeMode =\n                                formatButton\n                                    .textContent\n                                    .trim()\n                                    .startsWith('24')\n                                    ? '24h'\n                                    : '12h';\n\n                            selectedSlot = null;\n                            selectedSlotValue = null;\n\n                            scheduleSync();\n\n                            setTimeout(\n                                scheduleSync,\n                                80\n                            );\n\n                            setTimeout(\n                                scheduleSync,\n                                180\n                            );\n\n                            setTimeout(\n                                scheduleSync,\n                                350\n                            );\n\n                            return;\n                        }\n\n                        const detailsBack =\n                            event.target.closest(\n                                '.fcal_date_event_details .fcal_back button'\n                            );\n\n                        if (detailsBack) {\n\n                            if (allowNativeDetailsBack) {\n                                return;\n                            }\n\n                            event.preventDefault();\n                            event.stopPropagation();\n                            event.stopImmediatePropagation();\n\n                            returnToSlots(detailsBack);\n                            return;\n                        }\n\n                        const slotBack =\n                            event.target.closest(\n                                '.fcal_slot_picker .fcal_back button'\n                            );\n\n                        if (slotBack) {\n\n                            selectedSlot = null;\n                            selectedSlotValue = null;\n\n                            setTimeout(\n                                function () {\n                                    restoreSelectedDay();\n                                    scheduleSync();\n                                },\n                                120\n                            );\n\n                            setTimeout(\n                                function () {\n                                    restoreSelectedDay();\n                                    scheduleSync();\n                                },\n                                300\n                            );\n\n                            return;\n                        }\n\n                        const day =\n                            event.target.closest(\n                                '.calendar .day.day-enabled'\n                            );\n\n                        if (\n                            day &&\n                            app.contains(day)\n                        ) {\n\n                            if (allowNativeDayClick) {\n                                return;\n                            }\n\n                            event.preventDefault();\n                            event.stopPropagation();\n                            event.stopImmediatePropagation();\n\n                            app\n                                .querySelectorAll(\n                                    '.calendar .day.kb-selected-day'\n                                )\n                                .forEach(function (item) {\n                                    item.classList.remove(\n                                        'kb-selected-day'\n                                    );\n                                });\n\n                            day.classList.add(\n                                'kb-selected-day'\n                            );\n\n                            selectedDay = day;\n                            selectedSlot = null;\n                            selectedSlotValue = null;\n\n                            rememberSelectedDay(day);\n                            scheduleSync();\n\n                            return;\n                        }\n\n                        const slot =\n                            event.target.closest(\n                                '.fcal_spot_name'\n                            );\n\n                        if (\n                            slot &&\n                            app.contains(slot)\n                        ) {\n\n                            if (allowNativeSlotClick) {\n                                return;\n                            }\n\n                            event.preventDefault();\n                            event.stopPropagation();\n                            event.stopImmediatePropagation();\n\n                            app\n                                .querySelectorAll(\n                                    '.fcal_spot.kb-selected-slot'\n                                )\n                                .forEach(function (item) {\n                                    item.classList.remove(\n                                        'kb-selected-slot'\n                                    );\n                                });\n\n                            const wrapper =\n                                slot.closest(\n                                    '.fcal_spot'\n                                );\n\n                            if (wrapper) {\n                                wrapper.classList.add(\n                                    'kb-selected-slot'\n                                );\n                            }\n\n                            selectedSlot = slot;\n                            rememberSelectedSlot(slot);\n\n                            scheduleSync();\n                            return;\n                        }\n                    },\n                    true\n                );\n\n                \/* Watch FluentBooking re-renders *\/\n                const observer =\n                    new MutationObserver(function () {\n                        hideNativeNext();\n                        scheduleSync();\n                    });\n\n                observer.observe(\n                    app,\n                    {\n                        childList: true,\n                        subtree: true,\n                        characterData: true\n                    }\n                );\n\n                syncUI();\n            });\n    }\n\n    document.addEventListener(\n        'DOMContentLoaded',\n        initBookingCalendar\n    );\n\n    window.addEventListener(\n        'load',\n        initBookingCalendar\n    );\n\n    setTimeout(\n        initBookingCalendar,\n        800\n    );\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_acf_changed":false,"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","footnotes":""},"class_list":["post-2066","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.kuiavets.com\/en\/wp-json\/wp\/v2\/pages\/2066","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kuiavets.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.kuiavets.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.kuiavets.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kuiavets.com\/en\/wp-json\/wp\/v2\/comments?post=2066"}],"version-history":[{"count":0,"href":"https:\/\/www.kuiavets.com\/en\/wp-json\/wp\/v2\/pages\/2066\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.kuiavets.com\/en\/wp-json\/wp\/v2\/media?parent=2066"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}