{"id":2864,"date":"2026-02-21T14:24:03","date_gmt":"2026-02-21T14:24:03","guid":{"rendered":"https:\/\/solcaravan.es\/?page_id=2864"},"modified":"2026-02-25T20:46:23","modified_gmt":"2026-02-25T20:46:23","slug":"calculadora-de-precios","status":"publish","type":"page","link":"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/","title":{"rendered":"Calculadora de precios"},"content":{"rendered":"<section class=\"l-section wpb_row height_custom\"><div class=\"l-section-h i-cf\"><div class=\"g-cols vc_row via_grid cols_1 laptops-cols_inherit tablets-cols_inherit mobiles-cols_1 valign_top type_default stacking_default\"><div class=\"wpb_column vc_column_container\"><div class=\"vc_column-inner\"><div class=\"w-html\"><!DOCTYPE html>\n<html lang=\"es\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Presupuesto de Alquiler de Campervan<\/title>\n    <script src=\"https:\/\/cdn.tailwindcss.com\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf-autotable\/3.5.25\/jspdf.plugin.autotable.min.js\"><\/script>\n    <style>\n        @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&display=swap');\n        \n        body {\n            font-family: 'Inter', sans-serif;\n            background-color: #f3f4f6;\n            color: #1f2937;\n        }\n\n        \/* Barra de desplazamiento personalizada *\/\n        ::-webkit-scrollbar {\n            width: 8px;\n        }\n\n        ::-webkit-scrollbar-thumb {\n            background-color: #d1d5db;\n            border-radius: 4px;\n        }\n\n        .no-print {\n            @media print {\n                display: none;\n            }\n        }\n        \n        \/* Estilos del modal *\/\n        .modal {\n            position: fixed;\n            z-index: 1000;\n            left: 0;\n            top: 0;\n            width: 100%;\n            height: 100%;\n            background-color: rgba(0, 0, 0, 0.7);\n            display: flex;\n            justify-content: center;\n            align-items: center;\n        }\n    <\/style>\n<\/head>\n<body class=\"p-4 md:p-8\">\n    <div class=\"max-w-4xl mx-auto bg-white p-6 md:p-10 rounded-3xl shadow-2xl space-y-8\">\n        \n        <header class=\"text-center space-y-2\">\n            <h1 class=\"text-3xl md:text-5xl font-extrabold text-[#4B5563]\">Tu Aventura en Camper te Espera<\/h1>\n            <p class=\"text-lg text-[#6B7280]\">\n                \u00bfListo para salir a la carretera? Usa nuestra calculadora de precios instant\u00e1nea para planificar tu viaje perfecto y obtener un presupuesto transparente en segundos.\n            <\/p>\n        <\/header>\n\n        <main class=\"grid grid-cols-1 gap-8 md:gap-12\">\n            \n            <section id=\"input-section\" class=\"space-y-6\">\n                 \n                <div class=\"space-y-4\">\n                    <h2 class=\"text-xl md:text-2xl font-bold text-[#374151]\">1. Elige tu furgoneta<\/h2>\n                    <p class=\"text-sm text-gray-500\">Los precios mostrados son brutos (IVA incl.).<\/p>\n                    <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n                        <label class=\"flex items-center p-4 bg-yellow-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-4 has-[:checked]:ring-[#FDE047]\">\n                            <input type=\"radio\" name=\"van\" value=\"Duncan545\" data-low=\"75\" data-high=\"85\" data-prep=\"45\" data-clean=\"50\" data-min-low=\"3\" data-min-high=\"3\" class=\"hidden\" checked>\n                            <span class=\"font-semibold text-lg text-[#374151]\">Duncan545<\/span>\n                            <span class=\"ml-auto text-sm text-[#4B5563]\">75\u20ac-85\u20ac\/d\u00eda bruto<\/span>\n                        <\/label>\n                        <label class=\"flex items-center p-4 bg-yellow-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-4 has-[:checked]:ring-[#FDE047]\">\n                            <input type=\"radio\" name=\"van\" value=\"Duncan500\" data-low=\"65\" data-high=\"75\" data-prep=\"40\" data-clean=\"45\" data-min-low=\"3\" data-min-high=\"3\" class=\"hidden\">\n                            <span class=\"font-semibold text-lg text-[#374151]\">Duncan500<\/span>\n                            <span class=\"ml-auto text-sm text-[#4B5563]\">65\u20ac-75\u20ac\/d\u00eda bruto<\/span>\n                        <\/label>\n                         <label class=\"flex items-center p-4 bg-yellow-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-4 has-[:checked]:ring-[#FDE047]\">\n                            <input type=\"radio\" name=\"van\" value=\"Davis 590\" data-low=\"87\" data-high=\"96\" data-prep=\"45\" data-clean=\"50\" data-min-low=\"3\" data-min-high=\"3\" class=\"hidden\">\n                            <span class=\"font-semibold text-lg text-[#374151]\">Davis 590<\/span>\n                            <span class=\"ml-auto text-sm text-[#4B5563]\">87\u20ac-96\u20ac\/d\u00eda bruto<\/span>\n                        <\/label>\n                        <label class=\"flex items-center p-4 bg-yellow-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-4 has-[:checked]:ring-[#FDE047]\">\n                            <input type=\"radio\" name=\"van\" value=\"Sunlight I68\" data-low=\"125\" data-high=\"148\" data-prep=\"60\" data-clean=\"65\" data-min-low=\"5\" data-min-high=\"7\" class=\"hidden\">\n                            <span class=\"font-semibold text-lg text-[#374151]\">Sunlight I68<\/span>\n                            <span class=\"ml-auto text-sm text-[#4B5563]\">125\u20ac-148\u20ac\/d\u00eda bruto<\/span>\n                        <\/label>\n                         <label class=\"flex items-center p-4 bg-yellow-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-4 has-[:checked]:ring-[#FDE047]\">\n                            <input type=\"radio\" name=\"van\" value=\"Etrusco A7300DB\" data-low=\"110\" data-high=\"128\" data-prep=\"60\" data-clean=\"65\" data-min-low=\"5\" data-min-high=\"7\" class=\"hidden\">\n                            <span class=\"font-semibold text-lg text-[#374151]\">Etrusco A7300DB<\/span>\n                            <span class=\"ml-auto text-sm text-[#4B5563]\">110\u20ac-128\u20ac\/d\u00eda bruto<\/span>\n                        <\/label>\n                    <\/div>\n                <\/div>\n\n                <div class=\"space-y-4\">\n                    <h2 class=\"text-xl md:text-2xl font-bold text-[#374151]\">2. Selecciona tus fechas<\/h2>\n                     <p class=\"text-sm text-gray-500\">\n                        Duncan\/Davis: Temp. Baja: 16.10. \u2013 31.05. | Temp. Alta: 01.06. \u2013 15.10.\n                        <br>\n                        Sunlight\/Etrusco: Temp. Baja: 16.09. \u2013 31.05. (M\u00edn 5 d\u00edas) | Temp. Alta: 01.06. \u2013 15.09. (M\u00edn 7 d\u00edas)\n                    <\/p>\n                    <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n                         <div class=\"flex flex-col\">\n                            <label for=\"start-date\" class=\"text-sm font-medium text-gray-500 mb-1\">Fecha de inicio<\/label>\n                            <input type=\"date\" id=\"start-date\" max=\"2026-12-31\" class=\"w-full p-4 border border-gray-300 rounded-xl focus:ring-2 focus:ring-[#FDE047] focus:border-transparent transition-colors\">\n                        <\/div>\n                        <div class=\"flex flex-col\">\n                            <label for=\"end-date\" class=\"text-sm font-medium text-gray-500 mb-1\">Fecha de fin<\/label>\n                            <input type=\"date\" id=\"end-date\" max=\"2026-12-31\" class=\"w-full p-4 border border-gray-300 rounded-xl focus:ring-2 focus:ring-[#FDE047] focus:border-transparent transition-colors\">\n                        <\/div>\n                    <\/div>\n                     <p class=\"text-center font-bold text-lg text-[#374151]\">D\u00edas totales: <span id=\"days-text\">0<\/span><\/p>\n                     <p id=\"days-error-message\" class=\"text-red-500 text-sm font-medium text-center hidden\"><\/p>\n                <\/div>\n\n                <div class=\"space-y-4\">\n                    <h2 class=\"text-xl md:text-2xl font-bold text-[#374151]\">Selecciona las horas de recogida y entrega<\/h2>\n                    <p class=\"text-sm font-medium text-gray-500\">Las tarifas dependen del tipo de d\u00eda (L-S o Domingos\/Festivos) y del horario seleccionado.<\/p>\n                    <div class=\"space-y-4\">\n                        \n                        <!-- PICK-UP -->\n                        <div class=\"space-y-3 p-4 bg-white rounded-xl shadow\">\n                            <h3 class=\"text-lg font-semibold text-[#4B5563]\">Horario de recogida:<\/h3>\n                            \n                            <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"pickup-time\" value=\"L\u2013S 06:00\u201309:00\" data-fee=\"90.00\" class=\"hidden\">\n                                <span class=\"font-medium text-[#374151]\">L \u2013 S 06:00\u201309:00<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">\u20ac90<\/span>\n                            <\/label>\n                             <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"pickup-time\" value=\"L\u2013S 09:00\u201318:00\" data-fee=\"0.00\" class=\"hidden\">\n                                <span class=\"font-medium text-[#374151]\">L \u2013 S 09:00\u201318:00<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">Gratis<\/span>\n                            <\/label>\n                            <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"pickup-time\" value=\"L\u2013S 18:00\u201324:00\" data-fee=\"90.00\" class=\"hidden\">\n                                <span class=\"font-medium text-[#374151]\">L \u2013 S 18:00\u201324:00<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">\u20ac90<\/span>\n                            <\/label>\n                             <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"pickup-time\" value=\"Domingos y Festivos\" data-fee=\"90.00\" class=\"hidden\">\n                                <span class=\"font-medium text-[#374151]\">Domingos y Festivos<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">\u20ac90<\/span>\n                            <\/label>\n                            <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"pickup-time\" value=\"No lo s\u00e9 todav\u00eda\" data-fee=\"0.00\" class=\"hidden\" checked>\n                                <span class=\"font-medium text-[#374151]\">No lo s\u00e9 todav\u00eda<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">Gratis<\/span>\n                            <\/label>\n                        <\/div>\n                        \n                        <!-- DROP-OFF -->\n                        <div class=\"space-y-3 p-4 bg-white rounded-xl shadow\">\n                            <h3 class=\"text-lg font-semibold text-[#4B5563]\">Horario de entrega:<\/h3>\n                             <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"dropoff-time\" value=\"L\u2013S 06:00\u201309:00\" data-fee=\"90.00\" class=\"hidden\">\n                                <span class=\"font-medium text-[#374151]\">L \u2013 S 06:00\u201309:00<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">\u20ac90<\/span>\n                            <\/label>\n                             <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"dropoff-time\" value=\"L\u2013S 09:00\u201318:00\" data-fee=\"0.00\" class=\"hidden\">\n                                <span class=\"font-medium text-[#374151]\">L \u2013 S 09:00\u201318:00<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">Gratis<\/span>\n                            <\/label>\n                            <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"dropoff-time\" value=\"L\u2013S 18:00\u201324:00\" data-fee=\"90.00\" class=\"hidden\">\n                                <span class=\"font-medium text-[#374151]\">L \u2013 S 18:00\u201324:00<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">\u20ac90<\/span>\n                            <\/label>\n                             <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"dropoff-time\" value=\"Domingos y Festivos\" data-fee=\"90.00\" class=\"hidden\">\n                                <span class=\"font-medium text-[#374151]\">Domingos y Festivos<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">\u20ac90<\/span>\n                            <\/label>\n                            <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                                <input type=\"radio\" name=\"dropoff-time\" value=\"No lo s\u00e9 todav\u00eda\" data-fee=\"0.00\" class=\"hidden\" checked>\n                                <span class=\"font-medium text-[#374151]\">No lo s\u00e9 todav\u00eda<\/span>\n                                <span class=\"ml-auto text-sm text-[#4B5563]\">Gratis<\/span>\n                            <\/label>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"space-y-4\">\n                    <h2 class=\"text-xl md:text-2xl font-bold text-[#374151]\">3. Tus Kil\u00f3metros<\/h2>\n                    <p class=\"text-sm font-medium text-gray-500\">\n                        Tu alquiler incluye <span id=\"included-kms\">0<\/span> km para tu viaje (100 km por d\u00eda).\n                    <\/p>\n                    <div class=\"space-y-3\">\n                        <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                            <input type=\"radio\" name=\"km-option\" id=\"unlimitedkm-radio\" data-cost=\"28\" data-type=\"per-day\" class=\"hidden\">\n                            <span class=\"font-medium text-[#374151]\">Kil\u00f3metros ilimitados<\/span>\n                            <span class=\"ml-auto text-sm text-[#4B5563]\">28\u20ac\/d\u00eda<\/span>\n                        <\/label>\n                        <div class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\">\n                             <label for=\"extra-kms-radio\" class=\"flex items-center w-full cursor-pointer\">\n                                <input type=\"radio\" name=\"km-option\" id=\"extra-kms-radio\" class=\"hidden\" checked>\n                                <span class=\"font-medium text-[#374151]\">A\u00f1adir kms extra (bloque de 300km)<\/span>\n                                <div class=\"ml-auto flex items-center space-x-2\">\n                                    <span class=\"text-sm text-[#4B5563]\">50\u20ac\/bloque<\/span>\n                                    <input type=\"number\" id=\"extra-kms-count\" value=\"0\" min=\"0\" class=\"w-16 p-2 rounded-lg text-center bg-white border border-gray-300 focus:outline-none focus:ring-2 focus:ring-[#FDE047]\">\n                                <\/div>\n                            <\/label>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"space-y-4\" id=\"optional-extras-container\">\n                    <h2 class=\"text-xl md:text-2xl font-bold text-[#374151]\">4. A\u00f1adir extras opcionales<\/h2>\n                    \n                    <h3 class=\"text-lg font-semibold text-[#4B5563]\">Paquetes especiales<\/h3>\n                    <label class=\"flex items-start p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <input type=\"checkbox\" id=\"beach-package\" data-cost=\"150\" data-type=\"flat\" class=\"mt-1 hidden\">\n                        <div class=\"flex flex-col flex-grow\">\n                            <span class=\"font-medium text-[#374151]\">Pack Playa<\/span>\n                            <span class=\"text-xs text-gray-500\">1x SUP, 2 toallas de playa, set de camping, sombrilla con fijaci\u00f3n al suelo, nevera con acumuladores<\/span>\n                        <\/div>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">\u20ac150<\/span>\n                    <\/label>\n                    <label class=\"flex items-start p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <input type=\"checkbox\" id=\"trekking-package\" data-cost=\"150\" data-type=\"flat\" class=\"mt-1 hidden\">\n                        <div class=\"flex flex-col flex-grow\">\n                            <span class=\"font-medium text-[#374151]\">Pack Trekking<\/span>\n                            <span class=\"text-xs text-gray-500\">Incluye: 2 bicicletas, <span id=\"trekking-details\">portabicis,<\/span> 2 bidones de regalo, 2 toallas de playa, set de camping<\/span>\n                        <\/div>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">\u20ac150<\/span>\n                    <\/label>\n\n                    <h3 class=\"text-lg font-semibold text-[#4B5563] mt-6\">Art\u00edculos individuales<\/h3>\n                    \n                    <label class=\"flex items-start p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <input type=\"checkbox\" id=\"towel-set\" data-type=\"rent\" data-cost=\"20\" class=\"mt-1 hidden\">\n                        <div class=\"flex flex-col flex-grow\">\n                            <span class=\"font-medium text-[#374151]\">Set de toallas (<span id=\"towel-set-desc\">1 grande, 1 peque\u00f1a\/persona<\/span>)<\/span>\n                        <\/div>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\"><span id=\"towel-set-price\">20\u20ac<\/span> \/alquiler<\/span>\n                    <\/label>\n\n                    <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <input type=\"checkbox\" id=\"bedding-set\" data-type=\"rent\" data-cost=\"35\" class=\"hidden\">\n                        <span class=\"font-medium text-[#374151]\">Set de cama<\/span>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\"><span id=\"bedding-set-price\">35\u20ac<\/span> \/alquiler<\/span>\n                    <\/label>\n\n                    <label class=\"flex items-start p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <input type=\"checkbox\" id=\"kitchen-set\" data-cost=\"0\" data-type=\"flat\" class=\"mt-1 hidden\">\n                        <div class=\"flex flex-col flex-grow\">\n                            <span class=\"font-medium text-[#374151]\">Set de cocina<\/span>\n                            <span class=\"text-xs text-gray-500\">Incluye cubiertos, 2 ollas, 1 sart\u00e9n, 3 tipos de platos, vasos, trapo de cocina, estropajo, jab\u00f3n de platos<\/span>\n                        <\/div>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">Gratis<\/span>\n                    <\/label>\n                    \n                    <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <input type=\"checkbox\" id=\"child-seat\" data-cost=\"0\" data-type=\"flat\" class=\"hidden\">\n                        <span class=\"font-medium text-[#374151]\">Silla infantil<\/span>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">Gratis<\/span>\n                    <\/label>\n\n                    <div class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <label for=\"toilet-tablets\" class=\"flex items-center w-full cursor-pointer\">\n                            <input type=\"checkbox\" id=\"toilet-tablets\" data-cost=\"2\" data-type=\"piece\" class=\"hidden\">\n                            <span class=\"font-medium text-[#374151]\">Pastillas extra para el WC qu\u00edmico<\/span>\n                            <div class=\"ml-auto flex items-center space-x-2\">\n                                <span class=\"text-sm text-[#4B5563]\">2\u20ac\/ud<\/span>\n                                <input type=\"number\" id=\"toilet-tablets-count\" value=\"0\" min=\"0\" class=\"w-16 p-2 rounded-lg text-center bg-white border border-gray-300 focus:outline-none focus:ring-2 focus:ring-[#FDE047] z-10\" onclick=\"event.stopPropagation()\">\n                            <\/div>\n                        <\/label>\n                    <\/div>\n\n                    <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Davis 590\">\n                        <input type=\"checkbox\" id=\"bike-rack\" data-cost=\"15\" data-type=\"day\" data-max-cost=\"60\" class=\"hidden\">\n                        <span class=\"font-medium text-[#374151]\">Portabicis<\/span>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">15\u20ac \/d\u00eda (m\u00e1x 60\u20ac)<\/span>\n                    <\/label>\n\n                    <div class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <label for=\"e-bike\" class=\"flex items-center w-full cursor-pointer\">\n                            <input type=\"checkbox\" id=\"e-bike\" data-cost=\"30\" data-type=\"qty-day\" class=\"hidden\">\n                            <span class=\"font-medium text-[#374151]\">Bici el\u00e9ctrica<\/span>\n                            <div class=\"ml-auto flex items-center space-x-2\">\n                                <span class=\"text-sm text-[#4B5563]\">30\u20ac \/d\u00eda<\/span>\n                                <input type=\"number\" id=\"e-bike-count\" value=\"1\" min=\"1\" class=\"w-16 p-2 rounded-lg text-center bg-white border border-gray-300 focus:outline-none focus:ring-2 focus:ring-[#FDE047] z-10\" onclick=\"event.stopPropagation()\">\n                            <\/div>\n                        <\/label>\n                    <\/div>\n\n                    <div class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <label for=\"bicycle\" class=\"flex items-center w-full cursor-pointer\">\n                            <input type=\"checkbox\" id=\"bicycle\" data-cost=\"10\" data-type=\"qty-day\" data-max-cost=\"50\" class=\"hidden\">\n                            <span class=\"font-medium text-[#374151]\">Bicicleta<\/span>\n                            <div class=\"ml-auto flex items-center space-x-2\">\n                                <span class=\"text-sm text-[#4B5563]\">10\u20ac \/d\u00eda (m\u00e1x 50\u20ac)<\/span>\n                                <input type=\"number\" id=\"bicycle-count\" value=\"1\" min=\"1\" class=\"w-16 p-2 rounded-lg text-center bg-white border border-gray-300 focus:outline-none focus:ring-2 focus:ring-[#FDE047] z-10\" onclick=\"event.stopPropagation()\">\n                            <\/div>\n                        <\/label>\n                    <\/div>\n\n                    <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <input type=\"checkbox\" id=\"sup\" data-cost=\"100\" data-type=\"rent\" class=\"hidden\">\n                        <span class=\"font-medium text-[#374151]\">SUP (Paddle surf)<\/span>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">100\u20ac \/alquiler<\/span>\n                    <\/label>\n\n                    <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Davis 590\">\n                        <input type=\"checkbox\" id=\"extra-gas-bottle\" data-cost=\"27.90\" data-type=\"flat\" class=\"hidden\">\n                        <span class=\"font-medium text-[#374151]\">Bombona de gas extra (2.75 kg)<\/span>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">27,90\u20ac<\/span>\n                    <\/label>\n                    \n                    <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Sunlight I68,Etrusco A7300DB,Davis 590\">\n                        <input type=\"checkbox\" id=\"camping-set\" data-cost=\"25.90\" data-type=\"flat\" class=\"hidden\">\n                        <span class=\"font-medium text-[#374151]\">Set de camping (mesa + sillas)<\/span>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">25,90\u20ac<\/span>\n                    <\/label>\n\n                    <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan545,Duncan500,Davis 590\">\n                        <input type=\"checkbox\" id=\"pet-fee\" data-cost=\"100\" data-type=\"trip\" class=\"hidden\">\n                        <span class=\"font-medium text-[#374151]\">Suplemento por mascota (m\u00e1x 15kg)<\/span>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">100\u20ac \/viaje<\/span>\n                    <\/label>\n\n                    <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Duncan500\">\n                        <input type=\"checkbox\" id=\"portable-toilet\" data-cost=\"40\" data-type=\"trip\" class=\"hidden\">\n                        <span class=\"font-medium text-[#374151]\">Inodoro port\u00e1til<\/span>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">40\u20ac \/viaje<\/span>\n                    <\/label>\n                    \n                    <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" data-vans=\"Sunlight I68,Etrusco A7300DB\">\n                        <input type=\"checkbox\" id=\"portable-barbecue-grill\" data-cost=\"80\" data-type=\"trip\" class=\"hidden\">\n                        <span class=\"font-medium text-[#374151]\">Barbacoa port\u00e1til<\/span>\n                        <span class=\"ml-auto text-sm text-[#4B5563]\">80\u20ac \/viaje<\/span>\n                    <\/label>\n                <\/div>\n\n                <div class=\"space-y-4\">\n                    <h2 class=\"text-xl md:text-2xl font-bold text-[#374151]\">5. Elige tu plan de cobertura<\/h2>\n                    <div class=\"space-y-3\">\n                        <label class=\"flex items-center p-4 bg-gray-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-2 has-[:checked]:ring-gray-300\" id=\"basic-coverage-label\">\n                            <input type=\"radio\" name=\"coverage-plan\" value=\"Plan de cobertura b\u00e1sica\" data-cost=\"0\" data-deposit=\"2000\" class=\"hidden\" checked>\n                            <div class=\"flex flex-col\">\n                                <span class=\"font-medium text-[#374151]\">Plan de cobertura b\u00e1sica<\/span>\n                                <span class=\"text-xs text-gray-500\">Incluye seguro obligatorio.<\/span>\n                            <\/div>\n                            <div class=\"ml-auto text-right\">\n                                <span class=\"text-sm font-bold text-[#4B5563]\">Gratis<\/span>\n                                <span class=\"block text-xs text-gray-600 font-semibold\">2000\u20ac Fianza<\/span>\n                            <\/div>\n                        <\/label>\n                        <label class=\"flex items-center p-4 bg-green-50 rounded-xl cursor-pointer shadow-md transition-all duration-300 hover:shadow-xl has-[:checked]:ring-4 has-[:checked]:ring-green-300\" id=\"premium-coverage-label\">\n                            <input type=\"radio\" name=\"coverage-plan\" value=\"Plan de reducci\u00f3n Premium\" data-cost=\"29.90\" data-type=\"per-day\" data-deposit=\"500\" class=\"hidden\">\n                            <div class=\"flex flex-col\">\n                                <span class=\"font-medium text-[#374151]\">Plan de reducci\u00f3n Premium<\/span>\n                                <span class=\"text-xs text-gray-500\">Reduce tu responsabilidad y la fianza requerida.<\/span>\n                            <\/div>\n                            <div class=\"ml-auto text-right\">\n                                <span class=\"text-sm font-bold text-[#4B5563]\">29,90\u20ac \/d\u00eda<\/span>\n                                <span class=\"block text-xs text-green-600 font-semibold\">500\u20ac Fianza<\/span>\n                            <\/div>\n                        <\/label>\n                    <\/div>\n                    <p class=\"text-center font-bold text-sm text-[#374151] pt-2\">\n                        Dep\u00f3sito de seguridad requerido: <span id=\"deposit-text-value\" class=\"text-gray-600\">2000,00\u20ac<\/span>\n                    <\/p>\n                <\/div>\n            <\/section>\n\n            <section id=\"estimate-section\" class=\"bg-gray-50 p-6 md:p-8 rounded-2xl shadow-inner space-y-6\">\n                <h2 class=\"text-xl md:text-2xl font-bold text-center text-[#374151]\">Tu Presupuesto<\/h2>\n                 <div class=\"space-y-4\">\n                    <label for=\"passengers\" class=\"text-lg font-bold text-[#374151]\">N\u00famero de pasajeros<\/label>\n                    <input type=\"number\" id=\"passengers\" value=\"1\" min=\"1\" class=\"w-full p-4 border border-gray-300 rounded-xl focus:ring-2 focus:ring-[#FDE047] focus:border-transparent transition-colors\">\n                <\/div>\n                <div id=\"breakdown\" class=\"text-sm text-[#4B5563] space-y-2\">\n                    <div class=\"flex justify-between\">\n                        <span>Alquiler de furgoneta (<span id=\"selected-van-text\">Duncan545<\/span>, <span id=\"days-breakdown-text\">0<\/span> d\u00edas)<\/span>\n                        <span id=\"van-cost\">0.00 \u20ac<\/span>\n                    <\/div>\n                    <div class=\"flex justify-between\">\n                        <span>Extras opcionales<\/span>\n                        <span id=\"extras-cost\">0.00 \u20ac<\/span>\n                    <\/div>\n                <\/div>\n                <div class=\"border-t border-gray-200 pt-4 mt-4 text-center\">\n                    <div class=\"flex justify-between items-center\">\n                        <span class=\"text-xl md:text-2xl font-bold text-[#374151]\">Presupuesto total (Bruto)<\/span>\n                        <span id=\"total-cost\" class=\"text-3xl md:text-4xl font-extrabold text-[#FDE047]\">0.00 \u20ac<\/span>\n                    <\/div>\n                <\/div>\n                 \n            <\/section>\n        <\/main>\n\n        <p class=\"text-sm text-center text-gray-500 mt-6 no-print\">\n            Env\u00eda tu consulta sin compromiso. Nos pondremos en contacto contigo y, una vez confirmada la disponibilidad, solicitaremos un dep\u00f3sito del 30% para finalizar tu reserva.\n        <\/p>\n        <div class=\"flex flex-col md:flex-row justify-center items-center gap-4 mt-4 no-print\">\n            <button id=\"export-pdf-btn\" class=\"px-6 py-3 bg-[#4B5563] text-white font-bold rounded-full shadow-lg transition-all duration-300 hover:bg-[#374151] hover:shadow-xl\">\n                Descargar presupuesto en PDF\n            <\/button>\n            <button id=\"send-inquiry-btn\" class=\"px-6 py-3 bg-[#FDE047] text-[#374151] font-bold rounded-full shadow-lg transition-all duration-300 hover:bg-[#FCD34D] hover:shadow-xl\">\n                Enviar consulta\n            <\/button>\n        <\/div>\n        <p id=\"status-message\" class=\"mt-4 text-center text-sm text-gray-500 hidden\"><\/p>\n    <\/div>\n\n    <script>\n        \/\/ --- Helper Function to format numbers ---\n        const formatCurrency = (amount) => {\n            return amount.toFixed(2).replace('.', ',') + ' \u20ac'; \n        };\n        \n        \/\/ --- Helper for Season Determination ---\n        const isHighSeason = (date, vanName) => {\n            const month = date.getMonth(); \/\/ 0-11\n            const day = date.getDate(); \/\/ 1-31\n            const safeVanName = vanName || \"\"; \n            const isDuncanGroup = safeVanName.startsWith('Duncan') || safeVanName === 'Davis 590';\n\n            if (isDuncanGroup) {\n                \/\/ Duncan\/Davis seasons (High: 01.06 \u2013 15.10)\n                if (month > 5 && month < 9) return true; \/\/ July, August, September\n                if (month === 5 && day >= 1) return true; \/\/ June 1st onwards\n                if (month === 9 && day <= 15) return true; \/\/ October 15th backwards\n            } else {\n                \/\/ Sunlight\/Etrusco seasons (High: 01.06 \u2013 15.09)\n                if (month > 5 && month < 8) return true; \/\/ July, August\n                if (month === 5 && day >= 1) return true; \/\/ June 1st onwards\n                if (month === 8 && day <= 15) return true; \/\/ September 15th backwards\n            }\n            return false;\n        };\n\n        const calculateRentalPeriod = (startDate, endDate, vanName) => {\n            if (startDate.toString() === 'Invalid Date' || endDate.toString() === 'Invalid Date' || endDate < startDate) {\n                return { totalDays: 0, lowDays: 0, highDays: 0 };\n            }\n            \n            const oneDay = 1000 * 60 * 60 * 24;\n            const diffDays = Math.round((endDate.getTime() - startDate.getTime()) \/ oneDay);\n            const totalDays = diffDays + 1;\n\n            let lowDays = 0;\n            let highDays = 0;\n            let currentDate = new Date(startDate);\n            \n            while (currentDate.getTime() <= endDate.getTime()) {\n                if (isHighSeason(currentDate, vanName)) {\n                    highDays++;\n                } else {\n                    lowDays++;\n                }\n                currentDate.setDate(currentDate.getDate() + 1);\n            }\n            return { totalDays, lowDays, highDays };\n        };\n\n        const calculateDiscountDays = (totalDays, vanName) => {\n            const safeVanName = vanName || \"\";\n            if (safeVanName === 'Sunlight I68' || safeVanName === 'Etrusco A7300DB') return 0;\n            if (totalDays < 7) return 0;\n\n            let freeDays = 0;\n            if (totalDays >= 7 && totalDays < 12) freeDays = 1;\n            if (totalDays >= 12) freeDays = 2;\n            if (totalDays >= 21) {\n                freeDays = 3; \/\/ 21st day free\n                const daysAfter21 = totalDays - 21;\n                freeDays += Math.floor(daysAfter21 \/ 7); \n            }\n            return freeDays;\n        }\n        \n        \/\/ --- DOM Elements ---\n        const vanRadios = document.querySelectorAll('input[name=\"van\"]');\n        const startDateInput = document.getElementById('start-date');\n        const endDateInput = document.getElementById('end-date');\n        const daysTextSpan = document.getElementById('days-text');\n        const daysBreakdownTextSpan = document.getElementById('days-breakdown-text');\n        const daysErrorMessage = document.getElementById('days-error-message');\n        const optionalItemsContainer = document.getElementById('optional-extras-container');\n        const pickupRadios = document.querySelectorAll('input[name=\"pickup-time\"]');\n        const dropoffRadios = document.querySelectorAll('input[name=\"dropoff-time\"]');\n        const kmOptionRadios = document.querySelectorAll('input[name=\"km-option\"]');\n        const coverageRadios = document.querySelectorAll('input[name=\"coverage-plan\"]'); \n        const depositTextValueSpan = document.getElementById('deposit-text-value');\n        const breakdownDiv = document.getElementById('breakdown');\n        const vanCostSpan = document.getElementById('van-cost');\n        const extrasCostSpan = document.getElementById('extras-cost');\n        const totalCostSpan = document.getElementById('total-cost');\n        const selectedVanTextSpan = document.getElementById('selected-van-text');\n        const exportPdfBtn = document.getElementById('export-pdf-btn');\n        const sendInquiryBtn = document.getElementById('send-inquiry-btn');\n        const statusMessage = document.getElementById('status-message');\n        const toiletTabletsCountInput = document.getElementById('toilet-tablets-count');\n        const includedKmsSpan = document.getElementById('included-kms');\n        const extraKmsCountInput = document.getElementById('extra-kms-count');\n        const passengersInput = document.getElementById('passengers');\n        const premiumCoverageLabel = document.getElementById('premium-coverage-label');\n        const estimateSummaryDataTextarea = document.getElementById('estimate-summary-data');\n\n        function updateOptionalExtras(vanName) {\n            const allExtraContainers = document.querySelectorAll('#optional-extras-container > label, #optional-extras-container > div');\n            const safeVanName = vanName || \"\";\n            const isBigVan = safeVanName === 'Sunlight I68' || safeVanName === 'Etrusco A7300DB';\n\n            const towelSetPriceSpan = document.getElementById('towel-set-price');\n            const towelSetDescSpan = document.getElementById('towel-set-desc');\n            const beddingSetPriceSpan = document.getElementById('bedding-set-price');\n            const trekkingDetailsSpan = document.getElementById('trekking-details');\n            const towelSetInput = document.getElementById('towel-set');\n            const beddingSetInput = document.getElementById('bedding-set');\n\n            if (isBigVan) {\n                towelSetPriceSpan.textContent = '35\u20ac';\n                towelSetDescSpan.textContent = 'Set general';\n                towelSetInput.dataset.cost = '35';\n                beddingSetPriceSpan.textContent = '60\u20ac';\n                beddingSetInput.dataset.cost = '60';\n                trekkingDetailsSpan.textContent = ''; \n            } else {\n                towelSetPriceSpan.textContent = '20\u20ac';\n                towelSetDescSpan.textContent = '1 grande, 1 peque\u00f1a\/persona';\n                towelSetInput.dataset.cost = '20';\n                beddingSetPriceSpan.textContent = '35\u20ac';\n                beddingSetInput.dataset.cost = '35';\n                trekkingDetailsSpan.textContent = 'portabicis,';\n            }\n            \n            allExtraContainers.forEach(container => {\n                const vansData = container.dataset.vans;\n                if (!vansData) return;\n\n                const supportedVans = vansData.split(',').map(v => v.trim());\n                const isSupported = supportedVans.includes(safeVanName);\n                const input = container.querySelector('input[type=\"checkbox\"]');\n\n                if (isSupported) {\n                    container.classList.remove('hidden', 'opacity-50', 'pointer-events-none');\n                } else {\n                    container.classList.add('hidden', 'opacity-50', 'pointer-events-none');\n                    if (input && input.checked) input.checked = false;\n                    if (input && input.id === 'toilet-tablets') toiletTabletsCountInput.value = 0;\n                }\n            });\n        }\n\n        function calculateEstimate() {\n            const selectedVanRadio = document.querySelector('input[name=\"van\"]:checked');\n            const vanName = selectedVanRadio ? selectedVanRadio.value : \"\";\n            const startDate = new Date(startDateInput.value);\n            const endDate = new Date(endDateInput.value);\n            const { totalDays, lowDays, highDays } = calculateRentalPeriod(startDate, endDate, vanName);\n            \n            const minLowDays = parseInt(selectedVanRadio.dataset.minLow, 10);\n            const minHighDays = parseInt(selectedVanRadio.dataset.minHigh, 10);\n            const minRequiredDays = highDays > 0 ? minHighDays : minLowDays;\n            \n            if (totalDays < minRequiredDays) {\n                daysErrorMessage.textContent = `El per\u00edodo m\u00ednimo de alquiler es de ${minRequiredDays} d\u00edas.`;\n                daysErrorMessage.classList.remove('hidden');\n                exportPdfBtn.disabled = true;\n                sendInquiryBtn.disabled = true;\n                return;\n            } else {\n                daysErrorMessage.classList.add('hidden');\n                exportPdfBtn.disabled = false;\n                sendInquiryBtn.disabled = false;\n            }\n\n            \/\/ Coverage Restriction\n            const isRestrictedVan = (vanName === 'Sunlight I68' || vanName === 'Etrusco A7300DB');\n            const premiumRadio = document.querySelector('input[name=\"coverage-plan\"][value=\"Plan de reducci\u00f3n Premium\"]');\n            if (isRestrictedVan) {\n                if (premiumRadio && premiumRadio.checked) {\n                    document.querySelector('input[name=\"coverage-plan\"][value=\"Plan de cobertura b\u00e1sica\"]').checked = true;\n                }\n                premiumCoverageLabel.classList.add('opacity-50', 'pointer-events-none');\n            } else {\n                premiumCoverageLabel.classList.remove('opacity-50', 'pointer-events-none');\n            }\n\n            const vanLowRate = parseFloat(selectedVanRadio.dataset.low);\n            const vanHighRate = parseFloat(selectedVanRadio.dataset.high);\n            const baseVanCost = (lowDays * vanLowRate) + (highDays * vanHighRate);\n            \n            let extrasCost = 0;\n            const extrasBreakdown = [];\n            \n            const prepFee = parseFloat(selectedVanRadio.dataset.prep);\n            const cleanFee = parseFloat(selectedVanRadio.dataset.clean);\n            extrasBreakdown.push({ name: `Tasa de gesti\u00f3n`, cost: prepFee });\n            extrasBreakdown.push({ name: `Tasa de limpieza`, cost: cleanFee });\n            extrasCost += (prepFee + cleanFee);\n\n            document.querySelectorAll('#optional-extras-container input[type=\"checkbox\"]').forEach(item => {\n                if (item.checked && !item.parentElement.classList.contains('hidden')) {\n                    const cost = parseFloat(item.dataset.cost);\n                    const type = item.dataset.type;\n                    const maxCost = parseFloat(item.dataset.maxCost) || Infinity;\n                    let extraItemCost = 0;\n                    let itemName = item.parentElement.querySelector('span').textContent;\n\n                    switch(type) {\n                        case 'day': extraItemCost = Math.min(cost * totalDays, maxCost); break;\n                        case 'rent': case 'trip': case 'flat': extraItemCost = cost; break;\n                        case 'qty-day':\n                            const count = parseInt(document.getElementById(item.id + '-count').value, 10) || 1;\n                            extraItemCost = Math.min(cost * totalDays, maxCost) * count;\n                            itemName += ` (x${count})`;\n                            break;\n                        case 'piece':\n                            const tabletCount = parseInt(toiletTabletsCountInput.value, 10);\n                            extraItemCost = cost * tabletCount;\n                            itemName += ` (${tabletCount} uds)`;\n                            break;\n                    }\n                    extrasCost += extraItemCost;\n                    extrasBreakdown.push({ name: itemName, cost: extraItemCost });\n                }\n            });\n\n            \/\/ Time slots\n            const pickupRadio = document.querySelector('input[name=\"pickup-time\"]:checked');\n            const dropoffRadio = document.querySelector('input[name=\"dropoff-time\"]:checked');\n            const pickupFee = parseFloat(pickupRadio.dataset.fee);\n            const dropoffFee = parseFloat(dropoffRadio.dataset.fee);\n            if (pickupFee > 0) extrasBreakdown.push({ name: `Suplemento recogida (${pickupRadio.value})`, cost: pickupFee });\n            if (dropoffFee > 0) extrasBreakdown.push({ name: `Suplemento entrega (${dropoffRadio.value})`, cost: dropoffFee });\n            extrasCost += (pickupFee + dropoffFee);\n\n            \/\/ Kilometers\n            const selectedKmOption = document.querySelector('input[name=\"km-option\"]:checked');\n            if (selectedKmOption) {\n                if (selectedKmOption.id === 'extra-kms-radio') {\n                    const count = parseInt(extraKmsCountInput.value, 10);\n                    if (count > 0) {\n                        const cost = count * 50;\n                        extrasCost += cost;\n                        extrasBreakdown.push({ name: `Kms extra (${count} x 300km)`, cost: cost });\n                    }\n                } else if (selectedKmOption.id === 'unlimitedkm-radio') {\n                    const cost = parseFloat(selectedKmOption.dataset.cost) * totalDays;\n                    extrasCost += cost;\n                    extrasBreakdown.push({ name: `Kilometraje ilimitado`, cost: cost });\n                }\n            }\n\n            \/\/ Coverage\n            const coverage = document.querySelector('input[name=\"coverage-plan\"]:checked');\n            const coverageCost = coverage.dataset.type === 'per-day' ? parseFloat(coverage.dataset.cost) * totalDays : 0;\n            if (coverageCost > 0) extrasBreakdown.push({ name: `Cobertura: ${coverage.value}`, cost: coverageCost });\n            extrasCost += coverageCost;\n\n            depositTextValueSpan.textContent = formatCurrency(parseFloat(coverage.dataset.deposit));\n\n            \/\/ Discount\n            const freeDays = calculateDiscountDays(totalDays, vanName);\n            const discountValue = freeDays > 0 ? (baseVanCost \/ totalDays) * freeDays : 0;\n            if (discountValue > 0) extrasBreakdown.push({ name: `Descuento larga estancia (${freeDays} d\u00edas gratis)`, cost: -discountValue });\n\n            const finalTotal = baseVanCost + extrasCost - discountValue;\n\n            \/\/ UI Update\n            daysTextSpan.textContent = totalDays;\n            daysBreakdownTextSpan.textContent = totalDays;\n            selectedVanTextSpan.textContent = vanName;\n            vanCostSpan.textContent = formatCurrency(baseVanCost);\n            extrasCostSpan.textContent = formatCurrency(extrasCost - discountValue);\n            totalCostSpan.textContent = formatCurrency(finalTotal);\n            includedKmsSpan.textContent = totalDays * 100;\n\n            let breakdownHTML = `<div class=\"flex justify-between font-semibold\"><span>Alquiler de furgoneta (${vanName})<\/span><span>${formatCurrency(baseVanCost)}<\/span><\/div>`;\n            extrasBreakdown.forEach(item => {\n                breakdownHTML += `<div class=\"flex justify-between pl-4 text-sm ${item.cost < 0 ? 'text-green-600 font-bold' : 'text-gray-500'}\"><span>${item.name}<\/span><span>${item.cost === 0 ? 'Gratis' : formatCurrency(item.cost)}<\/span><\/div>`;\n            });\n            breakdownDiv.innerHTML = breakdownHTML;\n\n            \/\/ Enhanced Summary for Contact Form 7 Bridge\n            let summary = `--- TRIP DETAILS ---\\n`;\n            summary += `Van Selected: ${vanName}\\n`;\n            summary += `Dates: ${startDateInput.value} to ${endDateInput.value} (${totalDays} days)\\n`;\n            summary += `Passengers: ${passengersInput.value}\\n`;\n            summary += `Included Kms: ${totalDays * 100} km\\n\\n`;\n\n            summary += `--- COST BREAKDOWN ---\\n`;\n            summary += `Base Van Rental: ${formatCurrency(baseVanCost)}\\n`;\n            \n            extrasBreakdown.forEach(item => {\n                summary += `${item.name}: ${item.cost === 0 ? 'Free' : formatCurrency(item.cost)}\\n`;\n            });\n            \n            summary += `\\n--- FINAL ESTIMATE ---\\n`;\n            summary += `TOTAL ESTIMATE (Brut): ${formatCurrency(finalTotal)}\\n`;\n            summary += `REQUIRED DEPOSIT: ${formatCurrency(parseFloat(coverage.dataset.deposit))}\\n`;\n\n            \/\/ Push to CF7 hidden field dynamically\n            const cf7Textarea = document.getElementById('estimate-summary-data');\n            if (cf7Textarea) {\n                cf7Textarea.value = summary;\n            }\n\n            return { vanName, totalDays, startDate: startDateInput.value, endDate: endDateInput.value, passengers: passengersInput.value, totalCost: finalTotal, deposit: coverage.dataset.deposit, breakdown: extrasBreakdown, baseCost: baseVanCost };\n        }\n\n        function handleExportPdf() {\n            const { jsPDF } = window.jspdf;\n            const doc = new jsPDF();\n            const est = calculateEstimate();\n\n            \/\/ Header Section\n            doc.setFontSize(22);\n            doc.text(\"Presupuesto de Alquiler de Campervan\", 105, 20, null, null, \"center\");\n            \n            doc.setFontSize(10);\n            doc.setFont(\"helvetica\", \"normal\");\n            doc.text(`Generado el: ${new Date().toLocaleDateString()}`, 105, 27, null, null, \"center\");\n\n            doc.setFontSize(12);\n            doc.text(`Alquiler: ${est.startDate} al ${est.endDate} (${est.totalDays} d\u00edas)`, 20, 40);\n            doc.text(`Furgoneta: ${est.vanName} | Pasajeros: ${est.passengers}`, 20, 48);\n\n            const rows = est.breakdown.map(item => [item.name, item.cost === 0 ? 'Gratis' : formatCurrency(item.cost)]);\n            rows.unshift([`Tarifa base de alquiler`, formatCurrency(est.baseCost)]);\n\n            doc.autoTable({\n                startY: 60,\n                head: [['Descripci\u00f3n', 'Coste (Bruto)']],\n                body: rows,\n                headStyles: { fillColor: [253, 224, 71], textColor: [55, 65, 81] },\n            });\n\n            const finalY = doc.lastAutoTable.finalY;\n            doc.setFontSize(16);\n            doc.setFont(\"helvetica\", \"bold\");\n            doc.text(`Presupuesto total: ${formatCurrency(est.totalCost)}`, 20, finalY + 20);\n            \n            doc.setFontSize(12);\n            doc.setFont(\"helvetica\", \"normal\");\n            doc.text(`Dep\u00f3sito de seguridad requerido: ${formatCurrency(parseFloat(est.deposit))}`, 20, finalY + 30);\n            \n            \/\/ Validity Note\n            doc.setFontSize(10);\n            doc.setTextColor(100);\n            doc.text(\"Presupuesto v\u00e1lido por 30 d\u00edas\", 20, finalY + 45);\n\n            doc.save(\"presupuesto-alquiler.pdf\");\n        }\n\n        function handleSendInquiry() {\n            calculateEstimate();\n            statusMessage.textContent = '\u00a1Despl\u00e1zate hacia abajo para completar el formulario de consulta!';\n            statusMessage.classList.remove('hidden');\n            const cf7Form = document.querySelector('.wpcf7'); \n            if (cf7Form) {\n                cf7Form.scrollIntoView({ behavior: 'smooth' });\n            } else {\n                window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });\n            }\n        }\n\n        document.addEventListener('DOMContentLoaded', () => {\n            const today = new Date();\n            const tomorrow = new Date(today);\n            tomorrow.setDate(tomorrow.getDate() + 3);\n            startDateInput.valueAsDate = today;\n            endDateInput.valueAsDate = tomorrow;\n\n            updateOptionalExtras(document.querySelector('input[name=\"van\"]:checked').value);\n            calculateEstimate();\n\n            vanRadios.forEach(r => r.addEventListener('change', e => {\n                updateOptionalExtras(e.target.value);\n                calculateEstimate();\n            }));\n            \n            [startDateInput, endDateInput, passengersInput, extraKmsCountInput, toiletTabletsCountInput].forEach(el => el.addEventListener('input', calculateEstimate));\n            optionalItemsContainer.addEventListener('change', calculateEstimate);\n            [...pickupRadios, ...dropoffRadios, ...kmOptionRadios, ...coverageRadios].forEach(r => r.addEventListener('change', calculateEstimate));\n            \n            exportPdfBtn.addEventListener('click', handleExportPdf);\n            sendInquiryBtn.addEventListener('click', handleSendInquiry);\n        });\n    <\/script>\n<\/body>\n<\/html><\/div>\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f2899-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"2899\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/es\/wp-json\/wp\/v2\/pages\/2864#wpcf7-f2899-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<div style=\"display: none;\">\n<input type=\"hidden\" name=\"_wpcf7\" value=\"2899\" \/>\n<input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.0.6\" \/>\n<input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/>\n<input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f2899-o1\" \/>\n<input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/>\n<input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/div>\n<div class=\"space-y-4 bg-white p-6 md:p-8 rounded-2xl shadow-md border border-gray-100 mt-8\">\n\t<h3 class=\"text-xl md:text-2xl font-bold text-gray-700 mb-4\">Complete su consulta\n\t<\/h3>\n\t<div class=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n\t\t<div class=\"flex flex-col\">\n\t\t\t<p><label class=\"text-sm font-medium text-gray-500 mb-1\">Tu nombre *<\/label><span class=\"wpcf7-form-control-wrap\" data-name=\"your-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required w-full p-4 border border-gray-300 rounded-xl focusring-2 focusring-yellow-300 focusborder-transparent\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"your-name\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"flex flex-col\">\n\t\t\t<p><label class=\"text-sm font-medium text-gray-500 mb-1\">Tu Email *<\/label><span class=\"wpcf7-form-control-wrap\" data-name=\"your-email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email w-full p-4 border border-gray-300 rounded-xl focusring-2 focusring-yellow-300 focusborder-transparent\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"email\" name=\"your-email\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"flex flex-col\">\n\t\t<p><label class=\"text-sm font-medium text-gray-500 mb-1\">N\u00famero de tel\u00e9fono *<\/label><span class=\"wpcf7-form-control-wrap\" data-name=\"your-phone\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel w-full p-4 border border-gray-300 rounded-xl focusring-2 focusring-yellow-300 focusborder-transparent\" aria-required=\"true\" aria-invalid=\"false\" value=\"\" type=\"tel\" name=\"your-phone\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\n <!-- This hidden text area acts as the bridge to catch the JS data -->\n\t<div style=\"display: none;\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"estimate-summary-data\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea\" id=\"estimate-summary-data\" aria-invalid=\"false\" name=\"estimate-summary-data\"><\/textarea><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div class=\"pt-4 text-center\">\n\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner px-8 py-4 bg-yellow-300 text-gray-700 font-bold text-lg rounded-full shadow-lg transition-all duration-300 hoverbg-yellow-400 hovershadow-xl cursor-pointer\" type=\"submit\" value=\"Enviar consulta\" \/>\n\t\t<\/p>\n\t<\/div>\n<\/div><input type='hidden' class='wpcf7-pum' value='{\"closepopup\":false,\"closedelay\":0,\"openpopup\":false,\"openpopup_id\":0}' \/><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div><\/div><\/div><\/div><\/section>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"content-type":"","footnotes":""},"class_list":["post-2864","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Calculadora de precios - solcaravan.es<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Calculadora de precios - solcaravan.es\" \/>\n<meta property=\"og:url\" content=\"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/\" \/>\n<meta property=\"og:site_name\" content=\"solcaravan.es\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/costadelsolcaravan\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-25T20:46:23+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"32 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/\",\"url\":\"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/\",\"name\":\"Calculadora de precios - solcaravan.es\",\"isPartOf\":{\"@id\":\"https:\/\/solcaravan.es\/es\/#website\"},\"datePublished\":\"2026-02-21T14:24:03+00:00\",\"dateModified\":\"2026-02-25T20:46:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/solcaravan.es\/es\/hotel\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Calculadora de precios\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/solcaravan.es\/es\/#website\",\"url\":\"https:\/\/solcaravan.es\/es\/\",\"name\":\"solcaravan.es\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/solcaravan.es\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/solcaravan.es\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/solcaravan.es\/es\/#organization\",\"name\":\"Sol Caravan - Campervan Rental M\u00e1laga\",\"url\":\"https:\/\/solcaravan.es\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/solcaravan.es\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/solcaravan.es\/wp-content\/uploads\/2024\/10\/SOLCaravan-2.png\",\"contentUrl\":\"https:\/\/solcaravan.es\/wp-content\/uploads\/2024\/10\/SOLCaravan-2.png\",\"width\":500,\"height\":500,\"caption\":\"Sol Caravan - Campervan Rental M\u00e1laga\"},\"image\":{\"@id\":\"https:\/\/solcaravan.es\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/costadelsolcaravan\",\"https:\/\/www.instagram.com\/solcaravan\",\"https:\/\/www.tiktok.com\/@solcaravan.malaga\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Calculadora de precios - solcaravan.es","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/","og_locale":"es_ES","og_type":"article","og_title":"Calculadora de precios - solcaravan.es","og_url":"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/","og_site_name":"solcaravan.es","article_publisher":"https:\/\/www.facebook.com\/costadelsolcaravan","article_modified_time":"2026-02-25T20:46:23+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"32 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/","url":"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/","name":"Calculadora de precios - solcaravan.es","isPartOf":{"@id":"https:\/\/solcaravan.es\/es\/#website"},"datePublished":"2026-02-21T14:24:03+00:00","dateModified":"2026-02-25T20:46:23+00:00","breadcrumb":{"@id":"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/solcaravan.es\/es\/calculadora-de-precios\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/solcaravan.es\/es\/calculadora-de-precios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/solcaravan.es\/es\/hotel\/"},{"@type":"ListItem","position":2,"name":"Calculadora de precios"}]},{"@type":"WebSite","@id":"https:\/\/solcaravan.es\/es\/#website","url":"https:\/\/solcaravan.es\/es\/","name":"solcaravan.es","description":"","publisher":{"@id":"https:\/\/solcaravan.es\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/solcaravan.es\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/solcaravan.es\/es\/#organization","name":"Sol Caravan - Campervan Rental M\u00e1laga","url":"https:\/\/solcaravan.es\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/solcaravan.es\/es\/#\/schema\/logo\/image\/","url":"https:\/\/solcaravan.es\/wp-content\/uploads\/2024\/10\/SOLCaravan-2.png","contentUrl":"https:\/\/solcaravan.es\/wp-content\/uploads\/2024\/10\/SOLCaravan-2.png","width":500,"height":500,"caption":"Sol Caravan - Campervan Rental M\u00e1laga"},"image":{"@id":"https:\/\/solcaravan.es\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/costadelsolcaravan","https:\/\/www.instagram.com\/solcaravan","https:\/\/www.tiktok.com\/@solcaravan.malaga"]}]}},"_links":{"self":[{"href":"https:\/\/solcaravan.es\/es\/wp-json\/wp\/v2\/pages\/2864"}],"collection":[{"href":"https:\/\/solcaravan.es\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/solcaravan.es\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/solcaravan.es\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solcaravan.es\/es\/wp-json\/wp\/v2\/comments?post=2864"}],"version-history":[{"count":6,"href":"https:\/\/solcaravan.es\/es\/wp-json\/wp\/v2\/pages\/2864\/revisions"}],"predecessor-version":[{"id":2900,"href":"https:\/\/solcaravan.es\/es\/wp-json\/wp\/v2\/pages\/2864\/revisions\/2900"}],"wp:attachment":[{"href":"https:\/\/solcaravan.es\/es\/wp-json\/wp\/v2\/media?parent=2864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}