{"id":30159,"date":"2026-01-24T09:46:25","date_gmt":"2026-01-24T08:46:25","guid":{"rendered":"https:\/\/www.tipicovillas.com\/cerca-disponibilita\/"},"modified":"2026-03-11T09:39:46","modified_gmt":"2026-03-11T08:39:46","slug":"verifier-disponibilite","status":"publish","type":"page","link":"https:\/\/www.tipicovillas.com\/fr\/verifier-disponibilite\/","title":{"rendered":"Verifier Disponibilite"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"30159\" class=\"elementor elementor-30159 elementor-19296\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c8c431e e-flex e-con-boxed e-con e-parent\" data-id=\"c8c431e\" 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-ada4894 elementor-widget elementor-widget-homey_elementor_section_title\" data-id=\"ada4894\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"homey_elementor_section_title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t            <div class=\"homey_section_title_wrap_elementor homey-module module-title section-title-module\">\n                                    <h2 class=\"homey_section_title\">Des exp\u00e9riences authentiques, cr\u00e9\u00e9es autour de vous<\/h2>\n                \n                                    <p class=\"homey_section_subtitle sub-heading\">Au-del\u00e0 du confort de nos villas, nous cr\u00e9ons des exp\u00e9riences personnalis\u00e9es pour enrichir votre s\u00e9jour. De la d\u00e9couverte des saveurs locales aux activit\u00e9s sur le territoire, chaque proposition est pens\u00e9e pour vous faire vivre les Pouilles de mani\u00e8re authentique et m\u00e9morable.<\/p>\n                            <\/div>\n            \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<div class=\"elementor-element elementor-element-ff40d60 e-con-full e-flex e-con e-parent\" data-id=\"ff40d60\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5138555 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"5138555\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t        <style>\n        \/* ============================================\n           KBI SEARCH WIDGET - ADVANCED\n           ============================================ *\/\n        .kbi-search-widget {\n            font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n            background: #fff;\n            border-radius: 8px;\n            padding: 20px;\n            border: 1px solid #e0e0e0;\n        }\n        .kbi-search-widget * {\n            box-sizing: border-box;\n        }\n        \n        \/* Search Form *\/\n        .kbi-search-form {\n            display: flex;\n            gap: 12px;\n            flex-wrap: wrap;\n            align-items: flex-end;\n        }\n        .kbi-search-field {\n            flex: 1;\n            min-width: 150px;\n            position: relative;\n        }\n        .kbi-search-field label {\n            display: block;\n            font-size: 11px;\n            font-weight: 600;\n            color: #666;\n            margin-bottom: 6px;\n            text-transform: uppercase;\n            letter-spacing: 0.5px;\n        }\n        .kbi-search-field input[type=\"text\"],\n        .kbi-search-field input[type=\"number\"] {\n            width: 100%;\n            padding: 12px 14px;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            font-size: 14px;\n            background: #fff;\n            transition: border-color 0.2s;\n        }\n        .kbi-search-field input:focus {\n            outline: none;\n            border-color: #161C3E;\n        }\n        \n        \/* Dates field with clear button *\/\n        .kbi-dates-field {\n            position: relative;\n        }\n        .kbi-dates-field .kbi-dates-input {\n            padding-right: 36px;\n        }\n        .kbi-dates-clear {\n            position: absolute;\n            right: 10px;\n            top: 50%;\n            transform: translateY(25%);\n            background: none;\n            border: none;\n            color: #999;\n            cursor: pointer;\n            font-size: 14px;\n            padding: 4px;\n            line-height: 1;\n        }\n        .kbi-dates-clear:hover {\n            color: #333;\n        }\n        \n        \/* Autocomplete Dropdown *\/\n        .kbi-autocomplete-dropdown {\n            position: absolute;\n            top: 100%;\n            left: 0;\n            right: 0;\n            background: #fff;\n            border: 1px solid #ddd;\n            border-top: none;\n            border-radius: 0 0 4px 4px;\n            max-height: 200px;\n            overflow-y: auto;\n            z-index: 1000;\n            display: none;\n            box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n        }\n        .kbi-autocomplete-dropdown.open {\n            display: block;\n        }\n        .kbi-autocomplete-item {\n            padding: 10px 14px;\n            cursor: pointer;\n            font-size: 14px;\n            border-bottom: 1px solid #f0f0f0;\n        }\n        .kbi-autocomplete-item:last-child {\n            border-bottom: none;\n        }\n        .kbi-autocomplete-item:hover,\n        .kbi-autocomplete-item.selected {\n            background: #f5f5f5;\n        }\n        .kbi-autocomplete-item.all-destinations {\n            font-weight: 500;\n            color: #161C3E;\n        }\n        \n        \/* Calendar Popup *\/\n        .kbi-calendar-popup {\n            position: absolute;\n            top: 100%;\n            left: 0;\n            background: #fff;\n            border: 2px solid #888;\n            border-radius: 8px;\n            padding: 20px;\n            z-index: 1000;\n            display: none;\n            box-shadow: 0 4px 20px rgba(0,0,0,0.2);\n            width: 100%;\n            left: 0;\n            right: 0;\n        }\n        .kbi-calendar-popup.open {\n            display: block;\n        }\n        .kbi-calendar-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            padding: 12px 0;\n            margin-bottom: 12px;\n            border-bottom: 2px solid #ddd;\n        }\n        .kbi-calendar-nav-btn {\n            width: 38px;\n            height: 38px;\n            border: 2px solid #888;\n            background: #fff;\n            border-radius: 6px;\n            cursor: pointer;\n            font-size: 20px;\n            font-weight: bold;\n            color: #333;\n            transition: all 0.2s;\n        }\n        .kbi-calendar-nav-btn:hover {\n            background: #161C3E;\n            border-color: #161C3E;\n            color: #fff;\n        }\n        .kbi-calendar-title {\n            font-size: 18px;\n            font-weight: 700;\n            color: #1a1a1a;\n        }\n        .kbi-calendar-hint {\n            text-align: center;\n            font-size: 13px;\n            font-weight: 500;\n            color: #555;\n            padding: 10px 0;\n            background: #f5f5f5;\n            border-radius: 6px;\n            margin-bottom: 14px;\n            border: 1px solid #ddd;\n        }\n        .kbi-calendar-weekdays {\n            display: grid;\n            grid-template-columns: repeat(7, 1fr);\n            gap: 4px;\n            margin-bottom: 10px;\n            padding-bottom: 10px;\n            border-bottom: 2px solid #ddd;\n        }\n        .kbi-calendar-weekdays span {\n            text-align: center;\n            font-size: 13px;\n            font-weight: 700;\n            color: #444;\n            padding: 8px 0;\n            text-transform: uppercase;\n        }\n        .kbi-calendar-days {\n            display: grid;\n            grid-template-columns: repeat(7, 1fr);\n            gap: 5px;\n        }\n        .kbi-cal-day {\n            height: 42px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 15px;\n            font-weight: 600;\n            border-radius: 6px;\n            cursor: pointer;\n            border: 2px solid #999;\n            background: #fff;\n            color: #1a1a1a;\n            transition: all 0.15s;\n        }\n        .kbi-cal-day.empty {\n            cursor: default;\n            border: none;\n            background: transparent;\n        }\n        .kbi-cal-day.past {\n            color: #aaa;\n            cursor: default;\n            border-color: #ddd;\n            background: #f5f5f5;\n        }\n        .kbi-cal-day.unavailable {\n            color: #999;\n            cursor: default;\n            border-color: #ddd;\n            background: #f0f0f0;\n            text-decoration: line-through;\n        }\n        .kbi-cal-day.available:hover {\n            border-color: #161C3E;\n            background: #161C3E;\n            color: #fff;\n        }\n        .kbi-cal-day.selected {\n            background: #161C3E;\n            color: #fff;\n            border-color: #161C3E;\n            font-weight: 700;\n        }\n        .kbi-cal-day.selected.checkin {\n            border-radius: 6px 0 0 6px;\n        }\n        .kbi-cal-day.selected.checkout {\n            border-radius: 0 6px 6px 0;\n        }\n        .kbi-cal-day.in-range {\n            background: rgba(22, 28, 62, 0.15);\n            border-color: rgba(22, 28, 62, 0.4);\n            color: #161C3E;\n            font-weight: 700;\n            border-radius: 0;\n        }\n        \n        \/* Guests Selector *\/\n        .kbi-guests-selector {\n            display: flex;\n            align-items: center;\n            border: 2px solid #888;\n            border-radius: 6px;\n            overflow: hidden;\n        }\n        .kbi-guests-btn {\n            width: 42px;\n            height: 40px;\n            border: none;\n            background: #f5f5f5;\n            cursor: pointer;\n            font-size: 16px;\n            color: #666;\n        }\n        .kbi-guests-btn:hover {\n            background: #161C3E;\n            color: #fff;\n        }\n        .kbi-guests-input {\n            flex: 1;\n            border: none !important;\n            text-align: center;\n            font-size: 14px;\n            padding: 10px 5px !important;\n        }\n        .kbi-guests-input:focus {\n            outline: none;\n        }\n        \n        \/* Search Button *\/\n        .kbi-search-submit-btn {\n            padding: 12px 28px;\n            background: #161C3E;\n            color: #fff;\n            border: none;\n            border-radius: 4px;\n            font-size: 14px;\n            font-weight: 600;\n            cursor: pointer;\n            transition: background 0.2s;\n            white-space: nowrap;\n        }\n        .kbi-search-submit-btn:hover {\n            background: #0d1229;\n        }\n        \n        \/* Loader *\/\n        .kbi-search-loader {\n            text-align: center;\n            padding: 40px;\n            color: #666;\n            font-size: 14px;\n        }\n        .kbi-spinner {\n            display: inline-block;\n            width: 20px;\n            height: 20px;\n            border: 2px solid #e0e0e0;\n            border-top-color: #161C3E;\n            border-radius: 50%;\n            animation: kbi-spin 0.8s linear infinite;\n            margin-right: 8px;\n            vertical-align: middle;\n        }\n        @keyframes kbi-spin {\n            to { transform: rotate(360deg); }\n        }\n        \n        \/* Results Container *\/\n        .kbi-search-results-container {\n            margin-top: 20px;\n            display: none;\n        }\n        .kbi-search-results-container.visible {\n            display: block;\n        }\n        \n        \/* Filters Bar *\/\n        .kbi-filters-bar {\n            display: flex;\n            gap: 10px;\n            flex-wrap: wrap;\n            padding: 12px 0;\n            border-bottom: 1px solid #eee;\n            margin-bottom: 16px;\n        }\n        .kbi-filter-btn {\n            padding: 8px 14px;\n            border: 1px solid #ddd;\n            border-radius: 20px;\n            background: #fff;\n            font-size: 13px;\n            cursor: pointer;\n            transition: all 0.2s;\n        }\n        .kbi-filter-btn:hover,\n        .kbi-filter-btn.active {\n            border-color: #161C3E;\n            background: #161C3E;\n            color: #fff;\n        }\n        .kbi-filter-dropdown {\n            position: relative;\n            display: inline-block;\n        }\n        .kbi-filter-dropdown-content {\n            display: none;\n            position: absolute;\n            top: 100%;\n            left: 0;\n            background: #fff;\n            border: 1px solid #ddd;\n            border-radius: 4px;\n            padding: 10px;\n            min-width: 150px;\n            z-index: 100;\n            box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n        }\n        .kbi-filter-dropdown-content.open {\n            display: block;\n        }\n        .kbi-filter-option {\n            display: flex;\n            align-items: center;\n            padding: 6px 0;\n            font-size: 13px;\n            cursor: pointer;\n        }\n        .kbi-filter-option input {\n            margin-right: 8px;\n        }\n        \n        \/* Results Layout *\/\n        .kbi-results-layout {\n            display: flex;\n            gap: 20px;\n            align-items: flex-start;\n        }\n        .kbi-results-list {\n            flex: 1;\n            min-width: 0;\n        }\n        .kbi-results-map {\n            flex: 0 0 50%;\n            height: calc(100vh - 150px);\n            max-height: 700px;\n            min-height: 400px;\n            background: #f5f5f5;\n            border-radius: 8px;\n            position: sticky;\n            top: 100px;\n        }\n        \n        \/* Results Header *\/\n        .kbi-results-header {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            margin-bottom: 16px;\n        }\n        .kbi-results-count {\n            font-size: 14px;\n            color: #666;\n        }\n        .kbi-results-count strong {\n            color: #333;\n        }\n        .kbi-view-toggle {\n            display: flex;\n            gap: 4px;\n        }\n        .kbi-view-btn {\n            width: 32px;\n            height: 32px;\n            border: 1px solid #ddd;\n            background: #fff;\n            border-radius: 4px;\n            cursor: pointer;\n            font-size: 14px;\n        }\n        .kbi-view-btn.active {\n            background: #161C3E;\n            border-color: #161C3E;\n            color: #fff;\n        }\n        \n        \/* Result Cards *\/\n        .kbi-results-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n            gap: 16px;\n        }\n        .kbi-results-list-view .kbi-results-grid {\n            grid-template-columns: 1fr;\n        }\n        .kbi-result-card {\n            background: #fff;\n            border: 1px solid #e0e0e0;\n            border-radius: 8px;\n            overflow: hidden;\n            transition: all 0.2s;\n        }\n        .kbi-result-card:hover {\n            border-color: #161C3E;\n            box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n        }\n        .kbi-result-card a {\n            text-decoration: none;\n            color: inherit;\n            display: block;\n        }\n        .kbi-results-list-view .kbi-result-card a {\n            display: flex;\n        }\n        .kbi-result-image {\n            position: relative;\n            height: 180px;\n            background: #f0f0f0;\n        }\n        .kbi-results-list-view .kbi-result-image {\n            width: 280px;\n            flex-shrink: 0;\n        }\n        .kbi-result-image img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n        }\n        .kbi-result-price-badge {\n            position: absolute;\n            bottom: 10px;\n            right: 10px;\n            background: #161C3E;\n            color: #fff;\n            padding: 6px 12px;\n            border-radius: 4px;\n            font-weight: 600;\n            font-size: 14px;\n        }\n        .kbi-result-content {\n            padding: 14px;\n            flex: 1;\n        }\n        .kbi-result-title {\n            font-size: 16px;\n            font-weight: 600;\n            margin: 0 0 6px;\n            color: #222;\n        }\n        .kbi-result-location {\n            font-size: 13px;\n            color: #666;\n            margin-bottom: 8px;\n        }\n        .kbi-result-features {\n            display: flex;\n            gap: 12px;\n            font-size: 12px;\n            color: #888;\n            margin-bottom: 10px;\n        }\n        .kbi-result-amenities {\n            display: flex;\n            gap: 6px;\n            flex-wrap: wrap;\n            margin-bottom: 10px;\n        }\n        .kbi-amenity-tag {\n            font-size: 11px;\n            padding: 3px 8px;\n            background: #f5f5f5;\n            border-radius: 3px;\n            color: #666;\n        }\n        .kbi-result-footer {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            padding-top: 10px;\n            border-top: 1px solid #eee;\n        }\n        .kbi-result-total {\n            font-size: 13px;\n            color: #666;\n        }\n        .kbi-result-total-price {\n            font-size: 18px;\n            font-weight: 600;\n            color: #161C3E;\n        }\n        \n        \/* Leaflet Map Price Markers (Airbnb style) *\/\n        .kbi-price-marker {\n            background: transparent !important;\n            border: none !important;\n        }\n        .kbi-marker-price {\n            background: #fff;\n            padding: 6px 10px;\n            border-radius: 20px;\n            font-weight: 600;\n            font-size: 13px;\n            box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n            cursor: pointer;\n            transition: all 0.2s;\n            border: 2px solid #fff;\n            white-space: nowrap;\n            text-align: center;\n            color: #161C3E;\n        }\n        .kbi-marker-price:hover,\n        .kbi-marker-hover .kbi-marker-price {\n            background: #161C3E;\n            color: #fff;\n            transform: scale(1.1);\n            border-color: #161C3E;\n        }\n        .kbi-map-popup {\n            min-width: 200px;\n        }\n        .kbi-map-popup img {\n            width: 100%;\n            height: 100px;\n            object-fit: cover;\n            border-radius: 4px;\n            margin-bottom: 8px;\n        }\n        \/* Fix Leaflet popup *\/\n        .leaflet-popup-content-wrapper {\n            border-radius: 8px;\n        }\n        .leaflet-popup-content {\n            margin: 10px;\n        }\n        \n        \/* No Results *\/\n        .kbi-no-results {\n            text-align: center;\n            padding: 60px 20px;\n            color: #666;\n        }\n        .kbi-no-results-icon {\n            font-size: 48px;\n            margin-bottom: 16px;\n            opacity: 0.5;\n        }\n        \n        \/* Responsive *\/\n        @media (max-width: 900px) {\n            .kbi-results-layout {\n                flex-direction: column-reverse;\n            }\n            .kbi-results-list {\n                width: 100%;\n            }\n            .kbi-results-map {\n                flex: none;\n                width: 100%;\n                height: 350px;\n                position: relative;\n                top: 0;\n                margin-bottom: 20px;\n            }\n        }\n        @media (max-width: 600px) {\n            .kbi-search-form {\n                flex-direction: column;\n            }\n            .kbi-search-field {\n                width: 100%;\n            }\n            .kbi-search-submit-btn {\n                width: 100%;\n            }\n            .kbi-results-grid {\n                grid-template-columns: 1fr;\n            }\n            .kbi-results-map {\n                height: 300px;\n            }\n        }\n        <\/style>\n        \n        <div id=\"kbi-search-6ae1dd5167e72\" class=\"kbi-search-widget\">\n            <!-- Search Form -->\n            <div class=\"kbi-search-form\">\n                <!-- Destination with Autocomplete -->\n                <div class=\"kbi-search-field kbi-destination-field\">\n                    <label>Destination<\/label>\n                    <input type=\"text\" \n                           class=\"kbi-destination-input\" \n                           placeholder=\"O\u00f9 voulez-vous aller ?\"\n                           autocomplete=\"off\">\n                    <input type=\"hidden\" class=\"kbi-destination-value\" value=\"\">\n                    <div class=\"kbi-autocomplete-dropdown\"><\/div>\n                <\/div>\n                \n                <!-- Date Range with Single Calendar -->\n                <div class=\"kbi-search-field kbi-dates-field\">\n                    <label>Dates<\/label>\n                    <input type=\"text\" \n                           class=\"kbi-dates-input\" \n                           placeholder=\"Ajouter des dates\"\n                           readonly>\n                    <input type=\"hidden\" class=\"kbi-checkin-value\" value=\"\">\n                    <input type=\"hidden\" class=\"kbi-checkout-value\" value=\"\">\n                    <button type=\"button\" class=\"kbi-dates-clear\" style=\"display:none;\">\u2715<\/button>\n                    <div class=\"kbi-calendar-popup kbi-range-calendar\"><\/div>\n                <\/div>\n                \n                <!-- Guests -->\n                <div class=\"kbi-search-field kbi-guests-field\">\n                    <label>Invit\u00e9s<\/label>\n                    <div class=\"kbi-guests-selector\">\n                        <button type=\"button\" class=\"kbi-guests-btn kbi-guests-minus\">\u2212<\/button>\n                        <input type=\"number\" class=\"kbi-guests-input\" value=\"2\" min=\"1\" max=\"20\" readonly>\n                        <button type=\"button\" class=\"kbi-guests-btn kbi-guests-plus\">+<\/button>\n                    <\/div>\n                <\/div>\n                \n                <!-- Submit -->\n                <div class=\"kbi-search-field\" style=\"flex: 0 0 auto;\">\n                    <label>&nbsp;<\/label>\n                    <button type=\"button\" class=\"kbi-search-submit-btn\">\n                        V\u00e9rifier la disponibilit\u00e9                    <\/button>\n                <\/div>\n            <\/div>\n            \n            <!-- Loader -->\n            <div class=\"kbi-search-loader\" style=\"display: none;\">\n                <span class=\"kbi-spinner\"><\/span> Recherche en cours...            <\/div>\n            \n            <!-- Results Container -->\n            <div class=\"kbi-search-results-container\">\n                <!-- Filters -->\n                <div class=\"kbi-filters-bar\">\n                    <div class=\"kbi-filter-dropdown\">\n                        <button type=\"button\" class=\"kbi-filter-btn\" data-filter=\"bedrooms\">Bedrooms<\/button>\n                        <div class=\"kbi-filter-dropdown-content\">\n                            <label class=\"kbi-filter-option\"><input type=\"radio\" name=\"bedrooms\" value=\"\" checked> Tous<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"radio\" name=\"bedrooms\" value=\"1\"> 1+<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"radio\" name=\"bedrooms\" value=\"2\"> 2+<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"radio\" name=\"bedrooms\" value=\"3\"> 3+<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"radio\" name=\"bedrooms\" value=\"4\"> 4+<\/label>\n                        <\/div>\n                    <\/div>\n                    <div class=\"kbi-filter-dropdown\">\n                        <button type=\"button\" class=\"kbi-filter-btn\" data-filter=\"bathrooms\">Bathrooms<\/button>\n                        <div class=\"kbi-filter-dropdown-content\">\n                            <label class=\"kbi-filter-option\"><input type=\"radio\" name=\"bathrooms\" value=\"\" checked> Tous<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"radio\" name=\"bathrooms\" value=\"1\"> 1+<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"radio\" name=\"bathrooms\" value=\"2\"> 2+<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"radio\" name=\"bathrooms\" value=\"3\"> 3+<\/label>\n                        <\/div>\n                    <\/div>\n                    <div class=\"kbi-filter-dropdown\">\n                        <button type=\"button\" class=\"kbi-filter-btn\" data-filter=\"amenities\">Amenities<\/button>\n                        <div class=\"kbi-filter-dropdown-content kbi-amenities-filter\">\n                            <label class=\"kbi-filter-option\"><input type=\"checkbox\" name=\"amenity\" value=\"wifi\"> WiFi<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"checkbox\" name=\"amenity\" value=\"pool\"> Pool<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"checkbox\" name=\"amenity\" value=\"parking\"> Parking<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"checkbox\" name=\"amenity\" value=\"ac\"> Air Conditioning<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"checkbox\" name=\"amenity\" value=\"kitchen\"> Kitchen<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"checkbox\" name=\"amenity\" value=\"washing\"> Washing Machine<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"checkbox\" name=\"amenity\" value=\"garden\"> Garden<\/label>\n                            <label class=\"kbi-filter-option\"><input type=\"checkbox\" name=\"amenity\" value=\"bbq\"> Barbecue<\/label>\n                        <\/div>\n                        <\/div>\n                        <button type=\"button\" class=\"kbi-filter-btn kbi-filter-reset\" style=\"display:none;\">Remove filters<\/button>\n                <\/div>\n                \n                <!-- Results Header -->\n                <div class=\"kbi-results-header\">\n                    <div class=\"kbi-results-count\"><\/div>\n                    <div class=\"kbi-view-toggle\">\n                        <button type=\"button\" class=\"kbi-view-btn\" data-view=\"grid\" title=\"Griglia\">\u25a6<\/button>\n                        <button type=\"button\" class=\"kbi-view-btn active\" data-view=\"map\" title=\"Mappa\">\u2316<\/button>\n                    <\/div>\n                <\/div>\n                \n                <!-- Results Layout -->\n                <div class=\"kbi-results-layout\">\n                    <div class=\"kbi-results-list\">\n                        <div class=\"kbi-results-grid\"><\/div>\n                    <\/div>\n                    <div class=\"kbi-results-map\">\n                        <div id=\"kbi-search-6ae1dd5167e72-map\" style=\"width:100%;height:100%;\"><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n            \n            <!-- No Results -->\n            <div class=\"kbi-no-results\" style=\"display: none;\">\n                <div class=\"kbi-no-results-icon\">\ud83c\udfe0<\/div>\n                <p>No properties available for the selected criteria.<\/p>\n                <p style=\"font-size: 13px; color: #999;\">Try changing the dates or destination.<\/p>\n            <\/div>\n        <\/div>\n        \n        <script>\n        (function() {\n            var widget = document.getElementById('kbi-search-6ae1dd5167e72');\n            if (!widget) return;\n            \n            \/\/ Data\n            var destinations = [{\"id\":\"1140\",\"name\":\"Carovigno\",\"slug\":\"carovigno\"},{\"id\":\"859\",\"name\":\"Ostuni\",\"slug\":\"ostuni\"},{\"id\":0,\"name\":\"Puglia\",\"slug\":\"puglia\"},{\"id\":\"1132\",\"name\":\"San Michele Salentino\",\"slug\":\"san-michele-salentino\"}];\n            var months = [\"Gennaio\",\"Febbraio\",\"Marzo\",\"Aprile\",\"Maggio\",\"Giugno\",\"Luglio\",\"Agosto\",\"Settembre\",\"Ottobre\",\"Novembre\",\"Dicembre\"];\n            var weekdays = [\"Lun\",\"Mar\",\"Mer\",\"Gio\",\"Ven\",\"Sab\",\"Dom\"];\n            var allListings = [];\n            var filteredListings = [];\n            var map = null;\n            var markers = [];\n            \n            \/\/ Elements\n            var destInput = widget.querySelector('.kbi-destination-input');\n            var destValue = widget.querySelector('.kbi-destination-value');\n            var destDropdown = widget.querySelector('.kbi-autocomplete-dropdown');\n            var datesInput = widget.querySelector('.kbi-dates-input');\n            var datesClear = widget.querySelector('.kbi-dates-clear');\n            var checkinValue = widget.querySelector('.kbi-checkin-value');\n            var checkoutValue = widget.querySelector('.kbi-checkout-value');\n            var rangeCalendar = widget.querySelector('.kbi-range-calendar');\n            var guestsInput = widget.querySelector('.kbi-guests-input');\n            var submitBtn = widget.querySelector('.kbi-search-submit-btn');\n            var loader = widget.querySelector('.kbi-search-loader');\n            var resultsContainer = widget.querySelector('.kbi-search-results-container');\n            var resultsGrid = widget.querySelector('.kbi-results-grid');\n            var resultsCount = widget.querySelector('.kbi-results-count');\n            var noResults = widget.querySelector('.kbi-no-results');\n            var resultsMap = widget.querySelector('.kbi-results-map');\n            var resultsList = widget.querySelector('.kbi-results-list');\n            \n            \/\/ Calendar state\n            var calendarMonth = new Date();\n            var selectingCheckout = false; \/\/ false = selecting checkin, true = selecting checkout\n            \n            \/\/ Initialize\n            initDestinationAutocomplete();\n            initRangeCalendar();\n            initGuestsSelector();\n            initFilters();\n            initViewToggle();\n            initSubmit();\n            \n            \/\/ ==========================================\n            \/\/ DESTINATION AUTOCOMPLETE\n            \/\/ ==========================================\n            function initDestinationAutocomplete() {\n                \/\/ Build dropdown\n                renderDestinationDropdown('');\n                \n                destInput.addEventListener('focus', function() {\n                    renderDestinationDropdown(this.value);\n                    destDropdown.classList.add('open');\n                });\n                \n                destInput.addEventListener('input', function() {\n                    renderDestinationDropdown(this.value);\n                    destDropdown.classList.add('open');\n                });\n                \n                document.addEventListener('click', function(e) {\n                    if (!e.target.closest('.kbi-destination-field')) {\n                        destDropdown.classList.remove('open');\n                    }\n                });\n            }\n            \n            function renderDestinationDropdown(filter) {\n                var html = '<div class=\"kbi-autocomplete-item all-destinations\" data-value=\"\" data-name=\"Tutte le destinazioni\">Tutte le destinazioni<\/div>';\n                \n                var filtered = destinations.filter(function(d) {\n                    return !filter || d.name.toLowerCase().indexOf(filter.toLowerCase()) > -1;\n                });\n                \n                filtered.forEach(function(d) {\n                    html += '<div class=\"kbi-autocomplete-item\" data-value=\"' + d.slug + '\" data-name=\"' + d.name + '\">' + d.name + '<\/div>';\n                });\n                \n                destDropdown.innerHTML = html;\n                \n                \/\/ Bind clicks\n                destDropdown.querySelectorAll('.kbi-autocomplete-item').forEach(function(item) {\n                    item.addEventListener('click', function() {\n                        destInput.value = this.dataset.name;\n                        destValue.value = this.dataset.value;\n                        destDropdown.classList.remove('open');\n                    });\n                });\n            }\n            \n            \/\/ ==========================================\n            \/\/ RANGE CALENDAR (Single calendar for both dates)\n            \/\/ ==========================================\n            function initRangeCalendar() {\n                datesInput.addEventListener('click', function() {\n                    calendarMonth = checkinValue.value ? new Date(checkinValue.value) : new Date();\n                    selectingCheckout = false;\n                    renderRangeCalendar();\n                    rangeCalendar.classList.add('open');\n                });\n                \n                datesClear.addEventListener('click', function(e) {\n                    e.stopPropagation();\n                    checkinValue.value = '';\n                    checkoutValue.value = '';\n                    datesInput.value = '';\n                    datesClear.style.display = 'none';\n                    selectingCheckout = false;\n                });\n                \n                document.addEventListener('click', function(e) {\n                    if (!e.target.closest('.kbi-dates-field')) {\n                        rangeCalendar.classList.remove('open');\n                    }\n                });\n            }\n            \n            function renderRangeCalendar() {\n                var year = calendarMonth.getFullYear();\n                var month = calendarMonth.getMonth();\n                var today = new Date();\n                today.setHours(0,0,0,0);\n                \n                var checkinDate = checkinValue.value ? new Date(checkinValue.value) : null;\n                var checkoutDate = checkoutValue.value ? new Date(checkoutValue.value) : null;\n                \n                var html = '<div class=\"kbi-calendar-header\">';\n                html += '<button type=\"button\" class=\"kbi-calendar-nav-btn kbi-cal-prev\">\u2039<\/button>';\n                html += '<span class=\"kbi-calendar-title\">' + months[month] + ' ' + year + '<\/span>';\n                html += '<button type=\"button\" class=\"kbi-calendar-nav-btn kbi-cal-next\">\u203a<\/button>';\n                html += '<\/div>';\n                \n                \/\/ Selection hint\n                html += '<div class=\"kbi-calendar-hint\">';\n                if (!checkinDate) {\n                    html += 'Seleziona data di arrivo';\n                } else if (!checkoutDate) {\n                    html += 'Seleziona data di partenza';\n                } else {\n                    html += formatDisplayDate(checkinValue.value) + ' \u2192 ' + formatDisplayDate(checkoutValue.value);\n                }\n                html += '<\/div>';\n                \n                html += '<div class=\"kbi-calendar-weekdays\">';\n                weekdays.forEach(function(d) { html += '<span>' + d + '<\/span>'; });\n                html += '<\/div>';\n                \n                html += '<div class=\"kbi-calendar-days\">';\n                \n                var firstDay = new Date(year, month, 1);\n                var lastDay = new Date(year, month + 1, 0);\n                var startDay = (firstDay.getDay() + 6) % 7;\n                \n                for (var i = 0; i < startDay; i++) {\n                    html += '<div class=\"kbi-cal-day empty\"><\/div>';\n                }\n                \n                for (var d = 1; d <= lastDay.getDate(); d++) {\n                    var date = new Date(year, month, d);\n                    date.setHours(12,0,0,0);\n                    var dateStr = formatDate(date);\n                    var isPast = date < today;\n                    var isCheckin = checkinDate && dateStr === formatDate(checkinDate);\n                    var isCheckout = checkoutDate && dateStr === formatDate(checkoutDate);\n                    var inRange = checkinDate && checkoutDate && date > checkinDate && date < checkoutDate;\n                    \n                    var classes = ['kbi-cal-day'];\n                    if (isPast) classes.push('past');\n                    else classes.push('available');\n                    if (isCheckin) classes.push('selected checkin');\n                    if (isCheckout) classes.push('selected checkout');\n                    if (inRange) classes.push('in-range');\n                    \n                    html += '<div class=\"' + classes.join(' ') + '\" data-date=\"' + dateStr + '\">' + d + '<\/div>';\n                }\n                \n                html += '<\/div>';\n                \n                rangeCalendar.innerHTML = html;\n                \n                \/\/ Bind nav\n                rangeCalendar.querySelector('.kbi-cal-prev').addEventListener('click', function(e) {\n                    e.stopPropagation();\n                    calendarMonth.setMonth(calendarMonth.getMonth() - 1);\n                    renderRangeCalendar();\n                });\n                \n                rangeCalendar.querySelector('.kbi-cal-next').addEventListener('click', function(e) {\n                    e.stopPropagation();\n                    calendarMonth.setMonth(calendarMonth.getMonth() + 1);\n                    renderRangeCalendar();\n                });\n                \n                \/\/ Bind day clicks\n                rangeCalendar.querySelectorAll('.kbi-cal-day.available').forEach(function(day) {\n                    day.addEventListener('click', function(e) {\n                        e.stopPropagation();\n                        var dateStr = this.dataset.date;\n                        \n                        if (!selectingCheckout) {\n                            \/\/ First click: set checkin\n                            checkinValue.value = dateStr;\n                            checkoutValue.value = '';\n                            selectingCheckout = true;\n                            renderRangeCalendar();\n                        } else {\n                            \/\/ Second click: set checkout\n                            if (dateStr <= checkinValue.value) {\n                                \/\/ Clicked before checkin, reset and use as new checkin\n                                checkinValue.value = dateStr;\n                                checkoutValue.value = '';\n                                renderRangeCalendar();\n                            } else {\n                                checkoutValue.value = dateStr;\n                                selectingCheckout = false;\n                                updateDatesDisplay();\n                                rangeCalendar.classList.remove('open');\n                            }\n                        }\n                    });\n                });\n            }\n            \n            function updateDatesDisplay() {\n                if (checkinValue.value && checkoutValue.value) {\n                    datesInput.value = formatDisplayDate(checkinValue.value) + ' - ' + formatDisplayDate(checkoutValue.value);\n                    datesClear.style.display = 'block';\n                } else if (checkinValue.value) {\n                    datesInput.value = formatDisplayDate(checkinValue.value) + ' - ...';\n                    datesClear.style.display = 'block';\n                } else {\n                    datesInput.value = '';\n                    datesClear.style.display = 'none';\n                }\n            }\n            \n            \/\/ ==========================================\n            \/\/ GUESTS SELECTOR\n            \/\/ ==========================================\n            function initGuestsSelector() {\n                widget.querySelector('.kbi-guests-minus').addEventListener('click', function() {\n                    var val = parseInt(guestsInput.value);\n                    if (val > 1) guestsInput.value = val - 1;\n                });\n                \n                widget.querySelector('.kbi-guests-plus').addEventListener('click', function() {\n                    var val = parseInt(guestsInput.value);\n                    var max = parseInt(guestsInput.max);\n                    if (val < max) guestsInput.value = val + 1;\n                });\n            }\n            \n            \/\/ ==========================================\n            \/\/ FILTERS\n            \/\/ ==========================================\n            function initFilters() {\n                \/\/ Toggle filter dropdowns\n                widget.querySelectorAll('.kbi-filter-btn[data-filter]').forEach(function(btn) {\n                    btn.addEventListener('click', function() {\n                        var dropdown = this.nextElementSibling;\n                        var isOpen = dropdown.classList.contains('open');\n                        \n                        \/\/ Close all\n                        widget.querySelectorAll('.kbi-filter-dropdown-content').forEach(function(d) {\n                            d.classList.remove('open');\n                        });\n                        \n                        if (!isOpen) dropdown.classList.add('open');\n                    });\n                });\n                \n                \/\/ Filter change - radio buttons\n                widget.querySelectorAll('.kbi-filter-option input[type=\"radio\"]').forEach(function(input) {\n                    input.addEventListener('change', function() {\n                        applyFilters();\n                        this.closest('.kbi-filter-dropdown-content').classList.remove('open');\n                    });\n                });\n                \n                \/\/ Filter change - checkboxes (amenities)\n                widget.querySelectorAll('.kbi-filter-option input[type=\"checkbox\"]').forEach(function(input) {\n                    input.addEventListener('change', function() {\n                        applyFilters();\n                    });\n                });\n                \n                \/\/ Reset filters\n                widget.querySelector('.kbi-filter-reset').addEventListener('click', function() {\n                    widget.querySelectorAll('.kbi-filter-option input[type=\"radio\"]').forEach(function(input) {\n                        input.checked = input.value === '';\n                    });\n                    widget.querySelectorAll('.kbi-filter-option input[type=\"checkbox\"]').forEach(function(input) {\n                        input.checked = false;\n                    });\n                    applyFilters();\n                });\n                \n                \/\/ Close dropdowns on outside click\n                document.addEventListener('click', function(e) {\n                    if (!e.target.closest('.kbi-filter-dropdown')) {\n                        widget.querySelectorAll('.kbi-filter-dropdown-content').forEach(function(d) {\n                            d.classList.remove('open');\n                        });\n                    }\n                });\n            }\n            \n            function applyFilters() {\n                var bedroomsMin = widget.querySelector('input[name=\"bedrooms\"]:checked')?.value || '';\n                var bathroomsMin = widget.querySelector('input[name=\"bathrooms\"]:checked')?.value || '';\n                \n                \/\/ Get selected amenities\n                var selectedAmenities = [];\n                widget.querySelectorAll('input[name=\"amenity\"]:checked').forEach(function(input) {\n                    selectedAmenities.push(input.value);\n                });\n                \n                filteredListings = allListings.filter(function(listing) {\n                    if (bedroomsMin && listing.bedrooms < parseInt(bedroomsMin)) return false;\n                    if (bathroomsMin && listing.bathrooms < parseInt(bathroomsMin)) return false;\n                    \n                    \/\/ Check amenities\n                    if (selectedAmenities.length > 0 && listing.amenities) {\n                        var listingAmenities = listing.amenities.map(function(a) { return a.toLowerCase(); });\n                        for (var i = 0; i < selectedAmenities.length; i++) {\n                            var amenity = selectedAmenities[i];\n                            var found = listingAmenities.some(function(la) {\n                                return la.indexOf(amenity) > -1 || \n                                       (amenity === 'wifi' && la.indexOf('wi-fi') > -1) ||\n                                       (amenity === 'pool' && la.indexOf('piscina') > -1) ||\n                                       (amenity === 'parking' && (la.indexOf('parcheggio') > -1 || la.indexOf('garage') > -1)) ||\n                                       (amenity === 'ac' && (la.indexOf('aria condizionata') > -1 || la.indexOf('climatizzatore') > -1)) ||\n                                       (amenity === 'kitchen' && la.indexOf('cucina') > -1) ||\n                                       (amenity === 'washing' && la.indexOf('lavatrice') > -1) ||\n                                       (amenity === 'garden' && la.indexOf('giardino') > -1) ||\n                                       (amenity === 'bbq' && la.indexOf('barbecue') > -1);\n                            });\n                            if (!found) return false;\n                        }\n                    }\n                    \n                    return true;\n                });\n                \n                \/\/ Show\/hide reset button\n                var resetBtn = widget.querySelector('.kbi-filter-reset');\n                if (bedroomsMin || bathroomsMin || selectedAmenities.length > 0) {\n                    resetBtn.style.display = 'inline-block';\n                } else {\n                    resetBtn.style.display = 'none';\n                }\n                \n                renderResults();\n            }\n            \n            \/\/ ==========================================\n            \/\/ VIEW TOGGLE\n            \/\/ ==========================================\n            function initViewToggle() {\n                widget.querySelectorAll('.kbi-view-btn').forEach(function(btn) {\n                    btn.addEventListener('click', function() {\n                        widget.querySelectorAll('.kbi-view-btn').forEach(function(b) { b.classList.remove('active'); });\n                        this.classList.add('active');\n                        \n                        var view = this.dataset.view;\n                        \n                        if (view === 'map') {\n                            resultsMap.style.display = 'block';\n                            initMap();\n                        } else {\n                            resultsMap.style.display = 'none';\n                        }\n                    });\n                });\n            }\n            \n            \/\/ ==========================================\n            \/\/ SEARCH\n            \/\/ ==========================================\n            function initSubmit() {\n                submitBtn.addEventListener('click', doSearch);\n            }\n            \n            function doSearch() {\n                var destination = destValue.value;\n                var checkin = checkinValue.value;\n                var checkout = checkoutValue.value;\n                var guests = guestsInput.value;\n                \n                \/\/ Le date sono ora opzionali\n                var hasDates = checkin && checkout;\n                \n                console.log('KBI Search:', {destination: destination, checkin: checkin, checkout: checkout, guests: guests, hasDates: hasDates});\n                \n                loader.style.display = 'block';\n                resultsContainer.classList.remove('visible');\n                noResults.style.display = 'none';\n                \n                var formData = new FormData();\n                formData.append('action', 'kbi_search_available');\n                formData.append('destination', destination);\n                formData.append('checkin', checkin || '');\n                formData.append('checkout', checkout || '');\n                formData.append('guests', guests);\n                formData.append('no_dates', hasDates ? '0' : '1');\n                \n                fetch('https:\/\/www.tipicovillas.com\/wp-admin\/admin-ajax.php', {\n                    method: 'POST',\n                    body: formData\n                })\n                .then(function(r) { return r.json(); })\n                .then(function(data) {\n                    console.log('KBI Search Response:', data);\n                    loader.style.display = 'none';\n                    \n                    if (data.success && data.data && data.data.listings && data.data.listings.length > 0) {\n                        allListings = data.data.listings;\n                        filteredListings = allListings.slice();\n                        console.log('KBI Found', allListings.length, 'listings');\n                        renderResults();\n                        resultsContainer.classList.add('visible');\n                        \/\/ Inizializza mappa se vista mappa \u00e8 attiva\n                        if (widget.querySelector('.kbi-view-btn[data-view=\"map\"].active')) {\n                            initMap();\n                        }\n                    } else {\n                        console.log('KBI No results or error:', data);\n                        noResults.style.display = 'block';\n                    }\n                })\n                .catch(function(err) {\n                    loader.style.display = 'none';\n                    console.error('KBI Search error:', err);\n                    noResults.style.display = 'block';\n                });\n            }\n            \n            \/\/ ==========================================\n            \/\/ RENDER RESULTS\n            \/\/ ==========================================\n            function renderResults() {\n                resultsCount.innerHTML = '<strong>' + filteredListings.length + '<\/strong> strutture trovate';\n                \n                var hasDates = checkinValue.value && checkoutValue.value;\n                \n                var html = '';\n                filteredListings.forEach(function(listing) {\n                    var url = listing.url;\n                    if (hasDates) {\n                        url += '?checkin=' + checkinValue.value + '&checkout=' + checkoutValue.value + '&guests=' + guestsInput.value;\n                    }\n                    \n                    html += '<div class=\"kbi-result-card\" data-id=\"' + listing.id + '\" data-lat=\"' + (listing.lat || '') + '\" data-lng=\"' + (listing.lng || '') + '\">';\n                    html += '<a href=\"' + url + '\">';\n                    html += '<div class=\"kbi-result-image\">';\n                    if (listing.thumbnail) {\n                        html += '<img decoding=\"async\" src=\"' + listing.thumbnail + '\" alt=\"\" loading=\"lazy\">';\n                    }\n                    html += '<div class=\"kbi-result-price-badge\">\u20ac' + Math.round(listing.price_per_night) + '\/notte<\/div>';\n                    html += '<\/div>';\n                    html += '<div class=\"kbi-result-content\">';\n                    html += '<h3 class=\"kbi-result-title\">' + listing.title + '<\/h3>';\n                    if (listing.city) {\n                        html += '<div class=\"kbi-result-location\">' + listing.city + '<\/div>';\n                    }\n                    html += '<div class=\"kbi-result-features\">';\n                    if (listing.bedrooms) html += '<span>' + listing.bedrooms + ' camere<\/span>';\n                    if (listing.bathrooms) html += '<span>' + listing.bathrooms + ' bagni<\/span>';\n                    if (listing.max_guests) html += '<span>' + listing.max_guests + ' ospiti<\/span>';\n                    html += '<\/div>';\n                    \/\/ Mostra totale solo se ci sono date\n                    if (hasDates && listing.grand_total > 0) {\n                        html += '<div class=\"kbi-result-footer\">';\n                        html += '<span class=\"kbi-result-total\">Totale ' + listing.nights + ' notti<\/span>';\n                        html += '<span class=\"kbi-result-total-price\">\u20ac' + Math.round(listing.grand_total) + '<\/span>';\n                        html += '<\/div>';\n                    }\n                    html += '<\/div>';\n                    html += '<\/a>';\n                    html += '<\/div>';\n                });\n                \n                resultsGrid.innerHTML = html;\n                \n                \/\/ Update map if visible\n                if (resultsMap.style.display !== 'none' && map) {\n                    updateMapMarkers();\n                }\n            }\n            \n            \/\/ ==========================================\n            \/\/ MAP (Leaflet + OpenStreetMap - FREE)\n            \/\/ ==========================================\n            function initMap() {\n                if (map) {\n                    updateMapMarkers();\n                    return;\n                }\n                \n                \/\/ Load Leaflet if not loaded\n                if (typeof L === 'undefined') {\n                    \/\/ Load CSS\n                    var link = document.createElement('link');\n                    link.rel = 'stylesheet';\n                    link.href = 'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css';\n                    document.head.appendChild(link);\n                    \n                    \/\/ Load JS\n                    var script = document.createElement('script');\n                    script.src = 'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js';\n                    script.onload = function() {\n                        createMap();\n                    };\n                    document.head.appendChild(script);\n                } else {\n                    createMap();\n                }\n            }\n            \n            function createMap() {\n                var mapElement = document.getElementById('kbi-search-6ae1dd5167e72-map');\n                \n                \/\/ Default center (Puglia)\n                var center = [40.7917, 17.1028];\n                \n                map = L.map(mapElement).setView(center, 9);\n                \n                \/\/ OpenStreetMap tiles (FREE)\n                L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {\n                    attribution: '\u00a9 OpenStreetMap contributors',\n                    maxZoom: 18\n                }).addTo(map);\n                \n                updateMapMarkers();\n            }\n            \n            function updateMapMarkers() {\n                \/\/ Clear existing markers\n                markers.forEach(function(m) { map.removeLayer(m); });\n                markers = [];\n                \n                var bounds = [];\n                \n                filteredListings.forEach(function(listing) {\n                    if (!listing.lat || !listing.lng) return;\n                    \n                    var lat = parseFloat(listing.lat);\n                    var lng = parseFloat(listing.lng);\n                    bounds.push([lat, lng]);\n                    \n                    \/\/ Custom price marker (Airbnb style)\n                    var priceIcon = L.divIcon({\n                        className: 'kbi-price-marker',\n                        html: '<div class=\"kbi-marker-price\">\u20ac' + Math.round(listing.price_per_night) + '<\/div>',\n                        iconSize: [60, 30],\n                        iconAnchor: [30, 15]\n                    });\n                    \n                    var marker = L.marker([lat, lng], { icon: priceIcon }).addTo(map);\n                    \n                    \/\/ Popup with listing info\n                    var url = listing.url;\n                    var hasDates = checkinValue.value && checkoutValue.value;\n                    if (hasDates) {\n                        url += '?checkin=' + checkinValue.value + '&checkout=' + checkoutValue.value + '&guests=' + guestsInput.value;\n                    }\n                    \n                    var popupContent = '<div class=\"kbi-map-popup\">' +\n                        (listing.thumbnail ? '<img decoding=\"async\" src=\"' + listing.thumbnail + '\" style=\"width:100%;height:100px;object-fit:cover;border-radius:4px;margin-bottom:8px;\">' : '') +\n                        '<strong>' + listing.title + '<\/strong><br>' +\n                        '<small style=\"color:#666;\">' + (listing.city || '') + '<\/small><br>';\n                    \n                    \/\/ Mostra totale solo se ci sono date\n                    if (hasDates && listing.grand_total > 0) {\n                        popupContent += '<div style=\"margin-top:6px;font-weight:600;color:#161C3E;\">\u20ac' + Math.round(listing.grand_total) + ' totale<\/div>';\n                    } else {\n                        popupContent += '<div style=\"margin-top:6px;font-weight:600;color:#161C3E;\">\u20ac' + Math.round(listing.price_per_night) + '\/notte<\/div>';\n                    }\n                    \n                    popupContent += '<a href=\"' + url + '\" style=\"display:inline-block;margin-top:8px;padding:6px 12px;background:#161C3E;color:#fff;text-decoration:none;border-radius:4px;font-size:12px;\">Vedi dettagli<\/a>' +\n                        '<\/div>';\n                    \n                    marker.bindPopup(popupContent, { maxWidth: 250 });\n                    \n                    \/\/ Highlight on hover\n                    marker.on('mouseover', function() {\n                        this.getElement().classList.add('kbi-marker-hover');\n                    });\n                    marker.on('mouseout', function() {\n                        this.getElement().classList.remove('kbi-marker-hover');\n                    });\n                    \n                    markers.push(marker);\n                });\n                \n                \/\/ Fit bounds if we have markers\n                if (bounds.length > 0) {\n                    \/\/ Usa L.latLngBounds per un controllo migliore\n                    var latLngBounds = L.latLngBounds(bounds);\n                    \n                    \/\/ Zoom sui risultati con limiti\n                    map.fitBounds(latLngBounds, { \n                        padding: [50, 50],\n                        maxZoom: 14  \/\/ Non zoommare troppo vicino\n                    });\n                    \n                    \/\/ Se lo zoom \u00e8 troppo lontano (troppi risultati sparsi), limita\n                    if (map.getZoom() < 8) {\n                        map.setZoom(8);\n                    }\n                }\n            }\n            \n            \/\/ ==========================================\n            \/\/ UTILITIES\n            \/\/ ==========================================\n            function formatDate(date) {\n                if (typeof date === 'string') date = new Date(date);\n                var y = date.getFullYear();\n                var m = String(date.getMonth() + 1).padStart(2, '0');\n                var d = String(date.getDate()).padStart(2, '0');\n                return y + '-' + m + '-' + d;\n            }\n            \n            function formatDisplayDate(dateStr) {\n                if (!dateStr) return '';\n                var parts = dateStr.split('-');\n                return parts[2] + '\/' + parts[1] + '\/' + parts[0];\n            }\n            \n        })();\n        <\/script>\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8dc5672 e-flex e-con-boxed e-con e-parent\" data-id=\"8dc5672\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-97f8b07 e-con-full e-flex e-con e-child\" data-id=\"97f8b07\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e2b00d8 elementor-widget elementor-widget-homey_elementor_section_title\" data-id=\"e2b00d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"homey_elementor_section_title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t            <div class=\"homey_section_title_wrap_elementor homey-module module-title section-title-module\">\n                                    <h2 class=\"homey_section_title\">Un nouveau standard d\u2019hospitalit\u00e9 dans les Pouilles<\/h2>\n                \n                                    <p class=\"homey_section_subtitle sub-heading\">Nous sommes passionn\u00e9s par l\u2019art de l\u2019accueil et pr\u00eats \u00e0 d\u00e9passer vos attentes. TIPICO Collection est le point de d\u00e9part pour vivre le meilleur des Pouilles.<\/p>\n                            <\/div>\n            \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a93e876 e-con-full e-flex e-con e-child\" data-id=\"a93e876\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-30d10420 e-con-full e-flex e-con e-child\" data-id=\"30d10420\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-5bd943f3 e-con-full e-flex e-con e-child\" data-id=\"5bd943f3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-18c0ef62 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"18c0ef62\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"#\" tabindex=\"-1\"><img decoding=\"async\" src=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/30.jpg\" title=\"\" alt=\"\" class=\"elementor-animation-grow\" loading=\"lazy\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"#\">Cours de cuisine des Pouilles<\/a><\/h4><p class=\"elementor-image-box-description\">D\u00e9couvrez les secrets de la tradition gastronomique des Pouilles \u00e0 travers des cours pratiques anim\u00e9s par des chefs locaux. Une exp\u00e9rience authentique pour apprendre, cuisiner et savourer les plats embl\u00e9matiques du territoire.<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5e01ddd e-con-full e-flex e-con e-child\" data-id=\"5e01ddd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0b8b989 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"0b8b989\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"#\" tabindex=\"-1\"><img fetchpriority=\"high\" decoding=\"async\" width=\"400\" height=\"267\" src=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/16602344903859629750431462388563715871022o.jpg.webp\" class=\"elementor-animation-grow attachment-full size-full wp-image-30079\" alt=\"\" srcset=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/16602344903859629750431462388563715871022o.jpg.webp 400w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/16602344903859629750431462388563715871022o.jpg-300x200.webp 300w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/16602344903859629750431462388563715871022o.jpg-120x80.webp 120w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"#\">D\u00e9gustations de vins locaux<\/a><\/h4><p class=\"elementor-image-box-description\">Un voyage \u00e0 travers les saveurs et les parfums des Pouilles, \u00e0 la d\u00e9couverte de caves s\u00e9lectionn\u00e9es et de c\u00e9pages autochtones. Des d\u00e9gustations guid\u00e9es pour d\u00e9couvrir le territoire \u00e0 travers le vin.<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-47e7d66 e-con-full e-flex e-con e-child\" data-id=\"47e7d66\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b08edb4 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"b08edb4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"#\" tabindex=\"-1\"><img decoding=\"async\" width=\"860\" height=\"574\" src=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/italy-alberobello-apulia-trulli-street.jpg\" class=\"elementor-animation-grow attachment-full size-full wp-image-30080\" alt=\"\" srcset=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/italy-alberobello-apulia-trulli-street.jpg 860w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/italy-alberobello-apulia-trulli-street-300x200.jpg 300w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/italy-alberobello-apulia-trulli-street-768x513.jpg 768w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/italy-alberobello-apulia-trulli-street-450x300.jpg 450w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/italy-alberobello-apulia-trulli-street-120x80.jpg 120w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/italy-alberobello-apulia-trulli-street-749x500.jpg 749w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"#\">Itin\u00e9raires culturels et historiques<\/a><\/h4><p class=\"elementor-image-box-description\">Explorez des villages, des villes d\u2019art et des lieux embl\u00e9matiques des Pouilles accompagn\u00e9 de guides experts. Des itin\u00e9raires con\u00e7us pour vivre l\u2019histoire, l\u2019architecture et les traditions locales de mani\u00e8re authentique.<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c3cba54 e-con-full e-flex e-con e-child\" data-id=\"c3cba54\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a341691 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"a341691\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"#\" tabindex=\"-1\"><img decoding=\"async\" width=\"1920\" height=\"1280\" src=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge.webp\" class=\"elementor-animation-grow attachment-full size-full wp-image-30081\" alt=\"\" srcset=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge.webp 1920w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge-300x200.webp 300w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge-1024x683.webp 1024w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge-768x512.webp 768w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge-1536x1024.webp 1536w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge-450x300.webp 450w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge-1140x760.webp 1140w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge-120x80.webp 120w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/d1617a93-c45c-4af7-942c-9d5a6291e3fb_boat-tour-of-the-polignano-a-mare-caves-with-aperitif-xlarge-750x500.webp 750w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"#\">Excursions en bateau le long de la c\u00f4te<\/a><\/h4><p class=\"elementor-image-box-description\">Vivez la mer depuis une perspective exclusive en naviguant le long de la c\u00f4te des Pouilles, entre criques, grottes et eaux cristallines. Une exp\u00e9rience relaxante et suggestive, id\u00e9ale pour d\u00e9couvrir le littoral en toute intimit\u00e9.<\/p><\/div><\/div>\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<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-781d198 e-flex e-con-boxed e-con e-parent\" data-id=\"781d198\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f3bb540 e-con-full e-flex e-con e-child\" data-id=\"f3bb540\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-676477d elementor-widget elementor-widget-homey_elementor_section_title\" data-id=\"676477d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"homey_elementor_section_title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t            <div class=\"homey_section_title_wrap_elementor homey-module module-title section-title-module\">\n                                    <h2 class=\"homey_section_title\">Vivez les Pouilles dont vous r\u00eavez<\/h2>\n                \n                                    <p class=\"homey_section_subtitle sub-heading\">Demeures uniques entre mer, nature et tradition<\/p>\n                            <\/div>\n            \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-039667d e-con-full e-flex e-con e-child\" data-id=\"039667d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-52ecd0b e-con-full e-flex e-con e-child\" data-id=\"52ecd0b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-45545a2 e-con-full e-flex e-con e-child\" data-id=\"45545a2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-33e48c4 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"33e48c4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"#\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"1310\" height=\"875\" src=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/01\/17267685501730-2.jpg\" class=\"elementor-animation-grow attachment-full size-full wp-image-21898\" alt=\"\" srcset=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/01\/17267685501730-2.jpg 1310w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/01\/17267685501730-2-300x200.jpg 300w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/01\/17267685501730-2-1024x684.jpg 1024w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/01\/17267685501730-2-768x513.jpg 768w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/01\/17267685501730-2-450x300.jpg 450w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/01\/17267685501730-2-1140x760.jpg 1140w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/01\/17267685501730-2-120x80.jpg 120w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/01\/17267685501730-2-749x500.jpg 749w\" sizes=\"(max-width: 1310px) 100vw, 1310px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"#\">Villas pour familles dans les Pouilles<\/a><\/h4><p class=\"elementor-image-box-description\">Des espaces spacieux, du confort et du divertissement pour petits et grands.<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dc47b95 e-con-full e-flex e-con e-child\" data-id=\"dc47b95\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c750125 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"c750125\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"#\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_39_59.png\" class=\"elementor-animation-grow attachment-full size-full wp-image-30322\" alt=\"\" srcset=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_39_59.png 1536w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_39_59-300x200.png 300w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_39_59-1024x683.png 1024w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_39_59-768x512.png 768w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_39_59-450x300.png 450w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_39_59-1140x760.png 1140w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_39_59-120x80.png 120w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_39_59-750x500.png 750w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"#\">Villas \u00e0 louer pr\u00e8s de la mer<\/a><\/h4><p class=\"elementor-image-box-description\">Des couchers de soleil \u00e0 couper le souffle et la proximit\u00e9 des plus belles plages.<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c5260fb e-con-full e-flex e-con e-child\" data-id=\"c5260fb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a6271d4 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"a6271d4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"#\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_40_54.png\" class=\"elementor-animation-grow attachment-full size-full wp-image-30321\" alt=\"\" srcset=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_40_54.png 1536w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_40_54-300x200.png 300w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_40_54-1024x683.png 1024w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_40_54-768x512.png 768w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_40_54-450x300.png 450w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_40_54-1140x760.png 1140w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_40_54-120x80.png 120w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-12-feb-2026-10_40_54-750x500.png 750w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"#\">Masserie de Charme <\/a><\/h4><p class=\"elementor-image-box-description\">\u00c9l\u00e9gance pugliese, piscines \u00e0 d\u00e9bordement et services exclusifs.<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f4c6bf2 e-con-full e-flex e-con e-child\" data-id=\"f4c6bf2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-80cecba elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"80cecba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"#\" tabindex=\"-1\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-11-feb-2026-18_03_36.png\" class=\"elementor-animation-grow attachment-full size-full wp-image-30078\" alt=\"\" srcset=\"https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-11-feb-2026-18_03_36.png 1536w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-11-feb-2026-18_03_36-300x200.png 300w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-11-feb-2026-18_03_36-1024x683.png 1024w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-11-feb-2026-18_03_36-768x512.png 768w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-11-feb-2026-18_03_36-450x300.png 450w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-11-feb-2026-18_03_36-1140x760.png 1140w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-11-feb-2026-18_03_36-120x80.png 120w, https:\/\/www.tipicovillas.com\/wp-content\/uploads\/2026\/02\/ChatGPT-Image-11-feb-2026-18_03_36-750x500.png 750w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"#\">Trulli et demeures typiques<\/a><\/h4><p class=\"elementor-image-box-description\">Authentiques villas au charme unique.<\/p><\/div><\/div>\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<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4a5d3dc3 e-flex e-con-boxed e-con e-parent\" data-id=\"4a5d3dc3\" 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-87fee98 elementor-widget elementor-widget-homey_elementor_section_title\" data-id=\"87fee98\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"homey_elementor_section_title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t            <div class=\"homey_section_title_wrap_elementor homey-module module-title section-title-module\">\n                                    <h2 class=\"homey_section_title\">R\u00e9servez en toute confiance, nous sommes \u00e0 vos c\u00f4t\u00e9s<\/h2>\n                \n                            <\/div>\n            \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6014bdf elementor-widget elementor-widget-text-editor\" data-id=\"6014bdf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p data-start=\"326\" data-end=\"687\">Louer une villa \u00e0 l\u2019\u00e9tranger peut susciter des doutes et des h\u00e9sitations, et c\u2019est tout \u00e0 fait compr\u00e9hensible.<\/p><p data-start=\"326\" data-end=\"687\">\u00a0<\/p><p data-start=\"29\" data-end=\"351\">C\u2019est pourquoi, chez TIPICO Collection, nous pla\u00e7ons la transparence au c\u0153ur de chaque exp\u00e9rience : chaque propri\u00e9t\u00e9 est soigneusement v\u00e9rifi\u00e9e, document\u00e9e avec des photographies r\u00e9elles et des descriptions pr\u00e9cises, afin que ce que vous voyez en ligne corresponde exactement \u00e0 ce que vous trouverez \u00e0 votre arriv\u00e9e.<\/p><p data-start=\"353\" data-end=\"567\" data-is-last-node=\"\" data-is-only-node=\"\">Notre \u00e9quipe est toujours disponible pour r\u00e9pondre \u00e0 toutes vos questions, clarifier chaque d\u00e9tail et vous accompagner \u00e0 chaque \u00e9tape, avant et pendant votre s\u00e9jour. Aucune surprise, seulement de la s\u00e9r\u00e9nit\u00e9.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c65cc75 elementor-align-center elementor-mobile-align-center elementor-widget elementor-widget-button\" data-id=\"6c65cc75\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Contactez-nous avant de r\u00e9server<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\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":"<p>Des exp\u00e9riences authentiques, cr\u00e9\u00e9es autour de vous Au-del\u00e0 du confort de nos villas, nous cr\u00e9ons des exp\u00e9riences personnalis\u00e9es pour enrichir votre s\u00e9jour. De la d\u00e9couverte des saveurs locales aux activit\u00e9s sur le territoire, chaque proposition est pens\u00e9e pour vous faire vivre les Pouilles de mani\u00e8re authentique et m\u00e9morable. Un nouveau standard d\u2019hospitalit\u00e9 dans les Pouilles [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-30159","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tipicovillas.com\/fr\/wp-json\/wp\/v2\/pages\/30159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tipicovillas.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.tipicovillas.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.tipicovillas.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tipicovillas.com\/fr\/wp-json\/wp\/v2\/comments?post=30159"}],"version-history":[{"count":5,"href":"https:\/\/www.tipicovillas.com\/fr\/wp-json\/wp\/v2\/pages\/30159\/revisions"}],"predecessor-version":[{"id":30387,"href":"https:\/\/www.tipicovillas.com\/fr\/wp-json\/wp\/v2\/pages\/30159\/revisions\/30387"}],"wp:attachment":[{"href":"https:\/\/www.tipicovillas.com\/fr\/wp-json\/wp\/v2\/media?parent=30159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}