{"id":5157,"date":"2026-07-22T19:59:08","date_gmt":"2026-07-22T17:59:08","guid":{"rendered":"https:\/\/casitasvacationhomes.com\/?page_id=5157"},"modified":"2026-07-24T19:17:54","modified_gmt":"2026-07-24T17:17:54","slug":"consultar-disponibilidad","status":"publish","type":"page","link":"https:\/\/casitasvacationhomes.com\/de\/consultar-disponibilidad\/","title":{"rendered":"Consultar Disponibilidad"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5157\" class=\"elementor elementor-5157\" wpc-filter-elementor-widget=\"1\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c3b9793 e-flex e-con-boxed e-con e-parent\" data-id=\"c3b9793\" 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-609f23d elementor-widget elementor-widget-html\" data-id=\"609f23d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"cvh-dispo-full-page\">\n\n  <div class=\"cvh-dispo-hero\">\n    <span class=\"cvh-dispo-label\">Consulta online<\/span>\n\n    <h1>Consultar disponibilidad<\/h1>\n\n    <p>\n      Revise las fechas disponibles de la vivienda y, si lo desea, env\u00edenos su solicitud para confirmar precio, condiciones y forma de pago.\n    <\/p>\n  <\/div>\n  <div class=\"cvh-selected-house-box\" id=\"cvh-selected-house-box\" style=\"display:none;\">\n    <span>Calendario seleccionado<\/span>\n    <h2 id=\"cvh-selected-house-name\">Vivienda seleccionada<\/h2>\n    \n  <\/div>\n  <div class=\"cvh-important-note\">\n  <div class=\"cvh-important-icon\">!<\/div>\n  <div class=\"cvh-important-content\">\n    <h3>Importante sobre el calendario<\/h3>\n\n    <p>\n      Este calendario es solo orientativo. Las fechas en <strong>rojo<\/strong> no est\u00e1n disponibles y las fechas en <strong>blanco<\/strong> pueden consultarse como disponibles. La estancia m\u00ednima es de <strong>3 noches<\/strong>.\n    <\/p>\n\n    <p>\n      La reserva no queda confirmada hasta que nuestro equipo revise la solicitud.\n    <\/p>\n  <\/div>\n<\/div>\n\n  <div class=\"cvh-calendar-card\">\n\n    <div class=\"cvh-calendar-header\">\n      <h2>Calendario de disponibilidad<\/h2>\n\n      \n\n      <p class=\"cvh-calendar-subnote\">\n        Esta herramienta no permite reservar directamente. Despu\u00e9s de revisar las fechas, complete el recuadro inferior para enviarnos su solicitud.\n      <\/p>\n      <div class=\"cvh-calendar-colors-note\">\n  <strong>Nota:<\/strong>\n  En alojamientos con varias unidades, algunos colores pueden indicar disponibilidad parcial. Nuestro equipo confirmar\u00e1 siempre la disponibilidad final de la vivienda concreta.\n<\/div>\n    <\/div>\n\n    <div class=\"cvh-mrplan-box\">\n      <div class=\"cvh-mrplan-error\"><strong>No hemos podido cargar autom\u00e1ticamente el calendario de esta vivienda. Por favor, vuelva a la ficha de la casa o escr\u00edbanos por WhatsApp.<\/strong><\/div><!-- Casa detectada:  | Base:  -->\n    <\/div>\n\n  <\/div>\n\n  <div class=\"cvh-wa-reserva-box\">\n\n    <div class=\"cvh-wa-reserva-header\">\n      <span>Enviar solicitud<\/span>\n\n      <h2>Finalizar consulta de reserva<\/h2>\n\n      <p>\n        Complete los datos b\u00e1sicos y se abrir\u00e1 WhatsApp con el mensaje preparado para enviarnos su solicitud.\n      <\/p>\n    <\/div>\n\n    <div class=\"cvh-wa-reserva-grid\">\n\n      <div class=\"cvh-wa-field\">\n        <label>Fecha de entrada<\/label>\n        <input type=\"date\" id=\"cvh-wa-entrada\">\n      <\/div>\n\n      <div class=\"cvh-wa-field\">\n        <label>Fecha de salida<\/label>\n        <input type=\"date\" id=\"cvh-wa-salida\">\n      <\/div>\n\n      <div class=\"cvh-wa-field\">\n        <label>N\u00famero de hu\u00e9spedes<\/label>\n        <input type=\"number\" id=\"cvh-wa-huespedes\" min=\"1\" max=\"20\" placeholder=\"Ej. 2\">\n      <\/div>\n\n      <div class=\"cvh-wa-field\">\n        <label>Vivienda de inter\u00e9s<\/label>\n        <input type=\"text\" id=\"cvh-wa-vivienda\" placeholder=\"Ej. Blue Horizon, Villa Mar\u00eda...\">\n      <\/div>\n\n    <\/div>\n\n    <div class=\"cvh-wa-error\" id=\"cvh-wa-error\"><\/div>\n\n    <button type=\"button\" class=\"cvh-wa-btn\" id=\"cvh-wa-btn\">\n      Enviar solicitud\n    <\/button>\n\n    <p class=\"cvh-wa-note\">\n      La fecha de entrada debe ser como m\u00ednimo a partir de ma\u00f1ana y la estancia m\u00ednima es de 3 noches. La reserva no queda confirmada hasta que nuestro equipo revise la disponibilidad, precio final y forma de pago.\n    <\/p>\n\n  <\/div>\n\n  <div class=\"cvh-back-home\">\n    <a href=\"https:\/\/casitasvacationhomes.com\/\">\n      Volver al inicio \u2192\n    <\/a>\n  <\/div>\n\n<\/section>\n\n<style>\n\n.cvh-dispo-full-page {\n    width: 100%;\n    max-width: 1180px;\n    margin: 0 auto;\n    padding: 55px 24px 80px 24px;\n    color: #062E3F;\n}\n\n\/* CABECERA *\/\n\n.cvh-dispo-hero {\n    text-align: center;\n    max-width: 920px;\n    margin: 0 auto 34px auto;\n}\n\n.cvh-dispo-label {\n    display: inline-block;\n    background: rgba(188, 229, 251, 0.55);\n    color: #062E3F;\n    border: 1px solid rgba(143, 198, 220, 0.65);\n    padding: 9px 18px;\n    border-radius: 50px;\n    font-size: 13px;\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    margin-bottom: 18px;\n}\n\n.cvh-dispo-hero h1 {\n    margin: 0 0 18px 0;\n    color: #062E3F;\n    font-size: 54px;\n    line-height: 1.05;\n    font-weight: 950;\n}\n\n.cvh-dispo-hero p {\n    max-width: 820px;\n    margin: 0 auto;\n    color: #536771;\n    font-size: 19px;\n    line-height: 1.65;\n}\n\n\/* VIVIENDA SELECCIONADA *\/\n\n.cvh-selected-house-box {\n    max-width: 900px;\n    margin: 0 auto 30px auto;\n    background: linear-gradient(135deg, rgba(188,229,251,0.45), rgba(194,209,202,0.35));\n    border: 1px solid rgba(143, 198, 220, 0.65);\n    border-radius: 24px;\n    padding: 26px 28px;\n    text-align: center;\n    box-shadow: 0 14px 34px rgba(6, 46, 63, 0.08);\n}\n\n.cvh-selected-house-box span {\n    display: inline-block;\n    color: #FA7523;\n    font-size: 13px;\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    margin-bottom: 8px;\n}\n\n.cvh-selected-house-box h2 {\n    margin: 0 0 10px 0;\n    color: #062E3F;\n    font-size: 32px;\n    line-height: 1.2;\n    font-weight: 950;\n}\n\n\/* NOTA COLORES CALENDARIO *\/\n\n.cvh-calendar-colors-note {\n    margin: 18px 0 24px 0;\n    padding: 15px 18px;\n    background: #fff8eb;\n    border: 1px solid #f2ddad;\n    border-left: 6px solid #FA7523;\n    border-radius: 16px;\n    color: #835d18;\n    font-size: 15px;\n    line-height: 1.6;\n    font-weight: 600;\n}\n\n.cvh-calendar-colors-note strong {\n    color: #062E3F;\n    font-weight: 900;\n}\n.cvh-selected-house-box p {\n    max-width: 720px;\n    margin: 0 auto;\n    color: #536771;\n    font-size: 16px;\n    line-height: 1.6;\n}\n\n\/* AVISO IMPORTANTE *\/\n\n.cvh-important-note {\n    display: flex;\n    align-items: flex-start;\n    gap: 18px;\n    background: #fff4f4;\n    border: 1px solid #f1b8b8;\n    border-left: 7px solid #d64545;\n    border-radius: 22px;\n    padding: 24px 26px;\n    margin: 0 auto 34px auto;\n    box-shadow: 0 14px 34px rgba(214, 69, 69, 0.08);\n}\n\n.cvh-important-icon {\n    min-width: 46px;\n    height: 46px;\n    border-radius: 50%;\n    background: #d64545;\n    color: #ffffff;\n    font-size: 24px;\n    font-weight: 950;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.cvh-important-content h3 {\n    margin: 0 0 10px 0;\n    color: #872727;\n    font-size: 23px;\n    line-height: 1.25;\n    font-weight: 950;\n}\n\n.cvh-important-content p {\n    margin: 0 0 8px 0;\n    color: #6b4b4b;\n    font-size: 16px;\n    line-height: 1.65;\n}\n\n.cvh-important-content p:last-child {\n    margin-bottom: 0;\n}\n\n\/* CALENDARIO *\/\n\n.cvh-calendar-card {\n    background: #ffffff;\n    border: 1px solid #dbe7ee;\n    border-radius: 28px;\n    padding: 32px;\n    box-shadow: 0 18px 45px rgba(6, 46, 63, 0.08);\n    margin-bottom: 42px;\n}\n\n.cvh-calendar-header {\n    margin-bottom: 22px;\n}\n\n.cvh-calendar-header h2 {\n    margin: 0 0 12px 0;\n    color: #062E3F;\n    font-size: 34px;\n    line-height: 1.2;\n    font-weight: 950;\n}\n\n.cvh-calendar-header p {\n    margin: 0 0 14px 0;\n    color: #536771;\n    font-size: 16px;\n    line-height: 1.65;\n}\n\n.cvh-calendar-subnote {\n    font-weight: 800;\n    color: #435b66 !important;\n}\n\n\/* CALENDARIO MRPLAN CENTRADO Y LIMPIO *\/\n\n.cvh-mrplan-box {\n    width: 100% !important;\n    max-width: 860px !important;\n    margin: 28px auto 0 auto !important;\n    background: #f7fbfd !important;\n    border: 1px solid #dbe7ee !important;\n    border-radius: 24px !important;\n    padding: 18px 20px !important;\n    overflow: hidden !important;\n    display: flex !important;\n    flex-direction: column !important;\n    align-items: center !important;\n    justify-content: center !important;\n    text-align: center !important;\n}\n\/* Centra la fila de campos del widget MisterPlan (clase estable, no depende del ID de la vivienda) *\/\n.cvh-mrplan-box .rve_capa_izq.rve_ancho_total {\n    display: flex !important;\n    flex-wrap: wrap !important;\n    justify-content: center !important;\n}\n\n\/* Por si el widget a\u00f1ade su propio contenedor flex-column encima *\/\n.cvh-mrplan-box [class*=\"capa_izq\"][class*=\"ancho_total\"] {\n    align-items: center !important;\n}\n\/* Centra el contenido del shortcode sin importar su anidamiento *\/\n.cvh-mrplan-box > * {\n    margin-left: auto !important;\n    margin-right: auto !important;\n}\n.cvh-mrplan-box table {\n    margin-left: auto !important;\n    margin-right: auto !important;\n}\n.cvh-mrplan-box iframe {\n    display: block !important;\n    margin: 0 auto !important;\n}\n\n\/* Evita que MrPlan se salga o se desplace *\/\n.cvh-mrplan-box iframe,\n.cvh-mrplan-box form,\n.cvh-mrplan-box .misterplan,\n.cvh-mrplan-box [class*=\"misterplan\"],\n.cvh-mrplan-box [id*=\"misterplan\"],\n.cvh-mrplan-box [class*=\"mrplan\"],\n.cvh-mrplan-box [id*=\"mrplan\"] {\n    max-width: 100% !important;\n    margin-left: auto !important;\n    margin-right: auto !important;\n}\n\n\/* No tocar todos los div internos porque rompe el motor *\/\n.cvh-mrplan-box div {\n    box-sizing: border-box !important;\n}\n\n\/* Ajuste m\u00f3vil *\/\n@media (max-width: 767px) {\n    .cvh-mrplan-box {\n        max-width: 100% !important;\n        padding: 14px !important;\n        border-radius: 18px !important;\n        overflow-x: auto !important;\n    }\n}\n\n\/* BLOQUEAR RESERVA DIRECTA MRPLAN *\/\n\n.cvh-mrplan-box button,\n.cvh-mrplan-box input[type=\"submit\"],\n.cvh-mrplan-box input[type=\"button\"] {\n    display: none !important;\n    visibility: hidden !important;\n    pointer-events: none !important;\n}\n\n.cvh-mrplan-box input[placeholder*=\"C\u00f3digo\"],\n.cvh-mrplan-box input[name*=\"codigo\"],\n.cvh-mrplan-box input[name*=\"code\"] {\n    display: none !important;\n}\n\n.cvh-mrplan-box::after {\n    \n    display: block;\n    margin-top: 22px;\n    padding: 15px 18px;\n    background: #fff8eb;\n    border: 1px solid #f2ddad;\n    color: #835d18;\n    border-radius: 16px;\n    text-align: center;\n    font-size: 15px;\n    line-height: 1.6;\n    font-weight: 700;\n}\n\n\/* FORMULARIO WHATSAPP *\/\n\n.cvh-wa-reserva-box {\n    max-width: 900px;\n    margin: 34px auto 0 auto;\n    background: #062E3F;\n    border-radius: 30px;\n    padding: 38px 34px;\n    text-align: center;\n    box-shadow: 0 18px 48px rgba(6, 46, 63, 0.18);\n}\n\n.cvh-wa-reserva-header span {\n    display: inline-block;\n    color: #BCE5FB;\n    font-size: 13px;\n    font-weight: 900;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    margin-bottom: 8px;\n}\n\n.cvh-wa-reserva-header h2 {\n    margin: 0 0 12px 0;\n    color: #ffffff;\n    font-size: 34px;\n    line-height: 1.2;\n    font-weight: 950;\n}\n\n.cvh-wa-reserva-header p {\n    max-width: 700px;\n    margin: 0 auto 28px auto;\n    color: rgba(255, 255, 255, 0.82);\n    font-size: 16px;\n    line-height: 1.65;\n}\n\n.cvh-wa-reserva-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 16px;\n    max-width: 800px;\n    margin: 0 auto 20px auto;\n    text-align: left;\n}\n\n.cvh-wa-field label {\n    display: block;\n    color: #ffffff;\n    font-size: 14px;\n    font-weight: 850;\n    margin-bottom: 8px;\n}\n\n.cvh-wa-field input {\n    width: 100%;\n    min-height: 56px;\n    border-radius: 16px;\n    border: 1px solid rgba(188, 229, 251, 0.45);\n    background: #ffffff;\n    color: #062E3F;\n    padding: 14px 16px;\n    font-size: 15px;\n    box-shadow: none;\n}\n\n.cvh-wa-field input:focus {\n    outline: none;\n    border-color: #8FC6DC;\n    box-shadow: 0 0 0 4px rgba(143, 198, 220, 0.22);\n}\n\n.cvh-wa-btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 58px;\n    padding: 16px 38px;\n    border-radius: 50px;\n    border: none;\n    background: #FA7523;\n    color: #ffffff;\n    font-size: 16px;\n    font-weight: 950;\n    cursor: pointer;\n    box-shadow: 0 12px 28px rgba(250, 117, 35, 0.28);\n    transition: all 0.25s ease;\n}\n\n.cvh-wa-btn:hover {\n    background: #ffffff;\n    color: #062E3F;\n    transform: translateY(-2px);\n}\n\n.cvh-wa-error {\n    max-width: 800px;\n    margin: 0 auto 16px auto;\n    color: #ffd1d1;\n    font-size: 14px;\n    font-weight: 800;\n    display: none;\n}\n\n.cvh-wa-note {\n    max-width: 720px;\n    margin: 22px auto 0 auto;\n    color: rgba(255, 255, 255, 0.72);\n    font-size: 14px;\n    line-height: 1.6;\n}\n\n\/* BOT\u00d3N VOLVER *\/\n\n.cvh-back-home {\n    text-align: center;\n    margin-top: 42px;\n}\n\n.cvh-back-home a {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    min-height: 52px;\n    padding: 14px 32px;\n    border-radius: 50px;\n    background: #FA7523;\n    color: #ffffff !important;\n    font-size: 15px;\n    font-weight: 950;\n    text-decoration: none !important;\n    box-shadow: 0 12px 28px rgba(250, 117, 35, 0.25);\n    transition: all 0.25s ease;\n}\n\n.cvh-back-home a:hover {\n    background: #062E3F;\n    color: #ffffff !important;\n    transform: translateY(-2px);\n}\n\n\/* ERROR MRPLAN *\/\n\n.cvh-mrplan-error {\n    background: #fff8eb;\n    border: 1px solid #f2ddad;\n    color: #835d18;\n    border-radius: 16px;\n    padding: 18px;\n    text-align: center;\n    font-weight: 800;\n}\n\n\/* RESPONSIVE *\/\n\n@media (max-width: 1024px) {\n    .cvh-dispo-hero h1 {\n        font-size: 44px;\n    }\n\n    .cvh-calendar-header h2 {\n        font-size: 30px;\n    }\n\n    .cvh-wa-reserva-header h2 {\n        font-size: 30px;\n    }\n}\n\n@media (max-width: 767px) {\n    .cvh-dispo-full-page {\n        padding: 36px 16px 60px 16px;\n    }\n\n    .cvh-dispo-hero h1 {\n        font-size: 34px;\n    }\n\n    .cvh-dispo-hero p {\n        font-size: 16px;\n    }\n\n    .cvh-important-note {\n        flex-direction: column;\n        padding: 22px;\n        border-radius: 20px;\n    }\n\n    .cvh-important-content h3 {\n        font-size: 21px;\n    }\n\n    .cvh-calendar-card {\n        padding: 22px;\n        border-radius: 22px;\n    }\n\n    .cvh-calendar-header h2 {\n        font-size: 27px;\n    }\n\n    .cvh-mrplan-box {\n        padding: 14px;\n        border-radius: 18px;\n    }\n\n    .cvh-wa-reserva-box {\n        padding: 28px 20px;\n        border-radius: 24px;\n    }\n\n    .cvh-wa-reserva-header h2 {\n        font-size: 25px;\n    }\n\n    .cvh-wa-reserva-grid {\n        grid-template-columns: 1fr;\n    }\n\n    .cvh-wa-btn {\n        width: 100%;\n        padding: 15px 22px;\n    }\n\n    .cvh-back-home a {\n        width: 100%;\n    }\n}\n<\/style>\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  function bloquearMrPlan() {\n    const cajas = document.querySelectorAll(\".cvh-mrplan-box\");\n\n    cajas.forEach(function (caja) {\n      const formularios = caja.querySelectorAll(\"form\");\n\n      formularios.forEach(function (form) {\n        form.addEventListener(\"submit\", function (e) {\n          e.preventDefault();\n          e.stopPropagation();\n          e.stopImmediatePropagation();\n          return false;\n        }, true);\n      });\n\n      const botones = caja.querySelectorAll(\"button, input[type='submit'], input[type='button']\");\n\n      botones.forEach(function (boton) {\n        boton.disabled = true;\n        boton.style.display = \"none\";\n        boton.style.visibility = \"hidden\";\n        boton.style.pointerEvents = \"none\";\n      });\n    });\n  }\n\n  function fechaISO(fecha) {\n    const year = fecha.getFullYear();\n    const month = String(fecha.getMonth() + 1).padStart(2, \"0\");\n    const day = String(fecha.getDate()).padStart(2, \"0\");\n    return year + \"-\" + month + \"-\" + day;\n  }\n\n  function formatoFecha(fechaISOTexto) {\n    if (!fechaISOTexto) return \"\";\n    const partes = fechaISOTexto.split(\"-\");\n    return partes[2] + \"\/\" + partes[1] + \"\/\" + partes[0];\n  }\n\n  function calcularNoches(entrada, salida) {\n    const fechaEntrada = new Date(entrada + \"T00:00:00\");\n    const fechaSalida = new Date(salida + \"T00:00:00\");\n    const diferencia = fechaSalida - fechaEntrada;\n    return diferencia \/ (1000 * 60 * 60 * 24);\n  }\n\n  function sumarDias(fechaISOTexto, dias) {\n    const fecha = new Date(fechaISOTexto + \"T00:00:00\");\n    fecha.setDate(fecha.getDate() + dias);\n    return fechaISO(fecha);\n  }\n\n  function obtenerParametro(nombre) {\n    const params = new URLSearchParams(window.location.search);\n    return params.get(nombre);\n  }\n\n  function slugATitulo(slug) {\n    if (!slug) return \"\";\n    return slug\n      .replace(\/-\/g, \" \")\n      .replace(\/\\b\\w\/g, function (letra) {\n        return letra.toUpperCase();\n      });\n  }\n  \n    function limpiarTituloVivienda(texto) {\n    if (!texto) return \"\";\n\n    return decodeURIComponent(texto)\n      .replace(\/\\+\/g, \" \")\n      .replace(\/^v\\.?\\s*v\\.?\\s*\/i, \"\")\n      .replace(\/^vv\\s*\/i, \"\")\n      .replace(\/^vivienda\\s+vacacional\\s+\/i, \"\")\n      .replace(\/^casa\\s+\/i, \"\")\n      .trim();\n  }\n\n  function nombreBonitoDesdeSlug(slug) {\n    if (!slug) return \"\";\n\n    const nombres = {\n      \"brisa-atlantica\": \"Brisa Atl\u00e1ntica\",\n      \"saso\": \"Saso Beach\",\n      \"rohe\": \"Rohe\",\n      \"la-redonda\": \"La Redonda\",\n      \"finca-la-redonda-el-paso\": \"Finca La Redonda\",\n      \"el-laurel\": \"El Laurel\",\n      \"rubi\": \"Rub\u00ed\",\n      \"villa-maria\": \"Villa Mar\u00eda\",\n      \"jorsam-la-bombilla\": \"Jorsam La Bombilla\",\n      \"el-retiro-tijarafe\": \"El Retiro\",\n      \"blue-horizon\": \"Blue Horizon\",\n      \"paraiso-playa\": \"Para\u00edso Playa\",\n      \"sol-y-playa\": \"Sol y Playa\",\n      \"puerto-naos-blue\": \"Puerto Naos Blue\",\n      \"finca-monterrey-i-ii-iii\": \"Finca Monterrey I, II, III\",\n      \"finca-monterrey-mazo\": \"Finca Monterrey Mazo\",\n      \"mar-y-arena\": \"Mar y Arena\",\n      \"luna\": \"Luna El Paso\",\n      \"lulu\": \"Lulu Tijarafe\",\n      \"capellania\": \"Capellan\u00eda\",\n      \"los-geranios\": \"Los Geranios\",\n      \"la-morada\": \"La Morada\",\n      \"la-bodega\": \"La Bodega\",\n      \"los-agapantos\": \"Los Agapantos\",\n      \"lina\": \"Lina Puntagorda\",\n      \"marineda\": \"Marineda El M\u00e9dano\"\n    };\n\n    return nombres[slug] || slugATitulo(slug);\n  }\n\n  function mostrarError(mensaje) {\n    const errorBox = document.getElementById(\"cvh-wa-error\");\n    if (!errorBox) return;\n    errorBox.innerText = mensaje;\n    errorBox.style.display = \"block\";\n  }\n\n  function limpiarError() {\n    const errorBox = document.getElementById(\"cvh-wa-error\");\n    if (!errorBox) return;\n    errorBox.innerText = \"\";\n    errorBox.style.display = \"none\";\n  }\n\n  bloquearMrPlan();\n\n  const observer = new MutationObserver(function () {\n    bloquearMrPlan();\n  });\n\n  observer.observe(document.body, {\n    childList: true,\n    subtree: true\n  });\n\n  const boton = document.getElementById(\"cvh-wa-btn\");\n  const campoEntrada = document.getElementById(\"cvh-wa-entrada\");\n  const campoSalida = document.getElementById(\"cvh-wa-salida\");\n  const campoHuespedes = document.getElementById(\"cvh-wa-huespedes\");\n  const campoVivienda = document.getElementById(\"cvh-wa-vivienda\");\n\n  const hoy = new Date();\n  hoy.setHours(0, 0, 0, 0);\n\n  const manana = new Date(hoy);\n  manana.setDate(manana.getDate() + 1);\n\n  const mananaISO = fechaISO(manana);\n\n  if (campoEntrada) {\n    campoEntrada.setAttribute(\"min\", mananaISO);\n  }\n\n  if (campoSalida) {\n    campoSalida.setAttribute(\"min\", sumarDias(mananaISO, 3));\n  }\n\n  const viviendaDesdeUrl = obtenerParametro(\"vivienda\");\n  const casaDesdeUrl = obtenerParametro(\"casa\");\n\n  let nombreCasaMostrado = \"\";\n\n  if (viviendaDesdeUrl) {\n    nombreCasaMostrado = limpiarTituloVivienda(viviendaDesdeUrl);\n  } else if (casaDesdeUrl) {\n    nombreCasaMostrado = nombreBonitoDesdeSlug(casaDesdeUrl);\n  }\n\n  const cajaCasa = document.getElementById(\"cvh-selected-house-box\");\n  const tituloCasa = document.getElementById(\"cvh-selected-house-name\");\n\n  if (nombreCasaMostrado && cajaCasa && tituloCasa) {\n    tituloCasa.innerText = nombreCasaMostrado;\n    cajaCasa.style.display = \"block\";\n  }\n\n  if (campoVivienda && nombreCasaMostrado) {\n    campoVivienda.value = nombreCasaMostrado;\n  }\n\n  if (campoEntrada && campoSalida) {\n    campoEntrada.addEventListener(\"change\", function () {\n      limpiarError();\n\n      if (!campoEntrada.value) return;\n\n      const salidaMinima = sumarDias(campoEntrada.value, 3);\n      campoSalida.setAttribute(\"min\", salidaMinima);\n\n      if (campoSalida.value && campoSalida.value < salidaMinima) {\n        campoSalida.value = \"\";\n      }\n    });\n  }\n\n  if (boton) {\n    boton.addEventListener(\"click\", function () {\n      limpiarError();\n\n      const entrada = campoEntrada ? campoEntrada.value : \"\";\n      const salida = campoSalida ? campoSalida.value : \"\";\n      const huespedes = campoHuespedes ? campoHuespedes.value : \"\";\n      const vivienda = campoVivienda ? campoVivienda.value : \"\";\n\n      if (!entrada || !salida || !huespedes) {\n        mostrarError(\"Por favor complete fecha de entrada, fecha de salida y n\u00famero de hu\u00e9spedes.\");\n        return;\n      }\n\n      if (entrada < mananaISO) {\n        mostrarError(\"La fecha de entrada debe ser como m\u00ednimo a partir de ma\u00f1ana.\");\n        return;\n      }\n\n      const noches = calcularNoches(entrada, salida);\n\n      if (noches <= 0) {\n        mostrarError(\"La fecha de salida debe ser posterior a la fecha de entrada.\");\n        return;\n      }\n\n      if (noches < 3) {\n        mostrarError(\"La estancia m\u00ednima es de 3 noches. Por favor seleccione una fecha de salida que cumpla el m\u00ednimo.\");\n        return;\n      }\n\n      const mensaje =\n        \"Hola, he consultado el calendario de disponibilidad en la web y quiero confirmar una reserva.\\n\\n\" +\n        \"Fecha de entrada: \" + formatoFecha(entrada) + \"\\n\" +\n        \"Fecha de salida: \" + formatoFecha(salida) + \"\\n\" +\n        \"N\u00famero de noches: \" + noches + \"\\n\" +\n        \"N\u00famero de hu\u00e9spedes: \" + huespedes + \"\\n\" +\n        \"Vivienda de inter\u00e9s: \" + (vivienda || \"No especificada\") + \"\\n\\n\" +\n        \"\u00bfMe pueden confirmar disponibilidad, precio final y forma de pago? Gracias.\";\n\n      const url = \"https:\/\/wa.me\/34665252419?text=\" + encodeURIComponent(mensaje);\n\n      window.open(url, \"_blank\");\n    });\n  }\n\n});\n<\/script>\n\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f4c4adc elementor-widget elementor-widget-html\" data-id=\"f4c4adc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* MRPLAN SOLO CALENDARIO *\/\n\n\/* Ocultar botones o enlaces de acci\u00f3n dentro del calendario *\/\n.cvh-mrplan-box button,\n.cvh-mrplan-box input[type=\"submit\"],\n.cvh-mrplan-box input[type=\"button\"],\n.cvh-mrplan-box a[href*=\"reserv\"],\n.cvh-mrplan-box a[href*=\"booking\"],\n.cvh-mrplan-box a[href*=\"book\"],\n.cvh-mrplan-box [role=\"button\"] {\n    display: none !important;\n    visibility: hidden !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n}\n\n\/* Ocultar campo c\u00f3digo promocional *\/\n.cvh-mrplan-box input[placeholder*=\"C\u00f3digo\"],\n.cvh-mrplan-box input[placeholder*=\"c\u00f3digo\"],\n.cvh-mrplan-box input[name*=\"codigo\"],\n.cvh-mrplan-box input[name*=\"code\"] {\n    display: none !important;\n    visibility: hidden !important;\n}\n\n\/* Mensaje inferior *\/\n.cvh-mrplan-box::after {\n    \n    display: block !important;\n    margin-top: 22px !important;\n    padding: 15px 18px !important;\n    background: #fff8eb !important;\n    border: 1px solid #f2ddad !important;\n    color: #835d18 !important;\n    border-radius: 16px !important;\n    text-align: center !important;\n    font-size: 15px !important;\n    line-height: 1.6 !important;\n    font-weight: 700 !important;\n}\n<\/style>\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  function ocultarAccionesMrPlan() {\n    const cajas = document.querySelectorAll(\".cvh-mrplan-box\");\n\n    cajas.forEach(function (caja) {\n      const elementos = caja.querySelectorAll(\"button, input[type='submit'], input[type='button'], a, div, span\");\n\n      elementos.forEach(function (el) {\n        const texto = (el.innerText || el.value || el.getAttribute(\"aria-label\") || \"\").trim().toLowerCase();\n        const href = (el.getAttribute(\"href\") || \"\").toLowerCase();\n\n        const esBotonAccion =\n          texto === \"buscar\" ||\n          texto === \"reservar\" ||\n          texto.includes(\"reservar\") ||\n          texto.includes(\"reserve\") ||\n          texto.includes(\"booking\") ||\n          href.includes(\"reserv\") ||\n          href.includes(\"booking\") ||\n          href.includes(\"book\");\n\n        if (esBotonAccion) {\n          el.style.display = \"none\";\n          el.style.visibility = \"hidden\";\n          el.style.opacity = \"0\";\n          el.style.pointerEvents = \"none\";\n\n          if (el.tagName === \"BUTTON\" || el.tagName === \"INPUT\") {\n            el.disabled = true;\n          }\n        }\n      });\n\n      const formularios = caja.querySelectorAll(\"form\");\n\n      formularios.forEach(function (form) {\n        form.addEventListener(\"submit\", function (e) {\n          e.preventDefault();\n          e.stopPropagation();\n          e.stopImmediatePropagation();\n          return false;\n        }, true);\n      });\n    });\n  }\n\n  document.addEventListener(\"click\", function (e) {\n    const zona = e.target.closest(\".cvh-mrplan-box\");\n    if (!zona) return;\n\n    const accion = e.target.closest(\"button, input[type='submit'], input[type='button'], a, div, span\");\n    if (!accion) return;\n\n    const texto = (accion.innerText || accion.value || accion.getAttribute(\"aria-label\") || \"\").trim().toLowerCase();\n    const href = (accion.getAttribute(\"href\") || \"\").toLowerCase();\n\n    if (\n      texto === \"buscar\" ||\n      texto === \"reservar\" ||\n      texto.includes(\"reservar\") ||\n      texto.includes(\"reserve\") ||\n      texto.includes(\"booking\") ||\n      href.includes(\"reserv\") ||\n      href.includes(\"booking\") ||\n      href.includes(\"book\")\n    ) {\n      e.preventDefault();\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n      return false;\n    }\n  }, true);\n\n  ocultarAccionesMrPlan();\n\n  const observer = new MutationObserver(function () {\n    ocultarAccionesMrPlan();\n  });\n\n  observer.observe(document.body, {\n    childList: true,\n    subtree: true\n  });\n\n});\n<\/script>\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\n    <div class=\"xs_social_share_widget xs_share_url after_content \t\tmain_content  wslu-style-1 wslu-share-box-shaped wslu-fill-colored wslu-none wslu-share-horizontal wslu-theme-font-no wslu-main_content\">\n\n\t\t\n        <ul>\n\t\t\t        <\/ul>\n    <\/div> \n","protected":false},"excerpt":{"rendered":"<p>Consulta online Consultar disponibilidad Revise las fechas disponibles de la vivienda y, si lo desea, env\u00edenos su solicitud para confirmar precio, condiciones y forma de pago. Calendario seleccionado Vivienda seleccionada ! Importante sobre el calendario Este calendario es solo orientativo. Las fechas en rojo no est\u00e1n disponibles y las fechas en blanco pueden consultarse como [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_joinchat":[],"footnotes":""},"class_list":["post-5157","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/casitasvacationhomes.com\/de\/wp-json\/wp\/v2\/pages\/5157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/casitasvacationhomes.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/casitasvacationhomes.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/casitasvacationhomes.com\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/casitasvacationhomes.com\/de\/wp-json\/wp\/v2\/comments?post=5157"}],"version-history":[{"count":103,"href":"https:\/\/casitasvacationhomes.com\/de\/wp-json\/wp\/v2\/pages\/5157\/revisions"}],"predecessor-version":[{"id":5288,"href":"https:\/\/casitasvacationhomes.com\/de\/wp-json\/wp\/v2\/pages\/5157\/revisions\/5288"}],"wp:attachment":[{"href":"https:\/\/casitasvacationhomes.com\/de\/wp-json\/wp\/v2\/media?parent=5157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}