{"id":30161,"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:40:54","modified_gmt":"2026-03-11T08:40:54","slug":"comprobar-disponibilidad","status":"publish","type":"page","link":"https:\/\/www.tipicovillas.com\/es\/comprobar-disponibilidad\/","title":{"rendered":"Comprobar Disponibilidad"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"30161\" class=\"elementor elementor-30161 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\">Experiencias aut\u00e9nticas, creadas a tu medida<\/h2>\n                \n                                    <p class=\"homey_section_subtitle sub-heading\">M\u00e1s all\u00e1 del confort de nuestras villas, te ofrecemos experiencias personalizadas para enriquecer tu estancia en Puglia. Desde el descubrimiento de la gastronom\u00eda local hasta actividades \u00fanicas en el territorio, cada propuesta est\u00e1 dise\u00f1ada para que vivas Puglia de forma aut\u00e9ntica, exclusiva e inolvidable.<\/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-6ab267af15dad\" 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>Destino<\/label>\n                    <input type=\"text\" \n                           class=\"kbi-destination-input\" \n                           placeholder=\"\u00bfA d\u00f3nde quieres ir?\"\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>Fechas<\/label>\n                    <input type=\"text\" \n                           class=\"kbi-dates-input\" \n                           placeholder=\"A\u00f1adir fechas\"\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>Huespedes<\/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                        Comprobar disponibilidad                    <\/button>\n                <\/div>\n            <\/div>\n            \n            <!-- Loader -->\n            <div class=\"kbi-search-loader\" style=\"display: none;\">\n                <span class=\"kbi-spinner\"><\/span> Investigaci\u00f3n en curso...            <\/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> Todos<\/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> Todos<\/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-6ab267af15dad-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-6ab267af15dad');\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-6ab267af15dad-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 nuevo est\u00e1ndar de hospitalidad en Puglia<\/h2>\n                \n                                    <p class=\"homey_section_subtitle sub-heading\">Nos apasiona el arte de la hospitalidad y nos comprometemos a superar tus expectativas. TIPICO Collection es el punto de partida ideal para descubrir y vivir lo mejor de Puglia, entre villas exclusivas, experiencias aut\u00e9nticas y hospitalidad de excelencia.<\/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=\"#\">Clases de cocina apuliana tradicional.<\/a><\/h4><p class=\"elementor-image-box-description\">Descubre los secretos de la gastronom\u00eda tradicional apuliana con clases de cocina pr\u00e1cticas guiadas por chefs locales. Una experiencia aut\u00e9ntica para aprender, cocinar y degustar los platos m\u00e1s representativos de Puglia.<\/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-30121\" 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=\"#\">Catas de vinos locales de Puglia<\/a><\/h4><p class=\"elementor-image-box-description\">Un viaje entre los sabores y aromas de Puglia, descubriendo bodegas seleccionadas y variedades aut\u00f3ctonas. Degustaciones guiadas para explorar el territorio y su tradici\u00f3n vin\u00edcola a trav\u00e9s del vino.<\/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-30122\" 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=\"#\">Rutas culturales e hist\u00f3ricas<\/a><\/h4><p class=\"elementor-image-box-description\">Explora pueblos, ciudades de arte y lugares emblem\u00e1ticos de Puglia con gu\u00edas expertas. Itinerarios dise\u00f1ados para descubrir la historia, la arquitectura y las tradiciones locales de forma aut\u00e9ntica.<\/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-30123\" 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=\"#\">Excursiones en barco por la costa<\/a><\/h4><p class=\"elementor-image-box-description\">Vive el mar desde una perspectiva exclusiva navegando por la costa de Puglia, entre calas escondidas, cuevas naturales y aguas cristalinas. Una experiencia relajante y \u00fanica para descubrir el litoral en total privacidad.<\/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\">Vive la Puglia de tus sue\u00f1os<\/h2>\n                \n                                    <p class=\"homey_section_subtitle sub-heading\">Villas \u00fanicas entre mar, naturaleza y tradici\u00f3n<\/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-22174\" 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 para familias en Puglia<\/a><\/h4><p class=\"elementor-image-box-description\">Amplios espacios, m\u00e1ximo confort y diversi\u00f3n para toda la familia.<\/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-30317\" 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 en alquiler cerca del mar<\/a><\/h4><p class=\"elementor-image-box-description\">Disfruta de atardeceres espectaculares y acceso directo a algunas de las playas m\u00e1s hermosas de Puglia.<\/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-30318\" 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=\"#\">Masser\u00edas con encanto en Puglia<\/a><\/h4><p class=\"elementor-image-box-description\">Elegancia apuliana, piscinas infinity y servicios exclusivos para una estancia \u00fanica en Puglia.<\/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-30120\" 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 y casas t\u00edpicas de Puglia<\/a><\/h4><p class=\"elementor-image-box-description\">Aut\u00e9nticos alojamientos apulianos con encanto \u00fanico, para vivir la verdadera esencia de Puglia.<\/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\">Reserva con confianza y disfruta de una asistencia dedicada<\/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=\"0\" data-end=\"109\"><strong data-start=\"0\" data-end=\"109\">Alquilar una villa en el extranjero puede generar dudas o incertidumbre, y es completamente comprensible.<\/strong><\/p><p data-start=\"111\" data-end=\"397\">Por eso, en <strong data-start=\"123\" data-end=\"144\">TIPICO Collection<\/strong> ponemos la transparencia en el centro de cada experiencia: cada propiedad es cuidadosamente verificada y presentada con fotograf\u00edas reales y descripciones precisas, para que lo que ves online corresponda exactamente con lo que encontrar\u00e1s a tu llegada.<\/p><p data-start=\"399\" data-end=\"606\" data-is-last-node=\"\" data-is-only-node=\"\">Nuestro equipo est\u00e1 siempre disponible para responder a todas tus preguntas, aclarar cada detalle y acompa\u00f1arte en cada etapa del proceso, antes y durante tu estancia. <strong data-start=\"567\" data-end=\"604\">Sin sorpresas, solo tranquilidad.<\/strong><\/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\">Cont\u00e1ctanos antes de reservar<\/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>Experiencias aut\u00e9nticas, creadas a tu medida M\u00e1s all\u00e1 del confort de nuestras villas, te ofrecemos experiencias personalizadas para enriquecer tu estancia en Puglia. Desde el descubrimiento de la gastronom\u00eda local hasta actividades \u00fanicas en el territorio, cada propuesta est\u00e1 dise\u00f1ada para que vivas Puglia de forma aut\u00e9ntica, exclusiva e inolvidable. Un nuevo est\u00e1ndar de hospitalidad [&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-30161","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tipicovillas.com\/es\/wp-json\/wp\/v2\/pages\/30161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tipicovillas.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.tipicovillas.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.tipicovillas.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tipicovillas.com\/es\/wp-json\/wp\/v2\/comments?post=30161"}],"version-history":[{"count":5,"href":"https:\/\/www.tipicovillas.com\/es\/wp-json\/wp\/v2\/pages\/30161\/revisions"}],"predecessor-version":[{"id":30389,"href":"https:\/\/www.tipicovillas.com\/es\/wp-json\/wp\/v2\/pages\/30161\/revisions\/30389"}],"wp:attachment":[{"href":"https:\/\/www.tipicovillas.com\/es\/wp-json\/wp\/v2\/media?parent=30161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}