{"id":7673,"date":"2025-12-05T13:36:10","date_gmt":"2025-12-05T12:36:10","guid":{"rendered":"https:\/\/www.integrapirineus.com\/?page_id=7673"},"modified":"2025-12-17T08:51:13","modified_gmt":"2025-12-17T07:51:13","slug":"forfait-for-faith","status":"publish","type":"page","link":"https:\/\/www.integrapirineus.com\/es\/forfait-for-faith\/","title":{"rendered":"Forfait For Faith"},"content":{"rendered":"<p>[et_pb_section fb_built=\u00bb1&#8243; _builder_version=\u00bb4.16&#8243; _module_preset=\u00bbdefault\u00bb custom_margin=\u00bb-28px||-41px||false|false\u00bb custom_padding=\u00bb0px|0px|0px|0px|false|false\u00bb custom_padding_phone=\u00bb50px|0|10px|0|false|false\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_row column_structure=\u00bb1_2,1_2&#8243; _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb custom_padding=\u00bb||0px|||\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_column type=\u00bb1_2&#8243; _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_image src=\u00bbhttps:\/\/www.integrapirineus.com\/wp-content\/uploads\/2025\/12\/El-text-del-paragraf-1-1.png\u00bb title_text=\u00bbEl text del par\u00e0graf (1)\u00bb _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][\/et_pb_image][\/et_pb_column][et_pb_column type=\u00bb1_2&#8243; _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_text _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb text_font=\u00bbMaven Pro|700|||||||\u00bb text_text_color=\u00bb#F49D16&#8243; text_font_size=\u00bb40px\u00bb custom_margin=\u00bb||42px|||\u00bb global_colors_info=\u00bb{}\u00bb]<\/p>\n<p>COLABORA<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb text_font=\u00bbMaven Pro||||||||\u00bb text_text_color=\u00bb#000000&#8243; text_font_size=\u00bb18px\u00bb global_colors_info=\u00bb{}\u00bb]<\/p>\n<p>para prevenir incendios en el Pirineo.\u00a0<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb text_font=\u00bbMaven Pro||||||||\u00bb custom_margin=\u00bb||42px|||\u00bb custom_padding=\u00bb1px|||||\u00bb global_colors_info=\u00bb{}\u00bb]<\/p>\n<p>A partir de esta campa\u00f1a podemos seguir cuidando de los bosques y las personas del Pirineo.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_column type=\u00bb4_4&#8243; _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_code _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb custom_margin=\u00bb-51px|||||\u00bb hover_enabled=\u00bb0&#8243; global_colors_info=\u00bb{}\u00bb sticky_enabled=\u00bb0&#8243;]<!DOCTYPE html>\r\n<html lang=\"es\">\r\n\r\n<head>\r\n  <meta charset=\"utf-8\" \/>\r\n  <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" \/>\r\n  <title>Formulario de Donaci\u00f3n<\/title>\r\n  <style>\r\n    body {\r\n      font-family: Arial, sans-serif;\r\n      margin: 0;\r\n      background: #fff;\r\n      color: #333;\r\n    }\r\n\r\n    .form-container {\r\n      max-width: 600px;\r\n      margin: 2rem auto;\r\n      padding: 2rem;\r\n      border: 1px solid #ccc;\r\n      border-radius: 8px;\r\n    }\r\n\r\n    .form-step {\r\n      display: none;\r\n    }\r\n\r\n    .form-step.active {\r\n      display: block;\r\n    }\r\n\r\n    h2 {\r\n      color: #f29b16;\r\n    }\r\n\r\n    label {\r\n      display: block;\r\n      margin: 0.5rem 0 0.25rem;\r\n      font-weight: bold;\r\n    }\r\n\r\n    input,\r\n    select {\r\n      width: 100%;\r\n      padding: 0.5rem;\r\n      margin-bottom: 1rem;\r\n      border-radius: 4px;\r\n      border: 1px solid #ccc;\r\n      box-sizing: border-box;\r\n    }\r\n\r\n    .selector-group {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 1rem;\r\n      margin-bottom: 1rem;\r\n    }\r\n\r\n    .selector-group button {\r\n      flex: 1;\r\n      padding: 0.5rem;\r\n      border: 1px solid #f29b16;\r\n      background: white;\r\n      color: #f29b16;\r\n      border-radius: 4px;\r\n      cursor: pointer;\r\n    }\r\n\r\n    .selector-group button.active {\r\n      background-color: #f29b16;\r\n      color: white;\r\n    }\r\n\r\n    .buttons {\r\n      display: flex;\r\n      justify-content: space-between;\r\n      margin-top: 1.5rem;\r\n    }\r\n\r\n    .btn {\r\n      background-color: #f29b16;\r\n      color: white;\r\n      padding: 0.5rem 1rem;\r\n      border: none;\r\n      border-radius: 4px;\r\n      cursor: pointer;\r\n    }\r\n\r\n    .btn:disabled {\r\n      background-color: #ccc;\r\n    }\r\n\r\n    \/* Estilo para campos con error *\/\r\n    .field-error {\r\n      border-color: #f29b16;\r\n      background-color: #fff8f8;\r\n    }\r\n\r\n    .btn.secondary {\r\n      background-color: #fff;\r\n      color: #f29b16;\r\n      border: 1px solid #f29b16;\r\n    }\r\n\r\n    .btn.primary-action {\r\n      padding: 0.75rem 1.25rem;\r\n      \/* Un poco m\u00e1s grande *\/\r\n      font-size: 1.1rem;\r\n      font-weight: bold;\r\n    }\r\n\r\n    \/* 1. Indicador de Pasos (con tu color rojo) *\/\r\n    .progress-indicator {\r\n      display: flex;\r\n      justify-content: center;\r\n      align-items: center;\r\n      margin-bottom: 2rem;\r\n    }\r\n\r\n    .step-circle {\r\n      width: 30px;\r\n      height: 30px;\r\n      line-height: 28px;\r\n      border-radius: 50%;\r\n      background-color: #f0f0f0;\r\n      color: #999;\r\n      text-align: center;\r\n      font-weight: bold;\r\n      border: 2px solid #f0f0f0;\r\n    }\r\n\r\n    .step-circle.active {\r\n      background-color: #f29b16;\r\n      color: white;\r\n      border-color: #f29b16;\r\n    }\r\n\r\n    .step-circle.done {\r\n      background-color: white;\r\n      color: #f29b16;\r\n      border-color: #f29b16;\r\n      font-size: 1.2rem;\r\n      line-height: 26px;\r\n    }\r\n\r\n    \/* Se puede poner '\u2713' aqu\u00ed *\/\r\n    .step-line {\r\n      width: 40px;\r\n      height: 2px;\r\n      background-color: #f0f0f0;\r\n    }\r\n\r\n    .step-line.active {\r\n      background-color: #f29b16;\r\n    }\r\n\r\n    \/* 2. Subt\u00edtulos y Resumen de Importe *\/\r\n    .step-subtitle {\r\n      font-size: 1.1rem;\r\n      color: #555;\r\n      text-align: center;\r\n      margin-top: 1rem;\r\n      margin-bottom: 2rem;\r\n    }\r\n\r\n    .step-subtitle span {\r\n      font-weight: bold;\r\n      color: #333;\r\n    }\r\n\r\n    \/* 3. Conexi\u00f3n Segura (Candado) *\/\r\n    .secure-connection {\r\n      text-align: center;\r\n      color: #777;\r\n      margin: 1.5rem 0;\r\n      font-size: 0.9rem;\r\n    }\r\n\r\n    .secure-connection svg {\r\n      vertical-align: middle;\r\n      margin-right: 5px;\r\n    }\r\n\r\n    \/* 4. Bot\u00f3n 'Volver' (como en las capturas) *\/\r\n    .back-button {\r\n      color: #555;\r\n      text-decoration: none;\r\n      font-size: 0.9rem;\r\n      cursor: pointer;\r\n    }\r\n\r\n    \/* --- INICIO ESTILOS RGPD A\u00d1ADIDOS --- *\/\r\n    .rgpd-group {\r\n      margin-top: 1.5rem;\r\n      border-top: 1px solid #eee;\r\n      padding-top: 1rem;\r\n    }\r\n\r\n    .rgpd-field {\r\n      display: flex;\r\n      align-items: flex-start;\r\n      margin-bottom: 1rem;\r\n    }\r\n\r\n    .rgpd-field input[type=\"checkbox\"] {\r\n      width: auto;\r\n      \/* Ancho autom\u00e1tico para checkboxes *\/\r\n      margin-right: 0.75rem;\r\n      margin-top: 0.2rem;\r\n      \/* Alineaci\u00f3n vertical ligera *\/\r\n      margin-bottom: 0;\r\n      flex-shrink: 0;\r\n    }\r\n\r\n    .rgpd-field label {\r\n      display: inline;\r\n      \/* Permite que el label est\u00e9 al lado del checkbox *\/\r\n      font-weight: normal;\r\n      margin: 0;\r\n    }\r\n\r\n    \/* Estilo de error para el label del checkbox *\/\r\n    .rgpd-field label.field-error {\r\n      color: #f29b16;\r\n      font-weight: bold;\r\n    }\r\n\r\n    .rgpd-field a {\r\n      color: #2a7ae2;\r\n      text-decoration: underline;\r\n    }\r\n\r\n    \/* --- FIN ESTILOS RGPD A\u00d1ADIDOS --- *\/\r\n    .form-footer-note {\r\n      font-size: 0.8rem;\r\n      color: #777;\r\n      text-align: center;\r\n      margin-top: 1.5rem;\r\n    }\r\n  <\/style>\r\n<\/head>\r\n\r\n<body>\r\n  <div class=\"form-container\">\r\n    <form id=\"donationForm\">\r\n      <div class=\"progress-indicator\">\r\n        <div class=\"step-circle active\" id=\"circle-1\">1<\/div>\r\n        <div class=\"step-line\" id=\"line-1-2\"><\/div>\r\n        <div class=\"step-circle\" id=\"circle-2\">2<\/div>\r\n        <div class=\"step-line\" id=\"line-2-3\"><\/div>\r\n        <div class=\"step-circle\" id=\"circle-3\">3<\/div>\r\n      <\/div>\r\n      <div class=\"form-step active\" id=\"step-1\">\r\n        <h2>Quiero ayudar con mi aportaci\u00f3n<\/h2>\r\n        <label>Tipo de aportaci\u00f3n<\/label>\r\n        <div class=\"selector-group\">\r\n          <button class=\"active\" data-type=\"donativo\" onclick=\"selectDonationType(this)\" type=\"button\">\r\n            Puntual\r\n          <\/button>\r\n          <button data-type=\"cuota\" onclick=\"selectDonationType(this)\" type=\"button\">\r\n            Peri\u00f3dica\r\n          <\/button>\r\n        <\/div>\r\n        <div id=\"periodicitySelector\" style=\"display: none\">\r\n          <label>Periodicidad<\/label>\r\n          <select id=\"periodicitySelect\" onchange=\"updatePeriodicity(this)\">\r\n            <option value=\"monthly\">Mensual<\/option>\r\n            <option value=\"quarterly\">Trimestral<\/option>\r\n            <option value=\"annual\">Anual<\/option>\r\n          <\/select>\r\n        <\/div>\r\n        <label>Importe<\/label>\r\n        <div class=\"selector-group\" id=\"amount-buttons\">\r\n          <button onclick=\"selectAmount(this, 5)\" type=\"button\">5\u20ac<\/button>\r\n          <button onclick=\"selectAmount(this, 10)\" type=\"button\">10\u20ac<\/button>\r\n          <button onclick=\"selectAmount(this, 25)\" type=\"button\">\r\n            25\u20ac\r\n          <\/button>\r\n          <input id=\"customAmount\" min=\"1\" oninput=\"customAmountChanged(this)\" placeholder=\"Otra cantidad\"\r\n            type=\"number\" \/>\r\n        <\/div>\r\n        <div id=\"deductionInfo\" style=\"text-align: center; margin-top: 1rem\">\r\n          <p id=\"deductionText\" style=\"color: green; font-weight: bold; font-size: 1rem\">\r\n            \u2139 Desgrava hasta 0 \u20ac al a\u00f1o\r\n          <\/p>\r\n          <a href=\"#\" onclick=\"openDeductionModal(); return false;\" style=\"\r\n                display: block;\r\n                text-align: center;\r\n                font-size: 0.9rem;\r\n                margin-top: 0.5rem;\r\n                color: #2a7ae2;\r\n              \">\u2139 M\u00e1s informaci\u00f3n sobre la desgravaci\u00f3n<\/a>\r\n        <\/div>\r\n        <label>Tipo de persona<\/label>\r\n        <div class=\"selector-group\">\r\n          <button class=\"active\" data-person=\"persona\" onclick=\"selectPersonType(this)\" type=\"button\">\r\n            Persona f\u00edsica\r\n          <\/button>\r\n          <button data-person=\"organizacion\" onclick=\"selectPersonType(this)\" type=\"button\">\r\n            Empresa\r\n          <\/button>\r\n        <\/div>\r\n        <div class=\"buttons\">\r\n          <span><\/span>\r\n          <button class=\"btn\" onclick=\"nextStep()\" type=\"button\">\r\n            Siguiente\r\n          <\/button>\r\n        <\/div>\r\n        <p class=\"form-footer-note\">\r\n          Integra Pirineus es una Fundaci\u00f3n inscrita en el\r\n          Registro de Fundaciones del Departamento de Justicia de la Generalidad\r\n          de Catalu\u00f1a inscrita con el n\u00famero 2691. \u00a1Gracias por tu colaboraci\u00f3n!\r\n        <\/p>\r\n      <\/div>\r\n      <div class=\"form-step\" id=\"step-2\">\r\n        <h2>Tus datos<\/h2>\r\n        <p class=\"step-subtitle\"><span id=\"summary-amount-step2\"><\/span><\/p>\r\n        <div id=\"fields-persona\">\r\n          <label for=\"Contacts___first_name\">Nombre<\/label>\r\n          <input id=\"Contacts___first_name\" type=\"text\" \/>\r\n          <label for=\"Contacts___last_name\">Apellidos<\/label>\r\n          <input id=\"Contacts___last_name\" type=\"text\" \/>\r\n          <label for=\"Contacts___email1\">Correo electr\u00f3nico<\/label>\r\n          <input id=\"Contacts___email1\" type=\"email\" onchange=\"validateEmailField(this)\" \/>\r\n          <label for=\"Contacts___stic_identification_type_c\">Tipo de documento<\/label>\r\n          <select id=\"Contacts___stic_identification_type_c\"\r\n            onchange=\"validateIdentificationField(document.getElementById('Contacts___stic_identification_number_c'))\">\r\n            <option label=\"\" value=\"\"><\/option>\r\n            <option label=\"NIE\" value=\"nie\">NIE<\/option>\r\n            <option label=\"NIF\" value=\"nif\">NIF<\/option>\r\n            <option label=\"Pasaporte\" value=\"passport\">Pasaporte<\/option>\r\n            <option label=\"Otros\" value=\"other\">Otros<\/option>\r\n          <\/select>\r\n          <label for=\"Contacts___stic_identification_number_c\">N.\u00ba de documento<\/label>\r\n          <input id=\"Contacts___stic_identification_number_c\" type=\"text\"\r\n            onchange=\"validateIdentificationField(this)\" \/>\r\n          <label for=\"Contacts___primary_address_state\">Provincia<\/label>\r\n          <select id=\"Contacts___primary_address_state\" name=\"Contacts___primary_address_state\">\r\n            <option label=\"\" value=\"\"><\/option>\r\n            <option label=\"Albacete\" value=\"02\">Albacete<\/option>\r\n            <option label=\"Alicante\/Alacant\" value=\"03\">\r\n              Alicante\/Alacant\r\n            <\/option>\r\n            <option label=\"Almer\u00eda\" value=\"04\">Almer\u00eda<\/option>\r\n            <option label=\"Araba\/\u00c1lava\" value=\"01\">Araba\/\u00c1lava<\/option>\r\n            <option label=\"Asturias\" value=\"33\">Asturias<\/option>\r\n            <option label=\"\u00c1vila\" value=\"05\">\u00c1vila<\/option>\r\n            <option label=\"Badajoz\" value=\"06\">Badajoz<\/option>\r\n            <option label=\"Balears, Illes\" value=\"07\">Balears, Illes<\/option>\r\n            <option label=\"Barcelona\" value=\"08\">Barcelona<\/option>\r\n            <option label=\"Bizkaia\" value=\"48\">Bizkaia<\/option>\r\n            <option label=\"Burgos\" value=\"09\">Burgos<\/option>\r\n            <option label=\"C\u00e1ceres\" value=\"10\">C\u00e1ceres<\/option>\r\n            <option label=\"C\u00e1diz\" value=\"11\">C\u00e1diz<\/option>\r\n            <option label=\"Cantabria\" value=\"39\">Cantabria<\/option>\r\n            <option label=\"Castell\u00f3n\/Castell\u00f3\" value=\"12\">\r\n              Castell\u00f3n\/Castell\u00f3\r\n            <\/option>\r\n            <option label=\"Ceuta\" value=\"51\">Ceuta<\/option>\r\n            <option label=\"Ciudad Real\" value=\"13\">Ciudad Real<\/option>\r\n            <option label=\"C\u00f3rdoba\" value=\"14\">C\u00f3rdoba<\/option>\r\n            <option label=\"Coru\u00f1a, A\" value=\"15\">Coru\u00f1a, A<\/option>\r\n            <option label=\"Cuenca\" value=\"16\">Cuenca<\/option>\r\n            <option label=\"Gipuzkoa\" value=\"20\">Gipuzkoa<\/option>\r\n            <option label=\"Girona\" value=\"17\">Girona<\/option>\r\n            <option label=\"Granada\" value=\"18\">Granada<\/option>\r\n            <option label=\"Guadalajara\" value=\"19\">Guadalajara<\/option>\r\n            <option label=\"Huelva\" value=\"21\">Huelva<\/option>\r\n            <option label=\"Huesca\" value=\"22\">Huesca<\/option>\r\n            <option label=\"Ja\u00e9n\" value=\"23\">Ja\u00e9n<\/option>\r\n            <option label=\"Le\u00f3n\" value=\"24\">Le\u00f3n<\/option>\r\n            <option label=\"Lleida\" value=\"25\">Lleida<\/option>\r\n            <option label=\"Lugo\" value=\"27\">Lugo<\/option>\r\n            <option label=\"Madrid\" value=\"28\">Madrid<\/option>\r\n            <option label=\"M\u00e1laga\" value=\"29\">M\u00e1laga<\/option>\r\n            <option label=\"Melilla\" value=\"52\">Melilla<\/option>\r\n            <option label=\"Murcia\" value=\"30\">Murcia<\/option>\r\n            <option label=\"Navarra\" value=\"31\">Navarra<\/option>\r\n            <option label=\"Ourense\" value=\"32\">Ourense<\/option>\r\n            <option label=\"Palencia\" value=\"34\">Palencia<\/option>\r\n            <option label=\"Palmas, Las\" value=\"35\">Palmas, Las<\/option>\r\n            <option label=\"Pontevedra\" value=\"36\">Pontevedra<\/option>\r\n            <option label=\"Rioja, La\" value=\"26\">Rioja, La<\/option>\r\n            <option label=\"Salamanca\" value=\"37\">Salamanca<\/option>\r\n            <option label=\"Santa Cruz de Tenerife\" value=\"38\">\r\n              Santa Cruz de Tenerife\r\n            <\/option>\r\n            <option label=\"Segovia\" value=\"40\">Segovia<\/option>\r\n            <option label=\"Sevilla\" value=\"41\">Sevilla<\/option>\r\n            <option label=\"Soria\" value=\"42\">Soria<\/option>\r\n            <option label=\"Tarragona\" value=\"43\">Tarragona<\/option>\r\n            <option label=\"Teruel\" value=\"44\">Teruel<\/option>\r\n            <option label=\"Toledo\" value=\"45\">Toledo<\/option>\r\n            <option label=\"Valencia\/Val\u00e8ncia\" value=\"46\">\r\n              Valencia\/Val\u00e8ncia\r\n            <\/option>\r\n            <option label=\"Valladolid\" value=\"47\">Valladolid<\/option>\r\n            <option label=\"Zamora\" value=\"49\">Zamora<\/option>\r\n            <option label=\"Zaragoza\" value=\"50\">Zaragoza<\/option>\r\n            <option label=\"No residentes\" value=\"99\">No residentes<\/option>\r\n          <\/select>\r\n          <div class=\"rgpd-group\">\r\n            <div class=\"rgpd-field\">\r\n              <input type=\"checkbox\" id=\"Contacts___privacy_policy\" name=\"Contacts___privacy_policy\"\r\n                onclick=\"this.parentElement.querySelector('label').classList.remove('field-error');\" \/>\r\n              <label for=\"Contacts___privacy_policy\">He le\u00eddo y acepto la\r\n                <a href=\"#\" onclick=\"alert('Enlace a la Pol\u00edtica de Privacidad'); return false;\"\r\n                  target=\"_blank\">Pol\u00edtica de Privacidad<\/a>.<\/label>\r\n            <\/div>\r\n            <div class=\"rgpd-field\">\r\n              <input type=\"checkbox\" id=\"Contacts___gdpr_marketing\" name=\"Contacts___gdpr_marketing\" \/>\r\n              <label for=\"Contacts___gdpr_marketing\">S\u00ed, quiero recibir informaci\u00f3n sobre la actividad de la entidad,\r\n                campa\u00f1as y otras formas de colaborar.<\/label>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <div id=\"fields-organizacion\" style=\"display: none\">\r\n          <label for=\"Accounts___name\">Nombre de la entidad<\/label>\r\n          <input id=\"Accounts___name\" type=\"text\" \/>\r\n          <label for=\"Accounts___email1\">Correo electr\u00f3nico<\/label>\r\n          <input id=\"Accounts___email1\" type=\"email\" onchange=\"validateEmailField(this)\" \/>\r\n          <label for=\"Accounts___stic_identification_number_c\">N.\u00ba de documento (CIF)<\/label>\r\n          <input id=\"Accounts___stic_identification_number_c\" type=\"text\"\r\n            onchange=\"validateIdentificationField(this)\" \/>\r\n          <label for=\"Accounts___billing_address_state\">Provincia<\/label>\r\n          <select id=\"Accounts___billing_address_state\" name=\"Accounts___billing_address_state\">\r\n            <option label=\"\" value=\"\"><\/option>\r\n            <option label=\"Albacete\" value=\"02\">Albacete<\/option>\r\n            <option label=\"Alicante\/Alacant\" value=\"03\">\r\n              Alicante\/Alacant\r\n            <\/option>\r\n            <option label=\"Almer\u00eda\" value=\"04\">Almer\u00eda<\/option>\r\n            <option label=\"Araba\/\u00c1lava\" value=\"01\">Araba\/\u00c1lava<\/option>\r\n            <option label=\"Asturias\" value=\"33\">Asturias<\/option>\r\n            <option label=\"\u00c1vila\" value=\"05\">\u00c1vila<\/option>\r\n            <option label=\"Badajoz\" value=\"06\">Badajoz<\/option>\r\n            <option label=\"Balears, Illes\" value=\"07\">Balears, Illes<\/option>\r\n            <option label=\"Barcelona\" value=\"08\">Barcelona<\/option>\r\n            <option label=\"Bizkaia\" value=\"48\">Bizkaia<\/option>\r\n            <option label=\"Burgos\" value=\"09\">Burgos<\/option>\r\n            <option label=\"C\u00e1ceres\" value=\"10\">C\u00e1ceres<\/option>\r\n            <option label=\"C\u00e1diz\" value=\"11\">C\u00e1diz<\/option>\r\n            <option label=\"Cantabria\" value=\"39\">Cantabria<\/option>\r\n            <option label=\"Castell\u00f3n\/Castell\u00f3\" value=\"12\">\r\n              Castell\u00f3n\/Castell\u00f3\r\n            <\/option>\r\n            <option label=\"Ceuta\" value=\"51\">Ceuta<\/option>\r\n            <option label=\"Ciudad Real\" value=\"13\">Ciudad Real<\/option>\r\n            <option label=\"C\u00f3rdoba\" value=\"14\">C\u00f3rdoba<\/option>\r\n            <option label=\"Coru\u00f1a, A\" value=\"15\">Coru\u00f1a, A<\/option>\r\n            <option label=\"Cuenca\" value=\"16\">Cuenca<\/option>\r\n            <option label=\"Gipuzkoa\" value=\"20\">Gipuzkoa<\/option>\r\n            <option label=\"Girona\" value=\"17\">Girona<\/option>\r\n            <option label=\"Granada\" value=\"18\">Granada<\/option>\r\n            <option label=\"Guadalajara\" value=\"19\">Guadalajara<\/option>\r\n            <option label=\"Huelva\" value=\"21\">Huelva<\/option>\r\n            <option label=\"Huesca\" value=\"22\">Huesca<\/option>\r\n            <option label=\"Ja\u00e9n\" value=\"23\">Ja\u00e9n<\/option>\r\n            <option label=\"Le\u00f3n\" value=\"24\">Le\u00f3n<\/option>\r\n            <option label=\"Lleida\" value=\"25\">Lleida<\/option>\r\n            <option label=\"Lugo\" value=\"27\">Lugo<\/option>\r\n            <option label=\"Madrid\" value=\"28\">Madrid<\/option>\r\n            <option label=\"M\u00e1laga\" value=\"29\">M\u00e1laga<\/option>\r\n            <option label=\"Melilla\" value=\"52\">Melilla<\/option>\r\n            <option label=\"Murcia\" value=\"30\">Murcia<\/option>\r\n            <option label=\"Navarra\" value=\"31\">Navarra<\/option>\r\n            <option label=\"Ourense\" value=\"32\">Ourense<\/option>\r\n            <option label=\"Palencia\" value=\"34\">Palencia<\/option>\r\n            <option label=\"Palmas, Las\" value=\"35\">Palmas, Las<\/option>\r\n            <option label=\"Pontevedra\" value=\"36\">Pontevedra<\/option>\r\n            <option label=\"Rioja, La\" value=\"26\">Rioja, La<\/option>\r\n            <option label=\"Salamanca\" value=\"37\">Salamanca<\/option>\r\n            <option label=\"Santa Cruz de Tenerife\" value=\"38\">\r\n              Santa Cruz de Tenerife\r\n            <\/option>\r\n            <option label=\"Segovia\" value=\"40\">Segovia<\/option>\r\n            <option label=\"Sevilla\" value=\"41\">Sevilla<\/option>\r\n            <option label=\"Soria\" value=\"42\">Soria<\/option>\r\n            <option label=\"Tarragona\" value=\"43\">Tarragona<\/option>\r\n            <option label=\"Teruel\" value=\"44\">Teruel<\/option>\r\n            <option label=\"Toledo\" value=\"45\">Toledo<\/option>\r\n            <option label=\"Valencia\/Val\u00e8ncia\" value=\"46\">\r\n              Valencia\/Val\u00e8ncia\r\n            <\/option>\r\n            <option label=\"Valladolid\" value=\"47\">Valladolid<\/option>\r\n            <option label=\"Zamora\" value=\"49\">Zamora<\/option>\r\n            <option label=\"Zaragoza\" value=\"50\">Zaragoza<\/option>\r\n            <option label=\"No residentes\" value=\"99\">No residentes<\/option>\r\n          <\/select>\r\n          <div class=\"rgpd-group\">\r\n            <div class=\"rgpd-field\">\r\n              <input type=\"checkbox\" id=\"Accounts___privacy_policy\" name=\"Accounts___privacy_policy\"\r\n                onclick=\"this.parentElement.querySelector('label').classList.remove('field-error');\" \/>\r\n              <label for=\"Accounts___privacy_policy\">He le\u00eddo y acepto la\r\n                <a href=\"https:\/\/www.integrapirineus.com\/es\/politica-de-privacidad\/\" onclick=\"alert('Enlace a la Pol\u00edtica de Privacidad'); return false;\"\r\n                  target=\"_blank\">Pol\u00edtica de Privacidad<\/a>.<\/label>\r\n            <\/div>\r\n            <div class=\"rgpd-field\">\r\n              <input type=\"checkbox\" id=\"Accounts___gdpr_marketing\" name=\"Accounts___gdpr_marketing\" \/>\r\n              <label for=\"Accounts___gdpr_marketing\">S\u00ed, quiero recibir informaci\u00f3n sobre la actividad de la entidad,\r\n                campa\u00f1as y otras formas de colaborar.<\/label>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"buttons\">\r\n          <button class=\"btn\" onclick=\"previousStep()\" type=\"button\">\r\n            Anterior\r\n          <\/button>\r\n          <button class=\"btn\" onclick=\"nextStep()\" type=\"button\">\r\n            Siguiente\r\n          <\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"form-step\" id=\"step-3\">\r\n        <h2>Selecciona tu forma de pago<\/h2>\r\n        <p class=\"step-subtitle\"><span id=\"summary-amount-step3\"><\/span><\/p>\r\n        <label>M\u00e9todo de pago<\/label>\r\n        <div class=\"selector-group\">\r\n          <button onclick=\"selectPaymentMethod(this, 'stripe')\" type=\"button\">\r\n            Tarjeta\r\n          <\/button>\r\n          <button onclick=\"selectPaymentMethod(this, 'direct_debit')\" type=\"button\">\r\n            Domiciliaci\u00f3n\r\n          <\/button>\r\n        <\/div>\r\n        <div id=\"ibanField\" style=\"display: none\">\r\n          <label for=\"stic_Payment_Commitments___bank_account\">Cuenta bancaria (IBAN)<\/label>\r\n          <input id=\"stic_Payment_Commitments___bank_account\" type=\"text\" placeholder=\"ES00 0000 0000 0000 0000 0000\" \/>\r\n        <\/div>\r\n        <div class=\"secure-connection\">\r\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"#777\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\r\n            style=\"vertical-align: middle; margin-right: 5px\">\r\n            <path\r\n              d=\"M12 11.9999C12.5523 11.9999 13 12.4476 13 12.9999V15.9999C13 16.5522 12.5523 16.9999 12 16.9999C11.4477 16.9999 11 16.5522 11 15.9999V12.9999C11 12.4476 11.4477 11.9999 12 11.9999Z\"\r\n              fill=\"currentColor\" \/>\r\n            <path\r\n              d=\"M18 8.99991H17V6.99991C17 4.23848 14.7614 1.99991 12 1.99991C9.23858 1.99991 7 4.23848 7 6.99991V8.99991H6C4.89543 8.99991 4 9.89534 4 10.9999V19.9999C4 21.1045 4.89543 21.9999 6 21.9999H18C19.1046 21.9999 20 21.1045 20 19.9999V10.9999C20 9.89534 19.1046 8.99991 18 8.99991ZM9 6.99991C9 5.34305 10.3431 3.99991 12 3.99991C13.6569 3.99991 15 5.34305 15 6.99991V8.99991H9V6.99991Z\"\r\n              fill=\"currentColor\" \/>\r\n          <\/svg>\r\n          <span>Conexi\u00f3n Segura<\/span>\r\n        <\/div>\r\n        <div class=\"buttons\">\r\n          <a onclick=\"previousStep()\" class=\"back-button\">\u276e Volver<\/a>\r\n          <button class=\"btn primary-action\" id=\"submitButton\" onclick=\"submitForm()\" type=\"button\">\r\n            HAZ TU DONACI\u00d3N \u2192\r\n          <\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/form>\r\n  <\/div>\r\n  <div id=\"deductionModal\" style=\"\r\n        display: none;\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        width: 100%;\r\n        height: 100%;\r\n        background: rgba(0, 0, 0, 0.6);\r\n        z-index: 9999;\r\n        justify-content: center;\r\n        align-items: center;\r\n      \">\r\n    <div style=\"\r\n          background: white;\r\n          padding: 2rem;\r\n          max-width: 500px;\r\n          border-radius: 8px;\r\n          position: relative;\r\n        \">\r\n      <span onclick=\"closeDeductionModal()\" style=\"\r\n            position: absolute;\r\n            top: 10px;\r\n            right: 15px;\r\n            cursor: pointer;\r\n            font-weight: bold;\r\n          \">\u2716<\/span>\r\n      <p>\r\n        <strong>El resultado que se muestra es orientativo<\/strong> y puede\r\n        variar en funci\u00f3n de la comunidad aut\u00f3noma y de aportaciones\r\n        anteriores a la misma organizaci\u00f3n.\r\n      <\/p>\r\n      <table style=\"width: 100%; border-collapse: collapse; margin-bottom: 1rem\">\r\n        <tr>\r\n          <th style=\"border: 1px solid #ccc; padding: 0.5rem\">Donante<\/th>\r\n          <th style=\"border: 1px solid #ccc; padding: 0.5rem\">Importe<\/th>\r\n          <th style=\"border: 1px solid #ccc; padding: 0.5rem\">Desgravaci\u00f3n<\/th>\r\n        <\/tr>\r\n        <tr>\r\n          <td rowspan=\"2\" style=\"border: 1px solid #ccc; padding: 0.5rem\">\r\n            Persona f\u00edsica\r\n          <\/td>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">\r\n            Hasta 250\u202f\u20ac\r\n          <\/td>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">80%<\/td>\r\n        <\/tr>\r\n        <tr>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">Resto<\/td>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">40%<\/td>\r\n        <\/tr>\r\n        <tr>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">\r\n            Persona jur\u00eddica\r\n          <\/td>\r\n          <td colspan=\"2\" style=\"border: 1px solid #ccc; padding: 0.5rem\">\r\n            Todo el importe: 40%\r\n          <\/td>\r\n        <\/tr>\r\n      <\/table>\r\n      <p>\r\n        La desgravaci\u00f3n de la quota \u00edntegra t\u00e9 un l\u00edmit del 10\u202f% per a persones\r\n        f\u00edsiques i del 15\u202f% per a persones jur\u00eddiques, d'acord amb el Reial\r\n        decret llei 6\/2023.\r\n      <\/p>\r\n      <p>\r\n        La desgravaci\u00f3 augmenta fins al 45\u202f% per a persones f\u00edsiques i al 50\u202f%\r\n        per a jur\u00eddiques si es fan donacions del mateix import durant dos anys\r\n        consecutius.\r\n      <\/p>\r\n    <\/div>\r\n  <\/div>\r\n  <script>\r\n    \/\/ ========================================================================\r\n    \/\/ CONFIGURACI\u00d3N PARA PRODUCCI\u00d3N\r\n    \/\/ ========================================================================\r\n    \/\/ Rellena aqu\u00ed los IDs correspondientes a tu configuraci\u00f3n de SinergiaCRM\r\n    \/\/ ========================================================================\r\n\r\n    const formConfig = {\r\n      persona_donativo: {\r\n        campaign_id: \"0000017d-097e-d07d-f885-6932f8757702\",\r\n        email_template_id: \"000002e5-2ae0-56a2-ddc3-6932f83861b3\",\r\n        relation_type: \"donor\",\r\n        redirect_url: \"https:\/\/www.integrapirineus.com\/moltes-gracies-integra-pirineus\/\",\r\n        redirect_ko_url: \"https:\/\/www.integrapirineus.com\/hi-ha-hagut-un-error\/\",\r\n      },\r\n      persona_cuota: {\r\n        campaign_id: \"000001b2-ef98-d0d3-6b29-6932f8e51395\",\r\n        email_template_id: \"000003c7-4bfe-b305-33c9-6932f880f5a7\",\r\n        relation_type: \"member\",\r\n        redirect_url: \"https:\/\/www.integrapirineus.com\/moltes-gracies-integra-pirineus\/\",\r\n        redirect_ko_url: \"https:\/\/www.integrapirineus.com\/hi-ha-hagut-un-error\/\",\r\n      },\r\n      organizacion_donativo: {\r\n        campaign_id: \"00000ff3-a903-667b-6ce5-6932f87e0609\",\r\n        email_template_id: \"00000231-764c-cd8e-52f8-6932f8f4acef\",\r\n        relation_type: \"donor\",\r\n        redirect_url: \"https:\/\/www.integrapirineus.com\/moltes-gracies-integra-pirineus\/\",\r\n        redirect_ko_url: \"https:\/\/www.integrapirineus.com\/hi-ha-hagut-un-error\/\",\r\n      },\r\n      organizacion_cuota: {\r\n        campaign_id: \"00000e05-d730-64b9-454d-6932f8846c54\",\r\n        email_template_id: \"00000cc8-37a1-3b0c-0c7a-6932f8c148f1\",\r\n        relation_type: \"member\",\r\n        redirect_url: \"https:\/\/www.integrapirineus.com\/moltes-gracies-integra-pirineus\/\",\r\n        redirect_ko_url: \"https:\/\/www.integrapirineus.com\/hi-ha-hagut-un-error\/\",\r\n      },\r\n    };\r\n\r\n    \/\/ ========================================================================\r\n    \/\/ L\u00d3GICA DEL FORMULARIO\r\n    \/\/ ========================================================================\r\n\r\n    let currentStep = 1;\r\n    let donationType = \"donativo\"; \/\/ 'donativo' o 'cuota'\r\n    let personType = \"persona\"; \/\/ 'persona' o 'organizacion'\r\n    let selectedAmount = 25;\r\n    let paymentMethod = \"\"; \/\/ 'card' o 'direct_debit'\r\n    let periodicity = \"punctual\"; \/\/ 'punctual', 'monthly', 'quarterly', 'annual'\r\n\r\n    function nextStep() {\r\n      let isValid = true;\r\n      if (currentStep === 1) {\r\n        \/\/ Validaci\u00f3n del Paso 1 (Importe)\r\n        const custom = parseFloat(\r\n          document.getElementById(\"customAmount\").value\r\n        );\r\n        const buttons = document.querySelectorAll(\r\n          \"#amount-buttons button.active\"\r\n        );\r\n        if ((isNaN(custom) || custom <= 0) && buttons.length === 0) {\r\n          alert(\"Por favor, selecciona o introduce un importe v\u00e1lido.\");\r\n          document\r\n            .getElementById(\"customAmount\")\r\n            .classList.add(\"field-error\");\r\n          isValid = false;\r\n        } else {\r\n          document\r\n            .getElementById(\"customAmount\")\r\n            .classList.remove(\"field-error\");\r\n          if (!isNaN(custom) && custom > 0) selectedAmount = custom;\r\n        }\r\n      } else if (currentStep === 2) {\r\n        \/\/ --- INICIO VALIDACI\u00d3N RGPD MODIFICADA ---\r\n        \/\/ La validaci\u00f3n de los campos de texto se har\u00e1 en el submit final (paso 3),\r\n        \/\/ pero aqu\u00ed validamos la pol\u00edtica de privacidad para poder avanzar al paso 3.\r\n        isValid = validatePrivacyPolicyForStep2();\r\n        \/\/ --- FIN VALIDACI\u00d3N RGPD MODIFICADA ---\r\n      }\r\n\r\n      if (isValid) {\r\n        \/\/ 1. Texto base del importe\r\n        const baseAmountText = `${selectedAmount\r\n          .toFixed(2)\r\n          .replace(\".\", \",\")} \u20ac`;\r\n        let fullAmountText = baseAmountText; \/\/ Por defecto es solo el importe\r\n\r\n        \/\/ 2. Si es cuota, a\u00f1adir la periodicidad (usamos las variables globales 'donationType' y 'periodicity')\r\n        if (donationType === \"cuota\") {\r\n          \/\/ Mapa de valores a texto (en catal\u00e1n, como el resto del form)\r\n          const periodicityMap = {\r\n            monthly: \"mensuales\",\r\n            quarterly: \"trimestrales\",\r\n            annual: \"anuales\",\r\n          };\r\n\r\n          \/\/ 'periodicity' es una variable global que ya tiene el valor (ej: 'monthly')\r\n          const periodicityText = periodicityMap[periodicity] || periodicity;\r\n\r\n          fullAmountText = `${baseAmountText} ${periodicityText}`;\r\n        }\r\n\r\n        \/\/ 3. Actualizar los subt\u00edtulos\r\n        if (document.getElementById(\"summary-amount-step2\")) {\r\n          document.getElementById(\"summary-amount-step2\").textContent =\r\n            fullAmountText;\r\n        }\r\n        if (document.getElementById(\"summary-amount-step3\")) {\r\n          document.getElementById(\"summary-amount-step3\").textContent =\r\n            fullAmountText;\r\n        }\r\n\r\n        document\r\n          .querySelector(\".form-step.active\")\r\n          .classList.remove(\"active\");\r\n        document\r\n          .getElementById(`step-${++currentStep}`)\r\n          .classList.add(\"active\");\r\n\r\n        updateProgressIndicator(currentStep);\r\n      }\r\n    }\r\n\r\n    function previousStep() {\r\n      document.querySelector(\".form-step.active\").classList.remove(\"active\");\r\n      document\r\n        .getElementById(`step-${--currentStep}`)\r\n        .classList.add(\"active\");\r\n      updateProgressIndicator(currentStep);\r\n    }\r\n\r\n    function selectDonationType(btn) {\r\n      document\r\n        .querySelectorAll(\"[data-type]\")\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      btn.classList.add(\"active\");\r\n      donationType = btn.dataset.type;\r\n\r\n      const periodicityDiv = document.getElementById(\"periodicitySelector\");\r\n      const periodicitySelect = document.getElementById(\"periodicitySelect\");\r\n\r\n      if (donationType === \"cuota\") {\r\n        periodicityDiv.style.display = \"block\";\r\n        periodicity = periodicitySelect.value;\r\n      } else {\r\n        periodicityDiv.style.display = \"none\";\r\n        periodicity = \"punctual\";\r\n      }\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    function selectPersonType(btn) {\r\n      document\r\n        .querySelectorAll(\"[data-person]\")\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      btn.classList.add(\"active\");\r\n      personType = btn.dataset.person;\r\n\r\n      document.getElementById(\"fields-persona\").style.display =\r\n        personType === \"persona\" ? \"block\" : \"none\";\r\n      document.getElementById(\"fields-organizacion\").style.display =\r\n        personType === \"organizacion\" ? \"block\" : \"none\";\r\n\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    function selectAmount(btn, amount) {\r\n      document\r\n        .querySelectorAll(\"#amount-buttons button\")\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      btn.classList.add(\"active\");\r\n      document.getElementById(\"customAmount\").value = \"\";\r\n      document.getElementById(\"customAmount\").classList.remove(\"field-error\");\r\n      selectedAmount = amount;\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    function customAmountChanged(input) {\r\n      document\r\n        .querySelectorAll(\"#amount-buttons button\")\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      input.classList.remove(\"field-error\");\r\n      const custom = parseFloat(input.value);\r\n      if (!isNaN(custom) && custom > 0) {\r\n        selectedAmount = custom;\r\n      }\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    function selectPaymentMethod(btn, method) {\r\n      document\r\n        .querySelectorAll('[onclick^=\"selectPaymentMethod\"]')\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      btn.classList.add(\"active\");\r\n      paymentMethod = method;\r\n      document.getElementById(\"ibanField\").style.display =\r\n        method === \"direct_debit\" ? \"block\" : \"none\";\r\n\r\n      \/\/ Limpiar error si se cambia de m\u00e9todo\r\n      document\r\n        .getElementById(\"stic_Payment_Commitments___bank_account\")\r\n        .classList.remove(\"field-error\");\r\n      btn.parentElement.classList.remove(\"field-error\");\r\n    }\r\n\r\n    function updatePeriodicity(select) {\r\n      periodicity = select.value;\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    \/**\r\n     * Actualiza el indicador visual de pasos (1-2-3)\r\n     * @param {number} step - El n\u00famero del paso actual (1, 2, o 3)\r\n     *\/\r\n    function updateProgressIndicator(step) {\r\n      \/\/ Resetea todos\r\n      document\r\n        .querySelectorAll(\".step-circle\")\r\n        .forEach((circle) => circle.classList.remove(\"active\", \"done\"));\r\n      document\r\n        .querySelectorAll(\".step-line\")\r\n        .forEach((line) => line.classList.remove(\"active\"));\r\n\r\n      \/\/ Activa el paso actual\r\n      document.getElementById(\"circle-\" + step).classList.add(\"active\");\r\n\r\n      \/\/ Marca los pasos anteriores como \"hechos\" (con '\u2713')\r\n      for (let i = 1; i < step; i++) {\r\n        const circle = document.getElementById(\"circle-\" + i);\r\n        circle.classList.remove(\"active\");\r\n        circle.classList.add(\"done\");\r\n        circle.textContent = \"\u2713\"; \/\/ A\u00f1ade checkmark\r\n        \/\/ Activa la l\u00ednea de conexi\u00f3n\r\n        const line = document.getElementById(\"line-\" + i + \"-\" + (i + 1));\r\n        if (line) line.classList.add(\"active\");\r\n      }\r\n\r\n      \/\/ Asegura que los pasos futuros no tengan checkmark\r\n      for (let i = step + 1; i <= 3; i++) {\r\n        document.getElementById(\"circle-\" + i).textContent = i;\r\n      }\r\n      \/\/ Y el actual tenga su n\u00famero\r\n      document.getElementById(\"circle-\" + step).textContent = step;\r\n    }\r\n\r\n    \/**\r\n     * Valid if a cif is valid\r\n     * Adapted to javascript from its original in:\r\n     * http:\/\/www.michublog.com\/informatica\/8-funciones-para-la-validacion-de-formularios-con-expresiones-regulares\r\n     * @param cif\r\n     * @returns {Boolean}\r\n     *\/\r\n    function isValidCif(cif) {\r\n      cif.toUpperCase();\r\n      cifRegEx1 = \/^[ABEH][0-9]{8}\/i;\r\n      cifRegEx2 = \/^[KPQS][0-9]{7}[A-J]\/i;\r\n      cifRegEx3 = \/^[CDFGJLMNRUVW][0-9]{7}[0-9A-J]\/i;\r\n\r\n      if (\r\n        cif.match(cifRegEx1) ||\r\n        cif.match(cifRegEx2) ||\r\n        cif.match(cifRegEx3)\r\n      ) {\r\n        control = cif.charAt(cif.length - 1);\r\n        sum_A = 0;\r\n        sum_B = 0;\r\n        for (i = 1; i < 8; i++) {\r\n          if (i % 2 == 0) {\r\n            sum_A += parseInt(cif.charAt(i));\r\n          } else {\r\n            t = (parseInt(cif.charAt(i)) * 2).toString();\r\n            p = 0;\r\n            for (j = 0; j < t.length; j++) {\r\n              p += parseInt(t.charAt(j));\r\n            }\r\n            sum_B += p;\r\n          }\r\n        }\r\n\r\n        sum_C = parseInt(sum_A + sum_B) + \"\"; \/\/ As\u00ed se convierte en cadena\r\n        sum_D = (10 - parseInt(sum_C.charAt(sum_C.length - 1))) % 10;\r\n        letters = \"JABCDEFGHI\";\r\n\r\n        if (control >= \"0\" && control <= \"9\") {\r\n          return control == sum_D;\r\n        } else {\r\n          return control.toUpperCase() == letters[sum_D];\r\n        }\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    \/**\r\n     * Validate an email address\r\n     * Regex validation email from https:\/\/html5-tutorial.net\/form-validation\/validating-email\/\r\n     * @param email\r\n     * @returns {Boolean}\r\n     *\/\r\n    function isValidEmail(email) {\r\n      var re = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\r\n      return re.test(String(email).toLowerCase());\r\n    }\r\n\r\n    function validateEmailField(field) {\r\n      if (field.value && !isValidEmail(field.value)) {\r\n        alert(\"El formato del Correo electr\u00f3nico no es correcto.\");\r\n        field.classList.add(\"field-error\");\r\n      } else {\r\n        field.classList.remove(\"field-error\");\r\n      }\r\n    }\r\n\r\n    \/**\r\n     * Valida el formato del campo de identificaci\u00f3n (NIF\/NIE o CIF) din\u00e1micamente\r\n     * cuando el usuario sale del campo (onchange).\r\n     * @param {HTMLElement} field - El elemento <input> que se est\u00e1 validando.\r\n     *\/\r\n    function validateIdentificationField(field) {\r\n      const value = field.value;\r\n      \/\/ Si el campo est\u00e1 vac\u00edo, solo quitamos el error (la validaci\u00f3n de \"obligatorio\" se har\u00e1 al enviar)\r\n      if (!value) {\r\n        field.classList.remove(\"field-error\");\r\n        return;\r\n      }\r\n\r\n      let isValid = true;\r\n      let errorMsg = \"\";\r\n\r\n      if (personType === \"persona\") {\r\n        const idType = document.getElementById(\r\n          \"Contacts___stic_identification_type_c\"\r\n        ).value;\r\n        \/\/ Solo validamos NIF\/NIE. Pasaporte u \"Otros\" no se validan.\r\n        if (idType === \"nif\" || idType === \"nie\" || idType === \"\") {\r\n          isValid = isValidDNI(value);\r\n          errorMsg =\r\n            \"El formato del N.\u00ba de documento (NIF\/NIE) no es correcto.\";\r\n        }\r\n      } else {\r\n        \/\/ organizacion\r\n        isValid = isValidCif(value);\r\n        errorMsg = \"El formato del N.\u00ba de documento (CIF) no es correcto.\";\r\n      }\r\n\r\n      \/\/ Mostramos el error o limpiamos el campo\r\n      if (!isValid) {\r\n        alert(errorMsg); \/\/ Mantenemos la consistencia con la alerta del email\r\n        field.classList.add(\"field-error\");\r\n      } else {\r\n        field.classList.remove(\"field-error\");\r\n      }\r\n    }\r\n\r\n    \/**\r\n     * Check if it is a correct ID (between 5 and 8 letters followed by the corresponding letter).\r\n     * Accept NIEs (Foreigners with X, Y or Z at the beginning)\r\n     * http:\/\/trellat.es\/funcion-para-validar-dni-o-nie-en-javascript\/\r\n     * @param dni\r\n     * @returns {Boolean}\r\n     *\/\r\n    function isValidDNI(dni) {\r\n      var number, lett, letter;\r\n      var regular_expression_dni = \/^[XYZ]?\\d{5,8}[A-Z]$\/;\r\n      dni = dni.toUpperCase();\r\n\r\n      if (regular_expression_dni.test(dni) === true) {\r\n        number = dni.substr(0, dni.length - 1);\r\n        number = number.replace(\"X\", 0);\r\n        number = number.replace(\"Y\", 1);\r\n        number = number.replace(\"Z\", 2);\r\n        lett = dni.substr(dni.length - 1, 1);\r\n        number = number % 23;\r\n\r\n        letter = \"TRWAGMYFPDXBNJZSQVHLCKET\";\r\n        letter = letter.substring(number, number + 1);\r\n\r\n        return letter == lett;\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    \/\/ ========================================================================\r\n    \/\/ L\u00d3GICA DE VALIDACI\u00d3N Y ENV\u00cdO\r\n    \/\/ ========================================================================\r\n\r\n    \/\/ --- INICIO FUNCI\u00d3N VALIDACI\u00d3N RGPD (Paso 2) A\u00d1ADIDA ---\r\n    \/**\r\n     * Valida solo el checkbox de privacidad para avanzar del paso 2 al 3.\r\n     * La validaci\u00f3n completa se hace en submitForm().\r\n     *\/\r\n    function validatePrivacyPolicyForStep2() {\r\n      let checkboxId;\r\n      if (personType === \"persona\") {\r\n        checkboxId = \"Contacts___privacy_policy\";\r\n      } else {\r\n        checkboxId = \"Accounts___privacy_policy\";\r\n      }\r\n\r\n      const privacyCheckbox = document.getElementById(checkboxId);\r\n      if (!privacyCheckbox.checked) {\r\n        alert(\"Debes aceptar la Pol\u00edtica de Privacidad para continuar.\");\r\n        \/\/ Marca el label con el error\r\n        privacyCheckbox.parentElement\r\n          .querySelector(\"label\")\r\n          .classList.add(\"field-error\");\r\n        return false;\r\n      } else {\r\n        \/\/ Limpia el error si ya estaba marcado\r\n        privacyCheckbox.parentElement\r\n          .querySelector(\"label\")\r\n          .classList.remove(\"field-error\");\r\n        return true;\r\n      }\r\n    }\r\n    \/\/ --- FIN FUNCI\u00d3N VALIDACI\u00d3N RGPD (Paso 2) A\u00d1ADIDA ---\r\n\r\n    \/**\r\n     * Valida los campos obligatorios antes de enviar.\r\n     * Devuelve true si es v\u00e1lido, false si no.\r\n     *\/\r\n    function validateCustomForm() {\r\n      let requiredFields = [];\r\n      let errorMessages = [];\r\n\r\n      \/\/ 1. Limpiar errores previos\r\n      document\r\n        .querySelectorAll(\".field-error\")\r\n        .forEach((el) => el.classList.remove(\"field-error\"));\r\n\r\n      \/\/ 2. Construir lista de campos obligatorios (req_id)\r\n      if (personType === \"persona\") {\r\n        requiredFields = [\r\n          \"Contacts___first_name\",\r\n          \"Contacts___last_name\",\r\n          \"Contacts___email1\",\r\n          \"Contacts___stic_identification_number_c\",\r\n        ];\r\n      } else {\r\n        \/\/ organizacion\r\n        requiredFields = [\r\n          \"Accounts___name\",\r\n          \"Accounts___email1\",\r\n          \"Accounts___stic_identification_number_c\",\r\n        ];\r\n      }\r\n\r\n      \/\/ 3. A\u00f1adir campos comunes de pago\r\n      requiredFields.push(\r\n        \"stic_Payment_Commitments___payment_method_selector\"\r\n      ); \/\/ Usamos el contenedor\r\n      requiredFields.push(\"stic_Payment_Commitments___periodicity_selector\"); \/\/ Usamos el contenedor\r\n\r\n      \/\/ 4. A\u00f1adir IBAN si es domiciliaci\u00f3n\r\n      if (paymentMethod === \"direct_debit\") {\r\n        requiredFields.push(\"stic_Payment_Commitments___bank_account\");\r\n      }\r\n\r\n      \/\/ 5. Validar los campos\r\n      let firstErrorField = null;\r\n\r\n      for (const fieldId of requiredFields) {\r\n        let element;\r\n        let value;\r\n\r\n        \/\/ Casos especiales para los selectores de botones\r\n        if (\r\n          fieldId === \"stic_Payment_Commitments___payment_method_selector\"\r\n        ) {\r\n          value = paymentMethod;\r\n          element = document.querySelector(\r\n            '[onclick^=\"selectPaymentMethod\"]'\r\n          ).parentElement;\r\n        } else if (\r\n          fieldId === \"stic_Payment_Commitments___periodicity_selector\"\r\n        ) {\r\n          value = periodicity; \/\/ 'punctual' o el valor del select\r\n          element = document.getElementById(\"periodicitySelector\"); \/\/ O el grupo de botones de tipo\r\n        } else {\r\n          element = document.getElementById(fieldId);\r\n          if (!element) continue;\r\n          value = element.value;\r\n        }\r\n\r\n        if (!value || value.trim() === \"\") {\r\n          errorMessages.push(\r\n            `El campo \"${element.previousElementSibling?.textContent || fieldId\r\n            }\" es obligatorio.`\r\n          );\r\n          element.classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = element;\r\n        }\r\n      }\r\n\r\n      \/\/ 6. Validaci\u00f3n espec\u00edfica de formato IBAN\r\n      if (paymentMethod === \"direct_debit\") {\r\n        const ibanElement = document.getElementById(\r\n          \"stic_Payment_Commitments___bank_account\"\r\n        );\r\n        const ibanValue = ibanElement.value.replace(\/\\s\/g, \"\"); \/\/ Quitar espacios\r\n        \/\/ Validaci\u00f3n b\u00e1sica: ES + 22 d\u00edgitos. La validaci\u00f3n real la har\u00e1 el servidor.\r\n        const ibanRegex = \/^ES\\d{22}$\/i;\r\n        if (!ibanRegex.test(ibanValue)) {\r\n          errorMessages.push(\r\n            \"El formato de la cuenta bancaria (IBAN) no es correcto. Debe ser ES seguido de 22 d\u00edgitos.\"\r\n          );\r\n          ibanElement.classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = ibanElement;\r\n        }\r\n      }\r\n\r\n      \/\/ 6.5. Validaci\u00f3n espec\u00edfica de formato NIF\/CIF\r\n      \/\/ (El campo 'validate_identification_number' est\u00e1 en '1' en el submit, as\u00ed que ejecutamos esto)\r\n      if (personType === \"persona\") {\r\n        const identificationType = document.getElementById(\r\n          \"Contacts___stic_identification_type_c\"\r\n        ).value;\r\n        const nifElement = document.getElementById(\r\n          \"Contacts___stic_identification_number_c\"\r\n        );\r\n        const nifValue = nifElement.value;\r\n\r\n        \/\/ Validar solo si el campo tiene valor y el tipo es nif\/nie o no est\u00e1 especificado\r\n        if (\r\n          nifValue &&\r\n          (identificationType === \"nif\" ||\r\n            identificationType === \"nie\" ||\r\n            identificationType === \"\")\r\n        ) {\r\n          if (!isValidDNI(nifValue)) {\r\n            errorMessages.push(\r\n              \"El formato del N.\u00ba de documento (NIF\/NIE) no es correcto.\"\r\n            );\r\n            nifElement.classList.add(\"field-error\");\r\n            if (!firstErrorField) firstErrorField = nifElement;\r\n          }\r\n        }\r\n      } else {\r\n        \/\/ organizacion\r\n        const cifElement = document.getElementById(\r\n          \"Accounts___stic_identification_number_c\"\r\n        );\r\n        const cifValue = cifElement.value;\r\n\r\n        \/\/ Validar solo si el campo tiene valor\r\n        if (cifValue) {\r\n          if (!isValidCif(cifValue)) {\r\n            errorMessages.push(\r\n              \"El formato del N.\u00ba de documento (CIF) no es correcto.\"\r\n            );\r\n            cifElement.classList.add(\"field-error\");\r\n            if (!firstErrorField) firstErrorField = cifElement;\r\n          }\r\n        }\r\n      }\r\n\r\n      \/\/ 6.8. Validaci\u00f3n espec\u00edfica de formato Email\r\n      if (personType === \"persona\") {\r\n        const emailElement = document.getElementById(\"Contacts___email1\");\r\n        const emailValue = emailElement.value;\r\n\r\n        \/\/ Validar solo si el campo tiene valor (el campo obligatorio ya se comprueba arriba)\r\n        if (emailValue && !isValidEmail(emailValue)) {\r\n          errorMessages.push(\r\n            \"El formato del Correo electr\u00f3nico no es correcto.\"\r\n          );\r\n          emailElement.classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = emailElement;\r\n        }\r\n      } else {\r\n        \/\/ organizacion\r\n        const emailElement = document.getElementById(\"Accounts___email1\");\r\n        const emailValue = emailElement.value;\r\n\r\n        \/\/ Validar solo si el campo tiene valor\r\n        if (emailValue && !isValidEmail(emailValue)) {\r\n          errorMessages.push(\r\n            \"El formato del Correo electr\u00f3nico no es correcto.\"\r\n          );\r\n          emailElement.classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = emailElement;\r\n        }\r\n      }\r\n      \/\/ --- INICIO VALIDACI\u00d3N RGPD (Submit) A\u00d1ADIDA ---\r\n      \/\/ 7. Validaci\u00f3n espec\u00edfica de Checkboxes RGPD (obligatorio)\r\n      if (personType === \"persona\") {\r\n        const privacyCheckbox = document.getElementById(\r\n          \"Contacts___privacy_policy\"\r\n        );\r\n        if (!privacyCheckbox.checked) {\r\n          errorMessages.push(\r\n            \"Debes aceptar la Pol\u00edtica de Privacidad para continuar.\"\r\n          );\r\n          privacyCheckbox.parentElement\r\n            .querySelector(\"label\")\r\n            .classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = privacyCheckbox;\r\n        } else {\r\n          privacyCheckbox.parentElement\r\n            .querySelector(\"label\")\r\n            .classList.remove(\"field-error\");\r\n        }\r\n      } else {\r\n        \/\/ organizacion\r\n        const privacyCheckbox = document.getElementById(\r\n          \"Accounts___privacy_policy\"\r\n        );\r\n        if (!privacyCheckbox.checked) {\r\n          errorMessages.push(\r\n            \"Debes aceptar la Pol\u00edtica de Privacidad para continuar.\"\r\n          );\r\n          privacyCheckbox.parentElement\r\n            .querySelector(\"label\")\r\n            .classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = privacyCheckbox;\r\n        } else {\r\n          privacyCheckbox.parentElement\r\n            .querySelector(\"label\")\r\n            .classList.remove(\"field-error\");\r\n        }\r\n      }\r\n      \/\/ --- FIN VALIDACI\u00d3N RGPD (Submit) A\u00d1ADIDA ---\r\n\r\n      \/\/ 7. Mostrar errores si existen\r\n      if (errorMessages.length > 0) {\r\n        alert(\r\n          \"Por favor, corrige los siguientes errores:\\n\\n- \" +\r\n          errorMessages.join(\"\\n- \")\r\n        );\r\n\r\n        \/\/ Navegar al paso del primer error\r\n        let errorStepEl = firstErrorField.closest(\".form-step\");\r\n        if (errorStepEl) {\r\n          let errorStep = errorStepEl.id.split(\"-\")[1];\r\n          if (errorStep && currentStep != errorStep) {\r\n            document\r\n              .querySelector(\".form-step.active\")\r\n              .classList.remove(\"active\");\r\n            document\r\n              .getElementById(`step-${errorStep}`)\r\n              .classList.add(\"active\");\r\n            currentStep = parseInt(errorStep);\r\n            updateProgressIndicator(currentStep); \/\/ Actualiza tambi\u00e9n los c\u00edrculos\r\n          }\r\n        }\r\n        firstErrorField.focus();\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    }\r\n\r\n    \/**\r\n     * Construye y env\u00eda el formulario din\u00e1mico a SinergiaCRM\r\n     *\/\r\n    function submitForm() {\r\n      \/\/ 1. Validar el formulario\r\n      if (!validateCustomForm()) {\r\n        return;\r\n      }\r\n\r\n      \/\/ Bloquear bot\u00f3n para evitar doble env\u00edo\r\n      const submitButton = document.getElementById(\"submitButton\");\r\n      submitButton.disabled = true;\r\n      submitButton.textContent = \"Enviando...\";\r\n\r\n      \/\/ 2. Determinar el caso de uso y obtener configuraci\u00f3n\r\n      const useCase = `${personType}_${donationType === \"cuota\" ? \"cuota\" : \"donativo\"\r\n        }`;\r\n      const config = formConfig[useCase];\r\n\r\n      \/\/ 3. Crear el formulario din\u00e1mico\r\n      const f = document.createElement(\"form\");\r\n      f.method = \"POST\";\r\n      f.action =\r\n        \"https:\/\/integrapirineus.sinergiacrm.org\/index.php?entryPoint=stic_Web_Forms_save\";\r\n\r\n      \/\/ --- INICIO FUNCI\u00d3N FECHA RGPD A\u00d1ADIDA ---\r\n      \/**\r\n       * Devuelve la fecha y hora actual en formato YYYY-MM-DD HH:MM:SS\r\n       * (formato esperado por los campos datetime de SinergiaCRM\/MySQL)\r\n       *\/\r\n      const getSinergiaDateTime = () => {\r\n        const now = new Date();\r\n        const reviewedDate =\r\n          now.getFullYear() +\r\n          \"-\" +\r\n          (\"0\" + (now.getMonth() + 1)).slice(-2) +\r\n          \"-\" +\r\n          (\"0\" + now.getDate()).slice(-2); \/\/ <-- L\u00ednia modificada. S'ha tret la part de l'hora.\r\n        return reviewedDate;\r\n      };\r\n      \/\/ --- FIN FUNCI\u00d3N FECHA RGPD A\u00d1ADIDA ---\r\n\r\n      const add = (name, value) => {\r\n        const input = document.createElement(\"input\");\r\n        input.type = \"hidden\";\r\n        input.name = name;\r\n        input.value = value;\r\n        f.appendChild(input);\r\n      };\r\n\r\n      \/\/ 4. Construir la lista de campos obligatorios (req_id) para SinergiaCRM\r\n      let reqIdValue =\r\n        \"stic_Payment_Commitments___amount;stic_Payment_Commitments___payment_method;stic_Payment_Commitments___periodicity;\";\r\n      if (personType === \"persona\") {\r\n        reqIdValue +=\r\n          \"Contacts___first_name;Contacts___last_name;Contacts___email1;Contacts___stic_identification_number_c;\";\r\n      } else {\r\n        reqIdValue +=\r\n          \"Accounts___name;Accounts___email1;Accounts___stic_identification_number_c;\";\r\n      }\r\n      if (paymentMethod === \"direct_debit\") {\r\n        reqIdValue += \"stic_Payment_Commitments___bank_account;\";\r\n      }\r\n\r\n      \/\/ 5. A\u00f1adir campos ocultos de configuraci\u00f3n\r\n      add(\"campaign_id\", config.campaign_id);\r\n      add(\"redirect_url\", config.redirect_url); \/\/ URL de \u00e9xito (din\u00e1mica)\r\n      add(\"redirect_ko_url\", config.redirect_ko_url); \/\/ URL de error (din\u00e1mica)\r\n      add(\"validate_identification_number\", \"1\");\r\n      const allowRecurrence = donationType === \"cuota\" ? \"1\" : \"0\";\r\n      add(\"allow_card_recurring_payments\", allowRecurrence);\r\n      add(\"allow_paypal_recurring_payments\", allowRecurrence);\r\n      add(\"allow_stripe_recurring_payments\", allowRecurrence);\r\n      add(\"assigned_user_id\", \"dd122a16-eaf0-0227-22e6-65b21c9c189f\");\r\n      add(\"web_module\", personType === \"persona\" ? \"Contacts\" : \"Accounts\");\r\n      add(\"language\", \"es_ES\");\r\n      add(\"webFormClass\", \"Donation\");\r\n      add(\"req_id\", reqIdValue); \/\/ A\u00f1adido el req_id din\u00e1mico\r\n\r\n      \/\/ 6. A\u00f1adir defParams\r\n      const defParams = {\r\n        version: \"2\",\r\n        email_template_id: config.email_template_id,\r\n        relation_type: config.relation_type,\r\n        include_recaptcha: 0,\r\n        recaptcha_configKeys: [],\r\n        recaptcha_selected: \"\",\r\n      };\r\n      add(\"defParams\", encodeURIComponent(JSON.stringify(defParams)));\r\n\r\n      \/\/ 7. A\u00f1adir los datos del usuario\r\n      if (personType === \"persona\") {\r\n        add(\r\n          \"Contacts___first_name\",\r\n          document.getElementById(\"Contacts___first_name\").value\r\n        );\r\n        add(\r\n          \"Contacts___last_name\",\r\n          document.getElementById(\"Contacts___last_name\").value\r\n        );\r\n        add(\r\n          \"Contacts___email1\",\r\n          document.getElementById(\"Contacts___email1\").value\r\n        );\r\n        add(\r\n          \"Contacts___stic_identification_type_c\",\r\n          document.getElementById(\"Contacts___stic_identification_type_c\")\r\n            .value\r\n        );\r\n        add(\r\n          \"Contacts___stic_identification_number_c\",\r\n          document.getElementById(\"Contacts___stic_identification_number_c\")\r\n            .value\r\n        );\r\n        add(\r\n          \"Contacts___primary_address_state\",\r\n          document.getElementById(\"Contacts___primary_address_state\").value\r\n        );\r\n        \/\/ --- INICIO ENV\u00cdO RGPD PERSONA A\u00d1ADIDO ---\r\n        \/\/ (Solo se env\u00edan si el checkbox de privacidad est\u00e1 marcado, lo cual es obligatorio)\r\n        if (document.getElementById(\"Contacts___privacy_policy\").checked) {\r\n          add(\"Contacts___lawful_basis\", \"consent\");\r\n          add(\"Contacts___date_reviewed\", getSinergiaDateTime());\r\n          add(\"Contacts___lawful_basis_source\", \"website\");\r\n        }\r\n        \/\/ Campo opcional de marketing (la entidad debe crear este campo en SinergiaCRM)\r\n        if (document.getElementById(\"Contacts___gdpr_marketing\").checked) {\r\n          \/\/ IMPORTANTE: 'Contacts___stic_gdpr_marketing_c' es un nombre de ejemplo.\r\n          \/\/ La entidad debe crear este campo (p.ej. un checkbox) y poner aqu\u00ed su nombre t\u00e9cnico.\r\n          add(\"Contacts___fip_gdpr_marketing_c\", \"1\");\r\n        }\r\n        \/\/ --- FIN ENV\u00cdO RGPD PERSONA A\u00d1ADIDO ---\r\n      } else {\r\n        add(\r\n          \"Accounts___name\",\r\n          document.getElementById(\"Accounts___name\").value\r\n        );\r\n        add(\r\n          \"Accounts___email1\",\r\n          document.getElementById(\"Accounts___email1\").value\r\n        );\r\n        add(\r\n          \"Accounts___stic_identification_number_c\",\r\n          document.getElementById(\"Accounts___stic_identification_number_c\")\r\n            .value\r\n        );\r\n        add(\r\n          \"Accounts___billing_address_state\",\r\n          document.getElementById(\"Accounts___billing_address_state\").value\r\n        );\r\n        \/\/ --- INICIO ENV\u00cdO RGPD ORGANIZACI\u00d3N A\u00d1ADIDO ---\r\n        \/\/ (Solo se env\u00edan si el checkbox de privacidad est\u00e1 marcado, lo cual es obligatorio)\r\n        if (document.getElementById(\"Accounts___privacy_policy\").checked) {\r\n          \/\/ IMPORTANTE: La entidad debe crear estos campos en el m\u00f3dulo Accounts de SinergiaCRM\r\n          add(\"Accounts___lawful_basis_c\", \"consent\");\r\n          add(\"Accounts___date_reviewed_c\", getSinergiaDateTime());\r\n          add(\"Accounts___lawful_basis_source_c\", \"website\");\r\n        }\r\n        \/\/ Campo opcional de marketing (la entidad debe crear este campo en SinergiaCRM)\r\n        if (document.getElementById(\"Accounts___gdpr_marketing\").checked) {\r\n          \/\/ IMPORTANTE: 'Accounts___stic_gdpr_marketing_c' es un nombre de ejemplo.\r\n          add(\"Accounts___fip_gdpr_marketing_c\", \"1\");\r\n        }\r\n        \/\/ --- FIN ENV\u00cdO RGPD ORGANIZACI\u00d3N A\u00d1ADIDO ---\r\n      }\r\n\r\n      \/\/ 8. A\u00f1adir los datos del pago\r\n      add(\r\n        \"stic_Payment_Commitments___payment_type\",\r\n        donationType === \"cuota\" ? \"fee\" : \"donation\"\r\n      );\r\n      add(\"stic_Payment_Commitments___amount\", selectedAmount);\r\n      add(\"stic_Payment_Commitments___payment_method\", paymentMethod);\r\n      add(\r\n        \"stic_Payment_Commitments___periodicity\",\r\n        donationType === \"cuota\" ? periodicity : \"punctual\"\r\n      );\r\n      if (paymentMethod === \"direct_debit\") {\r\n        add(\r\n          \"stic_Payment_Commitments___bank_account\",\r\n          document.getElementById(\"stic_Payment_Commitments___bank_account\")\r\n            .value\r\n        );\r\n      }\r\n\r\n      \/\/ 9. Enviar el formulario\r\n      document.body.appendChild(f);\r\n      f.submit();\r\n    }\r\n\r\n    \/\/ ========================================================================\r\n    \/\/ L\u00d3GICA DEL MODAL Y C\u00c1LCULO DE DESGRAVACI\u00d3N\r\n    \/\/ ========================================================================\r\n\r\n    function openDeductionModal() {\r\n      document.getElementById(\"deductionModal\").style.display = \"flex\";\r\n    }\r\n    function closeDeductionModal() {\r\n      document.getElementById(\"deductionModal\").style.display = \"none\";\r\n    }\r\n\r\n    function updateDeductionMessage() {\r\n      const periodicityMap = {\r\n        monthly: 12,\r\n        quarterly: 4,\r\n        annual: 1,\r\n        punctual: 1,\r\n      };\r\n\r\n      const currentPeriodicity =\r\n        donationType === \"cuota\" ? periodicity : \"punctual\";\r\n      const freq = periodicityMap[currentPeriodicity] || 1;\r\n      const annualAmount = selectedAmount * freq;\r\n      const isPersona = personType === \"persona\";\r\n      let deduction = 0;\r\n\r\n      if (isPersona) {\r\n        if (annualAmount <= 250) {\r\n          deduction = annualAmount * 0.8;\r\n        } else {\r\n          deduction = 250 * 0.8 + (annualAmount - 250) * 0.4;\r\n        }\r\n      } else {\r\n        \/\/ Empresa\r\n        deduction = annualAmount * 0.4;\r\n      }\r\n\r\n      const target = document.getElementById(\"deductionText\");\r\n      if (target) {\r\n        target.textContent = `Desgrava hasta ${deduction.toFixed(\r\n          2\r\n        )} \u20ac al a\u00f1o`;\r\n      }\r\n    }\r\n\r\n    \/\/ Inicializaci\u00f3n al cargar la p\u00e1gina\r\n    document.addEventListener(\"DOMContentLoaded\", function () {\r\n      selectAmount(document.querySelector(\"#amount-buttons button:nth-child(2)\"), 10);\r\n      selectDonationType(document.querySelector('[data-type=\"cuota\"]'));\r\n      selectPersonType(document.querySelector('[data-person=\"persona\"]'));\r\n      updateDeductionMessage();\r\n    });\r\n  <\/script>\r\n<\/body>\r\n\r\n<\/html>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=\u00bb1&#8243; _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb background_color=\u00bb#F49D16&#8243; custom_margin=\u00bb-21px|||||\u00bb custom_padding=\u00bb0px|0px|0px|0px|false|false\u00bb custom_padding_phone=\u00bb0px|0|0px|0|false|false\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_row use_custom_gutter=\u00bbon\u00bb gutter_width=\u00bb1&#8243; make_equal=\u00bbon\u00bb _builder_version=\u00bb4.16&#8243; _module_preset=\u00bbdefault\u00bb width=\u00bb100%\u00bb max_width=\u00bb100%\u00bb custom_margin=\u00bb39px|auto|-41px|auto||\u00bb custom_padding=\u00bb0px||24px||false|false\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_column type=\u00bb4_4&#8243; _builder_version=\u00bb4.16&#8243; _module_preset=\u00bbdefault\u00bb custom_padding=\u00bb45px|72px|||false|false\u00bb custom_padding_tablet=\u00bb45px|72px|||false|false\u00bb custom_padding_phone=\u00bb0px|20px||20px|false|false\u00bb custom_padding_last_edited=\u00bbon|phone\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_text _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb text_font=\u00bbMaven Pro||||||||\u00bb text_text_color=\u00bb#FFFFFF\u00bb text_font_size=\u00bb20px\u00bb header_3_text_color=\u00bb#FFFFFF\u00bb header_3_font_size=\u00bb26px\u00bb width=\u00bb100%\u00bb custom_padding=\u00bb0px|||80px|false|false\u00bb custom_padding_tablet=\u00bb45px|||80px|false|false\u00bb custom_padding_phone=\u00bb45px|30px|24px|30px|false|false\u00bb custom_padding_last_edited=\u00bbon|phone\u00bb text_font_size_tablet=\u00bb20px\u00bb text_font_size_phone=\u00bb18px\u00bb text_font_size_last_edited=\u00bbon|phone\u00bb header_3_font_size_tablet=\u00bb26px\u00bb header_3_font_size_phone=\u00bb20px\u00bb header_3_font_size_last_edited=\u00bbon|phone\u00bb global_colors_info=\u00bb{}\u00bb]<\/p>\n<h3 style=\"text-align: center;\"><strong><span style=\"font-size: 14pt;\"><span style=\"font-size: 18pt;\">INTEGRA PIRINEUS LANZA FORFAIT FOR FAITH\u00a0<\/span><\/span><\/strong><\/h3>\n<p style=\"text-align: justify;\">Una iniciativa para recaudar fondo para seguir gestionando los bosques del Pirineo ofreciendo oportunidades laborales a personas en riesgo de exclusi\u00f3n.<\/p>\n<p style=\"text-align: justify;\">Un forfait simb\u00f3lico que se podr\u00e1 adquirir ahora desde 1 euro, pero que en 2050 no tendr\u00e1 precio. Porque solo protegiendo el Pirineo podremos disfrutar de sus bosques de aqu\u00ed a 25 a\u00f1os y seguir ofreciendo oportunidades por todas las personas.<\/p>\n<p>[\/et_pb_text][et_pb_video src=\u00bbhttps:\/\/youtu.be\/uIt85eqsXGI\u00bb _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb transform_scale=\u00bb80%|80%\u00bb width=\u00bb91%\u00bb module_alignment=\u00bbcenter\u00bb min_height=\u00bb307.7px\u00bb custom_margin=\u00bb-7px|||||\u00bb custom_padding=\u00bb0px||0px|||\u00bb global_colors_info=\u00bb{}\u00bb][\/et_pb_video][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=\u00bb1&#8243; _builder_version=\u00bb4.16&#8243; _module_preset=\u00bbdefault\u00bb custom_padding=\u00bb2px|0px|2px|0px||\u00bb custom_padding_phone=\u00bb0px|0|0px|0|false|false\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_row column_structure=\u00bb1_2,1_2&#8243; _builder_version=\u00bb4.16&#8243; _module_preset=\u00bbdefault\u00bb custom_padding=\u00bb2px|||||\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_column type=\u00bb1_2&#8243; _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_image src=\u00bbhttps:\/\/www.integrapirineus.com\/wp-content\/uploads\/2025\/12\/Forfait-For-Faith-1.png\u00bb title_text=\u00bbForfait For Faith\u00bb align=\u00bbcenter\u00bb _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb width=\u00bb80%\u00bb global_colors_info=\u00bb{}\u00bb][\/et_pb_image][\/et_pb_column][et_pb_column type=\u00bb1_2&#8243; _builder_version=\u00bb4.16&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_text _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb text_font=\u00bbMaven Pro||||||||\u00bb text_text_color=\u00bb#6d6d6d\u00bb text_font_size=\u00bb17px\u00bb text_line_height=\u00bb1.3em\u00bb link_text_color=\u00bb#6b6b6b\u00bb custom_margin=\u00bb30px|||||\u00bb custom_padding=\u00bb||25px|||\u00bb text_font_size_tablet=\u00bb17px\u00bb text_font_size_phone=\u00bb14px\u00bb text_font_size_last_edited=\u00bbon|phone\u00bb global_colors_info=\u00bb{}\u00bb]<\/p>\n<p style=\"text-align: center;\">Si quieres m\u00e1s informaci\u00f3n:<br \/>www.integrapirineus.com\/<\/p>\n<p style=\"text-align: center;\">O contacta directamente con:<\/p>\n<p style=\"text-align: center;\">sostenibilitat@integrapirineus.com<br \/>T. 973 352 966<br \/>c\/ Lloren\u00e7 Tom\u00e0s i Costa, 58 &#8211; La Seu d\u2019Urgell<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=\u00bb4.25.1&#8243; _module_preset=\u00bbdefault\u00bb text_font=\u00bbMaven Pro||||||||\u00bb text_text_color=\u00bb#F49D16&#8243; text_font_size=\u00bb20px\u00bb global_colors_info=\u00bb{}\u00bb]<\/p>\n<p style=\"text-align: center;\"><strong>Gr\u00e0cies a la teva aportaci\u00f3, Integra Pirineus pot seguir apostant per les persones i els boscos del Pirineu.<\/strong><\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>COLABORApara prevenir incendios en el Pirineo.\u00a0A partir de esta campa\u00f1a podemos seguir cuidando de los bosques y las personas del Pirineo.<!DOCTYPE html>\r\n<html lang=\"es\">\r\n\r\n<head>\r\n  <meta charset=\"utf-8\" \/>\r\n  <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\" \/>\r\n  <title>Formulario de Donaci\u00f3n<\/title>\r\n  <style>\r\n    body {\r\n      font-family: Arial, sans-serif;\r\n      margin: 0;\r\n      background: #fff;\r\n      color: #333;\r\n    }\r\n\r\n    .form-container {\r\n      max-width: 600px;\r\n      margin: 2rem auto;\r\n      padding: 2rem;\r\n      border: 1px solid #ccc;\r\n      border-radius: 8px;\r\n    }\r\n\r\n    .form-step {\r\n      display: none;\r\n    }\r\n\r\n    .form-step.active {\r\n      display: block;\r\n    }\r\n\r\n    h2 {\r\n      color: #f29b16;\r\n    }\r\n\r\n    label {\r\n      display: block;\r\n      margin: 0.5rem 0 0.25rem;\r\n      font-weight: bold;\r\n    }\r\n\r\n    input,\r\n    select {\r\n      width: 100%;\r\n      padding: 0.5rem;\r\n      margin-bottom: 1rem;\r\n      border-radius: 4px;\r\n      border: 1px solid #ccc;\r\n      box-sizing: border-box;\r\n    }\r\n\r\n    .selector-group {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 1rem;\r\n      margin-bottom: 1rem;\r\n    }\r\n\r\n    .selector-group button {\r\n      flex: 1;\r\n      padding: 0.5rem;\r\n      border: 1px solid #f29b16;\r\n      background: white;\r\n      color: #f29b16;\r\n      border-radius: 4px;\r\n      cursor: pointer;\r\n    }\r\n\r\n    .selector-group button.active {\r\n      background-color: #f29b16;\r\n      color: white;\r\n    }\r\n\r\n    .buttons {\r\n      display: flex;\r\n      justify-content: space-between;\r\n      margin-top: 1.5rem;\r\n    }\r\n\r\n    .btn {\r\n      background-color: #f29b16;\r\n      color: white;\r\n      padding: 0.5rem 1rem;\r\n      border: none;\r\n      border-radius: 4px;\r\n      cursor: pointer;\r\n    }\r\n\r\n    .btn:disabled {\r\n      background-color: #ccc;\r\n    }\r\n\r\n    \/* Estilo para campos con error *\/\r\n    .field-error {\r\n      border-color: #f29b16;\r\n      background-color: #fff8f8;\r\n    }\r\n\r\n    .btn.secondary {\r\n      background-color: #fff;\r\n      color: #f29b16;\r\n      border: 1px solid #f29b16;\r\n    }\r\n\r\n    .btn.primary-action {\r\n      padding: 0.75rem 1.25rem;\r\n      \/* Un poco m\u00e1s grande *\/\r\n      font-size: 1.1rem;\r\n      font-weight: bold;\r\n    }\r\n\r\n    \/* 1. Indicador de Pasos (con tu color rojo) *\/\r\n    .progress-indicator {\r\n      display: flex;\r\n      justify-content: center;\r\n      align-items: center;\r\n      margin-bottom: 2rem;\r\n    }\r\n\r\n    .step-circle {\r\n      width: 30px;\r\n      height: 30px;\r\n      line-height: 28px;\r\n      border-radius: 50%;\r\n      background-color: #f0f0f0;\r\n      color: #999;\r\n      text-align: center;\r\n      font-weight: bold;\r\n      border: 2px solid #f0f0f0;\r\n    }\r\n\r\n    .step-circle.active {\r\n      background-color: #f29b16;\r\n      color: white;\r\n      border-color: #f29b16;\r\n    }\r\n\r\n    .step-circle.done {\r\n      background-color: white;\r\n      color: #f29b16;\r\n      border-color: #f29b16;\r\n      font-size: 1.2rem;\r\n      line-height: 26px;\r\n    }\r\n\r\n    \/* Se puede poner '\u2713' aqu\u00ed *\/\r\n    .step-line {\r\n      width: 40px;\r\n      height: 2px;\r\n      background-color: #f0f0f0;\r\n    }\r\n\r\n    .step-line.active {\r\n      background-color: #f29b16;\r\n    }\r\n\r\n    \/* 2. Subt\u00edtulos y Resumen de Importe *\/\r\n    .step-subtitle {\r\n      font-size: 1.1rem;\r\n      color: #555;\r\n      text-align: center;\r\n      margin-top: 1rem;\r\n      margin-bottom: 2rem;\r\n    }\r\n\r\n    .step-subtitle span {\r\n      font-weight: bold;\r\n      color: #333;\r\n    }\r\n\r\n    \/* 3. Conexi\u00f3n Segura (Candado) *\/\r\n    .secure-connection {\r\n      text-align: center;\r\n      color: #777;\r\n      margin: 1.5rem 0;\r\n      font-size: 0.9rem;\r\n    }\r\n\r\n    .secure-connection svg {\r\n      vertical-align: middle;\r\n      margin-right: 5px;\r\n    }\r\n\r\n    \/* 4. Bot\u00f3n 'Volver' (como en las capturas) *\/\r\n    .back-button {\r\n      color: #555;\r\n      text-decoration: none;\r\n      font-size: 0.9rem;\r\n      cursor: pointer;\r\n    }\r\n\r\n    \/* --- INICIO ESTILOS RGPD A\u00d1ADIDOS --- *\/\r\n    .rgpd-group {\r\n      margin-top: 1.5rem;\r\n      border-top: 1px solid #eee;\r\n      padding-top: 1rem;\r\n    }\r\n\r\n    .rgpd-field {\r\n      display: flex;\r\n      align-items: flex-start;\r\n      margin-bottom: 1rem;\r\n    }\r\n\r\n    .rgpd-field input[type=\"checkbox\"] {\r\n      width: auto;\r\n      \/* Ancho autom\u00e1tico para checkboxes *\/\r\n      margin-right: 0.75rem;\r\n      margin-top: 0.2rem;\r\n      \/* Alineaci\u00f3n vertical ligera *\/\r\n      margin-bottom: 0;\r\n      flex-shrink: 0;\r\n    }\r\n\r\n    .rgpd-field label {\r\n      display: inline;\r\n      \/* Permite que el label est\u00e9 al lado del checkbox *\/\r\n      font-weight: normal;\r\n      margin: 0;\r\n    }\r\n\r\n    \/* Estilo de error para el label del checkbox *\/\r\n    .rgpd-field label.field-error {\r\n      color: #f29b16;\r\n      font-weight: bold;\r\n    }\r\n\r\n    .rgpd-field a {\r\n      color: #2a7ae2;\r\n      text-decoration: underline;\r\n    }\r\n\r\n    \/* --- FIN ESTILOS RGPD A\u00d1ADIDOS --- *\/\r\n    .form-footer-note {\r\n      font-size: 0.8rem;\r\n      color: #777;\r\n      text-align: center;\r\n      margin-top: 1.5rem;\r\n    }\r\n  <\/style>\r\n<\/head>\r\n\r\n<body>\r\n  <div class=\"form-container\">\r\n    <form id=\"donationForm\">\r\n      <div class=\"progress-indicator\">\r\n        <div class=\"step-circle active\" id=\"circle-1\">1<\/div>\r\n        <div class=\"step-line\" id=\"line-1-2\"><\/div>\r\n        <div class=\"step-circle\" id=\"circle-2\">2<\/div>\r\n        <div class=\"step-line\" id=\"line-2-3\"><\/div>\r\n        <div class=\"step-circle\" id=\"circle-3\">3<\/div>\r\n      <\/div>\r\n      <div class=\"form-step active\" id=\"step-1\">\r\n        <h2>Quiero ayudar con mi aportaci\u00f3n<\/h2>\r\n        <label>Tipo de aportaci\u00f3n<\/label>\r\n        <div class=\"selector-group\">\r\n          <button class=\"active\" data-type=\"donativo\" onclick=\"selectDonationType(this)\" type=\"button\">\r\n            Puntual\r\n          <\/button>\r\n          <button data-type=\"cuota\" onclick=\"selectDonationType(this)\" type=\"button\">\r\n            Peri\u00f3dica\r\n          <\/button>\r\n        <\/div>\r\n        <div id=\"periodicitySelector\" style=\"display: none\">\r\n          <label>Periodicidad<\/label>\r\n          <select id=\"periodicitySelect\" onchange=\"updatePeriodicity(this)\">\r\n            <option value=\"monthly\">Mensual<\/option>\r\n            <option value=\"quarterly\">Trimestral<\/option>\r\n            <option value=\"annual\">Anual<\/option>\r\n          <\/select>\r\n        <\/div>\r\n        <label>Importe<\/label>\r\n        <div class=\"selector-group\" id=\"amount-buttons\">\r\n          <button onclick=\"selectAmount(this, 5)\" type=\"button\">5\u20ac<\/button>\r\n          <button onclick=\"selectAmount(this, 10)\" type=\"button\">10\u20ac<\/button>\r\n          <button onclick=\"selectAmount(this, 25)\" type=\"button\">\r\n            25\u20ac\r\n          <\/button>\r\n          <input id=\"customAmount\" min=\"1\" oninput=\"customAmountChanged(this)\" placeholder=\"Otra cantidad\"\r\n            type=\"number\" \/>\r\n        <\/div>\r\n        <div id=\"deductionInfo\" style=\"text-align: center; margin-top: 1rem\">\r\n          <p id=\"deductionText\" style=\"color: green; font-weight: bold; font-size: 1rem\">\r\n            \u2139 Desgrava hasta 0 \u20ac al a\u00f1o\r\n          <\/p>\r\n          <a href=\"#\" onclick=\"openDeductionModal(); return false;\" style=\"\r\n                display: block;\r\n                text-align: center;\r\n                font-size: 0.9rem;\r\n                margin-top: 0.5rem;\r\n                color: #2a7ae2;\r\n              \">\u2139 M\u00e1s informaci\u00f3n sobre la desgravaci\u00f3n<\/a>\r\n        <\/div>\r\n        <label>Tipo de persona<\/label>\r\n        <div class=\"selector-group\">\r\n          <button class=\"active\" data-person=\"persona\" onclick=\"selectPersonType(this)\" type=\"button\">\r\n            Persona f\u00edsica\r\n          <\/button>\r\n          <button data-person=\"organizacion\" onclick=\"selectPersonType(this)\" type=\"button\">\r\n            Empresa\r\n          <\/button>\r\n        <\/div>\r\n        <div class=\"buttons\">\r\n          <span><\/span>\r\n          <button class=\"btn\" onclick=\"nextStep()\" type=\"button\">\r\n            Siguiente\r\n          <\/button>\r\n        <\/div>\r\n        <p class=\"form-footer-note\">\r\n          Integra Pirineus es una Fundaci\u00f3n inscrita en el\r\n          Registro de Fundaciones del Departamento de Justicia de la Generalidad\r\n          de Catalu\u00f1a inscrita con el n\u00famero 2691. \u00a1Gracias por tu colaboraci\u00f3n!\r\n        <\/p>\r\n      <\/div>\r\n      <div class=\"form-step\" id=\"step-2\">\r\n        <h2>Tus datos<\/h2>\r\n        <p class=\"step-subtitle\"><span id=\"summary-amount-step2\"><\/span><\/p>\r\n        <div id=\"fields-persona\">\r\n          <label for=\"Contacts___first_name\">Nombre<\/label>\r\n          <input id=\"Contacts___first_name\" type=\"text\" \/>\r\n          <label for=\"Contacts___last_name\">Apellidos<\/label>\r\n          <input id=\"Contacts___last_name\" type=\"text\" \/>\r\n          <label for=\"Contacts___email1\">Correo electr\u00f3nico<\/label>\r\n          <input id=\"Contacts___email1\" type=\"email\" onchange=\"validateEmailField(this)\" \/>\r\n          <label for=\"Contacts___stic_identification_type_c\">Tipo de documento<\/label>\r\n          <select id=\"Contacts___stic_identification_type_c\"\r\n            onchange=\"validateIdentificationField(document.getElementById('Contacts___stic_identification_number_c'))\">\r\n            <option label=\"\" value=\"\"><\/option>\r\n            <option label=\"NIE\" value=\"nie\">NIE<\/option>\r\n            <option label=\"NIF\" value=\"nif\">NIF<\/option>\r\n            <option label=\"Pasaporte\" value=\"passport\">Pasaporte<\/option>\r\n            <option label=\"Otros\" value=\"other\">Otros<\/option>\r\n          <\/select>\r\n          <label for=\"Contacts___stic_identification_number_c\">N.\u00ba de documento<\/label>\r\n          <input id=\"Contacts___stic_identification_number_c\" type=\"text\"\r\n            onchange=\"validateIdentificationField(this)\" \/>\r\n          <label for=\"Contacts___primary_address_state\">Provincia<\/label>\r\n          <select id=\"Contacts___primary_address_state\" name=\"Contacts___primary_address_state\">\r\n            <option label=\"\" value=\"\"><\/option>\r\n            <option label=\"Albacete\" value=\"02\">Albacete<\/option>\r\n            <option label=\"Alicante\/Alacant\" value=\"03\">\r\n              Alicante\/Alacant\r\n            <\/option>\r\n            <option label=\"Almer\u00eda\" value=\"04\">Almer\u00eda<\/option>\r\n            <option label=\"Araba\/\u00c1lava\" value=\"01\">Araba\/\u00c1lava<\/option>\r\n            <option label=\"Asturias\" value=\"33\">Asturias<\/option>\r\n            <option label=\"\u00c1vila\" value=\"05\">\u00c1vila<\/option>\r\n            <option label=\"Badajoz\" value=\"06\">Badajoz<\/option>\r\n            <option label=\"Balears, Illes\" value=\"07\">Balears, Illes<\/option>\r\n            <option label=\"Barcelona\" value=\"08\">Barcelona<\/option>\r\n            <option label=\"Bizkaia\" value=\"48\">Bizkaia<\/option>\r\n            <option label=\"Burgos\" value=\"09\">Burgos<\/option>\r\n            <option label=\"C\u00e1ceres\" value=\"10\">C\u00e1ceres<\/option>\r\n            <option label=\"C\u00e1diz\" value=\"11\">C\u00e1diz<\/option>\r\n            <option label=\"Cantabria\" value=\"39\">Cantabria<\/option>\r\n            <option label=\"Castell\u00f3n\/Castell\u00f3\" value=\"12\">\r\n              Castell\u00f3n\/Castell\u00f3\r\n            <\/option>\r\n            <option label=\"Ceuta\" value=\"51\">Ceuta<\/option>\r\n            <option label=\"Ciudad Real\" value=\"13\">Ciudad Real<\/option>\r\n            <option label=\"C\u00f3rdoba\" value=\"14\">C\u00f3rdoba<\/option>\r\n            <option label=\"Coru\u00f1a, A\" value=\"15\">Coru\u00f1a, A<\/option>\r\n            <option label=\"Cuenca\" value=\"16\">Cuenca<\/option>\r\n            <option label=\"Gipuzkoa\" value=\"20\">Gipuzkoa<\/option>\r\n            <option label=\"Girona\" value=\"17\">Girona<\/option>\r\n            <option label=\"Granada\" value=\"18\">Granada<\/option>\r\n            <option label=\"Guadalajara\" value=\"19\">Guadalajara<\/option>\r\n            <option label=\"Huelva\" value=\"21\">Huelva<\/option>\r\n            <option label=\"Huesca\" value=\"22\">Huesca<\/option>\r\n            <option label=\"Ja\u00e9n\" value=\"23\">Ja\u00e9n<\/option>\r\n            <option label=\"Le\u00f3n\" value=\"24\">Le\u00f3n<\/option>\r\n            <option label=\"Lleida\" value=\"25\">Lleida<\/option>\r\n            <option label=\"Lugo\" value=\"27\">Lugo<\/option>\r\n            <option label=\"Madrid\" value=\"28\">Madrid<\/option>\r\n            <option label=\"M\u00e1laga\" value=\"29\">M\u00e1laga<\/option>\r\n            <option label=\"Melilla\" value=\"52\">Melilla<\/option>\r\n            <option label=\"Murcia\" value=\"30\">Murcia<\/option>\r\n            <option label=\"Navarra\" value=\"31\">Navarra<\/option>\r\n            <option label=\"Ourense\" value=\"32\">Ourense<\/option>\r\n            <option label=\"Palencia\" value=\"34\">Palencia<\/option>\r\n            <option label=\"Palmas, Las\" value=\"35\">Palmas, Las<\/option>\r\n            <option label=\"Pontevedra\" value=\"36\">Pontevedra<\/option>\r\n            <option label=\"Rioja, La\" value=\"26\">Rioja, La<\/option>\r\n            <option label=\"Salamanca\" value=\"37\">Salamanca<\/option>\r\n            <option label=\"Santa Cruz de Tenerife\" value=\"38\">\r\n              Santa Cruz de Tenerife\r\n            <\/option>\r\n            <option label=\"Segovia\" value=\"40\">Segovia<\/option>\r\n            <option label=\"Sevilla\" value=\"41\">Sevilla<\/option>\r\n            <option label=\"Soria\" value=\"42\">Soria<\/option>\r\n            <option label=\"Tarragona\" value=\"43\">Tarragona<\/option>\r\n            <option label=\"Teruel\" value=\"44\">Teruel<\/option>\r\n            <option label=\"Toledo\" value=\"45\">Toledo<\/option>\r\n            <option label=\"Valencia\/Val\u00e8ncia\" value=\"46\">\r\n              Valencia\/Val\u00e8ncia\r\n            <\/option>\r\n            <option label=\"Valladolid\" value=\"47\">Valladolid<\/option>\r\n            <option label=\"Zamora\" value=\"49\">Zamora<\/option>\r\n            <option label=\"Zaragoza\" value=\"50\">Zaragoza<\/option>\r\n            <option label=\"No residentes\" value=\"99\">No residentes<\/option>\r\n          <\/select>\r\n          <div class=\"rgpd-group\">\r\n            <div class=\"rgpd-field\">\r\n              <input type=\"checkbox\" id=\"Contacts___privacy_policy\" name=\"Contacts___privacy_policy\"\r\n                onclick=\"this.parentElement.querySelector('label').classList.remove('field-error');\" \/>\r\n              <label for=\"Contacts___privacy_policy\">He le\u00eddo y acepto la\r\n                <a href=\"#\" onclick=\"alert('Enlace a la Pol\u00edtica de Privacidad'); return false;\"\r\n                  target=\"_blank\">Pol\u00edtica de Privacidad<\/a>.<\/label>\r\n            <\/div>\r\n            <div class=\"rgpd-field\">\r\n              <input type=\"checkbox\" id=\"Contacts___gdpr_marketing\" name=\"Contacts___gdpr_marketing\" \/>\r\n              <label for=\"Contacts___gdpr_marketing\">S\u00ed, quiero recibir informaci\u00f3n sobre la actividad de la entidad,\r\n                campa\u00f1as y otras formas de colaborar.<\/label>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <div id=\"fields-organizacion\" style=\"display: none\">\r\n          <label for=\"Accounts___name\">Nombre de la entidad<\/label>\r\n          <input id=\"Accounts___name\" type=\"text\" \/>\r\n          <label for=\"Accounts___email1\">Correo electr\u00f3nico<\/label>\r\n          <input id=\"Accounts___email1\" type=\"email\" onchange=\"validateEmailField(this)\" \/>\r\n          <label for=\"Accounts___stic_identification_number_c\">N.\u00ba de documento (CIF)<\/label>\r\n          <input id=\"Accounts___stic_identification_number_c\" type=\"text\"\r\n            onchange=\"validateIdentificationField(this)\" \/>\r\n          <label for=\"Accounts___billing_address_state\">Provincia<\/label>\r\n          <select id=\"Accounts___billing_address_state\" name=\"Accounts___billing_address_state\">\r\n            <option label=\"\" value=\"\"><\/option>\r\n            <option label=\"Albacete\" value=\"02\">Albacete<\/option>\r\n            <option label=\"Alicante\/Alacant\" value=\"03\">\r\n              Alicante\/Alacant\r\n            <\/option>\r\n            <option label=\"Almer\u00eda\" value=\"04\">Almer\u00eda<\/option>\r\n            <option label=\"Araba\/\u00c1lava\" value=\"01\">Araba\/\u00c1lava<\/option>\r\n            <option label=\"Asturias\" value=\"33\">Asturias<\/option>\r\n            <option label=\"\u00c1vila\" value=\"05\">\u00c1vila<\/option>\r\n            <option label=\"Badajoz\" value=\"06\">Badajoz<\/option>\r\n            <option label=\"Balears, Illes\" value=\"07\">Balears, Illes<\/option>\r\n            <option label=\"Barcelona\" value=\"08\">Barcelona<\/option>\r\n            <option label=\"Bizkaia\" value=\"48\">Bizkaia<\/option>\r\n            <option label=\"Burgos\" value=\"09\">Burgos<\/option>\r\n            <option label=\"C\u00e1ceres\" value=\"10\">C\u00e1ceres<\/option>\r\n            <option label=\"C\u00e1diz\" value=\"11\">C\u00e1diz<\/option>\r\n            <option label=\"Cantabria\" value=\"39\">Cantabria<\/option>\r\n            <option label=\"Castell\u00f3n\/Castell\u00f3\" value=\"12\">\r\n              Castell\u00f3n\/Castell\u00f3\r\n            <\/option>\r\n            <option label=\"Ceuta\" value=\"51\">Ceuta<\/option>\r\n            <option label=\"Ciudad Real\" value=\"13\">Ciudad Real<\/option>\r\n            <option label=\"C\u00f3rdoba\" value=\"14\">C\u00f3rdoba<\/option>\r\n            <option label=\"Coru\u00f1a, A\" value=\"15\">Coru\u00f1a, A<\/option>\r\n            <option label=\"Cuenca\" value=\"16\">Cuenca<\/option>\r\n            <option label=\"Gipuzkoa\" value=\"20\">Gipuzkoa<\/option>\r\n            <option label=\"Girona\" value=\"17\">Girona<\/option>\r\n            <option label=\"Granada\" value=\"18\">Granada<\/option>\r\n            <option label=\"Guadalajara\" value=\"19\">Guadalajara<\/option>\r\n            <option label=\"Huelva\" value=\"21\">Huelva<\/option>\r\n            <option label=\"Huesca\" value=\"22\">Huesca<\/option>\r\n            <option label=\"Ja\u00e9n\" value=\"23\">Ja\u00e9n<\/option>\r\n            <option label=\"Le\u00f3n\" value=\"24\">Le\u00f3n<\/option>\r\n            <option label=\"Lleida\" value=\"25\">Lleida<\/option>\r\n            <option label=\"Lugo\" value=\"27\">Lugo<\/option>\r\n            <option label=\"Madrid\" value=\"28\">Madrid<\/option>\r\n            <option label=\"M\u00e1laga\" value=\"29\">M\u00e1laga<\/option>\r\n            <option label=\"Melilla\" value=\"52\">Melilla<\/option>\r\n            <option label=\"Murcia\" value=\"30\">Murcia<\/option>\r\n            <option label=\"Navarra\" value=\"31\">Navarra<\/option>\r\n            <option label=\"Ourense\" value=\"32\">Ourense<\/option>\r\n            <option label=\"Palencia\" value=\"34\">Palencia<\/option>\r\n            <option label=\"Palmas, Las\" value=\"35\">Palmas, Las<\/option>\r\n            <option label=\"Pontevedra\" value=\"36\">Pontevedra<\/option>\r\n            <option label=\"Rioja, La\" value=\"26\">Rioja, La<\/option>\r\n            <option label=\"Salamanca\" value=\"37\">Salamanca<\/option>\r\n            <option label=\"Santa Cruz de Tenerife\" value=\"38\">\r\n              Santa Cruz de Tenerife\r\n            <\/option>\r\n            <option label=\"Segovia\" value=\"40\">Segovia<\/option>\r\n            <option label=\"Sevilla\" value=\"41\">Sevilla<\/option>\r\n            <option label=\"Soria\" value=\"42\">Soria<\/option>\r\n            <option label=\"Tarragona\" value=\"43\">Tarragona<\/option>\r\n            <option label=\"Teruel\" value=\"44\">Teruel<\/option>\r\n            <option label=\"Toledo\" value=\"45\">Toledo<\/option>\r\n            <option label=\"Valencia\/Val\u00e8ncia\" value=\"46\">\r\n              Valencia\/Val\u00e8ncia\r\n            <\/option>\r\n            <option label=\"Valladolid\" value=\"47\">Valladolid<\/option>\r\n            <option label=\"Zamora\" value=\"49\">Zamora<\/option>\r\n            <option label=\"Zaragoza\" value=\"50\">Zaragoza<\/option>\r\n            <option label=\"No residentes\" value=\"99\">No residentes<\/option>\r\n          <\/select>\r\n          <div class=\"rgpd-group\">\r\n            <div class=\"rgpd-field\">\r\n              <input type=\"checkbox\" id=\"Accounts___privacy_policy\" name=\"Accounts___privacy_policy\"\r\n                onclick=\"this.parentElement.querySelector('label').classList.remove('field-error');\" \/>\r\n              <label for=\"Accounts___privacy_policy\">He le\u00eddo y acepto la\r\n                <a href=\"https:\/\/www.integrapirineus.com\/es\/politica-de-privacidad\/\" onclick=\"alert('Enlace a la Pol\u00edtica de Privacidad'); return false;\"\r\n                  target=\"_blank\">Pol\u00edtica de Privacidad<\/a>.<\/label>\r\n            <\/div>\r\n            <div class=\"rgpd-field\">\r\n              <input type=\"checkbox\" id=\"Accounts___gdpr_marketing\" name=\"Accounts___gdpr_marketing\" \/>\r\n              <label for=\"Accounts___gdpr_marketing\">S\u00ed, quiero recibir informaci\u00f3n sobre la actividad de la entidad,\r\n                campa\u00f1as y otras formas de colaborar.<\/label>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <div class=\"buttons\">\r\n          <button class=\"btn\" onclick=\"previousStep()\" type=\"button\">\r\n            Anterior\r\n          <\/button>\r\n          <button class=\"btn\" onclick=\"nextStep()\" type=\"button\">\r\n            Siguiente\r\n          <\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"form-step\" id=\"step-3\">\r\n        <h2>Selecciona tu forma de pago<\/h2>\r\n        <p class=\"step-subtitle\"><span id=\"summary-amount-step3\"><\/span><\/p>\r\n        <label>M\u00e9todo de pago<\/label>\r\n        <div class=\"selector-group\">\r\n          <button onclick=\"selectPaymentMethod(this, 'stripe')\" type=\"button\">\r\n            Tarjeta\r\n          <\/button>\r\n          <button onclick=\"selectPaymentMethod(this, 'direct_debit')\" type=\"button\">\r\n            Domiciliaci\u00f3n\r\n          <\/button>\r\n        <\/div>\r\n        <div id=\"ibanField\" style=\"display: none\">\r\n          <label for=\"stic_Payment_Commitments___bank_account\">Cuenta bancaria (IBAN)<\/label>\r\n          <input id=\"stic_Payment_Commitments___bank_account\" type=\"text\" placeholder=\"ES00 0000 0000 0000 0000 0000\" \/>\r\n        <\/div>\r\n        <div class=\"secure-connection\">\r\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"#777\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\r\n            style=\"vertical-align: middle; margin-right: 5px\">\r\n            <path\r\n              d=\"M12 11.9999C12.5523 11.9999 13 12.4476 13 12.9999V15.9999C13 16.5522 12.5523 16.9999 12 16.9999C11.4477 16.9999 11 16.5522 11 15.9999V12.9999C11 12.4476 11.4477 11.9999 12 11.9999Z\"\r\n              fill=\"currentColor\" \/>\r\n            <path\r\n              d=\"M18 8.99991H17V6.99991C17 4.23848 14.7614 1.99991 12 1.99991C9.23858 1.99991 7 4.23848 7 6.99991V8.99991H6C4.89543 8.99991 4 9.89534 4 10.9999V19.9999C4 21.1045 4.89543 21.9999 6 21.9999H18C19.1046 21.9999 20 21.1045 20 19.9999V10.9999C20 9.89534 19.1046 8.99991 18 8.99991ZM9 6.99991C9 5.34305 10.3431 3.99991 12 3.99991C13.6569 3.99991 15 5.34305 15 6.99991V8.99991H9V6.99991Z\"\r\n              fill=\"currentColor\" \/>\r\n          <\/svg>\r\n          <span>Conexi\u00f3n Segura<\/span>\r\n        <\/div>\r\n        <div class=\"buttons\">\r\n          <a onclick=\"previousStep()\" class=\"back-button\">\u276e Volver<\/a>\r\n          <button class=\"btn primary-action\" id=\"submitButton\" onclick=\"submitForm()\" type=\"button\">\r\n            HAZ TU DONACI\u00d3N \u2192\r\n          <\/button>\r\n        <\/div>\r\n      <\/div>\r\n    <\/form>\r\n  <\/div>\r\n  <div id=\"deductionModal\" style=\"\r\n        display: none;\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        width: 100%;\r\n        height: 100%;\r\n        background: rgba(0, 0, 0, 0.6);\r\n        z-index: 9999;\r\n        justify-content: center;\r\n        align-items: center;\r\n      \">\r\n    <div style=\"\r\n          background: white;\r\n          padding: 2rem;\r\n          max-width: 500px;\r\n          border-radius: 8px;\r\n          position: relative;\r\n        \">\r\n      <span onclick=\"closeDeductionModal()\" style=\"\r\n            position: absolute;\r\n            top: 10px;\r\n            right: 15px;\r\n            cursor: pointer;\r\n            font-weight: bold;\r\n          \">\u2716<\/span>\r\n      <p>\r\n        <strong>El resultado que se muestra es orientativo<\/strong> y puede\r\n        variar en funci\u00f3n de la comunidad aut\u00f3noma y de aportaciones\r\n        anteriores a la misma organizaci\u00f3n.\r\n      <\/p>\r\n      <table style=\"width: 100%; border-collapse: collapse; margin-bottom: 1rem\">\r\n        <tr>\r\n          <th style=\"border: 1px solid #ccc; padding: 0.5rem\">Donante<\/th>\r\n          <th style=\"border: 1px solid #ccc; padding: 0.5rem\">Importe<\/th>\r\n          <th style=\"border: 1px solid #ccc; padding: 0.5rem\">Desgravaci\u00f3n<\/th>\r\n        <\/tr>\r\n        <tr>\r\n          <td rowspan=\"2\" style=\"border: 1px solid #ccc; padding: 0.5rem\">\r\n            Persona f\u00edsica\r\n          <\/td>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">\r\n            Hasta 250\u202f\u20ac\r\n          <\/td>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">80%<\/td>\r\n        <\/tr>\r\n        <tr>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">Resto<\/td>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">40%<\/td>\r\n        <\/tr>\r\n        <tr>\r\n          <td style=\"border: 1px solid #ccc; padding: 0.5rem\">\r\n            Persona jur\u00eddica\r\n          <\/td>\r\n          <td colspan=\"2\" style=\"border: 1px solid #ccc; padding: 0.5rem\">\r\n            Todo el importe: 40%\r\n          <\/td>\r\n        <\/tr>\r\n      <\/table>\r\n      <p>\r\n        La desgravaci\u00f3n de la quota \u00edntegra t\u00e9 un l\u00edmit del 10\u202f% per a persones\r\n        f\u00edsiques i del 15\u202f% per a persones jur\u00eddiques, d'acord amb el Reial\r\n        decret llei 6\/2023.\r\n      <\/p>\r\n      <p>\r\n        La desgravaci\u00f3 augmenta fins al 45\u202f% per a persones f\u00edsiques i al 50\u202f%\r\n        per a jur\u00eddiques si es fan donacions del mateix import durant dos anys\r\n        consecutius.\r\n      <\/p>\r\n    <\/div>\r\n  <\/div>\r\n  <script>\r\n    \/\/ ========================================================================\r\n    \/\/ CONFIGURACI\u00d3N PARA PRODUCCI\u00d3N\r\n    \/\/ ========================================================================\r\n    \/\/ Rellena aqu\u00ed los IDs correspondientes a tu configuraci\u00f3n de SinergiaCRM\r\n    \/\/ ========================================================================\r\n\r\n    const formConfig = {\r\n      persona_donativo: {\r\n        campaign_id: \"0000017d-097e-d07d-f885-6932f8757702\",\r\n        email_template_id: \"000002e5-2ae0-56a2-ddc3-6932f83861b3\",\r\n        relation_type: \"donor\",\r\n        redirect_url: \"https:\/\/www.integrapirineus.com\/moltes-gracies-integra-pirineus\/\",\r\n        redirect_ko_url: \"https:\/\/www.integrapirineus.com\/hi-ha-hagut-un-error\/\",\r\n      },\r\n      persona_cuota: {\r\n        campaign_id: \"000001b2-ef98-d0d3-6b29-6932f8e51395\",\r\n        email_template_id: \"000003c7-4bfe-b305-33c9-6932f880f5a7\",\r\n        relation_type: \"member\",\r\n        redirect_url: \"https:\/\/www.integrapirineus.com\/moltes-gracies-integra-pirineus\/\",\r\n        redirect_ko_url: \"https:\/\/www.integrapirineus.com\/hi-ha-hagut-un-error\/\",\r\n      },\r\n      organizacion_donativo: {\r\n        campaign_id: \"00000ff3-a903-667b-6ce5-6932f87e0609\",\r\n        email_template_id: \"00000231-764c-cd8e-52f8-6932f8f4acef\",\r\n        relation_type: \"donor\",\r\n        redirect_url: \"https:\/\/www.integrapirineus.com\/moltes-gracies-integra-pirineus\/\",\r\n        redirect_ko_url: \"https:\/\/www.integrapirineus.com\/hi-ha-hagut-un-error\/\",\r\n      },\r\n      organizacion_cuota: {\r\n        campaign_id: \"00000e05-d730-64b9-454d-6932f8846c54\",\r\n        email_template_id: \"00000cc8-37a1-3b0c-0c7a-6932f8c148f1\",\r\n        relation_type: \"member\",\r\n        redirect_url: \"https:\/\/www.integrapirineus.com\/moltes-gracies-integra-pirineus\/\",\r\n        redirect_ko_url: \"https:\/\/www.integrapirineus.com\/hi-ha-hagut-un-error\/\",\r\n      },\r\n    };\r\n\r\n    \/\/ ========================================================================\r\n    \/\/ L\u00d3GICA DEL FORMULARIO\r\n    \/\/ ========================================================================\r\n\r\n    let currentStep = 1;\r\n    let donationType = \"donativo\"; \/\/ 'donativo' o 'cuota'\r\n    let personType = \"persona\"; \/\/ 'persona' o 'organizacion'\r\n    let selectedAmount = 25;\r\n    let paymentMethod = \"\"; \/\/ 'card' o 'direct_debit'\r\n    let periodicity = \"punctual\"; \/\/ 'punctual', 'monthly', 'quarterly', 'annual'\r\n\r\n    function nextStep() {\r\n      let isValid = true;\r\n      if (currentStep === 1) {\r\n        \/\/ Validaci\u00f3n del Paso 1 (Importe)\r\n        const custom = parseFloat(\r\n          document.getElementById(\"customAmount\").value\r\n        );\r\n        const buttons = document.querySelectorAll(\r\n          \"#amount-buttons button.active\"\r\n        );\r\n        if ((isNaN(custom) || custom <= 0) && buttons.length === 0) {\r\n          alert(\"Por favor, selecciona o introduce un importe v\u00e1lido.\");\r\n          document\r\n            .getElementById(\"customAmount\")\r\n            .classList.add(\"field-error\");\r\n          isValid = false;\r\n        } else {\r\n          document\r\n            .getElementById(\"customAmount\")\r\n            .classList.remove(\"field-error\");\r\n          if (!isNaN(custom) && custom > 0) selectedAmount = custom;\r\n        }\r\n      } else if (currentStep === 2) {\r\n        \/\/ --- INICIO VALIDACI\u00d3N RGPD MODIFICADA ---\r\n        \/\/ La validaci\u00f3n de los campos de texto se har\u00e1 en el submit final (paso 3),\r\n        \/\/ pero aqu\u00ed validamos la pol\u00edtica de privacidad para poder avanzar al paso 3.\r\n        isValid = validatePrivacyPolicyForStep2();\r\n        \/\/ --- FIN VALIDACI\u00d3N RGPD MODIFICADA ---\r\n      }\r\n\r\n      if (isValid) {\r\n        \/\/ 1. Texto base del importe\r\n        const baseAmountText = `${selectedAmount\r\n          .toFixed(2)\r\n          .replace(\".\", \",\")} \u20ac`;\r\n        let fullAmountText = baseAmountText; \/\/ Por defecto es solo el importe\r\n\r\n        \/\/ 2. Si es cuota, a\u00f1adir la periodicidad (usamos las variables globales 'donationType' y 'periodicity')\r\n        if (donationType === \"cuota\") {\r\n          \/\/ Mapa de valores a texto (en catal\u00e1n, como el resto del form)\r\n          const periodicityMap = {\r\n            monthly: \"mensuales\",\r\n            quarterly: \"trimestrales\",\r\n            annual: \"anuales\",\r\n          };\r\n\r\n          \/\/ 'periodicity' es una variable global que ya tiene el valor (ej: 'monthly')\r\n          const periodicityText = periodicityMap[periodicity] || periodicity;\r\n\r\n          fullAmountText = `${baseAmountText} ${periodicityText}`;\r\n        }\r\n\r\n        \/\/ 3. Actualizar los subt\u00edtulos\r\n        if (document.getElementById(\"summary-amount-step2\")) {\r\n          document.getElementById(\"summary-amount-step2\").textContent =\r\n            fullAmountText;\r\n        }\r\n        if (document.getElementById(\"summary-amount-step3\")) {\r\n          document.getElementById(\"summary-amount-step3\").textContent =\r\n            fullAmountText;\r\n        }\r\n\r\n        document\r\n          .querySelector(\".form-step.active\")\r\n          .classList.remove(\"active\");\r\n        document\r\n          .getElementById(`step-${++currentStep}`)\r\n          .classList.add(\"active\");\r\n\r\n        updateProgressIndicator(currentStep);\r\n      }\r\n    }\r\n\r\n    function previousStep() {\r\n      document.querySelector(\".form-step.active\").classList.remove(\"active\");\r\n      document\r\n        .getElementById(`step-${--currentStep}`)\r\n        .classList.add(\"active\");\r\n      updateProgressIndicator(currentStep);\r\n    }\r\n\r\n    function selectDonationType(btn) {\r\n      document\r\n        .querySelectorAll(\"[data-type]\")\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      btn.classList.add(\"active\");\r\n      donationType = btn.dataset.type;\r\n\r\n      const periodicityDiv = document.getElementById(\"periodicitySelector\");\r\n      const periodicitySelect = document.getElementById(\"periodicitySelect\");\r\n\r\n      if (donationType === \"cuota\") {\r\n        periodicityDiv.style.display = \"block\";\r\n        periodicity = periodicitySelect.value;\r\n      } else {\r\n        periodicityDiv.style.display = \"none\";\r\n        periodicity = \"punctual\";\r\n      }\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    function selectPersonType(btn) {\r\n      document\r\n        .querySelectorAll(\"[data-person]\")\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      btn.classList.add(\"active\");\r\n      personType = btn.dataset.person;\r\n\r\n      document.getElementById(\"fields-persona\").style.display =\r\n        personType === \"persona\" ? \"block\" : \"none\";\r\n      document.getElementById(\"fields-organizacion\").style.display =\r\n        personType === \"organizacion\" ? \"block\" : \"none\";\r\n\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    function selectAmount(btn, amount) {\r\n      document\r\n        .querySelectorAll(\"#amount-buttons button\")\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      btn.classList.add(\"active\");\r\n      document.getElementById(\"customAmount\").value = \"\";\r\n      document.getElementById(\"customAmount\").classList.remove(\"field-error\");\r\n      selectedAmount = amount;\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    function customAmountChanged(input) {\r\n      document\r\n        .querySelectorAll(\"#amount-buttons button\")\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      input.classList.remove(\"field-error\");\r\n      const custom = parseFloat(input.value);\r\n      if (!isNaN(custom) && custom > 0) {\r\n        selectedAmount = custom;\r\n      }\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    function selectPaymentMethod(btn, method) {\r\n      document\r\n        .querySelectorAll('[onclick^=\"selectPaymentMethod\"]')\r\n        .forEach((b) => b.classList.remove(\"active\"));\r\n      btn.classList.add(\"active\");\r\n      paymentMethod = method;\r\n      document.getElementById(\"ibanField\").style.display =\r\n        method === \"direct_debit\" ? \"block\" : \"none\";\r\n\r\n      \/\/ Limpiar error si se cambia de m\u00e9todo\r\n      document\r\n        .getElementById(\"stic_Payment_Commitments___bank_account\")\r\n        .classList.remove(\"field-error\");\r\n      btn.parentElement.classList.remove(\"field-error\");\r\n    }\r\n\r\n    function updatePeriodicity(select) {\r\n      periodicity = select.value;\r\n      updateDeductionMessage();\r\n    }\r\n\r\n    \/**\r\n     * Actualiza el indicador visual de pasos (1-2-3)\r\n     * @param {number} step - El n\u00famero del paso actual (1, 2, o 3)\r\n     *\/\r\n    function updateProgressIndicator(step) {\r\n      \/\/ Resetea todos\r\n      document\r\n        .querySelectorAll(\".step-circle\")\r\n        .forEach((circle) => circle.classList.remove(\"active\", \"done\"));\r\n      document\r\n        .querySelectorAll(\".step-line\")\r\n        .forEach((line) => line.classList.remove(\"active\"));\r\n\r\n      \/\/ Activa el paso actual\r\n      document.getElementById(\"circle-\" + step).classList.add(\"active\");\r\n\r\n      \/\/ Marca los pasos anteriores como \"hechos\" (con '\u2713')\r\n      for (let i = 1; i < step; i++) {\r\n        const circle = document.getElementById(\"circle-\" + i);\r\n        circle.classList.remove(\"active\");\r\n        circle.classList.add(\"done\");\r\n        circle.textContent = \"\u2713\"; \/\/ A\u00f1ade checkmark\r\n        \/\/ Activa la l\u00ednea de conexi\u00f3n\r\n        const line = document.getElementById(\"line-\" + i + \"-\" + (i + 1));\r\n        if (line) line.classList.add(\"active\");\r\n      }\r\n\r\n      \/\/ Asegura que los pasos futuros no tengan checkmark\r\n      for (let i = step + 1; i <= 3; i++) {\r\n        document.getElementById(\"circle-\" + i).textContent = i;\r\n      }\r\n      \/\/ Y el actual tenga su n\u00famero\r\n      document.getElementById(\"circle-\" + step).textContent = step;\r\n    }\r\n\r\n    \/**\r\n     * Valid if a cif is valid\r\n     * Adapted to javascript from its original in:\r\n     * http:\/\/www.michublog.com\/informatica\/8-funciones-para-la-validacion-de-formularios-con-expresiones-regulares\r\n     * @param cif\r\n     * @returns {Boolean}\r\n     *\/\r\n    function isValidCif(cif) {\r\n      cif.toUpperCase();\r\n      cifRegEx1 = \/^[ABEH][0-9]{8}\/i;\r\n      cifRegEx2 = \/^[KPQS][0-9]{7}[A-J]\/i;\r\n      cifRegEx3 = \/^[CDFGJLMNRUVW][0-9]{7}[0-9A-J]\/i;\r\n\r\n      if (\r\n        cif.match(cifRegEx1) ||\r\n        cif.match(cifRegEx2) ||\r\n        cif.match(cifRegEx3)\r\n      ) {\r\n        control = cif.charAt(cif.length - 1);\r\n        sum_A = 0;\r\n        sum_B = 0;\r\n        for (i = 1; i < 8; i++) {\r\n          if (i % 2 == 0) {\r\n            sum_A += parseInt(cif.charAt(i));\r\n          } else {\r\n            t = (parseInt(cif.charAt(i)) * 2).toString();\r\n            p = 0;\r\n            for (j = 0; j < t.length; j++) {\r\n              p += parseInt(t.charAt(j));\r\n            }\r\n            sum_B += p;\r\n          }\r\n        }\r\n\r\n        sum_C = parseInt(sum_A + sum_B) + \"\"; \/\/ As\u00ed se convierte en cadena\r\n        sum_D = (10 - parseInt(sum_C.charAt(sum_C.length - 1))) % 10;\r\n        letters = \"JABCDEFGHI\";\r\n\r\n        if (control >= \"0\" && control <= \"9\") {\r\n          return control == sum_D;\r\n        } else {\r\n          return control.toUpperCase() == letters[sum_D];\r\n        }\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    \/**\r\n     * Validate an email address\r\n     * Regex validation email from https:\/\/html5-tutorial.net\/form-validation\/validating-email\/\r\n     * @param email\r\n     * @returns {Boolean}\r\n     *\/\r\n    function isValidEmail(email) {\r\n      var re = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\r\n      return re.test(String(email).toLowerCase());\r\n    }\r\n\r\n    function validateEmailField(field) {\r\n      if (field.value && !isValidEmail(field.value)) {\r\n        alert(\"El formato del Correo electr\u00f3nico no es correcto.\");\r\n        field.classList.add(\"field-error\");\r\n      } else {\r\n        field.classList.remove(\"field-error\");\r\n      }\r\n    }\r\n\r\n    \/**\r\n     * Valida el formato del campo de identificaci\u00f3n (NIF\/NIE o CIF) din\u00e1micamente\r\n     * cuando el usuario sale del campo (onchange).\r\n     * @param {HTMLElement} field - El elemento <input> que se est\u00e1 validando.\r\n     *\/\r\n    function validateIdentificationField(field) {\r\n      const value = field.value;\r\n      \/\/ Si el campo est\u00e1 vac\u00edo, solo quitamos el error (la validaci\u00f3n de \"obligatorio\" se har\u00e1 al enviar)\r\n      if (!value) {\r\n        field.classList.remove(\"field-error\");\r\n        return;\r\n      }\r\n\r\n      let isValid = true;\r\n      let errorMsg = \"\";\r\n\r\n      if (personType === \"persona\") {\r\n        const idType = document.getElementById(\r\n          \"Contacts___stic_identification_type_c\"\r\n        ).value;\r\n        \/\/ Solo validamos NIF\/NIE. Pasaporte u \"Otros\" no se validan.\r\n        if (idType === \"nif\" || idType === \"nie\" || idType === \"\") {\r\n          isValid = isValidDNI(value);\r\n          errorMsg =\r\n            \"El formato del N.\u00ba de documento (NIF\/NIE) no es correcto.\";\r\n        }\r\n      } else {\r\n        \/\/ organizacion\r\n        isValid = isValidCif(value);\r\n        errorMsg = \"El formato del N.\u00ba de documento (CIF) no es correcto.\";\r\n      }\r\n\r\n      \/\/ Mostramos el error o limpiamos el campo\r\n      if (!isValid) {\r\n        alert(errorMsg); \/\/ Mantenemos la consistencia con la alerta del email\r\n        field.classList.add(\"field-error\");\r\n      } else {\r\n        field.classList.remove(\"field-error\");\r\n      }\r\n    }\r\n\r\n    \/**\r\n     * Check if it is a correct ID (between 5 and 8 letters followed by the corresponding letter).\r\n     * Accept NIEs (Foreigners with X, Y or Z at the beginning)\r\n     * http:\/\/trellat.es\/funcion-para-validar-dni-o-nie-en-javascript\/\r\n     * @param dni\r\n     * @returns {Boolean}\r\n     *\/\r\n    function isValidDNI(dni) {\r\n      var number, lett, letter;\r\n      var regular_expression_dni = \/^[XYZ]?\\d{5,8}[A-Z]$\/;\r\n      dni = dni.toUpperCase();\r\n\r\n      if (regular_expression_dni.test(dni) === true) {\r\n        number = dni.substr(0, dni.length - 1);\r\n        number = number.replace(\"X\", 0);\r\n        number = number.replace(\"Y\", 1);\r\n        number = number.replace(\"Z\", 2);\r\n        lett = dni.substr(dni.length - 1, 1);\r\n        number = number % 23;\r\n\r\n        letter = \"TRWAGMYFPDXBNJZSQVHLCKET\";\r\n        letter = letter.substring(number, number + 1);\r\n\r\n        return letter == lett;\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    \/\/ ========================================================================\r\n    \/\/ L\u00d3GICA DE VALIDACI\u00d3N Y ENV\u00cdO\r\n    \/\/ ========================================================================\r\n\r\n    \/\/ --- INICIO FUNCI\u00d3N VALIDACI\u00d3N RGPD (Paso 2) A\u00d1ADIDA ---\r\n    \/**\r\n     * Valida solo el checkbox de privacidad para avanzar del paso 2 al 3.\r\n     * La validaci\u00f3n completa se hace en submitForm().\r\n     *\/\r\n    function validatePrivacyPolicyForStep2() {\r\n      let checkboxId;\r\n      if (personType === \"persona\") {\r\n        checkboxId = \"Contacts___privacy_policy\";\r\n      } else {\r\n        checkboxId = \"Accounts___privacy_policy\";\r\n      }\r\n\r\n      const privacyCheckbox = document.getElementById(checkboxId);\r\n      if (!privacyCheckbox.checked) {\r\n        alert(\"Debes aceptar la Pol\u00edtica de Privacidad para continuar.\");\r\n        \/\/ Marca el label con el error\r\n        privacyCheckbox.parentElement\r\n          .querySelector(\"label\")\r\n          .classList.add(\"field-error\");\r\n        return false;\r\n      } else {\r\n        \/\/ Limpia el error si ya estaba marcado\r\n        privacyCheckbox.parentElement\r\n          .querySelector(\"label\")\r\n          .classList.remove(\"field-error\");\r\n        return true;\r\n      }\r\n    }\r\n    \/\/ --- FIN FUNCI\u00d3N VALIDACI\u00d3N RGPD (Paso 2) A\u00d1ADIDA ---\r\n\r\n    \/**\r\n     * Valida los campos obligatorios antes de enviar.\r\n     * Devuelve true si es v\u00e1lido, false si no.\r\n     *\/\r\n    function validateCustomForm() {\r\n      let requiredFields = [];\r\n      let errorMessages = [];\r\n\r\n      \/\/ 1. Limpiar errores previos\r\n      document\r\n        .querySelectorAll(\".field-error\")\r\n        .forEach((el) => el.classList.remove(\"field-error\"));\r\n\r\n      \/\/ 2. Construir lista de campos obligatorios (req_id)\r\n      if (personType === \"persona\") {\r\n        requiredFields = [\r\n          \"Contacts___first_name\",\r\n          \"Contacts___last_name\",\r\n          \"Contacts___email1\",\r\n          \"Contacts___stic_identification_number_c\",\r\n        ];\r\n      } else {\r\n        \/\/ organizacion\r\n        requiredFields = [\r\n          \"Accounts___name\",\r\n          \"Accounts___email1\",\r\n          \"Accounts___stic_identification_number_c\",\r\n        ];\r\n      }\r\n\r\n      \/\/ 3. A\u00f1adir campos comunes de pago\r\n      requiredFields.push(\r\n        \"stic_Payment_Commitments___payment_method_selector\"\r\n      ); \/\/ Usamos el contenedor\r\n      requiredFields.push(\"stic_Payment_Commitments___periodicity_selector\"); \/\/ Usamos el contenedor\r\n\r\n      \/\/ 4. A\u00f1adir IBAN si es domiciliaci\u00f3n\r\n      if (paymentMethod === \"direct_debit\") {\r\n        requiredFields.push(\"stic_Payment_Commitments___bank_account\");\r\n      }\r\n\r\n      \/\/ 5. Validar los campos\r\n      let firstErrorField = null;\r\n\r\n      for (const fieldId of requiredFields) {\r\n        let element;\r\n        let value;\r\n\r\n        \/\/ Casos especiales para los selectores de botones\r\n        if (\r\n          fieldId === \"stic_Payment_Commitments___payment_method_selector\"\r\n        ) {\r\n          value = paymentMethod;\r\n          element = document.querySelector(\r\n            '[onclick^=\"selectPaymentMethod\"]'\r\n          ).parentElement;\r\n        } else if (\r\n          fieldId === \"stic_Payment_Commitments___periodicity_selector\"\r\n        ) {\r\n          value = periodicity; \/\/ 'punctual' o el valor del select\r\n          element = document.getElementById(\"periodicitySelector\"); \/\/ O el grupo de botones de tipo\r\n        } else {\r\n          element = document.getElementById(fieldId);\r\n          if (!element) continue;\r\n          value = element.value;\r\n        }\r\n\r\n        if (!value || value.trim() === \"\") {\r\n          errorMessages.push(\r\n            `El campo \"${element.previousElementSibling?.textContent || fieldId\r\n            }\" es obligatorio.`\r\n          );\r\n          element.classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = element;\r\n        }\r\n      }\r\n\r\n      \/\/ 6. Validaci\u00f3n espec\u00edfica de formato IBAN\r\n      if (paymentMethod === \"direct_debit\") {\r\n        const ibanElement = document.getElementById(\r\n          \"stic_Payment_Commitments___bank_account\"\r\n        );\r\n        const ibanValue = ibanElement.value.replace(\/\\s\/g, \"\"); \/\/ Quitar espacios\r\n        \/\/ Validaci\u00f3n b\u00e1sica: ES + 22 d\u00edgitos. La validaci\u00f3n real la har\u00e1 el servidor.\r\n        const ibanRegex = \/^ES\\d{22}$\/i;\r\n        if (!ibanRegex.test(ibanValue)) {\r\n          errorMessages.push(\r\n            \"El formato de la cuenta bancaria (IBAN) no es correcto. Debe ser ES seguido de 22 d\u00edgitos.\"\r\n          );\r\n          ibanElement.classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = ibanElement;\r\n        }\r\n      }\r\n\r\n      \/\/ 6.5. Validaci\u00f3n espec\u00edfica de formato NIF\/CIF\r\n      \/\/ (El campo 'validate_identification_number' est\u00e1 en '1' en el submit, as\u00ed que ejecutamos esto)\r\n      if (personType === \"persona\") {\r\n        const identificationType = document.getElementById(\r\n          \"Contacts___stic_identification_type_c\"\r\n        ).value;\r\n        const nifElement = document.getElementById(\r\n          \"Contacts___stic_identification_number_c\"\r\n        );\r\n        const nifValue = nifElement.value;\r\n\r\n        \/\/ Validar solo si el campo tiene valor y el tipo es nif\/nie o no est\u00e1 especificado\r\n        if (\r\n          nifValue &&\r\n          (identificationType === \"nif\" ||\r\n            identificationType === \"nie\" ||\r\n            identificationType === \"\")\r\n        ) {\r\n          if (!isValidDNI(nifValue)) {\r\n            errorMessages.push(\r\n              \"El formato del N.\u00ba de documento (NIF\/NIE) no es correcto.\"\r\n            );\r\n            nifElement.classList.add(\"field-error\");\r\n            if (!firstErrorField) firstErrorField = nifElement;\r\n          }\r\n        }\r\n      } else {\r\n        \/\/ organizacion\r\n        const cifElement = document.getElementById(\r\n          \"Accounts___stic_identification_number_c\"\r\n        );\r\n        const cifValue = cifElement.value;\r\n\r\n        \/\/ Validar solo si el campo tiene valor\r\n        if (cifValue) {\r\n          if (!isValidCif(cifValue)) {\r\n            errorMessages.push(\r\n              \"El formato del N.\u00ba de documento (CIF) no es correcto.\"\r\n            );\r\n            cifElement.classList.add(\"field-error\");\r\n            if (!firstErrorField) firstErrorField = cifElement;\r\n          }\r\n        }\r\n      }\r\n\r\n      \/\/ 6.8. Validaci\u00f3n espec\u00edfica de formato Email\r\n      if (personType === \"persona\") {\r\n        const emailElement = document.getElementById(\"Contacts___email1\");\r\n        const emailValue = emailElement.value;\r\n\r\n        \/\/ Validar solo si el campo tiene valor (el campo obligatorio ya se comprueba arriba)\r\n        if (emailValue && !isValidEmail(emailValue)) {\r\n          errorMessages.push(\r\n            \"El formato del Correo electr\u00f3nico no es correcto.\"\r\n          );\r\n          emailElement.classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = emailElement;\r\n        }\r\n      } else {\r\n        \/\/ organizacion\r\n        const emailElement = document.getElementById(\"Accounts___email1\");\r\n        const emailValue = emailElement.value;\r\n\r\n        \/\/ Validar solo si el campo tiene valor\r\n        if (emailValue && !isValidEmail(emailValue)) {\r\n          errorMessages.push(\r\n            \"El formato del Correo electr\u00f3nico no es correcto.\"\r\n          );\r\n          emailElement.classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = emailElement;\r\n        }\r\n      }\r\n      \/\/ --- INICIO VALIDACI\u00d3N RGPD (Submit) A\u00d1ADIDA ---\r\n      \/\/ 7. Validaci\u00f3n espec\u00edfica de Checkboxes RGPD (obligatorio)\r\n      if (personType === \"persona\") {\r\n        const privacyCheckbox = document.getElementById(\r\n          \"Contacts___privacy_policy\"\r\n        );\r\n        if (!privacyCheckbox.checked) {\r\n          errorMessages.push(\r\n            \"Debes aceptar la Pol\u00edtica de Privacidad para continuar.\"\r\n          );\r\n          privacyCheckbox.parentElement\r\n            .querySelector(\"label\")\r\n            .classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = privacyCheckbox;\r\n        } else {\r\n          privacyCheckbox.parentElement\r\n            .querySelector(\"label\")\r\n            .classList.remove(\"field-error\");\r\n        }\r\n      } else {\r\n        \/\/ organizacion\r\n        const privacyCheckbox = document.getElementById(\r\n          \"Accounts___privacy_policy\"\r\n        );\r\n        if (!privacyCheckbox.checked) {\r\n          errorMessages.push(\r\n            \"Debes aceptar la Pol\u00edtica de Privacidad para continuar.\"\r\n          );\r\n          privacyCheckbox.parentElement\r\n            .querySelector(\"label\")\r\n            .classList.add(\"field-error\");\r\n          if (!firstErrorField) firstErrorField = privacyCheckbox;\r\n        } else {\r\n          privacyCheckbox.parentElement\r\n            .querySelector(\"label\")\r\n            .classList.remove(\"field-error\");\r\n        }\r\n      }\r\n      \/\/ --- FIN VALIDACI\u00d3N RGPD (Submit) A\u00d1ADIDA ---\r\n\r\n      \/\/ 7. Mostrar errores si existen\r\n      if (errorMessages.length > 0) {\r\n        alert(\r\n          \"Por favor, corrige los siguientes errores:\\n\\n- \" +\r\n          errorMessages.join(\"\\n- \")\r\n        );\r\n\r\n        \/\/ Navegar al paso del primer error\r\n        let errorStepEl = firstErrorField.closest(\".form-step\");\r\n        if (errorStepEl) {\r\n          let errorStep = errorStepEl.id.split(\"-\")[1];\r\n          if (errorStep && currentStep != errorStep) {\r\n            document\r\n              .querySelector(\".form-step.active\")\r\n              .classList.remove(\"active\");\r\n            document\r\n              .getElementById(`step-${errorStep}`)\r\n              .classList.add(\"active\");\r\n            currentStep = parseInt(errorStep);\r\n            updateProgressIndicator(currentStep); \/\/ Actualiza tambi\u00e9n los c\u00edrculos\r\n          }\r\n        }\r\n        firstErrorField.focus();\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    }\r\n\r\n    \/**\r\n     * Construye y env\u00eda el formulario din\u00e1mico a SinergiaCRM\r\n     *\/\r\n    function submitForm() {\r\n      \/\/ 1. Validar el formulario\r\n      if (!validateCustomForm()) {\r\n        return;\r\n      }\r\n\r\n      \/\/ Bloquear bot\u00f3n para evitar doble env\u00edo\r\n      const submitButton = document.getElementById(\"submitButton\");\r\n      submitButton.disabled = true;\r\n      submitButton.textContent = \"Enviando...\";\r\n\r\n      \/\/ 2. Determinar el caso de uso y obtener configuraci\u00f3n\r\n      const useCase = `${personType}_${donationType === \"cuota\" ? \"cuota\" : \"donativo\"\r\n        }`;\r\n      const config = formConfig[useCase];\r\n\r\n      \/\/ 3. Crear el formulario din\u00e1mico\r\n      const f = document.createElement(\"form\");\r\n      f.method = \"POST\";\r\n      f.action =\r\n        \"https:\/\/integrapirineus.sinergiacrm.org\/index.php?entryPoint=stic_Web_Forms_save\";\r\n\r\n      \/\/ --- INICIO FUNCI\u00d3N FECHA RGPD A\u00d1ADIDA ---\r\n      \/**\r\n       * Devuelve la fecha y hora actual en formato YYYY-MM-DD HH:MM:SS\r\n       * (formato esperado por los campos datetime de SinergiaCRM\/MySQL)\r\n       *\/\r\n      const getSinergiaDateTime = () => {\r\n        const now = new Date();\r\n        const reviewedDate =\r\n          now.getFullYear() +\r\n          \"-\" +\r\n          (\"0\" + (now.getMonth() + 1)).slice(-2) +\r\n          \"-\" +\r\n          (\"0\" + now.getDate()).slice(-2); \/\/ <-- L\u00ednia modificada. S'ha tret la part de l'hora.\r\n        return reviewedDate;\r\n      };\r\n      \/\/ --- FIN FUNCI\u00d3N FECHA RGPD A\u00d1ADIDA ---\r\n\r\n      const add = (name, value) => {\r\n        const input = document.createElement(\"input\");\r\n        input.type = \"hidden\";\r\n        input.name = name;\r\n        input.value = value;\r\n        f.appendChild(input);\r\n      };\r\n\r\n      \/\/ 4. Construir la lista de campos obligatorios (req_id) para SinergiaCRM\r\n      let reqIdValue =\r\n        \"stic_Payment_Commitments___amount;stic_Payment_Commitments___payment_method;stic_Payment_Commitments___periodicity;\";\r\n      if (personType === \"persona\") {\r\n        reqIdValue +=\r\n          \"Contacts___first_name;Contacts___last_name;Contacts___email1;Contacts___stic_identification_number_c;\";\r\n      } else {\r\n        reqIdValue +=\r\n          \"Accounts___name;Accounts___email1;Accounts___stic_identification_number_c;\";\r\n      }\r\n      if (paymentMethod === \"direct_debit\") {\r\n        reqIdValue += \"stic_Payment_Commitments___bank_account;\";\r\n      }\r\n\r\n      \/\/ 5. A\u00f1adir campos ocultos de configuraci\u00f3n\r\n      add(\"campaign_id\", config.campaign_id);\r\n      add(\"redirect_url\", config.redirect_url); \/\/ URL de \u00e9xito (din\u00e1mica)\r\n      add(\"redirect_ko_url\", config.redirect_ko_url); \/\/ URL de error (din\u00e1mica)\r\n      add(\"validate_identification_number\", \"1\");\r\n      const allowRecurrence = donationType === \"cuota\" ? \"1\" : \"0\";\r\n      add(\"allow_card_recurring_payments\", allowRecurrence);\r\n      add(\"allow_paypal_recurring_payments\", allowRecurrence);\r\n      add(\"allow_stripe_recurring_payments\", allowRecurrence);\r\n      add(\"assigned_user_id\", \"dd122a16-eaf0-0227-22e6-65b21c9c189f\");\r\n      add(\"web_module\", personType === \"persona\" ? \"Contacts\" : \"Accounts\");\r\n      add(\"language\", \"es_ES\");\r\n      add(\"webFormClass\", \"Donation\");\r\n      add(\"req_id\", reqIdValue); \/\/ A\u00f1adido el req_id din\u00e1mico\r\n\r\n      \/\/ 6. A\u00f1adir defParams\r\n      const defParams = {\r\n        version: \"2\",\r\n        email_template_id: config.email_template_id,\r\n        relation_type: config.relation_type,\r\n        include_recaptcha: 0,\r\n        recaptcha_configKeys: [],\r\n        recaptcha_selected: \"\",\r\n      };\r\n      add(\"defParams\", encodeURIComponent(JSON.stringify(defParams)));\r\n\r\n      \/\/ 7. A\u00f1adir los datos del usuario\r\n      if (personType === \"persona\") {\r\n        add(\r\n          \"Contacts___first_name\",\r\n          document.getElementById(\"Contacts___first_name\").value\r\n        );\r\n        add(\r\n          \"Contacts___last_name\",\r\n          document.getElementById(\"Contacts___last_name\").value\r\n        );\r\n        add(\r\n          \"Contacts___email1\",\r\n          document.getElementById(\"Contacts___email1\").value\r\n        );\r\n        add(\r\n          \"Contacts___stic_identification_type_c\",\r\n          document.getElementById(\"Contacts___stic_identification_type_c\")\r\n            .value\r\n        );\r\n        add(\r\n          \"Contacts___stic_identification_number_c\",\r\n          document.getElementById(\"Contacts___stic_identification_number_c\")\r\n            .value\r\n        );\r\n        add(\r\n          \"Contacts___primary_address_state\",\r\n          document.getElementById(\"Contacts___primary_address_state\").value\r\n        );\r\n        \/\/ --- INICIO ENV\u00cdO RGPD PERSONA A\u00d1ADIDO ---\r\n        \/\/ (Solo se env\u00edan si el checkbox de privacidad est\u00e1 marcado, lo cual es obligatorio)\r\n        if (document.getElementById(\"Contacts___privacy_policy\").checked) {\r\n          add(\"Contacts___lawful_basis\", \"consent\");\r\n          add(\"Contacts___date_reviewed\", getSinergiaDateTime());\r\n          add(\"Contacts___lawful_basis_source\", \"website\");\r\n        }\r\n        \/\/ Campo opcional de marketing (la entidad debe crear este campo en SinergiaCRM)\r\n        if (document.getElementById(\"Contacts___gdpr_marketing\").checked) {\r\n          \/\/ IMPORTANTE: 'Contacts___stic_gdpr_marketing_c' es un nombre de ejemplo.\r\n          \/\/ La entidad debe crear este campo (p.ej. un checkbox) y poner aqu\u00ed su nombre t\u00e9cnico.\r\n          add(\"Contacts___fip_gdpr_marketing_c\", \"1\");\r\n        }\r\n        \/\/ --- FIN ENV\u00cdO RGPD PERSONA A\u00d1ADIDO ---\r\n      } else {\r\n        add(\r\n          \"Accounts___name\",\r\n          document.getElementById(\"Accounts___name\").value\r\n        );\r\n        add(\r\n          \"Accounts___email1\",\r\n          document.getElementById(\"Accounts___email1\").value\r\n        );\r\n        add(\r\n          \"Accounts___stic_identification_number_c\",\r\n          document.getElementById(\"Accounts___stic_identification_number_c\")\r\n            .value\r\n        );\r\n        add(\r\n          \"Accounts___billing_address_state\",\r\n          document.getElementById(\"Accounts___billing_address_state\").value\r\n        );\r\n        \/\/ --- INICIO ENV\u00cdO RGPD ORGANIZACI\u00d3N A\u00d1ADIDO ---\r\n        \/\/ (Solo se env\u00edan si el checkbox de privacidad est\u00e1 marcado, lo cual es obligatorio)\r\n        if (document.getElementById(\"Accounts___privacy_policy\").checked) {\r\n          \/\/ IMPORTANTE: La entidad debe crear estos campos en el m\u00f3dulo Accounts de SinergiaCRM\r\n          add(\"Accounts___lawful_basis_c\", \"consent\");\r\n          add(\"Accounts___date_reviewed_c\", getSinergiaDateTime());\r\n          add(\"Accounts___lawful_basis_source_c\", \"website\");\r\n        }\r\n        \/\/ Campo opcional de marketing (la entidad debe crear este campo en SinergiaCRM)\r\n        if (document.getElementById(\"Accounts___gdpr_marketing\").checked) {\r\n          \/\/ IMPORTANTE: 'Accounts___stic_gdpr_marketing_c' es un nombre de ejemplo.\r\n          add(\"Accounts___fip_gdpr_marketing_c\", \"1\");\r\n        }\r\n        \/\/ --- FIN ENV\u00cdO RGPD ORGANIZACI\u00d3N A\u00d1ADIDO ---\r\n      }\r\n\r\n      \/\/ 8. A\u00f1adir los datos del pago\r\n      add(\r\n        \"stic_Payment_Commitments___payment_type\",\r\n        donationType === \"cuota\" ? \"fee\" : \"donation\"\r\n      );\r\n      add(\"stic_Payment_Commitments___amount\", selectedAmount);\r\n      add(\"stic_Payment_Commitments___payment_method\", paymentMethod);\r\n      add(\r\n        \"stic_Payment_Commitments___periodicity\",\r\n        donationType === \"cuota\" ? periodicity : \"punctual\"\r\n      );\r\n      if (paymentMethod === \"direct_debit\") {\r\n        add(\r\n          \"stic_Payment_Commitments___bank_account\",\r\n          document.getElementById(\"stic_Payment_Commitments___bank_account\")\r\n            .value\r\n        );\r\n      }\r\n\r\n      \/\/ 9. Enviar el formulario\r\n      document.body.appendChild(f);\r\n      f.submit();\r\n    }\r\n\r\n    \/\/ ========================================================================\r\n    \/\/ L\u00d3GICA DEL MODAL Y C\u00c1LCULO DE DESGRAVACI\u00d3N\r\n    \/\/ ========================================================================\r\n\r\n    function openDeductionModal() {\r\n      document.getElementById(\"deductionModal\").style.display = \"flex\";\r\n    }\r\n    function closeDeductionModal() {\r\n      document.getElementById(\"deductionModal\").style.display = \"none\";\r\n    }\r\n\r\n    function updateDeductionMessage() {\r\n      const periodicityMap = {\r\n        monthly: 12,\r\n        quarterly: 4,\r\n        annual: 1,\r\n        punctual: 1,\r\n      };\r\n\r\n      const currentPeriodicity =\r\n        donationType === \"cuota\" ? periodicity : \"punctual\";\r\n      const freq = periodicityMap[currentPeriodicity] || 1;\r\n      const annualAmount = selectedAmount * freq;\r\n      const isPersona = personType === \"persona\";\r\n      let deduction = 0;\r\n\r\n      if (isPersona) {\r\n        if (annualAmount <= 250) {\r\n          deduction = annualAmount * 0.8;\r\n        } else {\r\n          deduction = 250 * 0.8 + (annualAmount - 250) * 0.4;\r\n        }\r\n      } else {\r\n        \/\/ Empresa\r\n        deduction = annualAmount * 0.4;\r\n      }\r\n\r\n      const target = document.getElementById(\"deductionText\");\r\n      if (target) {\r\n        target.textContent = `Desgrava hasta ${deduction.toFixed(\r\n          2\r\n        )} \u20ac al a\u00f1o`;\r\n      }\r\n    }\r\n\r\n    \/\/ Inicializaci\u00f3n al cargar la p\u00e1gina\r\n    document.addEventListener(\"DOMContentLoaded\", function () {\r\n      selectAmount(document.querySelector(\"#amount-buttons button:nth-child(2)\"), 10);\r\n      selectDonationType(document.querySelector('[data-type=\"cuota\"]'));\r\n      selectPersonType(document.querySelector('[data-person=\"persona\"]'));\r\n      updateDeductionMessage();\r\n    });\r\n  <\/script>\r\n<\/body>\r\n\r\n<\/html>INTEGRA PIRINEUS LANZA FORFAIT FOR FAITH\u00a0 Una iniciativa para recaudar fondo para seguir gestionando los bosques del Pirineo ofreciendo oportunidades laborales a personas en riesgo de exclusi\u00f3n. Un forfait simb\u00f3lico que se podr\u00e1 adquirir [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-7673","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.integrapirineus.com\/es\/wp-json\/wp\/v2\/pages\/7673","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.integrapirineus.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.integrapirineus.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.integrapirineus.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.integrapirineus.com\/es\/wp-json\/wp\/v2\/comments?post=7673"}],"version-history":[{"count":7,"href":"https:\/\/www.integrapirineus.com\/es\/wp-json\/wp\/v2\/pages\/7673\/revisions"}],"predecessor-version":[{"id":7761,"href":"https:\/\/www.integrapirineus.com\/es\/wp-json\/wp\/v2\/pages\/7673\/revisions\/7761"}],"wp:attachment":[{"href":"https:\/\/www.integrapirineus.com\/es\/wp-json\/wp\/v2\/media?parent=7673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}