{"id":20204,"date":"2026-06-23T22:21:16","date_gmt":"2026-06-23T22:21:16","guid":{"rendered":"https:\/\/ruca-lemu.com.ar\/?page_id=20204"},"modified":"2026-07-16T21:42:46","modified_gmt":"2026-07-16T21:42:46","slug":"presupuestador","status":"publish","type":"page","link":"https:\/\/ruca-lemu.com.ar\/?page_id=20204","title":{"rendered":"Presupuestador"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"20204\" class=\"elementor elementor-20204\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3f998de elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3f998de\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e6f624a\" data-id=\"e6f624a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-234671d elementor-widget elementor-widget-image\" data-id=\"234671d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"748\" height=\"561\" src=\"https:\/\/ruca-lemu.com.ar\/wp-content\/uploads\/2026\/05\/IMG_20260514_124754790_HDR-1024x768.jpg\" class=\"attachment-large size-large wp-image-19896\" alt=\"\" srcset=\"https:\/\/ruca-lemu.com.ar\/wp-content\/uploads\/2026\/05\/IMG_20260514_124754790_HDR-1024x768.jpg 1024w, https:\/\/ruca-lemu.com.ar\/wp-content\/uploads\/2026\/05\/IMG_20260514_124754790_HDR-300x225.jpg 300w, https:\/\/ruca-lemu.com.ar\/wp-content\/uploads\/2026\/05\/IMG_20260514_124754790_HDR-768x576.jpg 768w, https:\/\/ruca-lemu.com.ar\/wp-content\/uploads\/2026\/05\/IMG_20260514_124754790_HDR-1536x1152.jpg 1536w, https:\/\/ruca-lemu.com.ar\/wp-content\/uploads\/2026\/05\/IMG_20260514_124754790_HDR-747x560.jpg 747w, https:\/\/ruca-lemu.com.ar\/wp-content\/uploads\/2026\/05\/IMG_20260514_124754790_HDR.jpg 1920w\" sizes=\"(max-width: 748px) 100vw, 748px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-f21e947 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f21e947\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-10f8738\" data-id=\"10f8738\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b2a218d elementor-widget elementor-widget-html\" data-id=\"b2a218d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"booking-widget\">\n    <div class=\"widget-header\">\n        <h2>Consulta de disponibilidad y presupuesto<\/h2>\n    <\/div>\n\n    <div id=\"alert-box\" class=\"alert alert-error\"><\/div>\n\n    <div class=\"form-row\">\n        <div class=\"input-group\">\n            <label for=\"checkin\">Ingreso (Check-in)<\/label>\n            <input type=\"date\" id=\"checkin\" required>\n        <\/div>\n        <div class=\"input-group\">\n            <label for=\"checkout\">Egreso (Check-out)<\/label>\n            <input type=\"date\" id=\"checkout\" required>\n        <\/div>\n    <\/div>\n\n    <button class=\"btn-search\" onclick=\"checkAvailability()\">BUSCAR DISPONIBILIDAD<\/button>\n\n    <div id=\"results\" class=\"results-container\">\n        <div class=\"results-title\" id=\"results-title\">Caba\u00f1as Disponibles:<\/div>\n        <div id=\"cabins-list\"><\/div>\n    <\/div>\n\n    <!-- PANEL DE ADMINISTRACI\u00d3N AVANZADO -->\n    <div class=\"admin-toggle\" onclick=\"toggleAdminPanel()\">\ud83d\udd27 Configuraci\u00f3n Avanzada de Tarifas y Restricciones (Uso Interno)<\/div>\n    <div id=\"admin-panel\" class=\"admin-panel\">\n        <h3>Panel de Control Tarifario<\/h3>\n        <p style=\"font-size: 11px; margin-bottom: 15px; color: #555;\">Desde ac\u00e1 pod\u00e9s actualizar la disponibilidad diaria pegando el texto de Dioni, cambiar precios por temporada\/d\u00eda de la semana y definir feriados o tarifas de fechas especiales.<\/p>\n        \n        <label class=\"admin-label\">Disponibilidad Cruda (Texto de Dioni):<\/label>\n        <textarea id=\"raw-availability-input\" placeholder=\"Peg\u00e1 ac\u00e1 el listado de disponibilidad diaria...\"><\/textarea>\n\n        <!-- TARIFAS DE TEMPORADA -->\n        <div style=\"margin-top: 15px; border-top: 1px solid #ccc; padding-top: 10px;\">\n            <h4 style=\"margin-bottom: 10px; font-size: 13px; color: var(--primary-color);\">1. Estructura de Tarifas Est\u00e1ndar<\/h4>\n            \n            <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 15px;\">\n                <div>\n                    <label class=\"admin-label\">Temporada Baja (Hasta 30\/09)<\/label>\n                    <div class=\"rate-box\">\n                        <strong>Clasica:<\/strong> <br>\n                        Sem: <input type=\"number\" id=\"tb-clasica-sem\" value=\"130000\"> | S\u00e1b: <input type=\"number\" id=\"tb-clasica-finde\" value=\"170000\"> <br>\n                        <strong>Superior:<\/strong> <br>\n                        Sem: <input type=\"number\" id=\"tb-superior-sem\" value=\"135000\"> | S\u00e1b: <input type=\"number\" id=\"tb-superior-finde\" value=\"183000\"> <br>\n                        <strong>Superior Plus:<\/strong> <br>\n                        Sem: <input type=\"number\" id=\"tb-plus-sem\" value=\"140000\"> | S\u00e1b: <input type=\"number\" id=\"tb-plus-finde\" value=\"195000\"> <br>\n                        <strong>Sup. 2 Ambientes:<\/strong> <br>\n                        Sem: <input type=\"number\" id=\"tb-2amb-sem\" value=\"140000\"> | S\u00e1b: <input type=\"number\" id=\"tb-2amb-finde\" value=\"195000\">\n                    <\/div>\n                <\/div>\n                <div>\n                    <label class=\"admin-label\">Temporada Alta (Desde 01\/10)<\/label>\n                    <div class=\"rate-box\">\n                        <strong>Clasica:<\/strong> <br>\n                        Sem: <input type=\"number\" id=\"ta-clasica-sem\" value=\"130000\"> | S\u00e1b: <input type=\"number\" id=\"ta-clasica-finde\" value=\"187000\"> <br>\n                        <strong>Superior:<\/strong> <br>\n                        Sem: <input type=\"number\" id=\"ta-superior-sem\" value=\"135000\"> | S\u00e1b: <input type=\"number\" id=\"ta-superior-finde\" value=\"200000\"> <br>\n                        <strong>Superior Plus:<\/strong> <br>\n                        Sem: <input type=\"number\" id=\"ta-plus-sem\" value=\"140000\"> | S\u00e1b: <input type=\"number\" id=\"ta-plus-finde\" value=\"215000\"> <br>\n                        <strong>Sup. 2 Ambientes:<\/strong> <br>\n                        Sem: <input type=\"number\" id=\"ta-2amb-sem\" value=\"140000\"> | S\u00e1b: <input type=\"number\" id=\"ta-2amb-finde\" value=\"215000\">\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        <!-- RESTRICCIONES -->\n        <div style=\"border-top: 1px solid #ccc; padding-top: 10px; margin-top: 15px;\">\n            <h4 style=\"margin-bottom: 10px; font-size: 13px; color: var(--primary-color);\">2. Restricciones de Estad\u00eda<\/h4>\n            \n            <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-bottom: 15px;\">\n                <div>\n                    <label class=\"admin-label\">M\u00ednimo Est\u00e1ndar (Noches):<\/label>\n                    <input type=\"number\" id=\"min-nights-std\" value=\"2\" style=\"width: 70px;\">\n                <\/div>\n                <div>\n                    <label class=\"admin-label\">Bloquear Check-in los Domingos:<\/label>\n                    <select id=\"block-sunday-checkin\">\n                        <option value=\"true\">S\u00ed, bloquear<\/option>\n                        <option value=\"false\">No bloquear<\/option>\n                    <\/select>\n                <\/div>\n            <\/div>\n\n            <label class=\"admin-label\">Feriados \/ Fines de semana largos con M\u00ednimo 3 Noches:<\/label>\n            <p style=\"font-size: 10px; color: #666; margin-bottom: 5px;\">Ingres\u00e1 todas las fechas separadas por coma (Formato: AAAA-MM-DD):<\/p>\n            <textarea id=\"holidays-input\" style=\"height: 45px; font-size: 12px;\" placeholder=\"Ejemplo: 2026-08-14, 2026-08-17, 2026-10-12\"><\/textarea>\n        <\/div>\n\n        <!-- TARIFAS ESPECIALES -->\n        <div style=\"border-top: 1px solid #ccc; padding-top: 10px; margin-top: 15px;\">\n            <h4 style=\"margin-bottom: 10px; font-size: 13px; color: var(--primary-color);\">3. Tarifas Especiales por Fechas \u00danicas<\/h4>\n            <p style=\"font-size: 10px; color: #666; margin-bottom: 5px;\">Ingres\u00e1 las fechas espec\u00edficas (ej: Navidad, A\u00f1o Nuevo) separadas por coma:<\/p>\n            <input type=\"text\" id=\"special-dates-input\" placeholder=\"Ejemplo: 2026-12-24, 2026-12-25, 2026-12-31\" style=\"width: 100%; padding: 8px; border: 1px solid #cbd5e1; border-radius: 5px; font-size: 12px; margin-bottom: 10px;\">\n            \n            <div class=\"rate-box\">\n                <p style=\"font-weight: bold; margin-bottom: 5px; font-size: 11px;\">Precio por noche en estas fechas especiales:<\/p>\n                Clasica: $<input type=\"number\" id=\"sp-clasica\" value=\"90000\" style=\"width: 80px;\"> | \n                Superior: $<input type=\"number\" id=\"sp-superior\" value=\"110000\" style=\"width: 80px;\"><br>\n                Sup. Plus: $<input type=\"number\" id=\"sp-plus\" value=\"130000\" style=\"width: 80px;\"> | \n                Sup. 2 Amb: $<input type=\"number\" id=\"sp-2amb\" value=\"250000\" style=\"width: 80px;\">\n            <\/div>\n        <\/div>\n\n        <button id=\"save-btn\" onclick=\"saveAdminConfig()\" style=\"background-color: #2e7d32; color: white; border: none; padding: 12px 20px; border-radius: 6px; cursor: pointer; font-weight: bold; width: 100%; margin-top: 15px;\">Guardar Configuraci\u00f3n Completa<\/button>\n    <\/div>\n<\/div>\n\n<style>\n    :root {\n        --primary-color: #2c5e43;\n        --accent-color: #d4af37;\n        --bg-color: #faf8f5;\n        --card-bg: #ffffff;\n        --text-color: #2b2b2b;\n        --text-muted: #666666;\n        --border-color: #e2e8f0;\n        --success-color: #2e7d32;\n        --error-color: #c62828;\n    }\n\n    .booking-widget {\n        background: var(--card-bg);\n        border-radius: 16px;\n        box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);\n        width: 100%;\n        max-width: 650px;\n        padding: 30px;\n        border: 1px solid var(--border-color);\n        margin: 20px auto;\n        font-family: 'Segoe UI', sans-serif;\n        box-sizing: border-box;\n    }\n\n    .booking-widget * { box-sizing: border-box; }\n    .widget-header { text-align: center; margin-bottom: 25px; }\n    .widget-header h2 { color: var(--primary-color); font-size: 24px; margin-bottom: 8px; }\n    .form-row { display: flex; flex-wrap: wrap; gap: 15px; margin-bottom: 20px; }\n    .input-group { flex: 1 1 240px; display: flex; flex-direction: column; }\n    .input-group label { font-size: 13px; font-weight: 600; color: var(--primary-color); margin-bottom: 6px; text-transform: uppercase; }\n    .input-group input { padding: 12px; border: 1px solid var(--border-color); border-radius: 8px; font-size: 15px; outline: none; width: 100%; }\n    .btn-search { width: 100%; background-color: #000000; color: white; border: none; padding: 14px; font-size: 16px; font-weight: 600; border-radius: 8px; cursor: pointer; margin-bottom: 25px; letter-spacing: 1px; }\n    .btn-search:hover { background-color: #222222; }\n    .results-container { border-top: 1px solid var(--border-color); padding-top: 20px; display: none; }\n    .results-title { font-size: 18px; font-weight: 600; color: var(--primary-color); margin-bottom: 20px; }\n    .cabin-card { border: 1px solid var(--border-color); border-radius: 12px; padding: 20px; margin-bottom: 20px; background: #fff; display: flex; flex-direction: column; gap: 15px; box-shadow: 0 4px 12px rgba(0,0,0,0.02); }\n    .cabin-top-row { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; }\n    .cabin-title-area h4 { color: var(--primary-color); font-size: 20px; margin: 0 0 5px 0; font-weight: 700; }\n    .cabin-title-area p { color: var(--text-muted); font-size: 13px; margin: 0; }\n    .btn-view-cabin { background: transparent; color: var(--primary-color); border: 1px solid var(--primary-color); padding: 5px 10px; border-radius: 6px; font-size: 12px; font-weight: 600; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; gap: 4px; transition: all 0.2s; }\n    .btn-view-cabin:hover { background: var(--primary-color); color: #fff; }\n    .cabin-features { display: flex; gap: 8px; margin-top: 5px; flex-wrap: wrap; }\n    .feature-tag { background-color: #eef5f1; color: var(--primary-color); padding: 4px 10px; border-radius: 6px; font-size: 12px; font-weight: 600; }\n    .cabin-pricing-block { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; background: #fdfcf9; border: 1px solid #f3ebd4; border-radius: 10px; padding: 12px; }\n    .price-col { display: flex; flex-direction: column; justify-content: space-between; }\n    .price-col.border-right { border-right: 1px solid #e2e8f0; padding-right: 10px; }\n    .price-label-top { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; }\n    .price-label-top.promo { color: var(--success-color); }\n    .price-label-top.list { color: #475569; }\n    .price-amount { font-size: 22px; font-weight: 800; margin: 4px 0; }\n    .price-amount.promo { color: var(--success-color); }\n    .price-amount.list { color: #475569; text-decoration: line-through; opacity: 0.85; font-size: 18px; }\n    .price-conditions { font-size: 11px; color: var(--text-muted); line-height: 1.4; }\n    .btn-book { background-color: var(--accent-color); color: #fff; border: none; padding: 12px 20px; border-radius: 8px; font-size: 14px; font-weight: 700; cursor: pointer; text-decoration: none; display: block; text-align: center; margin-top: 5px; transition: background 0.2s; }\n    .btn-book:hover { background-color: #bfa032; }\n    .alert { padding: 12px 15px; border-radius: 8px; font-size: 14px; margin-bottom: 15px; display: none; }\n    .alert-error { background-color: #ffebee; color: var(--error-color); border: 1px solid #ffcdd2; }\n    .alert-info { background-color: #e3f2fd; color: #0d47a1; border: 1px solid #bbdefb; }\n    .admin-toggle { text-align: center; font-size: 12px; color: var(--text-muted); cursor: pointer; margin-top: 35px; border-top: 1px dashed #ccc; padding-top: 15px; }\n    .admin-toggle:hover { color: var(--primary-color); }\n    .admin-panel { display: none; background: #f8fafc; padding: 20px; border-radius: 10px; margin-top: 15px; border: 1px solid #cbd5e1; }\n    .admin-label { font-weight: 600; font-size: 12px; display: block; margin-bottom: 5px; color: var(--primary-color); }\n    .admin-panel textarea { width: 100%; height: 100px; padding: 10px; border-radius: 5px; border: 1px solid #cbd5e1; font-family: monospace; font-size: 11px; }\n    .rate-box { background: white; padding: 8px; border-radius: 6px; border: 1px solid #e2e8f0; font-size: 11px; line-height: 1.8; }\n    .rate-box input { width: 65px; padding: 2px; border: 1px solid #ccc; border-radius: 3px; font-size: 11px; }\n\n    @media (max-width: 580px) {\n        .cabin-pricing-block { grid-template-columns: 1fr; gap: 15px; }\n        .price-col.border-right { border-right: none; border-bottom: 1px solid #e2e8f0; padding-right: 0; padding-bottom: 10px; }\n        .cabin-top-row { flex-direction: column; align-items: flex-start; gap: 10px; }\n        .btn-view-cabin { align-self: flex-start; }\n    }\n<\/style>\n\n<script>\n    const FORM_PAGE_URL = \"https:\/\/ruca-lemu.com.ar\/?page_id=5479\";\n    const AJAX_URL = \"\/wp-admin\/admin-ajax.php\"; \/\/ Ruta est\u00e1ndar de WordPress para guardar datos en la nube\n\n    const CABIN_LINKS = {\n        \"Clasica\": \"https:\/\/ruca-lemu.com.ar\/?page_id=39\",\n        \"Superior\": \"https:\/\/ruca-lemu.com.ar\/?page_id=478\",\n        \"Superior plus\": \"https:\/\/ruca-lemu.com.ar\/?page_id=486\",\n        \"Superior de 2 ambientes\": \"https:\/\/ruca-lemu.com.ar\/?page_id=1137\"\n    };\n\n    const todayStr = new Date().toISOString().split('T')[0];\n    document.getElementById('checkin').min = todayStr;\n    document.getElementById('checkout').min = todayStr;\n    document.getElementById('checkin').addEventListener('change', function() {\n        document.getElementById('checkout').min = this.value;\n    });\n\n    let COMPLEX_DATA = {\n        minNightsDefault: 2,\n        blockSundayCheckin: true,\n        feriadosFindeLargo: [\"2026-08-14\", \"2026-08-17\"],\n        specialDates: [],\n        tarifasEspeciales: { \"Clasica\": 90000, \"Superior\": 110000, \"Superior plus\": 130000, \"Superior de 2 ambientes\": 250000 },\n        tarifas: {\n            temporadaBaja: {\n                \"Clasica\": { semana: 130000, finDeSemana: 170000 },\n                \"Superior\": { semana: 135000, finDeSemana: 183000 },\n                \"Superior plus\": { semana: 140000, finDeSemana: 195000 },\n                \"Superior de 2 ambientes\": { semana: 140000, finDeSemana: 195000 }\n            },\n            temporadaAlta: {\n                \"Clasica\": { semana: 130000, finDeSemana: 187000 },\n                \"Superior\": { semana: 135000, finDeSemana: 200000 },\n                \"Superior plus\": { semana: 140000, finDeSemana: 215000 },\n                \"Superior de 2 ambientes\": { semana: 140000, finDeSemana: 215000 }\n            }\n        },\n        disponibilidad: {}\n    };\n\n    \/\/ Al cargar la p\u00e1gina, se le pide al servidor de WordPress los datos centralizados\n    document.addEventListener(\"DOMContentLoaded\", () => {\n        fetch(`${AJAX_URL}?action=get_ruca_lemu_config`)\n            .then(res => res.json())\n            .then(response => {\n                if (response.success && response.data) {\n                    if (response.data.complex_data) {\n                        COMPLEX_DATA = response.data.complex_data;\n                        loadConfigValuesToUI();\n                    }\n                    if (response.data.raw_text) {\n                        document.getElementById('raw-availability-input').value = response.data.raw_text;\n                    }\n                    \n                    \/\/ Si NO eres administrador, escondemos por completo el acceso al panel\n                    const toggleBtn = document.querySelector('.admin-toggle');\n                    if (!response.data.is_admin && toggleBtn) {\n                        toggleBtn.style.display = 'none';\n                    }\n                }\n            }).catch(err => console.log(\"Error cargando datos en la nube.\", err));\n    });\n\n    function parseLocalDate(dateString) {\n        const parts = dateString.split('-');\n        return new Date(parseInt(parts[0]), parseInt(parts[1]) - 1, parseInt(parts[2]), 0, 0, 0);\n    }\n\n    function toggleAdminPanel() {\n        const panel = document.getElementById('admin-panel');\n        panel.style.display = panel.style.display === 'block' ? 'none' : 'block';\n    }\n\n    function loadConfigValuesToUI() {\n        document.getElementById('tb-clasica-sem').value = COMPLEX_DATA.tarifas.temporadaBaja[\"Clasica\"].semana;\n        document.getElementById('tb-clasica-finde').value = COMPLEX_DATA.tarifas.temporadaBaja[\"Clasica\"].finDeSemana;\n        document.getElementById('tb-superior-sem').value = COMPLEX_DATA.tarifas.temporadaBaja[\"Superior\"].semana;\n        document.getElementById('tb-superior-finde').value = COMPLEX_DATA.tarifas.temporadaBaja[\"Superior\"].finDeSemana;\n        document.getElementById('tb-plus-sem').value = COMPLEX_DATA.tarifas.temporadaBaja[\"Superior plus\"].semana;\n        document.getElementById('tb-plus-finde').value = COMPLEX_DATA.tarifas.temporadaBaja[\"Superior plus\"].finDeSemana;\n        document.getElementById('tb-2amb-sem').value = COMPLEX_DATA.tarifas.temporadaBaja[\"Superior de 2 ambientes\"].semana;\n        document.getElementById('tb-2amb-finde').value = COMPLEX_DATA.tarifas.temporadaBaja[\"Superior de 2 ambientes\"].finDeSemana;\n\n        document.getElementById('ta-clasica-sem').value = COMPLEX_DATA.tarifas.temporadaAlta[\"Clasica\"].semana;\n        document.getElementById('ta-clasica-finde').value = COMPLEX_DATA.tarifas.temporadaAlta[\"Clasica\"].finDeSemana;\n        document.getElementById('ta-superior-sem').value = COMPLEX_DATA.tarifas.temporadaAlta[\"Superior\"].semana;\n        document.getElementById('ta-superior-finde').value = COMPLEX_DATA.tarifas.temporadaAlta[\"Superior\"].finDeSemana;\n        document.getElementById('ta-plus-sem').value = COMPLEX_DATA.tarifas.temporadaAlta[\"Superior plus\"].semana;\n        document.getElementById('ta-plus-finde').value = COMPLEX_DATA.tarifas.temporadaAlta[\"Superior plus\"].finDeSemana;\n        document.getElementById('ta-2amb-sem').value = COMPLEX_DATA.tarifas.temporadaAlta[\"Superior de 2 ambientes\"].semana;\n        document.getElementById('ta-2amb-finde').value = COMPLEX_DATA.tarifas.temporadaAlta[\"Superior de 2 ambientes\"].finDeSemana;\n\n        document.getElementById('min-nights-std').value = COMPLEX_DATA.minNightsDefault;\n        document.getElementById('block-sunday-checkin').value = COMPLEX_DATA.blockSundayCheckin.toString();\n        document.getElementById('holidays-input').value = COMPLEX_DATA.feriadosFindeLargo.join(', ');\n\n        document.getElementById('special-dates-input').value = (COMPLEX_DATA.specialDates || []).join(', ');\n        if(COMPLEX_DATA.tarifasEspeciales) {\n            document.getElementById('sp-clasica').value = COMPLEX_DATA.tarifasEspeciales[\"Clasica\"] || 90000;\n            document.getElementById('sp-superior').value = COMPLEX_DATA.tarifasEspeciales[\"Superior\"] || 110000;\n            document.getElementById('sp-plus').value = COMPLEX_DATA.tarifasEspeciales[\"Superior plus\"] || 130000;\n            document.getElementById('sp-2amb').value = COMPLEX_DATA.tarifasEspeciales[\"Superior de 2 ambientes\"] || 250000;\n        }\n    }\n\n    function parseRawAvailability(rawText) {\n        const lines = rawText.split('\\n');\n        const parsedDispo = {};\n        lines.forEach(line => {\n            if (!line.includes('|')) return;\n            const parts = line.split('|');\n            const datePart = parts[0].trim();\n            const contentPart = parts[1] ? parts[1].trim() : \"\";\n            if (!datePart || datePart.includes(\"30\/12\/1899\")) return;\n            const dateMatch = datePart.match(\/^(\\d+)\\\/(\\d+)\\\/(\\d+)\/);\n            if (!dateMatch) return;\n            const formattedDate = `${dateMatch[3]}-${String(dateMatch[2]).padStart(2, '0')}-${String(dateMatch[1]).padStart(2, '0')}`;\n            const availableCabins = contentPart.split(',').map(c => c.replace('Disponible', '').trim()).filter(c => c !== \"\");\n            if (availableCabins.length > 0) parsedDispo[formattedDate] = availableCabins;\n        });\n        return parsedDispo;\n    }\n\n    function saveAdminConfig() {\n        const saveBtn = document.getElementById('save-btn');\n        saveBtn.innerText = \"Guardando en la nube...\";\n        saveBtn.disabled = true;\n\n        const rawText = document.getElementById('raw-availability-input').value;\n        const minNights = parseInt(document.getElementById('min-nights-std').value);\n        const blockSunday = document.getElementById('block-sunday-checkin').value === \"true\";\n        const holidaysList = document.getElementById('holidays-input').value.split(',').map(h => h.trim()).filter(h => h.match(\/^\\d{4}-\\d{2}-\\d{2}$\/));\n        const specialList = document.getElementById('special-dates-input').value.split(',').map(h => h.trim()).filter(h => h.match(\/^\\d{4}-\\d{2}-\\d{2}$\/));\n        const parsedDispo = parseRawAvailability(rawText);\n\n        COMPLEX_DATA = {\n            minNightsDefault: minNights,\n            blockSundayCheckin: blockSunday,\n            feriadosFindeLargo: holidaysList,\n            specialDates: specialList,\n            tarifasEspeciales: {\n                \"Clasica\": parseFloat(document.getElementById('sp-clasica').value),\n                \"Superior\": parseFloat(document.getElementById('sp-superior').value),\n                \"Superior plus\": parseFloat(document.getElementById('sp-plus').value),\n                \"Superior de 2 ambientes\": parseFloat(document.getElementById('sp-2amb').value)\n            },\n            tarifas: {\n                temporadaBaja: {\n                    \"Clasica\": { semana: parseFloat(document.getElementById('tb-clasica-sem').value), finDeSemana: parseFloat(document.getElementById('tb-clasica-finde').value) },\n                    \"Superior\": { semana: parseFloat(document.getElementById('tb-superior-sem').value), finDeSemana: parseFloat(document.getElementById('tb-superior-finde').value) },\n                    \"Superior plus\": { semana: parseFloat(document.getElementById('tb-plus-sem').value), finDeSemana: parseFloat(document.getElementById('tb-plus-finde').value) },\n                    \"Superior de 2 ambientes\": { semana: parseFloat(document.getElementById('tb-2amb-sem').value), finDeSemana: parseFloat(document.getElementById('tb-2amb-finde').value) }\n                },\n                temporadaAlta: {\n                    \"Clasica\": { semana: parseFloat(document.getElementById('ta-clasica-sem').value), finDeSemana: parseFloat(document.getElementById('ta-clasica-finde').value) },\n                    \"Superior\": { semana: parseFloat(document.getElementById('ta-superior-sem').value), finDeSemana: parseFloat(document.getElementById('ta-superior-finde').value) },\n                    \"Superior plus\": { semana: parseFloat(document.getElementById('ta-plus-sem').value), finDeSemana: parseFloat(document.getElementById('ta-plus-finde').value) },\n                    \"Superior de 2 ambientes\": { semana: parseFloat(document.getElementById('ta-2amb-sem').value), finDeSemana: parseFloat(document.getElementById('ta-2amb-finde').value) }\n                }\n            },\n            disponibilidad: parsedDispo\n        };\n\n        \/\/ Enviar datos mediante AJAX directo a WordPress\n        const formData = new FormData();\n        formData.append('action', 'save_ruca_lemu_config');\n        formData.append('complex_data', JSON.stringify(COMPLEX_DATA));\n        formData.append('raw_text', rawText);\n\n        fetch(AJAX_URL, {\n            method: 'POST',\n            body: formData\n        })\n        .then(res => res.json())\n        .then(response => {\n            saveBtn.innerText = \"Guardar Configuraci\u00f3n Completa\";\n            saveBtn.disabled = false;\n            if(response.success) {\n                alert(\"\u00a1Configuraci\u00f3n guardada en la nube y sincronizada para todos los dispositivos!\");\n                document.getElementById('admin-panel').style.display = 'none';\n            } else {\n                alert(\"Hubo un problema al guardar en la nube.\");\n            }\n        })\n        .catch(err => {\n            saveBtn.innerText = \"Guardar Configuraci\u00f3n Completa\";\n            saveBtn.disabled = false;\n            console.error(err);\n            alert(\"Error de conexi\u00f3n con el servidor.\");\n        });\n    }\n\n    function getDatesInRange(startDate, endDate) {\n        const dates = [];\n        let currentDate = new Date(startDate);\n        while (currentDate < endDate) {\n            const yyyy = currentDate.getFullYear();\n            const mm = String(currentDate.getMonth() + 1).padStart(2, '0');\n            const dd = String(currentDate.getDate()).padStart(2, '0');\n            dates.push(`${yyyy}-${mm}-${dd}`);\n            currentDate.setDate(currentDate.getDate() + 1);\n        }\n        return dates;\n    }\n\n    function calculateCabinPrice(cabinName, datesList) {\n        let total = 0;\n        datesList.forEach(dateStr => {\n            if (COMPLEX_DATA.specialDates && COMPLEX_DATA.specialDates.includes(dateStr)) {\n                if(COMPLEX_DATA.tarifasEspeciales && COMPLEX_DATA.tarifasEspeciales[cabinName]) {\n                    total += COMPLEX_DATA.tarifasEspeciales[cabinName];\n                    return; \n                }\n            }\n            const dateObj = parseLocalDate(dateStr);\n            const month = dateObj.getMonth() + 1;\n            const dayOfWeek = dateObj.getDay();\n            const isHighSeason = (month >= 10);\n            const seasonRates = isHighSeason ? COMPLEX_DATA.tarifas.temporadaAlta : COMPLEX_DATA.tarifas.temporadaBaja;\n            const cabinRates = seasonRates[cabinName];\n            if (!cabinRates) return;\n            const isSaturdayNight = (dayOfWeek === 6);\n            total += isSaturdayNight ? cabinRates.finDeSemana : cabinRates.semana;\n        });\n        return total;\n    }\n\n    function checkAvailability() {\n        const checkinVal = document.getElementById('checkin').value;\n        const checkoutVal = document.getElementById('checkout').value;\n        const alertBox = document.getElementById('alert-box');\n        const resultsContainer = document.getElementById('results');\n        const cabinsList = document.getElementById('cabins-list');\n\n        alertBox.style.display = 'none';\n        resultsContainer.style.display = 'none';\n        cabinsList.innerHTML = '';\n\n        if (!checkinVal || !checkoutVal) {\n            showAlert('Por favor, selecciona las fechas de ingreso y egreso.', 'error');\n            return;\n        }\n\n        const checkinDate = parseLocalDate(checkinVal);\n        const checkoutDate = parseLocalDate(checkoutVal);\n\n        if (checkoutDate <= checkinDate) {\n            showAlert('La fecha de egreso debe ser posterior a la de ingreso.', 'error');\n            return;\n        }\n\n        if (COMPLEX_DATA.blockSundayCheckin && checkinDate.getDay() === 0) {\n            showAlert('Por pol\u00edtica del complejo, no realizamos ingresos (check-in) los d\u00edas domingos. Por favor, seleccion\u00e1 otra fecha.', 'error');\n            return;\n        }\n\n        const datesToBook = getDatesInRange(checkinDate, checkoutDate);\n        const diffNights = datesToBook.length;\n\n        let requiredMinNights = COMPLEX_DATA.minNightsDefault;\n        const touchesHoliday = datesToBook.some(date => COMPLEX_DATA.feriadosFindeLargo.includes(date));\n        if (touchesHoliday) { requiredMinNights = 3; }\n\n        if (diffNights < requiredMinNights) {\n            showAlert(`La estad\u00eda m\u00ednima requerida para este per\u00edodo es de ${requiredMinNights} noches.`, 'error');\n            return;\n        }\n\n        let availableCabins = [];\n        for (const cabinName of Object.keys(COMPLEX_DATA.tarifas.temporadaBaja)) {\n            let fullyAvailable = true;\n            for (let date of datesToBook) {\n                const dayDispo = COMPLEX_DATA.disponibilidad[date] || [];\n                if (!dayDispo.includes(cabinName)) { fullyAvailable = false; break; }\n            }\n            if (fullyAvailable) {\n                const totalPrice = calculateCabinPrice(cabinName, datesToBook);\n                availableCabins.push({ name: cabinName, totalPrice: totalPrice, nights: diffNights });\n            }\n        }\n\n        resultsContainer.style.display = 'block';\n        if (availableCabins.length > 0) {\n            document.getElementById('results-title').innerText = \"Caba\u00f1as Disponibles:\";\n            renderCabins(availableCabins, checkinVal, checkoutVal);\n        } else {\n            document.getElementById('results-title').innerText = \"No tenemos lugar en esas fechas, pero te sugerimos estas opciones cercanas libres:\";\n            findAlternativeDates(checkinDate, diffNights, cabinsList, checkinVal, checkoutVal);\n        }\n    }\n\n    function findAlternativeDates(originalCheckin, duration, container, origIn, origOut) {\n        let suggestedOptions = [];\n        let tempDate = new Date(originalCheckin);\n\n        for (let i = 1; i <= 25; i++) {\n            let checkinCandidate = new Date(tempDate);\n            checkinCandidate.setDate(checkinCandidate.getDate() + i);\n            if (COMPLEX_DATA.blockSundayCheckin && checkinCandidate.getDay() === 0) continue;\n\n            let checkoutCandidate = new Date(checkinCandidate);\n            checkoutCandidate.setDate(checkoutCandidate.getDate() + duration);\n\n            const checkinCandidateStr = checkinCandidate.toISOString().split('T')[0];\n            const checkoutCandidateStr = checkoutCandidate.toISOString().split('T')[0];\n            const datesToBook = getDatesInRange(checkinCandidate, checkoutCandidate);\n\n            for (const cabinName of Object.keys(COMPLEX_DATA.tarifas.temporadaBaja)) {\n                let fullyAvailable = true;\n                for (let date of datesToBook) {\n                    const dayDispo = COMPLEX_DATA.disponibilidad[date] || [];\n                    if (!dayDispo.includes(cabinName)) { fullyAvailable = false; break; }\n                }\n                if (fullyAvailable && suggestedOptions.length < 3) {\n                    const totalPrice = calculateCabinPrice(cabinName, datesToBook);\n                    suggestedOptions.push({ name: cabinName, nights: duration, totalPrice: totalPrice, inStr: checkinCandidateStr, outStr: checkoutCandidateStr });\n                }\n            }\n            if (suggestedOptions.length >= 3) break;\n        }\n\n        if (suggestedOptions.length === 0) {\n            container.innerHTML = `<div style=\"text-align: center; padding: 20px; color: var(--text-muted);\">No encontramos disponibilidad cercana. Consultanos por WhatsApp.<\/div>`;\n        } else {\n            suggestedOptions.forEach(opt => {\n                const formattedIn = opt.inStr.split('-').reverse().join('\/');\n                const formattedOut = opt.outStr.split('-').reverse().join('\/');\n                const listPrice = opt.totalPrice * 1.20;\n                const formLink = `${FORM_PAGE_URL}&checkin=${encodeURIComponent(formattedIn)}&checkout=${encodeURIComponent(formattedOut)}&cabana=${encodeURIComponent(opt.name)}&total=$${encodeURIComponent(opt.totalPrice.toLocaleString('es-AR'))}`;\n                const cabinUrl = CABIN_LINKS[opt.name] || \"#\";\n\n                const card = document.createElement('div');\n                card.className = 'cabin-card';\n                card.style.borderLeft = \"5px solid var(--accent-color)\";\n                card.innerHTML = `\n                    <div class=\"cabin-top-row\">\n                        <div class=\"cabin-title-area\">\n                            <span style=\"background: var(--accent-color); color: #fff; font-size: 10px; font-weight: bold; padding: 2px 6px; border-radius: 3px; text-transform:uppercase;\">Alternativa Sugerida<\/span>\n                            <h4 style=\"margin-top:5px;\">${opt.name}<\/h4>\n                            <p>Del <b>${formattedIn}<\/b> al <b>${formattedOut}<\/b> (${opt.nights} noches)<\/p>\n                        <\/div>\n                        <a href=\"${cabinUrl}\" target=\"_blank\" class=\"btn-view-cabin\">\ud83d\udd0e Ver Caba\u00f1a<\/a>\n                    <\/div>\n                    <div class=\"cabin-features\">\n                        <span class=\"feature-tag\">Desayuno a tu Ritmo<\/span>\n                        <span class=\"feature-tag\">Ropa Blanca<\/span>\n                    <\/div>\n                    <div class=\"cabin-pricing-block\">\n                        <div class=\"price-col border-right\">\n                            <span class=\"price-label-top promo\">Precio Promocionado<\/span>\n                            <span class=\"price-amount promo\">$${opt.totalPrice.toLocaleString('es-AR')}<\/span>\n                            <span class=\"price-conditions\">Condiciones: 30% con transferencia bancaria al reservar y 70% en efectivo al ingresar.<\/span>\n                        <\/div>\n                        <div class=\"price-col\">\n                            <span class=\"price-label-top list\">Precio de Lista<\/span>\n                            <span class=\"price-amount list\">$${listPrice.toLocaleString('es-AR')}<\/span>\n                            <span class=\"price-conditions\">Pago total al reservar con tarjeta hasta en 3 cuotas.<\/span>\n                        <\/div>\n                    <\/div>\n                    <a href=\"${formLink}\" class=\"btn-book\">Solicitar Reserva<\/a>`;\n                container.appendChild(card);\n            });\n        }\n    }\n\n    function renderCabins(cabins, checkin, checkout) {\n        const container = document.getElementById('cabins-list');\n        cabins.forEach(cabin => {\n            const formattedIn = checkin.split('-').reverse().join('\/');\n            const formattedOut = checkout.split('-').reverse().join('\/');\n            const listPrice = cabin.totalPrice * 1.20;\n            const formLink = `${FORM_PAGE_URL}&checkin=${encodeURIComponent(formattedIn)}&checkout=${encodeURIComponent(formattedOut)}&cabana=${encodeURIComponent(cabin.name)}&total=$${encodeURIComponent(cabin.totalPrice.toLocaleString('es-AR'))}`;\n            const cabinUrl = CABIN_LINKS[cabin.name] || \"#\";\n\n            const card = document.createElement('div');\n            card.className = 'cabin-card';\n            card.innerHTML = `\n                <div class=\"cabin-top-row\">\n                    <div class=\"cabin-title-area\">\n                        <h4>${cabin.name}<\/h4>\n                        <p>Estad\u00eda seleccionada de ${cabin.nights} noches<\/p>\n                    <\/div>\n                    <a href=\"${cabinUrl}\" target=\"_blank\" class=\"btn-view-cabin\">\ud83d\udd0e Ver Caba\u00f1a<\/a>\n                <\/div>\n                <div class=\"cabin-features\">\n                    <span class=\"feature-tag\">Desayuno a tu Ritmo<\/span>\n                    <span class=\"feature-tag\">Ropa Blanca<\/span>\n                <\/div>\n                <div class=\"cabin-pricing-block\">\n                    <div class=\"price-col border-right\">\n                        <span class=\"price-label-top promo\">Precio Promocionado<\/span>\n                        <span class=\"price-amount promo\">$${cabin.totalPrice.toLocaleString('es-AR')}<\/span>\n                        <span class=\"price-conditions\">Condiciones: 30% con transferencia bancaria al reservar y 70% en efectivo al ingresar.<\/span>\n                    <\/div>\n                    <div class=\"price-col\">\n                        <span class=\"price-label-top list\">Precio de Lista<\/span>\n                        <span class=\"price-amount list\">$${listPrice.toLocaleString('es-AR')}<\/span>\n                        <span class=\"price-conditions\">Pago total al reservar con tarjeta hasta en 3 cuotas.<\/span>\n                    <\/div>\n                <\/div>\n                <a href=\"${formLink}\" class=\"btn-book\">Solicitar Reserva<\/a>`;\n            container.appendChild(card);\n        });\n    }\n\n    function showAlert(message, type) {\n        const alertBox = document.getElementById('alert-box');\n        alertBox.className = `alert alert-${type}`;\n        alertBox.innerText = message;\n        alertBox.style.display = 'block';\n    }\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u00bfCu\u00e1l de las Rucas les gusta m\u00e1s para avanzar? Seleccion\u00e1 tu caba\u00f1a: Siguiente: Confirmar Reserva<\/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":{"_joinchat":[],"footnotes":""},"class_list":["post-20204","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ruca-lemu.com.ar\/index.php?rest_route=\/wp\/v2\/pages\/20204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruca-lemu.com.ar\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ruca-lemu.com.ar\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ruca-lemu.com.ar\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ruca-lemu.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=20204"}],"version-history":[{"count":114,"href":"https:\/\/ruca-lemu.com.ar\/index.php?rest_route=\/wp\/v2\/pages\/20204\/revisions"}],"predecessor-version":[{"id":20486,"href":"https:\/\/ruca-lemu.com.ar\/index.php?rest_route=\/wp\/v2\/pages\/20204\/revisions\/20486"}],"wp:attachment":[{"href":"https:\/\/ruca-lemu.com.ar\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=20204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}