﻿{"id":2466,"date":"2026-03-15T16:22:52","date_gmt":"2026-03-15T15:22:52","guid":{"rendered":"https:\/\/casasofia-sauze.it\/calendar\/"},"modified":"2026-03-15T19:13:54","modified_gmt":"2026-03-15T18:13:54","slug":"calendar","status":"publish","type":"page","link":"https:\/\/casasofia-sauze.it\/en\/calendar\/","title":{"rendered":"Calendar"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2466\" class=\"elementor elementor-2466 elementor-2424\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-436ba26 e-flex e-con-boxed e-con e-parent\" data-id=\"436ba26\" 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-8a72e57 elementor-widget elementor-widget-shortcode\" data-id=\"8a72e57\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">        <div id=\"sitt-booking-1\" class=\"sitt-booking\" data-occupied=\"[]\" data-ajax=\"https:\/\/casasofia-sauze.it\/wp-admin\/admin-ajax.php\" data-nonce=\"ba78c3a1db\" data-strings=\"{&quot;months&quot;:[&quot;January&quot;,&quot;February&quot;,&quot;March&quot;,&quot;April&quot;,&quot;May&quot;,&quot;June&quot;,&quot;July&quot;,&quot;August&quot;,&quot;September&quot;,&quot;October&quot;,&quot;November&quot;,&quot;December&quot;],&quot;weekdays&quot;:[&quot;Mon&quot;,&quot;Tue&quot;,&quot;Wed&quot;,&quot;Thu&quot;,&quot;Fri&quot;,&quot;Sat&quot;,&quot;Sun&quot;],&quot;max_days&quot;:&quot;Seleziona al massimo %d giorni.&quot;,&quot;blocked_range&quot;:&quot;La selezione include date non disponibili.&quot;,&quot;send_error&quot;:&quot;Errore durante l&#039;invio.&quot;,&quot;send_success&quot;:&quot;Richiesta inviata con successo.&quot;,&quot;loading&quot;:&quot;Caricamento disponibilit\\u00e0...&quot;,&quot;none_children&quot;:&quot;Nessuno&quot;}\">\r\n            <div class=\"sitt-cal\">\r\n                <div class=\"sitt-cal-header\">\r\n                    <button type=\"button\" class=\"sitt-cal-nav\" data-dir=\"prev\">&lt;<\/button>\r\n                    <div class=\"sitt-cal-title\"><\/div>\r\n                    <button type=\"button\" class=\"sitt-cal-nav\" data-dir=\"next\">&gt;<\/button>\r\n                <\/div>\r\n                <div class=\"sitt-cal-grid\">\r\n                                            <div class=\"sitt-cal-weekday\">Mon<\/div>\r\n                                            <div class=\"sitt-cal-weekday\">Tue<\/div>\r\n                                            <div class=\"sitt-cal-weekday\">Wed<\/div>\r\n                                            <div class=\"sitt-cal-weekday\">Thu<\/div>\r\n                                            <div class=\"sitt-cal-weekday\">Fri<\/div>\r\n                                            <div class=\"sitt-cal-weekday\">Sat<\/div>\r\n                                            <div class=\"sitt-cal-weekday\">Sun<\/div>\r\n                                    <\/div>\r\n            <\/div>\r\n\r\n            <form class=\"sitt-booking-form\" method=\"post\">\r\n                <input type=\"hidden\" id=\"sitt_booking_nonce\" name=\"sitt_booking_nonce\" value=\"ba78c3a1db\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/pages\/2466\" \/>                <input type=\"hidden\" name=\"action\" value=\"sitt_booking_request\">\r\n                <input type=\"hidden\" name=\"selected_dates\" class=\"sitt-selected-dates\" value=\"\">\r\n\r\n                <div class=\"sitt-selected-box\">\r\n                    <div class=\"sitt-selected-title\">Date selezionate<\/div>\r\n                    <div class=\"sitt-selected-text\">-<\/div>\r\n                <\/div>\r\n\r\n                <div class=\"sitt-form-row two-cols\">\r\n                    <div>\r\n                        <label>Nome<\/label>\r\n                        <input type=\"text\" name=\"name\" maxlength=\"80\" required>\r\n                    <\/div>\r\n                    <div>\r\n                        <label>Cognome<\/label>\r\n                        <input type=\"text\" name=\"surname\" maxlength=\"80\" required>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"sitt-form-row\">\r\n                    <label>Email<\/label>\r\n                    <input type=\"email\" name=\"email\" maxlength=\"254\" required>\r\n                <\/div>\r\n\r\n                <div class=\"sitt-form-row\">\r\n                    <label>Cellulare<\/label>\r\n                    <div class=\"sitt-phone\">\r\n                        <select name=\"phone_prefix\" class=\"sitt-prefix\" required><\/select>\r\n                        <input type=\"text\" name=\"phone\" maxlength=\"20\" required>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"sitt-form-row\">\r\n                    <label>Come preferisci essere contattato?<\/label>\r\n                    <select name=\"contact_pref\" required>\r\n                        <option value=\"email\">Tramite Email<\/option>\r\n                        <option value=\"phone\">Tramite Cellulare<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n\r\n                <div class=\"sitt-form-row\">\r\n                    <label>Numero totale di ospiti<\/label>\r\n                    <select name=\"guests\" class=\"sitt-guests\" required>\r\n                        <option value=\"1\">1<\/option>\r\n                        <option value=\"2\">2<\/option>\r\n                        <option value=\"3\">3<\/option>\r\n                        <option value=\"4\">4<\/option>\r\n                        <option value=\"5\">5<\/option>\r\n                    <\/select>\r\n                <\/div>\r\n\r\n                <div class=\"sitt-form-row\">\r\n                    <label>Di cui bambini<\/label>\r\n                    <select name=\"children\" class=\"sitt-children\" required><\/select>\r\n                <\/div>\r\n\r\n                <div class=\"sitt-form-row\">\r\n                    <label>Note (opzionali)<\/label>\r\n                    <textarea name=\"notes\" rows=\"4\" maxlength=\"800\"><\/textarea>\r\n                <\/div>\r\n\r\n                <div class=\"sitt-form-row sitt-privacy-row\">\r\n                    <label class=\"sitt-privacy-label\">\r\n                        <input type=\"checkbox\" name=\"privacy_consent\" value=\"1\" required>\r\n                        <span>Acconsento al <a href=\"https:\/\/casasofia-sauze.it\/privacy-policy\/\" target=\"_blank\">trattamento dei dati<\/a>.<\/span>\r\n                    <\/label>\r\n                <\/div>\r\n\r\n                <div class=\"sitt-hp-field\" aria-hidden=\"true\">\r\n                    <label>Website<\/label>\r\n                    <input type=\"text\" name=\"website\" tabindex=\"-1\" autocomplete=\"off\">\r\n                <\/div>\r\n\r\n                <button type=\"submit\" class=\"sitt-submit\">Invia richiesta<\/button>\r\n\r\n                <div class=\"sitt-form-status\" aria-live=\"polite\"><\/div>\r\n            <\/form>\r\n        <\/div>\r\n\r\n        <style>\r\n        @import url('https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@300;400;600&display=swap');\r\n\r\n        .sitt-booking, .sitt-booking * { box-sizing: border-box; }\r\n        .sitt-booking {\r\n            font-family: 'Montserrat', Arial, sans-serif;\r\n            display: grid;\r\n            grid-template-columns: 1fr;\r\n            gap: 24px;\r\n            max-width: 720px;\r\n            padding: 20px;\r\n            border: 1px solid #e6e6e6;\r\n            border-radius: 14px;\r\n            background: #fff;\r\n            box-shadow: 0 10px 30px rgba(0,0,0,0.06);\r\n            margin: 0 auto;\r\n            justify-items: center;\r\n            width: 100%;\r\n        }\r\n        .sitt-cal { padding: 6px; width: 100%; }\r\n        .sitt-cal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; }\r\n        .sitt-cal-title { font-weight: 600; font-size: 18px; color: #1b1b1b; }\r\n        .sitt-cal-nav { background: #f3f5f7; border: 1px solid #8F500078; color: #8F500078; padding: 6px 10px; cursor: pointer; border-radius: 8px; }\r\n        .sitt-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; width: 100%; }\r\n        .sitt-cal-weekday { font-size: 12px; text-align: center; color: #707070; padding: 6px 0; }\r\n        .sitt-cal-day {\r\n            text-align: center;\r\n            padding: 12px 0;\r\n            border: 1px solid #e8e8e8;\r\n            cursor: pointer;\r\n            user-select: none;\r\n            border-radius: 10px;\r\n            background: #fff;\r\n            color: #222;\r\n            transition: all 0.2s ease;\r\n        }\r\n        .sitt-cal-day:hover { border-color: #9bbcdf; }\r\n        .sitt-cal-day.disabled { cursor: not-allowed; }\r\n        .sitt-cal-day.occupied { background: #ff4d4d; color: #fff; border-color: #ff4d4d; }\r\n        .sitt-cal-day.other-month { background: #f6f6f6; color: #b7b7b7; border-color: #ededed; }\r\n        .sitt-cal-day.occupied:hover { border-color: #ff4d4d; }\r\n        .sitt-cal-day.other-month:hover { border-color: #ededed; }\r\n        .sitt-cal-day.selected { background: #1f7ae0; color: #fff; border-color: #1f7ae0; }\r\n        .sitt-cal-day.in-range { background: #a9d8ff; color: #1b1b1b; border-color: #a9d8ff; }\r\n\r\n        .sitt-booking-form {\r\n            display: block;\r\n            align-content: start;\r\n            width: 100%;\r\n        }\r\n        .sitt-selected-box {\r\n            background: #f6f8fb;\r\n            border: 1px solid #e2e8f0;\r\n            border-radius: 12px;\r\n            padding: 12px;\r\n            margin-bottom: 12px;\r\n        }\r\n        .sitt-selected-title { font-size: 12px; text-transform: uppercase; color: #6b7280; letter-spacing: 0.08em; margin-bottom: 6px; }\r\n        .sitt-selected-text { font-weight: 600; color: #1f7ae0; }\r\n\r\n        .sitt-form-row { margin-bottom: 12px; display: flex; flex-direction: column; gap: 6px; }\r\n        .sitt-form-row.two-cols { flex-direction: row; gap: 12px; }\r\n        .sitt-form-row.two-cols > div { flex: 1; display: flex; flex-direction: column; gap: 6px; }\r\n        .sitt-form-row input, .sitt-form-row textarea, .sitt-form-row select {\r\n            padding: 10px 12px;\r\n            border: 1px solid #d5d9dd;\r\n            border-radius: 10px;\r\n            font-family: inherit;\r\n        }\r\n        \r\n        .sitt-privacy-label {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 8px;\r\n            font-size: 14px;\r\n            font-weight: 400;\r\n            cursor: pointer;\r\n        }\r\n        .sitt-privacy-label input[type=\"checkbox\"] {\r\n            width: auto;\r\n            padding: 0;\r\n            margin: 0;\r\n            cursor: pointer;\r\n        }\r\n        .sitt-privacy-label a {\r\n            color: #1f7ae0;\r\n            text-decoration: underline;\r\n        }\r\n\r\n        .sitt-hp-field {\r\n            position: absolute;\r\n            left: -10000px;\r\n            top: auto;\r\n            width: 1px;\r\n            height: 1px;\r\n            overflow: hidden;\r\n        }\r\n        .sitt-phone { display: grid; grid-template-columns: 120px 1fr; gap: 8px; }\r\n        .sitt-submit {\r\n            background: #1f7ae0;\r\n            color: #fff;\r\n            border: none;\r\n            padding: 12px 18px;\r\n            cursor: pointer;\r\n            border-radius: 10px;\r\n            font-weight: 600;\r\n        }\r\n        .sitt-form-status { margin-top: 8px; font-size: 13px; color: #1b1b1b; }\r\n\r\n        @media (max-width: 800px) {\r\n            .sitt-booking { grid-template-columns: 1fr; padding: 14px; }\r\n            .sitt-form-row.two-cols { flex-direction: column; }\r\n            .sitt-phone { grid-template-columns: 1fr; }\r\n            .sitt-cal-day { padding: 10px 0; font-size: 14px; }\r\n        }\r\n        @media (max-width: 420px) {\r\n            .sitt-cal-day { padding: 8px 0; font-size: 13px; }\r\n            .sitt-cal-grid { gap: 4px; }\r\n        }\r\n        <\/style>\r\n        <script>\r\n        (function() {\r\n            const container = document.getElementById(\"sitt-booking-1\");\r\n            if (!container) return;\r\n\r\n            const occupied = JSON.parse(container.getAttribute('data-occupied') || '[]');\r\n            const strings = JSON.parse(container.getAttribute('data-strings') || '{}');\r\n            const occupiedSet = new Set(occupied);\r\n            let occupiedLoaded = occupiedSet.size > 0;\r\n            const titleEl = container.querySelector('.sitt-cal-title');\r\n            const grid = container.querySelector('.sitt-cal-grid');\r\n            const form = container.querySelector('.sitt-booking-form');\r\n            const selectedInput = container.querySelector('.sitt-selected-dates');\r\n            const selectedText = container.querySelector('.sitt-selected-text');\r\n            const statusEl = container.querySelector('.sitt-form-status');\r\n            const ajaxUrl = container.getAttribute('data-ajax');\r\n            const nonce = container.getAttribute('data-nonce');\r\n            const prefixSelect = container.querySelector('.sitt-prefix');\r\n            const guestsSelect = container.querySelector('.sitt-guests');\r\n            const childrenSelect = container.querySelector('.sitt-children');\r\n            const maxDates = 60;\r\n            const today = new Date();\r\n            today.setHours(0, 0, 0, 0);\r\n\r\n            let current = new Date();\r\n            current.setDate(1);\r\n            let rangeStart = null;\r\n            let rangeEnd = null;\r\n\r\n            const months = Array.isArray(strings.months) ? strings.months : [];\r\n            const msgMaxDays = typeof strings.max_days === 'string' ? strings.max_days : 'Seleziona al massimo %d giorni.';\r\n            const msgBlocked = typeof strings.blocked_range === 'string' ? strings.blocked_range : 'La selezione include date non disponibili.';\r\n            const msgSendError = typeof strings.send_error === 'string' ? strings.send_error : 'Errore durante l\\'invio.';\r\n            const msgSendSuccess = typeof strings.send_success === 'string' ? strings.send_success : 'Richiesta inviata con successo.';\r\n            const msgLoading = typeof strings.loading === 'string' ? strings.loading : 'Caricamento disponibilit\u00e0...';\r\n\r\n            const prefixes = [\r\n                {c:'Afghanistan',d:'+93'},{c:'Albania',d:'+355'},{c:'Algeria',d:'+213'},{c:'Andorra',d:'+376'},{c:'Angola',d:'+244'},\r\n                {c:'Antigua and Barbuda',d:'+1-268'},{c:'Argentina',d:'+54'},{c:'Armenia',d:'+374'},{c:'Australia',d:'+61'},{c:'Austria',d:'+43'},\r\n                {c:'Azerbaijan',d:'+994'},{c:'Bahamas',d:'+1-242'},{c:'Bahrain',d:'+973'},{c:'Bangladesh',d:'+880'},{c:'Barbados',d:'+1-246'},\r\n                {c:'Belarus',d:'+375'},{c:'Belgium',d:'+32'},{c:'Belize',d:'+501'},{c:'Benin',d:'+229'},{c:'Bhutan',d:'+975'},\r\n                {c:'Bolivia',d:'+591'},{c:'Bosnia and Herzegovina',d:'+387'},{c:'Botswana',d:'+267'},{c:'Brazil',d:'+55'},{c:'Brunei',d:'+673'},\r\n                {c:'Bulgaria',d:'+359'},{c:'Burkina Faso',d:'+226'},{c:'Burundi',d:'+257'},{c:'Cambodia',d:'+855'},{c:'Cameroon',d:'+237'},\r\n                {c:'Canada',d:'+1'},{c:'Cape Verde',d:'+238'},{c:'Central African Republic',d:'+236'},{c:'Chad',d:'+235'},{c:'Chile',d:'+56'},\r\n                {c:'China',d:'+86'},{c:'Colombia',d:'+57'},{c:'Comoros',d:'+269'},{c:'Congo',d:'+242'},{c:'Costa Rica',d:'+506'},\r\n                {c:'Croatia',d:'+385'},{c:'Cuba',d:'+53'},{c:'Cyprus',d:'+357'},{c:'Czech Republic',d:'+420'},{c:'Denmark',d:'+45'},\r\n                {c:'Dominican Republic',d:'+1-809'},{c:'Ecuador',d:'+593'},{c:'Egypt',d:'+20'},{c:'El Salvador',d:'+503'},{c:'Estonia',d:'+372'},\r\n                {c:'Eswatini',d:'+268'},{c:'Ethiopia',d:'+251'},{c:'Fiji',d:'+679'},{c:'Finland',d:'+358'},{c:'France',d:'+33'},\r\n                {c:'Gabon',d:'+241'},{c:'Gambia',d:'+220'},{c:'Georgia',d:'+995'},{c:'Germany',d:'+49'},{c:'Ghana',d:'+233'},\r\n                {c:'Greece',d:'+30'},{c:'Grenada',d:'+1-473'},{c:'Guatemala',d:'+502'},{c:'Guinea',d:'+224'},{c:'Guinea-Bissau',d:'+245'},\r\n                {c:'Guyana',d:'+592'},{c:'Haiti',d:'+509'},{c:'Honduras',d:'+504'},{c:'Hungary',d:'+36'},{c:'Iceland',d:'+354'},\r\n                {c:'India',d:'+91'},{c:'Indonesia',d:'+62'},{c:'Iran',d:'+98'},{c:'Iraq',d:'+964'},{c:'Ireland',d:'+353'},\r\n                {c:'Israel',d:'+972'},{c:'Italy',d:'+39'},{c:'Jamaica',d:'+1-876'},{c:'Japan',d:'+81'},{c:'Jordan',d:'+962'},\r\n                {c:'Kazakhstan',d:'+7'},{c:'Kenya',d:'+254'},{c:'Kuwait',d:'+965'},{c:'Kyrgyzstan',d:'+996'},{c:'Laos',d:'+856'},\r\n                {c:'Latvia',d:'+371'},{c:'Lebanon',d:'+961'},{c:'Lesotho',d:'+266'},{c:'Liberia',d:'+231'},{c:'Libya',d:'+218'},\r\n                {c:'Liechtenstein',d:'+423'},{c:'Lithuania',d:'+370'},{c:'Luxembourg',d:'+352'},{c:'Madagascar',d:'+261'},{c:'Malawi',d:'+265'},\r\n                {c:'Malaysia',d:'+60'},{c:'Maldives',d:'+960'},{c:'Mali',d:'+223'},{c:'Malta',d:'+356'},{c:'Mauritania',d:'+222'},\r\n                {c:'Mauritius',d:'+230'},{c:'Mexico',d:'+52'},{c:'Moldova',d:'+373'},{c:'Monaco',d:'+377'},{c:'Mongolia',d:'+976'},\r\n                {c:'Montenegro',d:'+382'},{c:'Morocco',d:'+212'},{c:'Mozambique',d:'+258'},{c:'Myanmar',d:'+95'},{c:'Namibia',d:'+264'},\r\n                {c:'Nepal',d:'+977'},{c:'Netherlands',d:'+31'},{c:'New Zealand',d:'+64'},{c:'Nicaragua',d:'+505'},{c:'Niger',d:'+227'},\r\n                {c:'Nigeria',d:'+234'},{c:'North Korea',d:'+850'},{c:'North Macedonia',d:'+389'},{c:'Norway',d:'+47'},{c:'Oman',d:'+968'},\r\n                {c:'Pakistan',d:'+92'},{c:'Panama',d:'+507'},{c:'Paraguay',d:'+595'},{c:'Peru',d:'+51'},{c:'Philippines',d:'+63'},\r\n                {c:'Poland',d:'+48'},{c:'Portugal',d:'+351'},{c:'Qatar',d:'+974'},{c:'Romania',d:'+40'},{c:'Russia',d:'+7'},{c:'Rwanda',d:'+250'},\r\n                {c:'Saudi Arabia',d:'+966'},{c:'Senegal',d:'+221'},{c:'Serbia',d:'+381'},{c:'Seychelles',d:'+248'},{c:'Sierra Leone',d:'+232'},\r\n                {c:'Singapore',d:'+65'},{c:'Slovakia',d:'+421'},{c:'Slovenia',d:'+386'},{c:'Somalia',d:'+252'},{c:'South Africa',d:'+27'},\r\n                {c:'South Korea',d:'+82'},{c:'Spain',d:'+34'},{c:'Sri Lanka',d:'+94'},{c:'Sudan',d:'+249'},{c:'Suriname',d:'+597'},\r\n                {c:'Sweden',d:'+46'},{c:'Switzerland',d:'+41'},{c:'Syria',d:'+963'},{c:'Taiwan',d:'+886'},{c:'Tajikistan',d:'+992'},\r\n                {c:'Tanzania',d:'+255'},{c:'Thailand',d:'+66'},{c:'Togo',d:'+228'},{c:'Trinidad and Tobago',d:'+1-868'},{c:'Tunisia',d:'+216'},\r\n                {c:'Turkey',d:'+90'},{c:'Turkmenistan',d:'+993'},{c:'Uganda',d:'+256'},{c:'Ukraine',d:'+380'},{c:'United Arab Emirates',d:'+971'},\r\n                {c:'United Kingdom',d:'+44'},{c:'United States',d:'+1'},{c:'Uruguay',d:'+598'},{c:'Uzbekistan',d:'+998'},{c:'Venezuela',d:'+58'},\r\n                {c:'Vietnam',d:'+84'},{c:'Yemen',d:'+967'},{c:'Zambia',d:'+260'},{c:'Zimbabwe',d:'+263'}\r\n            ];\r\n\r\n            function populatePrefixes() {\r\n                prefixes.forEach(p => {\r\n                    const opt = document.createElement('option');\r\n                    opt.value = p.d;\r\n                    opt.textContent = `${p.c} (${p.d})`;\r\n                    if (p.c === 'Italy') opt.selected = true;\r\n                    prefixSelect.appendChild(opt);\r\n                });\r\n            }\r\n\r\n            function populateChildren() {\r\n                const guests = parseInt(guestsSelect.value, 10);\r\n                childrenSelect.innerHTML = '';\r\n                const noneOpt = document.createElement('option');\r\n                noneOpt.value = '0';\r\n                noneOpt.textContent = (strings.none_children || 'Nessuno');\r\n                childrenSelect.appendChild(noneOpt);\r\n                for (let i = 1; i <= Math.max(0, guests - 1); i++) {\r\n                    const opt = document.createElement('option');\r\n                    opt.value = String(i);\r\n                    opt.textContent = String(i);\r\n                    childrenSelect.appendChild(opt);\r\n                }\r\n            }\r\n\r\n            function fmt(date) {\r\n                const y = date.getFullYear();\r\n                const m = String(date.getMonth()+1).padStart(2,'0');\r\n                const d = String(date.getDate()).padStart(2,'0');\r\n                return `${y}-${m}-${d}`;\r\n            }\r\n            function fmtDisplay(date) {\r\n                const d = String(date.getDate()).padStart(2,'0');\r\n                const m = String(date.getMonth()+1).padStart(2,'0');\r\n                const y = date.getFullYear();\r\n                return `${d}\/${m}\/${y}`;\r\n            }\r\n\r\n            function datesBetween(start, end) {\r\n                const out = [];\r\n                const d = new Date(start.getTime());\r\n                while (d <= end) {\r\n                    out.push(fmt(d));\r\n                    d.setDate(d.getDate() + 1);\r\n                }\r\n                return out;\r\n            }\r\n\r\n            function isDisabled(dateStr) {\r\n                return occupiedSet.has(dateStr);\r\n            }\r\n\r\n            function fetchOccupied() {\r\n                if (!ajaxUrl) return;\r\n                const params = new URLSearchParams();\r\n                params.append('action', 'sitt_booking_occupied');\r\n                params.append('nonce', nonce);\r\n\r\n                fetch(ajaxUrl, {\r\n                    method: 'POST',\r\n                    credentials: 'same-origin',\r\n                    headers: {'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8'},\r\n                    body: params.toString()\r\n                })\r\n                .then(res => res.json())\r\n                .then(data => {\r\n                    if (data && data.success && Array.isArray(data.data)) {\r\n                        occupiedSet.clear();\r\n                        data.data.forEach(d => occupiedSet.add(d));\r\n                        occupiedLoaded = true;\r\n                        render();\r\n                    }\r\n                })\r\n                .catch(() => {\r\n                    \/\/ Keep existing cached\/empty state if fetch fails.\r\n                });\r\n            }\r\n\r\n            function render() {\r\n                const monthLabel = months[current.getMonth()] || '';\r\n                titleEl.textContent = `${monthLabel} ${current.getFullYear()}`;\r\n                grid.querySelectorAll('.sitt-cal-day').forEach(el => el.remove());\r\n\r\n                const year = current.getFullYear();\r\n                const month = current.getMonth();\r\n                const firstDay = new Date(year, month, 1);\r\n                let startWeekday = firstDay.getDay();\r\n                if (startWeekday === 0) startWeekday = 7;\r\n                const daysInMonth = new Date(year, month + 1, 0).getDate();\r\n                const daysInPrevMonth = new Date(year, month, 0).getDate();\r\n                const leading = startWeekday - 1;\r\n\r\n                for (let i = leading; i >= 1; i--) {\r\n                    const day = daysInPrevMonth - i + 1;\r\n                    const cell = document.createElement('div');\r\n                    cell.className = 'sitt-cal-day other-month disabled';\r\n                    cell.textContent = day;\r\n                    grid.appendChild(cell);\r\n                }\r\n\r\n                for (let day = 1; day <= daysInMonth; day++) {\r\n                    const dateObj = new Date(year, month, day);\r\n                    const dateStr = fmt(dateObj);\r\n                    const cell = document.createElement('div');\r\n                    cell.className = 'sitt-cal-day';\r\n                    cell.textContent = day;\r\n\r\n                    if (isDisabled(dateStr) || dateObj < today) {\r\n                        cell.classList.add('occupied', 'disabled');\r\n                    }\r\n\r\n                    if (rangeStart) {\r\n                        const startStr = fmt(rangeStart);\r\n                        if (dateStr === startStr) {\r\n                            cell.classList.add('selected');\r\n                        }\r\n                    }\r\n                    if (rangeStart && rangeEnd) {\r\n                        const endStr = fmt(rangeEnd);\r\n                        if (dateStr === endStr) {\r\n                            cell.classList.add('selected');\r\n                        }\r\n                        const inRange = dateObj > rangeStart && dateObj < rangeEnd;\r\n                        if (inRange) cell.classList.add('in-range');\r\n                    }\r\n\r\n                    cell.addEventListener('click', function() {\r\n                        if (cell.classList.contains('disabled')) return;\r\n                        handleSelection(dateObj);\r\n                    });\r\n                    grid.appendChild(cell);\r\n                }\r\n\r\n                const totalCells = leading + daysInMonth;\r\n                const trailing = (7 - (totalCells % 7)) % 7;\r\n                for (let i = 1; i <= trailing; i++) {\r\n                    const cell = document.createElement('div');\r\n                    cell.className = 'sitt-cal-day other-month disabled';\r\n                    cell.textContent = i;\r\n                    grid.appendChild(cell);\r\n                }\r\n            }\r\n\r\n            function handleSelection(dateObj) {\r\n                if (!occupiedLoaded) {\r\n                    statusEl.textContent = msgLoading;\r\n                    return;\r\n                }\r\n                if (!rangeStart || (rangeStart && rangeEnd)) {\r\n                    rangeStart = dateObj;\r\n                    rangeEnd = null;\r\n                    selectedInput.value = '';\r\n                    selectedText.textContent = '-';\r\n                    statusEl.textContent = '';\r\n                } else {\r\n                    if (dateObj < rangeStart) {\r\n                        \/\/ second selection before first: replace start\r\n                        rangeStart = dateObj;\r\n                        rangeEnd = null;\r\n                        selectedInput.value = '';\r\n                        selectedText.textContent = '-';\r\n                        statusEl.textContent = '';\r\n                        render();\r\n                        return;\r\n                    }\r\n                    rangeEnd = dateObj;\r\n\r\n                    const all = datesBetween(rangeStart, rangeEnd);\r\n                    if (all.length > maxDates) {\r\n                        rangeStart = null;\r\n                        rangeEnd = null;\r\n                        selectedInput.value = '';\r\n                        selectedText.textContent = '-';\r\n                        statusEl.textContent = msgMaxDays.replace('%d', maxDates);\r\n                        render();\r\n                        return;\r\n                    }\r\n                    const hasBlocked = all.some(d => occupiedSet.has(d));\r\n                    if (hasBlocked) {\r\n                        rangeStart = null;\r\n                        rangeEnd = null;\r\n                        selectedInput.value = '';\r\n                        selectedText.textContent = '-';\r\n                        statusEl.textContent = msgBlocked;\r\n                        render();\r\n                        return;\r\n                    }\r\n\r\n                    selectedInput.value = all.join(',');\r\n                    selectedText.textContent = `${fmtDisplay(rangeStart)} \u2192 ${fmtDisplay(rangeEnd)}`;\r\n                    statusEl.textContent = '';\r\n                }\r\n                render();\r\n            }\r\n\r\n            container.querySelectorAll('.sitt-cal-nav').forEach(btn => {\r\n                btn.addEventListener('click', function() {\r\n                    const dir = btn.getAttribute('data-dir');\r\n                    if (dir === 'prev') current.setMonth(current.getMonth() - 1);\r\n                    if (dir === 'next') current.setMonth(current.getMonth() + 1);\r\n                    render();\r\n                });\r\n            });\r\n\r\n            form.addEventListener('submit', function(e) {\r\n                e.preventDefault();\r\n                statusEl.textContent = '';\r\n\r\n                const formData = new FormData(form);\r\n                formData.append('nonce', nonce);\r\n\r\n                fetch(ajaxUrl, {\r\n                    method: 'POST',\r\n                    credentials: 'same-origin',\r\n                    body: formData\r\n                })\r\n                .then(res => res.json())\r\n                .then(data => {\r\n                    if (data && data.success) {\r\n                        statusEl.textContent = msgSendSuccess;\r\n                        window.location.href = 'https:\/\/casasofia-sauze.it\/richiesta-inviata';\r\n                    } else {\r\n                        statusEl.textContent = (data && data.data && data.data.message) ? data.data.message : msgSendError;\r\n                    }\r\n                })\r\n                .catch(() => {\r\n                    statusEl.textContent = msgSendError;\r\n                });\r\n            });\r\n\r\n            populatePrefixes();\r\n            populateChildren();\r\n            guestsSelect.addEventListener('change', populateChildren);\r\n            render();\r\n            fetchOccupied();\r\n        })();\r\n        <\/script>\r\n        <\/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":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-2466","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/casasofia-sauze.it\/en\/wp-json\/wp\/v2\/pages\/2466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/casasofia-sauze.it\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/casasofia-sauze.it\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/casasofia-sauze.it\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/casasofia-sauze.it\/en\/wp-json\/wp\/v2\/comments?post=2466"}],"version-history":[{"count":1,"href":"https:\/\/casasofia-sauze.it\/en\/wp-json\/wp\/v2\/pages\/2466\/revisions"}],"predecessor-version":[{"id":2467,"href":"https:\/\/casasofia-sauze.it\/en\/wp-json\/wp\/v2\/pages\/2466\/revisions\/2467"}],"wp:attachment":[{"href":"https:\/\/casasofia-sauze.it\/en\/wp-json\/wp\/v2\/media?parent=2466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}