{"id":557,"date":"2025-11-06T17:35:56","date_gmt":"2025-11-06T17:35:56","guid":{"rendered":"https:\/\/amir.tag25.com\/?page_id=557"},"modified":"2026-02-11T20:30:25","modified_gmt":"2026-02-11T20:30:25","slug":"historias-de-exito","status":"publish","type":"page","link":"https:\/\/qa-server.amircolombia.com\/mexico\/historias-de-exito\/","title":{"rendered":"Historias de \u00e9xito"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"557\" class=\"elementor elementor-557\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3ab8080 e-con-full content-body e-flex e-con e-parent\" data-id=\"3ab8080\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-ba14ca0 e-con-full content-body2 e-flex e-con e-child\" data-id=\"ba14ca0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-42f0d48 e-con-full e-flex e-con e-child\" data-id=\"42f0d48\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-40fa737 font-36 elementor-widget elementor-widget-heading\" data-id=\"40fa737\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Historias de \u00c9xito<\/h1>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f44693d e-con-full e-flex e-con e-child\" data-id=\"f44693d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-75a58e5 font-26 elementor-widget elementor-widget-heading\" data-id=\"75a58e5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Cuando la decisi\u00f3n correcta transforma una carrera<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc6b827 elementor-widget elementor-widget-text-editor\" data-id=\"bc6b827\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<div class=\"bloque-historias-amir\"><p>En <strong>AMIR<\/strong> hemos acompa\u00f1ado a <strong>miles de profesionales de la salud<\/strong> en procesos que cambian vidas. Cada historia que comienza con una duda, un sue\u00f1o o una meta profesional termina convirti\u00e9ndose en un logro real: <strong>una plaza, una maestr\u00eda, una pr\u00e1ctica renovada, una consulta propia, una nueva etapa.<\/strong><\/p><p>Estas historias son m\u00e1s que testimonios. <strong>Son evidencia de lo que es posible cuando el conocimiento, la estrategia y el acompa\u00f1amiento adecuado se encuentran. <\/strong>Son m\u00e9dicos que tomaron la decisi\u00f3n de prepararse con rigor\u2026 y hoy est\u00e1n donde siempre quisieron estar.<\/p><p class=\"texto-lima\">Revisa sus experiencias. Insp\u00edrate con sus resultados. Empieza tu propia historia.<\/p><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2e49835 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"2e49835\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-40acb27 e-con-full e-flex e-con e-child\" data-id=\"40acb27\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a8d764 font-26 elementor-widget elementor-widget-heading\" data-id=\"3a8d764\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">CURSO MIR 2027<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6aec3a2 elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-button\" data-id=\"6aec3a2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/qa-server.amircolombia.com\/mexico\/examen-mir\/curso-mir\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">conoce m\u00c1S<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-daed0af elementor-widget elementor-widget-text-editor\" data-id=\"daed0af\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Nuestros estudiantes lograron su plaza gracias a una preparaci\u00f3n estrat\u00e9gica, pr\u00e1ctica y acompa\u00f1ada. Sus testimonios muestran que s\u00ed es posible.<\/p><p><span style=\"color: #b8be14;\">Dale play y conoce sus historias.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d346078 e-con-full e-flex e-con e-child\" data-id=\"d346078\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9332a1f tu-clase elementor-widget elementor-widget-heading\" data-id=\"9332a1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">M\u00e9dicos mexicanos que hoy ya viven su residencia en Espa\u00f1a\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-18419f5 e-con-full e-flex e-con e-child\" data-id=\"18419f5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-5f22bf1 e-con-full video-carrusel e-flex e-con e-child\" data-id=\"5f22bf1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a87223 video-unico elementor-widget elementor-widget-video\" data-id=\"8a87223\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;image_overlay&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/www.amircolombia.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/Captura-de-pantalla-2025-11-28-122555.png&quot;,&quot;id&quot;:10687,&quot;size&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;source&quot;:&quot;library&quot;},&quot;video_type&quot;:&quot;hosted&quot;,&quot;show_image_overlay&quot;:&quot;yes&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/www.amircolombia.com\/wp-content\/uploads\/2025\/11\/Testimonial-MIR-Andres_V1_ALTA-1.mp4\" controls=\"\" preload=\"metadata\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t\t\t<div class=\"elementor-custom-embed-image-overlay\" style=\"background-image: url(https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/Captura-de-pantalla-2025-11-28-122555.png);\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-custom-embed-play\" role=\"button\" aria-label=\"Reproducir v\u00eddeo\" tabindex=\"0\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-play-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z\"><\/path><\/svg>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dec2b81 video-unico elementor-widget elementor-widget-video\" data-id=\"dec2b81\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;image_overlay&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/www.amircolombia.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/Captura-de-pantalla-2025-11-28-122614.png&quot;,&quot;id&quot;:10688,&quot;size&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;source&quot;:&quot;library&quot;},&quot;video_type&quot;:&quot;hosted&quot;,&quot;show_image_overlay&quot;:&quot;yes&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/www.amircolombia.com\/wp-content\/uploads\/2025\/11\/Testimonial-MIR-Fiorella_V1_ALTA-1.mp4\" controls=\"\" preload=\"metadata\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t\t\t<div class=\"elementor-custom-embed-image-overlay\" style=\"background-image: url(https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/Captura-de-pantalla-2025-11-28-122614.png);\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-custom-embed-play\" role=\"button\" aria-label=\"Reproducir v\u00eddeo\" tabindex=\"0\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-play-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z\"><\/path><\/svg>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34a2e9c video-unico elementor-widget elementor-widget-video\" data-id=\"34a2e9c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;image_overlay&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/www.amircolombia.com\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/Captura-de-pantalla-2025-11-28-122629.png&quot;,&quot;id&quot;:10686,&quot;size&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;source&quot;:&quot;library&quot;},&quot;video_type&quot;:&quot;hosted&quot;,&quot;show_image_overlay&quot;:&quot;yes&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/www.amircolombia.com\/wp-content\/uploads\/2025\/11\/Testimonial-MIR-Ana-Orduy_V1_ALTA-1.mp4\" controls=\"\" preload=\"metadata\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t\t\t<div class=\"elementor-custom-embed-image-overlay\" style=\"background-image: url(https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/Captura-de-pantalla-2025-11-28-122629.png);\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-custom-embed-play\" role=\"button\" aria-label=\"Reproducir v\u00eddeo\" tabindex=\"0\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-far-play-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z\"><\/path><\/svg>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80bb40e elementor-hidden-tablet elementor-hidden-mobile elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"80bb40e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e6f0e07 e-flex e-con-boxed e-con e-child\" data-id=\"e6f0e07\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-9692d42 e-con-full video-carruse e-flex e-con e-child\" data-id=\"9692d42\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e0a85f6 font-26 elementor-widget elementor-widget-text-editor\" data-id=\"e0a85f6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>M\u00e1ster Est\u00e9tica , Nutrici\u00f3n y\u00a0<br \/>Antienvejecimiento<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c1d389 elementor-widget elementor-widget-text-editor\" data-id=\"8c1d389\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Este m\u00e1ster abri\u00f3 nuevas oportunidades: consultas propias, t\u00e9cnicas avanzadas y una pr\u00e1ctica m\u00e1s rentable y segura. Sus resultados hablan por s\u00ed solos.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc64e9d elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-button\" data-id=\"bc64e9d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/qa-server.amircolombia.com\/mexico\/masters-posgrados\/medicina-estetica\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">conoce m\u00c1S<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-aee7821 e-con-full e-flex e-con e-child\" data-id=\"aee7821\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b060dbe elementor-widget elementor-widget-heading\" data-id=\"b060dbe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Profesionales que transformaron su pr\u00e1ctica y sus ingresos<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cda140a card-video-historia elementor-widget elementor-widget-video\" data-id=\"cda140a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;image_overlay&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/www.amircolombia.com\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/Captura-de-pantalla-2025-12-05-a-las-2.06.36-p.m.png&quot;,&quot;id&quot;:12362,&quot;size&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;source&quot;:&quot;library&quot;},&quot;video_type&quot;:&quot;hosted&quot;,&quot;show_image_overlay&quot;:&quot;yes&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/www.amircolombia.com\/wp-content\/uploads\/2025\/11\/Testimoniales-Colombia_V1_ALTA.mp4\" controls=\"\" preload=\"metadata\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t\t\t<div class=\"elementor-custom-embed-image-overlay\" style=\"background-image: url(https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/12\/Captura-de-pantalla-2025-12-05-a-las-2.06.36-p.m.png);\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c702072 e-con-full e-flex e-con e-child\" data-id=\"c702072\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b77181e font-26 elementor-widget elementor-widget-text-editor\" data-id=\"b77181e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>M\u00e1ster Tricolog\u00eda y Microinjerto<br \/>Capilar<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fcffadf elementor-widget elementor-widget-text-editor\" data-id=\"fcffadf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Este m\u00e1ster ha permitido a m\u00e9dicos est\u00e9ticos, dermat\u00f3logos y cirujanos ampliar su pr\u00e1ctica y entrar a un sector en pleno crecimiento. Sus resultados hablan por s\u00ed solos<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d7925ef elementor-hidden-tablet elementor-hidden-mobile elementor-align-left elementor-widget elementor-widget-button\" data-id=\"d7925ef\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/qa-server.amircolombia.com\/mexico\/masters-posgrados\/tricologia-microinjerto-capilar\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">conoce m\u00c1S<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5515b16 e-con-full e-flex e-con e-child\" data-id=\"5515b16\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e6c003c elementor-widget elementor-widget-heading\" data-id=\"e6c003c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Profesionales que encontraron en la tricolog\u00eda un camino real de crecimiento<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ed729b1 card-video-historia e-transform elementor-widget elementor-widget-video\" data-id=\"ed729b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;video_type&quot;:&quot;hosted&quot;,&quot;_transform_flipY_effect&quot;:&quot;transform&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t\t\t\t<div class=\"e-hosted-video elementor-wrapper elementor-open-inline\">\n\t\t\t\t\t<video class=\"elementor-video\" src=\"https:\/\/www.amircolombia.com\/wp-content\/uploads\/2025\/11\/Testimonial-Estetica-Francisco-Torres_V1_ALTA.mp4\" controls=\"\" preload=\"metadata\" controlsList=\"nodownload\"><\/video>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8fea29e e-con-full seccion-form e-flex e-con e-child\" data-id=\"8fea29e\" data-element_type=\"container\" data-e-type=\"container\" id=\"bloque-formulario\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-fe622ae e-con-full e-grid e-con e-child\" data-id=\"fe622ae\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-aa8e33b elementor-widget elementor-widget-image\" data-id=\"aa8e33b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"528\" height=\"404\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/freepik_a_25yearold_white_latin_woman_with_a_headset_on_we_75338_1.webp\" class=\"attachment-full size-full wp-image-1967\" alt=\"\" srcset=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/freepik_a_25yearold_white_latin_woman_with_a_headset_on_we_75338_1.webp 528w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/freepik_a_25yearold_white_latin_woman_with_a_headset_on_we_75338_1-300x230.webp 300w\" sizes=\"(max-width: 528px) 100vw, 528px\" title=\"\">\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fdfd2f5 e-con-full e-flex e-con e-child\" data-id=\"fdfd2f5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-45475e2 font-24 elementor-widget elementor-widget-heading\" data-id=\"45475e2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Nuestros asesores expertos <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-084ffd6 font-18 elementor-widget elementor-widget-heading\" data-id=\"084ffd6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"> te guiar\u00e1n en cada paso...<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98b382d elementor-widget elementor-widget-shortcode\" data-id=\"98b382d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><style type=\"text\/css\">\n\/* Healthcademia Default Form CSS *\/\n\/* ===================================\n   VARIABLES CSS PERSONALIZABLES\n   =================================== *\/\n:root {\n    \/* Espaciados *\/\n    --hc-container-padding: 30px;\n    --hc-field-margin: 18px;\n    --hc-name-row-gap: 16px;\n    --hc-header-gap: 12px;\n    --hc-checkbox-gap: 8px;\n    --hc-phone-prefix-gap: 16px;\n    \n    \/* Bordes y radios *\/\n    --hc-container-radius: 16px;\n    --hc-input-radius: 8px;\n    --hc-input-border-width: 1px;\n    \n    \/* Colores *\/\n    --hc-bg-color: #fff;\n    --hc-border-color: #d6d6d6;\n    --hc-container-border-color: #e0e0e0;\n    --hc-primary-color: #1976d2;\n    --hc-error-color: #d32f2f;\n    --hc-error-color-bg: #fff5f7;\n    --hc-text-color: #333;\n    --hc-label-color: #999;\n    \n    \/* Tipograf\u00eda *\/\n    --hc-font-family: \"Inter\", Arial, sans-serif;\n    --hc-input-font-size: 15px;\n    --hc-label-font-size: 15px;\n    --hc-label-font-size-small: 12px;\n    --hc-checkbox-font-size: 14px;\n    \n    \/* Transiciones *\/\n    --hc-transition-duration: 0.2s;\n    --hc-transition-timing: ease;\n    \n    \/* Tama\u00f1os espec\u00edficos *\/\n    --hc-input-padding: 5px 10px 7px 10px;\n    --hc-textarea-min-height: 110px;\n    --hc-focus-shadow-size: 2px;\n    --hc-button-padding: 14px 24px;\n    --hc-phone-prefix-width: 120px;\n}\n\n\/* ===================================\n   ESTILOS DEL FORMULARIO\n   =================================== *\/\n\n\/* Healthcademia Default Form Styles *\/\n.hc-form-container {\n    background: var(--hc-bg-color);\n    border-radius: var(--hc-container-radius);\n    padding: var(--hc-container-padding);\n    border: var(--hc-input-border-width) solid var(--hc-container-border-color);\n    position: relative;\n    font-family: var(--hc-font-family);\n}\n\n.hc-form-header {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: var(--hc-header-gap);\n    margin-bottom: var(--hc-header-gap);\n}\n\n.hc-form {\n    display: flex;\n    flex-direction: column;\n}\n\n\/* Nombre y apellidos en horizontal *\/\n.hc-name-row {\n    display: flex;\n    gap: var(--hc-name-row-gap);\n    margin-bottom: var(--hc-field-margin);\n}\n\n.hc-name-row .hc-field {\n    flex: 1;\n    margin-bottom: 0;\n}\n\n\/* Responsive: en m\u00f3viles volver a vertical *\/\n@media (max-width: 640px) {\n    .hc-name-row {\n        flex-direction: column;\n        gap: 0;\n    }\n    \n    .hc-name-row .hc-field {\n        margin-bottom: var(--hc-field-margin);\n    }\n    .hc-name-row .hc-field:last-child {\n        margin-bottom: 0;\n    }\n}\n\n.hc-form-header h2,\n.hc-form-title {\n    margin: 0;\n}\n\n.hc-field {\n    margin-bottom: var(--hc-field-margin);\n    position: relative;\n    display: flex;\n    flex-direction: column;\n}\n\n.hc-input,\n.hc-textarea,\n.hc-select {\n    width: 100%;\n    border: var(--hc-input-border-width) solid var(--hc-border-color);\n    border-radius: var(--hc-input-radius);\n    padding: var(--hc-input-padding);\n    font-size: var(--hc-input-font-size);\n    transition: border-color var(--hc-transition-duration) var(--hc-transition-timing), \n                box-shadow var(--hc-transition-duration) var(--hc-transition-timing);\n    background: var(--hc-bg-color);\n    font-family: var(--hc-font-family);\n}\n\n.hc-input:focus,\n.hc-textarea:focus,\n.hc-select:focus {\n    border-color: var(--hc-primary-color);\n    box-shadow: 0 0 0 var(--hc-focus-shadow-size) rgba(25, 118, 210, 0.2);\n    outline: none;\n}\n\n.hc-input.hc-error,\n.hc-textarea.hc-error,\n.hc-select.hc-error {\n    border-color: var(--hc-error-color);\n    background-color: var(--hc-error-color-bg);\n}\n\n.hc-textarea {\n    min-height: var(--hc-textarea-min-height);\n    resize: vertical;\n}\n\n.hc-checkbox-group label {\n    display: flex;\n    align-items: center;\n    gap: var(--hc-checkbox-gap);\n    font-size: var(--hc-checkbox-font-size);\n}\n\n\/* Estilos para checkbox con error *\/\n.hc-checkbox-group label.hc-error {\n    color: var(--hc-error-color);\n}\n\n.hc-checkbox-group input[type=\"checkbox\"].hc-error {\n    accent-color: var(--hc-error-color);\n}\n\n.hc-checkbox-group input[type=\"checkbox\"].hc-error + span {\n    color: var(--hc-error-color);\n}\n\n.hc-submit {\n    width: 100%;\n    background: var(--hc-primary-color);\n    color: #fff;\n    border: none;\n    padding: var(--hc-button-padding);\n    border-radius: var(--hc-input-radius);\n    font-size: 16px;\n    font-weight: 600;\n    margin-top: var(--hc-name-row-gap);\n    cursor: pointer;\n    transition: background var(--hc-transition-duration) var(--hc-transition-timing);\n}\n\n.hc-submit:hover {\n    background: #135ba8;\n}\n\n.hc-form-spinner {\n    position: absolute;\n    inset: 0;\n    background: rgba(255, 255, 255, 0.85);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    opacity: 0;\n    pointer-events: none;\n    transition: opacity var(--hc-transition-duration) var(--hc-transition-timing);\n    border-radius: var(--hc-container-radius);\n}\n\n.hc-form-container.is-loading .hc-form-spinner {\n    opacity: 1;\n    pointer-events: all;\n}\n\n.hc-form-container.is-loading .hc-form {\n    opacity: 0.5;\n}\n\n.hc-spinner {\n    width: 48px;\n    height: 48px;\n    border: 4px solid rgba(25, 118, 210, 0.2);\n    border-top-color: #1976d2;\n    border-radius: 50%;\n    animation: hc-spin 0.8s linear infinite;\n}\n\n@keyframes hc-spin {\n    to {\n        transform: rotate(360deg);\n    }\n}\n\n.hc-field.floating .hc-floating-inner {\n    position: relative;\n    width: 100%;\n    display: flex;\n}\n\n.hc-field.floating .hc-floating-inner label {\n    position: absolute;\n    top: 50%;\n    left: 12px;\n    transform: translateY(-50%);\n    color: var(--hc-label-color);\n    pointer-events: none;\n    transition: var(--hc-transition-duration) var(--hc-transition-timing);\n    background: var(--hc-bg-color);\n    padding: 0 4px;\n    font-size: 14px;\n    font-weight: 400;\n}\n\n.hc-field.floating .hc-floating-inner .hc-input,\n.hc-field.floating .hc-floating-inner .hc-textarea {\n    padding: 10px 10px 6px;\n    width: 100%\n}\n\n.grecaptcha-badge{\n    display: none !important;\n}\n\n.hc-field.floating .hc-floating-inner .hc-input:focus+label,\n.hc-field.floating .hc-floating-inner .hc-textarea:focus+label,\n.hc-field.floating .hc-floating-inner .hc-input:not(:placeholder-shown)+label,\n.hc-field.floating .hc-floating-inner .hc-textarea:not(:placeholder-shown)+label {\n    top: 0px;\n    font-size: var(--hc-label-font-size-small);\n    color: var(--hc-text-color);\n    font-weight: 600;\n}\n\n\/* Label con fondo rojo cuando el input tiene error *\/\n.hc-field.floating .hc-floating-inner .hc-input.hc-error+label,\n.hc-field.floating .hc-floating-inner .hc-textarea.hc-error+label {\n    background-color: var(--hc-error-color-bg);\n    color: var(--hc-error-color);\n}\n\n.co-feedback-container{\n    display: none !important;\n}\n\n.hc-phone-field .hc-phone-wrapper {\n    display: flex;\n    gap: var(--hc-name-row-gap);\n    flex-direction: row;\n}\n\n.hc-phone-field.floating .hc-floating-inner label {\n    top: 0px !important;\n    z-index: 11 !important;\n}\n\n\/* Label del campo de tel\u00e9fono con fondo rojo cuando hay error *\/\n.hc-phone-field.floating .hc-floating-inner .hc-phone-input-wrapper input.hc-error+label {\n    background-color: var(--hc-error-color-bg) !important;\n    color: var(--hc-error-color) !important;\n}\n.hc-phone-wrapper .hc-select-block,\n.hc-phone-wrapper .hc-field {\n    flex: 1;\n    min-width: 160px;\n}\n\n.hc-select-block label {\n    display: block;\n    font-size: 12px;\n    font-weight: 600;\n    text-transform: uppercase;\n    letter-spacing: 0.04em;\n    color: #666;\n    margin-bottom: 6px;\n}\n\n.hc-form-default {\n    border: 1px dashed #bbb;\n    padding: 16px;\n    margin-bottom: 20px;\n    background: #fafafa;\n    font-style: italic;\n    color: #555;\n    text-align: center;\n}\n\n\/* Grid 2x2 para los selects de programa *\/\n.hc-selects-grid {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 16px;\n}\n\n\/* Si el grid est\u00e1 vac\u00edo (sin selects), quitar el margin *\/\n.hc-selects-grid:empty {\n    margin-bottom: 0;\n    display: none;\n}\n\n\/* Skeleton Loading Styles - Barra horizontal \u00fanica *\/\n.hc-skeleton-field {\n    position: relative;\n    overflow: hidden;\n    margin-bottom: 18px;\n}\n\n.hc-skeleton {\n    width: 100%;\n    height: 35px;\n    background: #f0f0f0;\n    border-radius: 8px;\n    position: relative;\n    overflow: hidden;\n}\n\n.hc-skeleton-line {\n    width: 100%;\n    height: 100%;\n    background: linear-gradient(\n        90deg,\n        #f0f0f0 0%,\n        #e0e0e0 50%,\n        #f0f0f0 100%\n    );\n    background-size: 200% 100%;\n    animation: skeleton-loading 1.5s ease-in-out infinite;\n}\n\n@keyframes skeleton-loading {\n    0% {\n        background-position: 200% 0;\n    }\n    100% {\n        background-position: -200% 0;\n    }\n}\n\n\/* Si el grid tiene un \u00faltimo hijo, a\u00f1adir margin-bottom *\/\n.hc-selects-grid:has(:last-child) {\n    margin-bottom: 16px;\n}\n\n\/* Resetear margin-bottom de los campos dentro del grid *\/\n.hc-selects-grid .hc-field {\n    margin-bottom: 0;\n}\n\n\/* Si hay 1 select: 100% *\/\n.hc-selects-grid .hc-field:only-child {\n    grid-column: 1 \/ -1;\n}\n\n\/* Si hay 3 selects: el tercero ocupa 100% *\/\n.hc-selects-grid .hc-field:nth-child(3):nth-last-child(1) {\n    grid-column: 1 \/ -1;\n}\n\n.hc-form-status {\n    font-size: 14px;\n}\n\n.hc-form-status.success {\n    color: #2e7d32;\n}\n\n.hc-form-status.error {\n    color: #c62828;\n    text-align: center;\n    padding-top: 15px;\n}\n\n\/* Mensaje de \u00e9xito fuera del formulario (solo cuando no hay redirect) *\/\n.hc-form-success-message {\n    min-height: 20px;\n    font-size: 18px;\n    text-align: center;\n    padding: 15px;\n    margin-top: 20px;\n    margin-bottom: 20px;\n    border-radius: var(--hc-input-radius);\n    background-color: #f1f8f4;\n    color: #2e7d32;\n    font-weight: 500;\n}\n\n.hc-form-success-message.success {\n    color: #2e7d32;\n}\n\n\/* Cuando el formulario tiene \u00e9xito, ocultar el formulario y centrar el mensaje *\/\n.hc-form-container.hc-form-success {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    min-height: 300px;\n    padding: 40px 30px;\n}\n\n.hc-form-container.hc-form-success .hc-form-header {\n    display: none !important;\n}\n\n.hc-form-container.hc-form-success .hc-form {\n    display: none !important;\n}\n\n.hc-form-container.hc-form-success .hc-form-spinner {\n    display: none !important;\n}\n\n.hc-form-container.hc-form-success .hc-form-status {\n    display: block !important;\n    width: 90%;\n    max-width: 600px;\n    text-align: center;\n    font-size: 20px;\n    font-weight: 500;\n    line-height: 1.6;\n    padding: 30px;\n    margin: 0;\n    color: #2e7d32;\n    background-color: #f1f8f4;\n    border: 0px;\n}\n\n.hc-form-container.hc-form-success .hc-form-status.success {\n    color: #2e7d32;\n}\n\n\/* ===== Sistema adaptativo de tel\u00e9fono ===== *\/\n\n\/* Por defecto: selector de prefijos OCULTO (para Form Guard \/ None) *\/\n.hc-phone-field-simple .hc-phone-prefix {\n    display: none !important;\n}\n\n.hc-phone-field-simple .hc-floating-inner {\n    display: block;\n}\n\n.hc-phone-field-simple .hc-phone-input-wrapper {\n    width: 100%;\n    display: flex;\n}\n\n\/* Cuando se necesita selector (clearoutphone): mostrar en flex *\/\n.hc-phone-field-with-prefix .hc-phone-prefix {\n    display: block !important;\n    width: var(--hc-phone-prefix-width);\n    flex-shrink: 0;\n}\n\n.hc-phone-field-with-prefix .hc-floating-inner {\n    display: flex;\n    gap: var(--hc-phone-prefix-gap);\n    align-items: stretch;\n}\n\n.hc-phone-field-with-prefix .hc-phone-input-wrapper {\n    flex: 1;\n    position: relative;\n    display: flex;\n    flex-direction: row;\n}\n\n.hc-phone-input-wrapper > .co-input-container {\n    display: flex !important;\n}\n\n.hc-phone-input-wrapper input[type=\"tel\"] {\n    display: flex !important;\n}\n\n\/* Labels flotantes funcionan en ambos modos *\/\n.hc-phone-input-wrapper {\n    position: relative;\n}\n\n.hc-phone-input-wrapper label {\n    position: absolute;\n    left: 12px;\n    top: 50%;\n    transform: translateY(-50%);\n    transition: all var(--hc-transition-duration) var(--hc-transition-timing);\n    pointer-events: none;\n    color: var(--hc-label-color);\n    font-size: var(--hc-label-font-size);\n}\n\n.hc-phone-input-wrapper input:focus + label,\n.hc-phone-input-wrapper input:not(:placeholder-shown) + label {\n    top: -8px;\n    font-size: var(--hc-label-font-size-small);\n    background: var(--hc-bg-color);\n}\n\n.hc-phone-input-wrapper input.hc-error + label {\n    background-color: var(--hc-error-color-bg) !important;\n    color: var(--hc-error-color) !important;\n    padding: 0 4px;\n}\n\n\/* Estilos de error para campos de tel\u00e9fono *\/\n.hc-phone-prefix.hc-error {\n    border-color: var(--hc-error-color) !important;\n    background-color: var(--hc-error-color-bg) !important;\n    box-shadow: 0 0 0 var(--hc-focus-shadow-size) rgba(220, 53, 69, 0.25);\n}\n\n.hc-phone-input-wrapper input.hc-error {\n    border-color: var(--hc-error-color) !important;\n    background-color: var(--hc-error-color-bg) !important;\n}\n\n\/* ===================================\n   PERSONALIZACI\u00d3N\n   ===================================\n   \n   Para personalizar el formulario, puedes sobreescribir las variables CSS\n   en tu archivo de CSS personalizado (healthcademia-zoho-css.php):\n   \n   Ejemplo:\n   \n   :root {\n       --hc-primary-color: #ff5722;\n       --hc-container-radius: 24px;\n       --hc-name-row-gap: 20px;\n   }\n   \n   Variables disponibles:\n   \n   Espaciados:\n   - --hc-container-padding\n   - --hc-field-margin\n   - --hc-name-row-gap\n   - --hc-header-gap\n   - --hc-checkbox-gap\n   - --hc-phone-prefix-gap\n   \n   Bordes:\n   - --hc-container-radius\n   - --hc-input-radius\n   - --hc-input-border-width\n   \n   Colores:\n   - --hc-primary-color\n   - --hc-error-color\n   - --hc-bg-color\n   - --hc-border-color\n   - --hc-text-color\n   - --hc-label-color\n   \n   Tipograf\u00eda:\n   - --hc-font-family\n   - --hc-input-font-size\n   - --hc-label-font-size\n   - --hc-checkbox-font-size\n   \n   Otros:\n   - --hc-transition-duration\n   - --hc-button-padding\n   - --hc-phone-prefix-width\n   \n=================================== *\/\n<\/style>\n<style type=\"text\/css\">\n\/* Healthcademia Custom CSS *\/\n\/* ============================================\r\n   Healthcademia Form - CSS Personalizado\r\n   ============================================\r\n   Personaliza las clases principales del formulario.\r\n   Edita los valores seg\u00fan tus necesidades de dise\u00f1o.\r\n   ============================================ *\/\r\n\r\n:root {\r\n    \/* Color principal del formulario *\/\r\n    --hc-primary-color: #b8be15;\r\n    \r\n    \/* Hacer el formulario m\u00e1s compacto *\/\r\n    --hc-container-padding: 0px;\r\n    --hc-field-margin: 12px;\r\n    --hc-name-row-gap: 18px;\r\n    \r\n    \/* Bordes m\u00e1s redondeados *\/\r\n    --hc-container-radius: 24px;\r\n    --hc-input-radius: 12px;\r\n    \r\n    \/* Fuente m\u00e1s grande *\/\r\n    --hc-input-font-size: 16px;\r\n}\r\n\r\n\/* ============================================\r\n   CONTENEDOR PRINCIPAL\r\n   ============================================ *\/\r\n.hc-form-container {\r\n    background: transparent !important;\r\n    border-radius: 0px;\r\n    \/* padding: 30px; *\/\r\n    border: 0px solid #e0e0e0; \r\nmargin-top: 20px;\r\n    \/* font-family: \"Inter\", Arial, sans-serif; *\/\r\n}\r\n\r\n\/* ============================================\r\n   HEADER DEL FORMULARIO\r\n   ============================================ *\/\r\n.hc-form-header {\r\n\r\n}\r\n\r\n.hc-form-title {\r\n\r\n}\r\n\r\n\/* ============================================\r\n   FORMULARIO\r\n   ============================================ *\/\r\n.hc-form {\r\n\r\n}\r\n\r\n\/* ============================================\r\n   CAMPOS DEL FORMULARIO\r\n   ============================================ *\/\r\n.hc-field {\r\n\r\n}\r\n\r\n\/* ============================================\r\n   INPUTS, TEXTAREAS Y SELECTS\r\n   ============================================ *\/\r\n.hc-input,\r\n.hc-textarea,\r\n.hc-select {\r\n    border: 1px solid #acaeaf !important; \r\nborder-radius: 5px !important;\r\n    \/* background: #fff; *\/\r\nfont-size: 14px !important;\r\n\r\n}\r\n\r\n\/* Estados de focus *\/\r\n.hc-input:focus,\r\n.hc-textarea:focus,\r\n.hc-select:focus {\r\n    \/* border-color: #1976d2; *\/\r\n    \/* box-shadow: 0 0 0 2px rgba(25, 118, 210, 0.2); *\/\r\n}\r\n\r\n\/* Estados de error *\/\r\n.hc-input.hc-error,\r\n.hc-textarea.hc-error,\r\n.hc-select.hc-error {\r\n    \/* border-color: #d32f2f; *\/\r\n}\r\n\r\n\/* Textarea espec\u00edfico *\/\r\n.hc-textarea {\r\n\r\n}\r\n\r\n\/* ============================================\r\n   CAMPOS FLOTANTES (Floating Labels)\r\n   ============================================ *\/\r\n\r\n.hc-phone-field.floating .hc-floating-inner label{\r\nfont-size: 12px;\r\nborder-radius: 5px;\r\n}\r\n\r\n.hc-field.floating .hc-floating-inner label {\r\nwidth: auto;\r\n\r\n\r\n}\r\n\r\n.hc-field.floating .hc-floating-inner .hc-input:focus + label,\r\n.hc-field.floating .hc-floating-inner .hc-textarea:focus + label,\r\n.hc-field.floating .hc-floating-inner .hc-input:not(:placeholder-shown) + label,\r\n.hc-field.floating .hc-floating-inner .hc-textarea:not(:placeholder-shown) + label {\r\nfont-size: 12px;\r\nborder-radius: 5px;\r\n}\r\n\r\n\/* ============================================\r\n   CAMPO DE TEL\u00c9FONO\r\n   ============================================ *\/\r\n.hc-phone-field .hc-phone-wrapper {\r\n\r\n}\r\n\r\n.hc-select-block label {\r\n    \/* color: #666; *\/\r\n}\r\n\r\n\r\n\/* ============================================\r\n   CHECKBOXES\r\n   ============================================ *\/\r\n.hc-checkbox-group label {\r\nfont-size: 12px; \r\nline-height: 1.1em;\r\nmargin-bottom: 5px;\r\n}\r\n\r\n.hc-checkbox-group label a{\r\ntext-decoration: underline !important;\r\n}\r\n.hc-checkbox-group label.hc-error {\r\n    \/* color: #d32f2f; *\/\r\n}\r\n\r\n\/* ============================================\r\n   BOT\u00d3N DE ENV\u00cdO\r\n   ============================================ *\/\r\n.hc-submit {\r\n    \/* background: #1976d2; *\/\r\n    \/* color: #fff; *\/\r\n}\r\n\r\n.hc-submit:hover {\r\n    background: #bcca30;\r\n}\r\n\r\n.hc-submit:active {\r\n    \/* transform: scale(0.98); *\/\r\n}\r\n\r\n\/* ============================================\r\n   SPINNER DE CARGA\r\n   ============================================ *\/\r\n.hc-form-spinner {\r\n    \/* background: rgba(255, 255, 255, 0.85); *\/\r\n}\r\n\r\n.hc-spinner {\r\n    \/* width: 48px; *\/\r\n    \/* height: 48px; *\/\r\n    \/* border: 4px solid rgba(25, 118, 210, 0.2); *\/\r\n    \/* border-top-color: #1976d2; *\/\r\n}\r\n\r\n\/* ============================================\r\n   MENSAJES DE ESTADO\r\n   ============================================ *\/\r\n.hc-form-status.success {\r\n    \/* color: #2e7d32; *\/\r\n}\r\n\r\n.hc-form-status.error {\r\n    \/* color: #c62828; *\/\r\n}\r\n\r\n\/* ============================================\r\n   ESTADO DE \u00c9XITO (Formulario oculto)\r\n   ============================================ *\/\r\n.hc-form-container.hc-form-success {\r\n\r\n}\r\n\r\n.hc-form-container.hc-form-success .hc-form-status {\r\n    \/* background-color: #f1f8f4; *\/\r\n    \/* color: #2e7d32; *\/\r\n}\r\n\r\n\/* ============================================\r\n   RESPONSIVE (Ejemplo)\r\n   ============================================ *\/\r\n@media screen and (max-width: 768px) {\r\n    .hc-form-container {\r\n\r\n    }\r\n    \r\n    .hc-phone-field .hc-phone-wrapper {\r\n\r\n    }\r\n    \r\n    .hc-selects-grid {\r\n\r\n    }\r\n}\r\n\r\n\/* ============================================\r\n   PERSONALIZACIONES ADICIONALES\r\n   ============================================ *\/\r\n\/* A\u00f1ade tus estilos personalizados aqu\u00ed *\/\n<\/style>\n<div class=\"healthcademia-form-wrapper\" data-form-id=\"formulario-base\" data-redirect=\"\" data-privacy-url=\"https:\/\/qa-server.amircolombia.com\/mexico\/privacy-policy\/\" data-success-message=\"\u00a1Hemos recibido tus datos! Nos pondremos en contacto contigo muy pronto.\" data-rest-nonce=\"c873f73af9\" data-region=\"LATAM\" data-recaptcha-key=\"6Lf_bScsAAAAAABqrIROKvoQD5XOzjoGTUmhKA-x\"><div class=\"hc-form-container\" id=\"hc_form_1\"\n     data-rest-leads=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/healthcademia\/v1\/leads\"\n     data-rest-programs=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/healthcademia\/v1\/programas\"\n     data-rest-nonce=\"c873f73af9\"\n     data-program-id=\"\"\n     data-redirect=\"\"\n     data-region=\"LATAM\"\n     data-country-prefixes=\"{&quot;Espa\u00f1a&quot;:&quot;+34&quot;,&quot;Argentina&quot;:&quot;+54&quot;,&quot;Chile&quot;:&quot;+56&quot;,&quot;Colombia&quot;:&quot;+57&quot;,&quot;M\u00e9xico&quot;:&quot;+52&quot;,&quot;Per\u00fa&quot;:&quot;+51&quot;,&quot;Venezuela&quot;:&quot;+58&quot;,&quot;Otro&quot;:&quot;&quot;}\"\n     data-clearout-key=\"6c7990b80c6b598123f804ec0066078d:bcd9da28edee065eb67bbf61caf6e128fcc207a8efd7a710acd0ce72542f716c\" data-display-config=\"{&quot;convocatoria&quot;:true,&quot;sede&quot;:true,&quot;modalidad&quot;:true,&quot;edicion&quot;:true}\">\n    <form class=\"hc-form hc-api-form\" novalidate>\n        <input type=\"hidden\" name=\"program_id\" value=\"\">\n        <input type=\"hidden\" name=\"program_name\" value=\"\">\n        \n        <div class=\"hc-name-row\">\n            <div class=\"hc-field floating\">\n                <div class=\"hc-floating-inner\">\n                    <input type=\"text\" name=\"first_name\" class=\"hc-input\" placeholder=\" \" data-only-letters=\"true\" required>\n                    <label>Nombre *<\/label>\n                <\/div>\n            <\/div>\n            <div class=\"hc-field floating\">\n                <div class=\"hc-floating-inner\">\n                    <input type=\"text\" name=\"last_name\" class=\"hc-input\" placeholder=\" \" data-only-letters=\"true\" required>\n                    <label>Apellidos *<\/label>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"hc-field floating\">\n            <div class=\"hc-floating-inner\">\n                <input type=\"email\" name=\"email\" class=\"hc-input\" placeholder=\" \" value=\"\" required>\n                <label>Correo electr\u00f3nico *<\/label>\n            <\/div>\n        <\/div>\n                <div class=\"hc-field hc-phone-field floating hc-phone-field-with-prefix\">\n            <div class=\"hc-floating-inner\">\n                <!-- Selector de prefijos (solo visible para clearoutphone) -->\n                <select name=\"phone_prefix\" class=\"hc-select hc-phone-prefix\">\n                    <option value=\"+34\" data-country=\"ES\">ES +34<\/option>\n                    <!-- Centroam\u00e9rica -->\n                    <option value=\"+52\" data-country=\"MX\">MX +52<\/option>\n                    <option value=\"+502\" data-country=\"GT\">GT +502<\/option>\n                    <option value=\"+503\" data-country=\"SV\">SV +503<\/option>\n                    <option value=\"+504\" data-country=\"HN\">HN +504<\/option>\n                    <option value=\"+505\" data-country=\"NI\">NI +505<\/option>\n                    <option value=\"+506\" data-country=\"CR\">CR +506<\/option>\n                    <option value=\"+507\" data-country=\"PA\">PA +507<\/option>\n                    <option value=\"+501\" data-country=\"BZ\">BZ +501<\/option>   \n                    <option value=\"+509\" data-country=\"HT\">HT +509<\/option>     \n\n                    <!-- Caribe LATAM (NANP con m\u00faltiples prefijos) -->\n                    <option value=\"+1809\" data-country=\"DO\">DO +1809<\/option>\n                    <option value=\"+1829\" data-country=\"DO\">DO +1829<\/option>\n                    <option value=\"+1849\" data-country=\"DO\">DO +1849<\/option>\n                    <option value=\"+1787\" data-country=\"PR\">PR +1787<\/option>\n                    <option value=\"+1939\" data-country=\"PR\">PR +1939<\/option>\n                    <option value=\"+53\"   data-country=\"CU\">CU +53<\/option>\n                    <option value=\"+1876\" data-country=\"JM\">JM +1876<\/option>\n\n                    <!-- Sudam\u00e9rica -->\n                    <option value=\"+57\"  data-country=\"CO\" selected>CO +57<\/option>\n                    <option value=\"+58\"  data-country=\"VE\">VE +58<\/option>\n                    <option value=\"+593\" data-country=\"EC\">EC +593<\/option>\n                    <option value=\"+51\"  data-country=\"PE\">PE +51<\/option>\n                    <option value=\"+591\" data-country=\"BO\">BO +591<\/option>\n                    <option value=\"+56\"  data-country=\"CL\">CL +56<\/option>\n                    <option value=\"+54\"  data-country=\"AR\">AR +54<\/option>\n                    <option value=\"+598\" data-country=\"UY\">UY +598<\/option>\n                    <option value=\"+595\" data-country=\"PY\">PY +595<\/option>\n                    <option value=\"+55\"  data-country=\"BR\">BR +55<\/option>\n                    <option value=\"+592\" data-country=\"GY\">GY +592<\/option>   \n                    <option value=\"+597\" data-country=\"SR\">SR +597<\/option> \n                    <option value=\"+594\" data-country=\"GF\">GF +594<\/option> \n                <\/select>\n                <div class=\"hc-phone-input-wrapper\">\n                                        <input type=\"tel\" name=\"phone\" class=\"hc-input\" placeholder=\"612 345 678\" data-clearout-phone-field value=\"\" required>\n                    <label>Tel\u00e9fono *<\/label>\n                <\/div>\n            <\/div>\n        <\/div>\n\n        \n        <input type=\"hidden\" name=\"utm_campaign\">\n        <input type=\"hidden\" name=\"utm_source\">\n        <input type=\"hidden\" name=\"utm_medium\">\n        <input type=\"hidden\" name=\"utm_term\">\n        <input type=\"hidden\" name=\"utm_content\">\n        <input type=\"hidden\" name=\"traffic_source\" value=\"\">\n        <input type=\"hidden\" name=\"lead_source\" value=\"P\u00e1gina Web\">\n        <input type=\"hidden\" name=\"tipo_origen\" value=\"Digital\">\n        <input type=\"hidden\" name=\"lead_status\" value=\"Sin Gesti\u00f3n\">\n        <input type=\"hidden\" name=\"region\" value=\"LATAM\">\n        <!-- Campo oculto para capturar GCLID de Google Ads (Zoho CRM) -->\n        <input type=\"hidden\" id=\"zc_gad\" name=\"zc_gad\" value=\"\">\n\n        <div class=\"hc-checkbox-group hc-legal-checkboxes\">\n            <label>\n                <input type=\"checkbox\" name=\"privacy\" required>\n                <span>Acepto la <a href=\"https:\/\/qa-server.amircolombia.com\/mexico\/privacy-policy\/\" data-privacy-link=\"true\" target=\"_blank\" rel=\"noopener\">pol\u00edtica de privacidad<\/a> *<\/span>\n            <\/label>\n        <\/div>\n        <div class=\"hc-checkbox-group\">\n            <label>\n                <input type=\"checkbox\" name=\"marketing\">\n                <span>Acepto recibir comunicaciones comerciales<\/span>\n            <\/label>\n        <\/div>\n\n        <div class=\"hc-form-status\" aria-live=\"polite\"><\/div>\n        <button type=\"submit\" class=\"hc-submit\">ASESOR\u00cdA PERSONALIZADA<\/button>\n    <\/form>\n    <div class=\"hc-form-success-message\" aria-live=\"polite\" style=\"display: none;\"><\/div>\n    <div class=\"hc-form-spinner\" aria-hidden=\"true\">\n        <div class=\"hc-spinner\"><\/div>\n    <\/div>\n<\/div>\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n    const form = document.querySelector('#hc_form_1 .hc-api-form');\n    \n    if (form) {\n        form.addEventListener('submit', function(e) {\n            \/\/ Enviar evento a Google Tag Manager\n            window.dataLayer = window.dataLayer || [];\n            window.dataLayer.push({\n                'event': 'form_submit',\n                'formId': 'hc_form_1',\n                'formName': 'healthcademia_lead_form'\n            });\n        });\n    }\n});\n<\/script>\n\n<\/div><script src=\"https:\/\/www.google.com\/recaptcha\/api.js?render=6Lf_bScsAAAAAABqrIROKvoQD5XOzjoGTUmhKA-x\"><\/script>\n<script type=\"text\/javascript\">\n\/* Healthcademia Default Form JS *\/\n(function() {\n    \/\/ Funci\u00f3n para inicializar el formulario\n    function initForm() {\n        \/\/ Buscar el contenedor - intentar varias formas\n        let container = document.getElementById('hc_form_1_7837');\n        \n        \/\/ Si no se encuentra, buscar por clase como fallback\n        if (!container) {\n            const containers = document.querySelectorAll('.hc-form-container');\n            if (containers.length > 0) {\n                container = containers[containers.length - 1]; \/\/ Tomar el \u00faltimo\n            }\n        }\n        \n        if (!container) {\n            return false;\n        }\n\n        const form = container.querySelector('form');\n        if (!form) {\n            return false;\n        }\n        \n        \/\/ Asegurarse de que el formulario no se env\u00ede de forma tradicional\n        form.setAttribute('novalidate', 'novalidate');\n        if (form.hasAttribute('action')) {\n            form.removeAttribute('action');\n        }\n        if (form.hasAttribute('method')) {\n            form.removeAttribute('method');\n        }\n    \n    const wrapper = container.closest('.healthcademia-form-wrapper');\n    const endpoints = {\n        leads: container.dataset.restLeads,\n        programs: container.dataset.restPrograms\n    };\n    const restNonce = (wrapper && wrapper.dataset.restNonce) || container.dataset.restNonce || '';\n    const redirectUrl = ((wrapper && wrapper.dataset.redirect) || container.dataset.redirect || '').trim();\n    const privacyUrl = (wrapper && wrapper.dataset.privacyUrl) || '';\n    const successMessage = (wrapper && wrapper.dataset.successMessage) || '\u00a1Hemos recibido tus datos! Nos pondremos en contacto contigo muy pronto.';\n    const recaptchaSiteKey = (wrapper && wrapper.dataset.recaptchaKey) || '';\n    const programId = container.dataset.programId;\n    let countryPrefixes = {};\n    let defaultRegion = container.dataset.region || '';\n    try {\n        countryPrefixes = JSON.parse(container.dataset.countryPrefixes || '{}');\n    } catch (error) {\n        countryPrefixes = {};\n    }\n    \/\/ JavaScript solo recoge la respuesta del servidor\n    const emailInput = form.querySelector('input[name=\"email\"]');\n    const phoneInput = form.querySelector('input[name=\"phone\"]');\n    const countrySelect = form.querySelector('select[name=\"country\"]');\n    const regionInput = form.querySelector('input[name=\"region\"]');\n    const statusBox = container.querySelector('.hc-form-status');\n    const successMessageBox = container.querySelector('.hc-form-success-message');\n\n    const setStatus = (state, message) => {\n        if (!statusBox) {\n            return;\n        }\n        if (message) {\n            statusBox.textContent = message;\n            statusBox.className = 'hc-form-status ' + state;\n            statusBox.style.display = 'block';\n        } else {\n            statusBox.textContent = '';\n            statusBox.className = 'hc-form-status';\n            statusBox.style.display = '';\n        }\n    };\n\n    const setSuccessMessage = (message) => {\n        if (!successMessageBox) {\n            return;\n        }\n        if (message) {\n            successMessageBox.textContent = message;\n            successMessageBox.className = 'hc-form-success-message success';\n            successMessageBox.style.display = 'block';\n        } else {\n            successMessageBox.textContent = '';\n            successMessageBox.style.display = 'none';\n        }\n    };\n\n    const setLoading = (flag) => {\n        if (!container) return;\n        if (flag) {\n            container.classList.add('is-loading');\n        } else {\n            container.classList.remove('is-loading');\n        }\n    };\n\n    \/\/ Sanitizar tel\u00e9fono: eliminar todo excepto n\u00fameros, +, (, ), -, ., espacios\n    \/\/ Esto se usa solo al enviar al servidor, no en tiempo real\n    const sanitizePhone = (value) => (value || '').replace(\/[^0-9+()\\-\\s.]\/g, '');\n    \n    \/\/ Funci\u00f3n para permitir caracteres est\u00e1ndar de tel\u00e9fono mientras el usuario escribe\n    \/\/ Permite: n\u00fameros, +, (, ), -, ., espacios\n    \/\/ Ejemplos v\u00e1lidos: +34 612 345 678, (612) 345-678, +34.612.345.678, +34-612-345-678\n    const allowPhoneChars = (value) => {\n        return (value || '').replace(\/[^0-9+()\\-\\s.]\/g, '');\n    };\n    const sanitizeLetters = (value) => (value || '').replace(\/[^A-Za-z\u00c0-\u00ff\\s'-]\/g, '');\n    const getPhonePrefix = () => {\n        if (!countrySelect) {\n            return '';\n        }\n        return countryPrefixes[countrySelect.value] || '';\n    };\n\n    const updateRegionField = () => {\n        if (!regionInput) {\n            return;\n        }\n        \n        \/\/ Si no hay program_id, usar siempre la regi\u00f3n global de la configuraci\u00f3n\n        if (!programId) {\n            regionInput.value = defaultRegion || 'Iberia';\n            return;\n        }\n        \n        \/\/ Si hay program_id, inferir regi\u00f3n del pa\u00eds seleccionado\n        if (!countrySelect || !countrySelect.value) {\n            regionInput.value = defaultRegion || 'Iberia';\n            return;\n        }\n        const countryValue = countrySelect.value.toLowerCase();\n        const iberiaSet = ['espa\u00f1a', 'spain', 'espa\\u00f1a'];\n        regionInput.value = iberiaSet.includes(countryValue) ? 'Iberia' : 'LATAM';\n    };\n\n    if (regionInput && !regionInput.value) {\n        regionInput.value = defaultRegion || 'Iberia';\n    }\n    \n    \/\/ Solo actualizar regi\u00f3n basada en pa\u00eds si hay program_id\n    if (countrySelect && programId) {\n        updateRegionField();\n        countrySelect.addEventListener('change', updateRegionField);\n    } else if (countrySelect && !programId) {\n        \/\/ Si no hay program_id, mantener la regi\u00f3n global siempre\n        updateRegionField();\n    }\n\n    if (phoneInput) {\n        \/\/ Permitir caracteres est\u00e1ndar de tel\u00e9fono en tiempo real (+, (, ), -, espacios)\n        \/\/ Form Guard necesita estos caracteres para validar correctamente\n        phoneInput.addEventListener('input', () => {\n            \/\/ Solo eliminar caracteres no permitidos, pero mantener formato est\u00e1ndar\n            const allowed = allowPhoneChars(phoneInput.value);\n            if (allowed !== phoneInput.value) {\n                phoneInput.value = allowed;\n            }\n            \n            \/\/ Limpiar errores al escribir\n            phoneInput.classList.remove('hc-error');\n            phoneInput.setCustomValidity('');\n        });\n        \n        \/\/ Limpiar error del selector de prefijos tambi\u00e9n\n        const phonePrefixSelect = form.querySelector('select[name=\"phone_prefix\"]');\n        if (phonePrefixSelect) {\n            phonePrefixSelect.addEventListener('change', () => {\n                phonePrefixSelect.classList.remove('hc-error');\n                phoneInput.classList.remove('hc-error');\n                phoneInput.setCustomValidity('');\n            });\n        }\n    }\n    form.querySelectorAll('[data-only-letters=\"true\"]').forEach((input) => {\n        input.addEventListener('input', () => {\n            const sanitized = sanitizeLetters(input.value);\n            if (sanitized !== input.value) {\n                input.value = sanitized;\n            }\n        });\n    });\n\n    const hydrateUTMs = () => {\n        const params = new URLSearchParams(window.location.search);\n        ['utm_campaign','utm_source','utm_medium','utm_term','utm_content'].forEach(key => {\n            const el = form.querySelector('[name=\"' + key + '\"]');\n            if (el && params.get(key)) {\n                el.value = params.get(key);\n            }\n        });\n    };\n\n    const validateForm = () => {\n        let valid = true;\n        const invalidFields = [];\n        \/\/ Primero limpiar todos los errores\n        form.querySelectorAll('[required]').forEach(field => {\n            field.classList.remove('hc-error');\n            \/\/ Limpiar error del label del checkbox tambi\u00e9n\n            if (field.type === 'checkbox') {\n                const label = field.closest('label');\n                if (label) {\n                    label.classList.remove('hc-error');\n                }\n            }\n        });\n        \/\/ Limpiar tambi\u00e9n el prefijo telef\u00f3nico y labels flotantes\n        const phonePrefixSelect = form.querySelector('select[name=\"phone_prefix\"]');\n        if (phonePrefixSelect) {\n            phonePrefixSelect.classList.remove('hc-error');\n        }\n        \n        \/\/ Luego validar y marcar errores\n        form.querySelectorAll('[required]').forEach(field => {\n            let fieldValid = true;\n            \n            if (field.type === 'checkbox') {\n                \/\/ Para checkboxes, validar si est\u00e1 checkeado\n                fieldValid = field.checked;\n            } else {\n                \/\/ Para inputs normales, validar si tiene valor\n                fieldValid = field.value && field.value.trim() !== '';\n            }\n            \n            if (!fieldValid) {\n                field.classList.add('hc-error');\n                \/\/ Para checkboxes, tambi\u00e9n marcar el label\n                if (field.type === 'checkbox') {\n                    const label = field.closest('label');\n                    if (label) {\n                        label.classList.add('hc-error');\n                    }\n                }\n                \/\/ Si es el campo de tel\u00e9fono, tambi\u00e9n marcar el prefijo si est\u00e1 visible\n                if (field.name === 'phone' && phonePrefixSelect) {\n                    const isVisible = window.getComputedStyle(phonePrefixSelect).display !== 'none';\n                    if (isVisible) {\n                        phonePrefixSelect.classList.add('hc-error');\n                    }\n                }\n                valid = false;\n                \/\/ Recopilar nombres de campos inv\u00e1lidos para el mensaje\n                const fieldName = field.getAttribute('name') || field.getAttribute('id') || 'campo';\n                if (field.type === 'checkbox') {\n                    invalidFields.push('aceptar la pol\u00edtica de privacidad');\n                } else {\n                    const label = field.closest('.hc-field')?.querySelector('label');\n                    const labelText = label ? label.textContent.replace('*', '').trim() : fieldName;\n                    invalidFields.push(labelText.toLowerCase());\n                }\n            }\n        });\n        \n        \/\/ Validar email espec\u00edficamente (puede estar vac\u00edo o con formato inv\u00e1lido)\n        if (emailInput) {\n            const emailValue = emailInput.value.trim();\n            if (!emailValue) {\n                \/\/ Email vac\u00edo - ya deber\u00eda estar marcado por [required], pero nos aseguramos\n                if (!emailInput.classList.contains('hc-error')) {\n                    emailInput.classList.add('hc-error');\n                    valid = false;\n                }\n            }\n        }\n        \n        \/\/ Mostrar mensaje de error si hay campos inv\u00e1lidos\n        if (!valid && invalidFields.length > 0) {\n            const message = 'Por favor, revisa el formulario.';\n            setStatus('error', message);\n        }\n        return valid;\n    };\n\n    const validateEmailFormat = () => {\n        if (!emailInput) {\n            return true;\n        }\n        const value = emailInput.value.trim();\n        \/\/ Si est\u00e1 vac\u00edo, no validar formato (ya se valida en validateForm)\n        if (!value) {\n            return true;\n        }\n        const emailRegex = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n        const isValid = emailRegex.test(value);\n        emailInput.setCustomValidity(isValid ? '' : 'Email err\u00f3neo');\n        if (!isValid) {\n            emailInput.classList.add('hc-error');\n            emailInput.reportValidity();\n            setStatus('error', 'Email no v\u00e1lido');\n        }\n        return isValid;\n    };\n\n    \/\/ La validaci\u00f3n de Clearout se hace SOLO en el servidor (PHP)\n    \/\/ JavaScript solo recoge la respuesta del servidor\n\n\n    form.querySelectorAll('input, textarea, select').forEach(el => {\n        el.addEventListener('input', () => {\n            el.classList.remove('hc-error');\n            \/\/ Limpiar error del label si es checkbox\n            if (el.type === 'checkbox') {\n                const label = el.closest('label');\n                if (label) {\n                    label.classList.remove('hc-error');\n                }\n            }\n            if (el === emailInput) {\n                emailInput.setCustomValidity('');\n            }\n            if (el === phoneInput) {\n                phoneInput.setCustomValidity('');\n            }\n            \/\/ Limpiar mensaje de error cuando el usuario empieza a escribir\n            if (statusBox && statusBox.classList.contains('error')) {\n                setStatus('', '');\n            }\n        });\n        el.addEventListener('change', () => {\n            el.classList.remove('hc-error');\n            \/\/ Limpiar error del label si es checkbox\n            if (el.type === 'checkbox') {\n                const label = el.closest('label');\n                if (label) {\n                    label.classList.remove('hc-error');\n                }\n            }\n        });\n    });\n\n    const applyPrivacyLink = () => {\n        if (!privacyUrl) {\n            return;\n        }\n        const targetLink = form.querySelector('[data-privacy-link]') || form.querySelector('.hc-checkbox-group a');\n        if (targetLink) {\n            targetLink.setAttribute('href', privacyUrl);\n            targetLink.setAttribute('target', '_blank');\n            targetLink.setAttribute('rel', 'noopener');\n        }\n    };\n\n    applyPrivacyLink();\n    \n    \/\/ Si no hay program_id, configurar el listener para cuando se seleccione un programa\n    if (!programId) {\n        const programSelect = form.querySelector('select[name=\"program_id_select\"]');\n        if (programSelect) {\n            programSelect.addEventListener('change', function() {\n                const selectedProgramId = this.value;\n                if (selectedProgramId) {\n                    \/\/ Actualizar los inputs hidden inmediatamente\n                    const programIdInput = form.querySelector('input[name=\"program_id\"]');\n                    if (programIdInput) {\n                        programIdInput.value = selectedProgramId;\n                    }\n                    loadProgramData(selectedProgramId);\n                } else {\n                    \/\/ Si se deselecciona, limpiar los inputs hidden y ocultar los selects\n                    const programIdInput = form.querySelector('input[name=\"program_id\"]');\n                    const programNameInput = form.querySelector('input[name=\"program_name\"]');\n                    if (programIdInput) {\n                        programIdInput.value = '';\n                    }\n                    if (programNameInput) {\n                        programNameInput.value = '';\n                    }\n                    hideProgramSelects();\n                }\n            });\n        }\n    }\n    \n    \/\/ Funci\u00f3n para cargar los datos de un programa espec\u00edfico\n    function loadProgramData(programId) {\n        if (!endpoints.programs || !programId) {\n            return;\n        }\n        \n        \/\/ Obtener configuraci\u00f3n de visibilidad de la p\u00e1gina\n        const displayConfig = container.dataset.displayConfig ? JSON.parse(container.dataset.displayConfig) : {};\n        \n        \/\/ Obtener el grid de selects\n        let selectsGrid = container.querySelector('.hc-selects-grid');\n        \n        \/\/ Si no existe el grid, crearlo vac\u00edo (se llenar\u00e1 despu\u00e9s con skeleton y selects seg\u00fan datos)\n        if (!selectsGrid) {\n            \/\/ Buscar d\u00f3nde insertar el grid (despu\u00e9s del select de programa o antes de los checkboxes)\n            const programSelect = form.querySelector('select[name=\"program_id_select\"]') || form.querySelector('select[name=\"program_id\"]');\n            const checkboxes = form.querySelector('.hc-checkbox-group');\n            \n            \/\/ Crear el grid vac\u00edo (no crear campos hasta tener los datos del programa)\n            selectsGrid = document.createElement('div');\n            selectsGrid.className = 'hc-selects-grid';\n            selectsGrid.style.display = 'none'; \/\/ Oculto hasta que haya datos\n            \n            \/\/ Insertar el grid en el formulario\n            if (programSelect && programSelect.parentElement) {\n                programSelect.parentElement.insertAdjacentElement('afterend', selectsGrid);\n            } else if (checkboxes && checkboxes.parentElement) {\n                checkboxes.parentElement.insertBefore(selectsGrid, checkboxes);\n            } else {\n                \/\/ Fallback: insertar antes del bot\u00f3n submit\n                const submitButton = form.querySelector('button[type=\"submit\"]');\n                if (submitButton && submitButton.parentElement) {\n                    submitButton.parentElement.insertBefore(selectsGrid, submitButton);\n                }\n            }\n        }\n        \n        fetch(endpoints.programs + '?program_id=' + encodeURIComponent(programId) + '&X-WP-Nonce=' + encodeURIComponent(restNonce), {\n            method: 'GET',\n            headers: {\n                'X-WP-Nonce': restNonce\n            },\n            credentials: 'same-origin'\n        })\n        .then(resp => {\n            if (!resp.ok) {\n                return resp.json().then(errorData => {\n                    throw new Error(errorData.message || 'Error al cargar datos del programa');\n                });\n            }\n            return resp.json();\n        })\n        .then(response => {\n            if (response.success && response.data && response.data.length > 0) {\n                const program = response.data[0];\n                \n                \/\/ Actualizar los inputs hidden con el program_id y program_name\n                const programIdInput = form.querySelector('input[name=\"program_id\"]');\n                const programNameInput = form.querySelector('input[name=\"program_name\"]');\n                \n                if (programIdInput) {\n                    programIdInput.value = programId;\n                }\n                if (programNameInput) {\n                    programNameInput.value = program.nombre || '';\n                }\n                \n                \/\/ Verificar qu\u00e9 campos tienen datos Y est\u00e1n habilitados en la configuraci\u00f3n\n                \/\/ Solo mostrar skeleton y selects para campos que cumplen ambas condiciones\n                const fieldsToShow = [];\n                const fields = [\n                    { name: 'convocatoria', label: 'Convocatoria', data: program.convocatoria },\n                    { name: 'edicion', label: 'Edici\u00f3n', data: program.edicion },\n                    { name: 'modalidad', label: 'Modalidad', data: program.modalidad },\n                    { name: 'sede', label: 'Sede', data: program.sede }\n                ];\n                \n                fields.forEach(field => {\n                    \/\/ Verificar: 1) est\u00e1 habilitado en la configuraci\u00f3n, 2) tiene datos (m\u00e1s de 1 opci\u00f3n)\n                    const isEnabled = displayConfig[field.name] !== false;\n                    const hasData = field.data && field.data.length > 1;\n                    \n                    if (isEnabled && hasData) {\n                        fieldsToShow.push(field);\n                    }\n                });\n                \n                \/\/ Si hay campos para mostrar, mostrar skeleton y luego los selects\n                if (fieldsToShow.length > 0) {\n                    \/\/ Mostrar skeleton solo para los campos que se van a mostrar\n                    showSkeletonLoading(selectsGrid, fieldsToShow.map(f => f.name));\n                    \n                    \/\/ Simular un peque\u00f1o delay para que se vea el skeleton\n                    setTimeout(() => {\n                        hideSkeletonLoading(selectsGrid);\n                        \n                        \/\/ Asegurar que el grid existe y est\u00e1 visible\n                        if (!selectsGrid) {\n                            selectsGrid = container.querySelector('.hc-selects-grid');\n                        }\n                        if (selectsGrid) {\n                            selectsGrid.style.display = 'grid';\n                        }\n                        \n                        \/\/ Mostrar los selects del programa con sus opciones (solo los habilitados y con datos)\n                        showProgramSelects(program, selectsGrid, displayConfig);\n                    }, 300);\n                } else {\n                    \/\/ Si no hay campos para mostrar, ocultar el grid\n                    if (selectsGrid) {\n                        selectsGrid.style.display = 'none';\n                        selectsGrid.innerHTML = '';\n                    }\n                }\n            } else {\n                if (selectsGrid) {\n                    selectsGrid.style.display = 'none';\n                }\n                setStatus('error', 'No se encontraron datos para el programa seleccionado');\n            }\n        })\n        .catch(error => {\n            if (selectsGrid) {\n                selectsGrid.style.display = 'none';\n            }\n            setStatus('error', 'Error al cargar datos del programa: ' + error.message);\n        });\n    }\n    \n    \/\/ Funci\u00f3n para mostrar skeleton loading solo para campos espec\u00edficos que se van a mostrar\n    function showSkeletonLoading(selectsGrid, enabledFields) {\n        \/\/ Limpiar contenido previo (skeleton y selects existentes)\n        selectsGrid.innerHTML = '';\n        selectsGrid.style.display = 'grid';\n        \n        \/\/ Generar skeleton SOLO para los campos que est\u00e1n habilitados Y tienen datos\n        enabledFields.forEach(fieldName => {\n            const skeletonWrapper = document.createElement('div');\n            skeletonWrapper.className = 'hc-field hc-skeleton-field';\n            skeletonWrapper.setAttribute('data-field', fieldName + '-wrapper');\n            \n            const skeletonBar = document.createElement('div');\n            skeletonBar.className = 'hc-skeleton';\n            skeletonBar.innerHTML = '<div class=\"hc-skeleton-line\"><\/div>';\n            \n            skeletonWrapper.appendChild(skeletonBar);\n            selectsGrid.appendChild(skeletonWrapper);\n        });\n    }\n    \n    \/\/ Funci\u00f3n para ocultar skeleton loading\n    function hideSkeletonLoading(selectsGrid) {\n        if (!selectsGrid) return;\n        \/\/ Solo remover los skeleton, NO limpiar todo el innerHTML\n        \/\/ porque los selects se crear\u00e1n despu\u00e9s\n        const skeletonFields = selectsGrid.querySelectorAll('.hc-skeleton-field');\n        skeletonFields.forEach(field => field.remove());\n    }\n    \n    \/\/ Funci\u00f3n para mostrar los selects del programa\n    \/\/ Solo crea\/actualiza selects para campos habilitados Y con datos disponibles\n    function showProgramSelects(program, selectsGridParam, displayConfig) {\n        \/\/ Asegurar que tenemos referencia al grid\n        let selectsGrid = selectsGridParam || container.querySelector('.hc-selects-grid');\n        \n        if (!selectsGrid) {\n            return;\n        }\n        \n        \/\/ Funci\u00f3n auxiliar para crear\/actualizar un select\n        const createOrUpdateSelect = (name, label, values) => {\n            \/\/ Verificar que est\u00e1 habilitado en la configuraci\u00f3n\n            if (displayConfig && displayConfig[name] === false) {\n                return false; \/\/ Campo deshabilitado, no crear\n            }\n            \n            \/\/ Verificar que hay datos\n            if (!values || values.length <= 1) {\n                return false; \/\/ No hay datos suficientes\n            }\n            \n            \/\/ Buscar si ya existe un wrapper (puede venir del skeleton o de creaci\u00f3n previa)\n            let selectWrapper = selectsGrid.querySelector('[data-field=\"' + name + '-wrapper\"]');\n            \n            if (!selectWrapper) {\n                \/\/ Crear el wrapper si no existe\n                selectWrapper = document.createElement('div');\n                selectWrapper.className = 'hc-field';\n                selectWrapper.setAttribute('data-field', name + '-wrapper');\n                selectsGrid.appendChild(selectWrapper);\n            }\n            \n            \/\/ Buscar o crear el select\n            let select = selectWrapper.querySelector('select[name=\"' + name + '\"]');\n            \n            if (!select) {\n                \/\/ Crear el select si no existe\n                select = document.createElement('select');\n                select.name = name;\n                select.className = 'hc-select';\n                select.required = true;\n                selectWrapper.appendChild(select);\n            }\n            \n            \/\/ Actualizar las opciones\n            select.innerHTML = '<option value=\"\">' + label + '<\/option>';\n            values.forEach(value => {\n                const option = document.createElement('option');\n                option.value = value;\n                option.textContent = value;\n                select.appendChild(option);\n            });\n            \n            \/\/ Asegurar que el wrapper est\u00e1 visible\n            selectWrapper.style.display = 'block';\n            return true;\n        };\n        \n        \/\/ Crear\/actualizar solo los selects que est\u00e1n habilitados Y tienen datos\n        let hasVisibleSelects = false;\n        \n        if (program.convocatoria && program.convocatoria.length > 1) {\n            if (createOrUpdateSelect('convocatoria', 'Convocatoria', program.convocatoria)) {\n                hasVisibleSelects = true;\n            }\n        }\n        \n        if (program.edicion && program.edicion.length > 1) {\n            if (createOrUpdateSelect('edicion', 'Edici\u00f3n', program.edicion)) {\n                hasVisibleSelects = true;\n            }\n        }\n        \n        if (program.modalidad && program.modalidad.length > 1) {\n            if (createOrUpdateSelect('modalidad', 'Modalidad', program.modalidad)) {\n                hasVisibleSelects = true;\n            }\n        }\n        \n        if (program.sede && program.sede.length > 1) {\n            if (createOrUpdateSelect('sede', 'Sede', program.sede)) {\n                hasVisibleSelects = true;\n            }\n        }\n        \n        \/\/ Mostrar\/ocultar el grid seg\u00fan si hay selects visibles\n        if (selectsGrid) {\n            if (hasVisibleSelects) {\n                selectsGrid.style.display = 'grid';\n            } else {\n                selectsGrid.style.display = 'none';\n            }\n        }\n    }\n    \n    \/\/ Funci\u00f3n para ocultar los selects del programa\n    function hideProgramSelects() {\n        const selectsGrid = container.querySelector('.hc-selects-grid');\n        if (selectsGrid) {\n            selectsGrid.style.display = 'none';\n            selectsGrid.innerHTML = '';\n        }\n        \n        const programNameInput = form.querySelector('input[name=\"program_name\"]');\n        if (programNameInput) {\n            programNameInput.value = '';\n        }\n    }\n\n    form.addEventListener('submit', async function(event) {\n\n        \/\/ Bloquear el bot\u00f3n durante 2 segundos para prevenir env\u00edos duplicados\n        const submitButton = form.querySelector('.hc-submit');\n        if (submitButton) {\n            \/\/ Guardar el texto original\n            const originalText = submitButton.textContent || submitButton.innerText;\n            \n            \/\/ Cambiar a indicador de carga con spinner peque\u00f1o\n            submitButton.innerHTML = '<span style=\"display: inline-block; width: 16px; height: 16px; border: 2px solid rgba(255,255,255,0.3); border-top-color: #fff; border-radius: 50%; animation: hc-spin 0.8s linear infinite; margin-right: 8px; vertical-align: middle;\"><\/span>';\n            submitButton.disabled = true;\n            submitButton.style.cursor = 'not-allowed';\n            submitButton.style.opacity = '0.6';\n            \n            setTimeout(() => {\n                \/\/ Restaurar el texto original\n                submitButton.textContent = originalText;\n                submitButton.disabled = false;\n                submitButton.style.cursor = 'pointer';\n                submitButton.style.opacity = '1';\n            }, 2000);\n        }\n\n        \/\/ PREVENIR ENV\u00cdO TRADICIONAL - SIEMPRE PRIMERO\n        event.preventDefault();\n        event.stopPropagation();\n        \n        \/\/ Limpiar mensajes anteriores\n        setStatus('', '');\n        setSuccessMessage('');\n        \n        \/\/ Validaciones b\u00e1sicas ANTES de mostrar spinner\n        let hasErrors = false;\n        \n        \/\/ Validar campos obligatorios (marca en rojo autom\u00e1ticamente y muestra mensaje)\n        if (!validateForm()) {\n            hasErrors = true;\n        }\n        \n        \/\/ Validar formato de email (marca en rojo autom\u00e1ticamente y muestra mensaje)\n        if (!validateEmailFormat()) {\n            hasErrors = true;\n        }\n        \n        \/\/ Si hay errores, no continuar (los campos ya est\u00e1n marcados en rojo y el mensaje mostrado)\n        if (hasErrors) {\n            return;\n        }\n\n        \n        \/\/ Si todo est\u00e1 bien, mostrar spinner y continuar\n        setLoading(true);\n        \n        \/\/ Obtener token de reCAPTCHA v3 si est\u00e1 configurado\n        let recaptchaToken = '';\n        if (recaptchaSiteKey && window.grecaptcha) {\n            try {\n                recaptchaToken = await window.grecaptcha.execute(recaptchaSiteKey, { action: 'submit_lead' });\n            } catch (error) {\n                console.error('[reCAPTCHA] Error obteniendo token:', error);\n                \/\/ Si falla reCAPTCHA, continuar de todos modos (fallback)\n            }\n        }\n\n        const formData = new FormData(form);\n        \n        \/\/ Procesar tel\u00e9fono: concatenar prefijo si el selector est\u00e1 visible\n        let phoneRawInput = formData.get('phone') || '';\n        let phoneCountryCode = '';\n        const phonePrefixSelect = form.querySelector('select[name=\"phone_prefix\"]');\n        \n        \/\/ Solo procesar si el selector est\u00e1 visible (display !== 'none')\n        if (phonePrefixSelect && window.getComputedStyle(phonePrefixSelect).display !== 'none') {\n            const selectedPrefix = phonePrefixSelect.value || '+34';\n            const selectedOption = phonePrefixSelect.options[phonePrefixSelect.selectedIndex];\n            phoneCountryCode = selectedOption.getAttribute('data-country') || '';\n            \n            \/\/ Concatenar prefijo solo si el n\u00famero NO empieza con +\n            if (phoneRawInput && !phoneRawInput.trim().startsWith('+')) {\n                phoneRawInput = selectedPrefix + phoneRawInput.trim();\n            }\n        }\n        \n        const phoneRaw = sanitizePhone(phoneRawInput);\n        \n        const privacyAccepted = formData.get('privacy') ? '1' : '0';\n        const leadSource = formData.get('lead_source') || 'P\u00e1gina Web';\n        const tipoOrigen = formData.get('tipo_origen') || 'Digital';\n        const regionValue = formData.get('region') || '';\n        const phoneSecondary = sanitizePhone(formData.get('phone_secondary') || '');\n\n        \/\/ Obtener program_id del select si no est\u00e1 en el contexto inicial\n        const selectedProgramId = formData.get('program_id') || programId || '';\n        const selectedProgramName = formData.get('program_name') || '';\n        \n        \/\/ Si no hay program_id, usar siempre la regi\u00f3n global de la configuraci\u00f3n\n        \/\/ Si hay program_id, usar la regi\u00f3n inferida del pa\u00eds o la global como fallback\n        let finalRegion = defaultRegion || 'Iberia';\n        if (selectedProgramId && regionValue) {\n            finalRegion = regionValue;\n        } else if (!selectedProgramId) {\n            \/\/ Sin program_id: siempre usar regi\u00f3n global\n            finalRegion = defaultRegion || 'Iberia';\n        }\n        \n        \/\/ Obtener datos de Form Guard (si est\u00e1n disponibles)\n        const clearoutPhoneStatus = formData.get('clearout_phone_status') || '';\n        const clearoutPhoneCountryCode = formData.get('clearout_phone_country_code') || '';\n        const clearoutPhoneE164 = formData.get('clearout_phone_e164') || '';\n        \n        \/\/ Usar el tel\u00e9fono validado (E164) si est\u00e1 disponible, sino usar el tel\u00e9fono raw\n        const phoneToSend = clearoutPhoneE164 || phoneRaw;\n        \n        \/\/ Obtener GCLID de Google Ads (capturado por el script de Zoho)\n        const zcGadInput = form.querySelector('#zc_gad');\n        let zcGad = '';\n        if (zcGadInput) {\n            const rawValue = zcGadInput.value || '';\n            \/\/ Filtrar valores inv\u00e1lidos: undefined, null, 'undefined', 'null', strings vac\u00edos\n            if (rawValue && rawValue !== 'undefined' && rawValue !== 'null' && rawValue.trim() !== '') {\n                zcGad = rawValue.trim();\n            }\n        }\n        \n        const payload = {\n            program_id: selectedProgramId,\n            program_name: selectedProgramName,\n            first_name: formData.get('first_name') || '',\n            last_name: formData.get('last_name') || '',\n            email: formData.get('email') || '',\n            phone: phoneToSend,\n            \/\/ Datos de Form Guard para tel\u00e9fono\n            clearout_phone_status: clearoutPhoneStatus,\n            clearout_phone_country_code: clearoutPhoneCountryCode,\n            clearout_phone_e164: clearoutPhoneE164,\n            phone_secondary: phoneSecondary,\n            \/\/ Pa\u00eds del selector de prefijos (para clearoutphone.io)\n            phone_prefix_country: phoneCountryCode,\n            \/\/ Token de reCAPTCHA v3\n            recaptcha_token: recaptchaToken,\n            country: formData.get('country') || '',\n            region: finalRegion,\n            convocatoria: formData.get('convocatoria') || '',\n            sede: formData.get('sede') || '',\n            modalidad: formData.get('modalidad') || '',\n            edicion: formData.get('edicion') || '',\n            comments: formData.get('comments') || '',\n            marketing: formData.get('marketing') ? '1' : '0',\n            privacy: privacyAccepted,\n            lead_source: leadSource,\n            tipo_origen: tipoOrigen,\n            traffic_source: formData.get('traffic_source') || '',\n            \/\/ GCLID de Google Ads (capturado por script de Zoho)\n            zc_gad: zcGad,\n            utm: {\n                campaign: formData.get('utm_campaign') || '',\n                source: formData.get('utm_source') || '',\n                medium: formData.get('utm_medium') || '',\n                term: formData.get('utm_term') || '',\n                content: formData.get('utm_content') || ''\n            }\n        };\n\n        fetch(endpoints.leads, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application\/json',\n                'X-WP-Nonce': restNonce\n            },\n            credentials: 'same-origin',\n            body: JSON.stringify(payload)\n        })\n        .then(resp => {\n            console.log('[Form] Response status:', resp.status, 'OK:', resp.ok);\n            \n            \/\/ Verificar si la respuesta es un error HTTP\n            if (!resp.ok) {\n                return resp.json().then(errorData => {\n                    console.log('[Form] Error HTTP response:', errorData);\n                    \/\/ WordPress REST API devuelve errores con 'code' y 'message'\n                    const errorCode = errorData.code || '';\n                    const errorMessage = errorData.message || errorCode || 'Error en el servidor';\n                    \/\/ Crear un objeto de error con el c\u00f3digo para poder identificarlo despu\u00e9s\n                    const error = new Error(errorMessage);\n                    error.code = errorCode;\n                    error.errorData = errorData;\n                    throw error;\n                });\n            }\n            return resp.json();\n        })\n        .then(response => {\n            \/\/ Verificar si la respuesta indica \u00e9xito\n            if (!response.success) {\n                \/\/ WordPress REST API puede devolver errores en el formato {code, message, data}\n                const errorCode = response.code || '';\n                const errorMessage = response.message || errorCode || 'No se pudo completar el env\u00edo.';\n                const error = new Error(errorMessage);\n                error.code = errorCode;\n                error.errorData = response;\n                throw error;\n            }\n            \/\/ \u00c9xito: resetear formulario\n            form.reset();\n            \n            \/\/ Si hay URL de redirect, redirigir inmediatamente\n            if (redirectUrl && redirectUrl !== '') {\n                window.location.href = redirectUrl;\n            } else {\n                \/\/ Si no hay redirect, mostrar mensaje de \u00e9xito fuera del formulario\n                setSuccessMessage(successMessage);\n                \/\/ Ocultar el formulario, el header y el spinner\n                const formHeader = container.querySelector('.hc-form-header');\n                if (formHeader) {\n                    formHeader.style.display = 'none';\n                }\n                if (form) {\n                    form.style.display = 'none';\n                }\n                const spinner = container.querySelector('.hc-form-spinner');\n                if (spinner) {\n                    spinner.style.display = 'none';\n                }\n            }\n        })\n        .catch((error) => {\n            \/\/ Manejar errores del backend\n            const errorCode = error.code || '';\n            \n            \/\/ Debug: log del error\n            console.log('[Form] Error capturado:', errorCode, error.message);\n            \n            \/\/ Error de email inv\u00e1lido (Clearout)\n            if (errorCode === 'hc_clearout_email_invalid' && emailInput) {\n                emailInput.classList.add('hc-error');\n                emailInput.setCustomValidity('Email no v\u00e1lido');\n                \/\/emailInput.reportValidity();\n                setStatus('error', error.message || 'Email no v\u00e1lido');\n                setLoading(false);\n                return;\n            }\n            \n            \/\/ Error de tel\u00e9fono inv\u00e1lido (m\u00faltiples c\u00f3digos de error)\n            const phoneErrorCodes = ['hc_clearout_phone_invalid', 'hc_lead_invalid_phone'];\n            if (phoneErrorCodes.includes(errorCode) && phoneInput) {\n                console.log('[Form] Pintando campo tel\u00e9fono de rojo');\n                phoneInput.classList.add('hc-error');\n                phoneInput.setCustomValidity(error.message || 'Tel\u00e9fono no v\u00e1lido');\n                \n                \/\/ Tambi\u00e9n marcar el selector de prefijos si existe y est\u00e1 visible\n                const phonePrefixSelect = form.querySelector('select[name=\"phone_prefix\"]');\n                if (phonePrefixSelect) {\n                    const isVisible = window.getComputedStyle(phonePrefixSelect).display !== 'none';\n                    console.log('[Form] Selector de prefijos visible:', isVisible);\n                    if (isVisible) {\n                        phonePrefixSelect.classList.add('hc-error');\n                        console.log('[Form] Selector de prefijos pintado de rojo');\n                    }\n                }\n                \n                phoneInput.reportValidity();\n                setStatus('error', error.message || 'Tel\u00e9fono no v\u00e1lido');\n                setLoading(false);\n                return;\n            }\n            \n            \/\/ Otros errores: mostrar mensaje gen\u00e9rico\n            setStatus('error', '');\n            setLoading(false);\n        })\n        .finally(() => {\n            setLoading(false);\n        });\n    });\n\n    hydrateUTMs();\n    return true;\n    } \/\/ Fin de initForm\n    \n    \/\/ Intentar ejecutar inmediatamente\n    let initialized = initForm();\n    \n    \/\/ Si no se inicializ\u00f3, intentar cuando el DOM est\u00e9 listo\n    if (!initialized) {\n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initForm);\n        } else {\n            \/\/ Si el DOM ya est\u00e1 listo pero no se encontr\u00f3, intentar de nuevo despu\u00e9s de un breve delay\n            setTimeout(function() {\n                const testContainer = document.getElementById('hc_form_1_7837');\n                if (testContainer) {\n                    initForm();\n                }\n            }, 100);\n        }\n    }\n})();\n<\/script>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d7ba66f e-con-full e-flex e-con e-child\" data-id=\"d7ba66f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-94d6667 font-32 elementor-widget elementor-widget-heading\" data-id=\"94d6667\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">EL SIGUIENTE TESTIMONIO PUEDE SER TUYO<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-235445d font-22 elementor-widget elementor-widget-text-editor\" data-id=\"235445d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Cada historia que ves aqu\u00ed es el reflejo de una decisi\u00f3n: formarse con calidad, confiar en un m\u00e9todo probado y dar el paso hacia una meta profesional. Ahora te toca a ti.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c23f9fb elementor-widget elementor-widget-html\" data-id=\"c23f9fb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n.seccion-form{\n    filter: drop-shadow(0 0 5px rgba(0, 0, 0, 0.25));\n    margin-left: -1px;\n    margin-right: -1px;\n    width: calc(100% + 2px);\n}\n\n.form-gral input:focus,\n.form-gral select:focus{\n    border-color:#B8BE14 !important;\n    box-shadow: none !important;\n}\n\n.form-gral select{\n    background-image:none;\n}\n\n.form-gral .select-caret-down-wrapper>svg{\n        color: #B8BE14;\n}\n\n#historias-1 article,\n#historias-1 article>div,\n#historias-2 article,\n#historias-2 article>div{\n        border: none;\n    box-shadow: none;\n}\n\n#historias-1 article a.elementor-post__thumbnail__link,\n#historias-2 article a.elementor-post__thumbnail__link{\n    order: 2;\n    margin: 0;\n    border-radius: 25px;\n    overflow: hidden;\n}\n\n#historias-2 article a.elementor-post__thumbnail__link{\n    height: 800px;\n}\n\n#historias-1 article a.elementor-post__thumbnail__link>div,\n#historias-2 article a.elementor-post__thumbnail__link>div{\n    height: 100%;\n}\n\n#historias-1 article .elementor-post__text,\n#historias-2 article .elementor-post__text{\n    margin: 0;\n    padding: 0;\n}\n\n#historias-1 article .elementor-post__read-more,\n#historias-2 article .elementor-post__read-more{\n    border-radius: 20px;\n    background: #B8BE14;\n    box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.25);\n    padding: 3px 15px;\n    grid-column: 2\/3;\n    grid-row: 1\/2;\n}\n\n#historias-1 article .elementor-post__read-more:hover,\n#historias-2 article .elementor-post__read-more:hover{\n    background: #08467F;\n    box-shadow: none;\n}\n\n#historias-1 .elementor-post__text,\n#historias-2 .elementor-post__text{\n    display: grid !important;\n    grid-template-columns: 1fr auto;\n    grid-gap: 15px;\n    margin-bottom: 20px !important;\n}\n\n#historias-1 .elementor-post__title,\n#historias-2 .elementor-post__title{\n    margin: 0 !important;\n}\n\n#historias-1 .elementor-post__excerpt,\n#historias-2 .elementor-post__excerpt{\n    margin: 0 !important;\n    grid-column: 1\/3;\n    grid-row: 2\/3;\n}\n\n@media(max-width:1440px){\n    #historias-2 article a.elementor-post__thumbnail__link{\n        height: 65vw;\n    }\n}\n\n@media(max-width:980px){\n    #historias-2 article a.elementor-post__thumbnail__link{\n        height: 500px;\n        width: 50%;\n        margin-inline: auto;\n    }\n}\n\n@media(max-width:767px){\n    #historias-2 article a.elementor-post__thumbnail__link{\n        height: 300px;\n        width: 80%;\n    }\n    \n    #historias-1 .elementor-post__excerpt,\n    #historias-2 .elementor-post__excerpt{\n        margin: 0 !important;\n        grid-column: 1\/2;\n        grid-row: 2\/3;\n    }\n    \n    #historias-1 article .elementor-post__read-more,\n    #historias-2 article .elementor-post__read-more{\n        border-radius: 20px;\n        background: #B8BE14;\n        box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.25);\n        padding: 3px 15px;\n        grid-column: 1\/2;\n        grid-row: 3\/4;\n    }\n    \n    #historias-1 .elementor-post__text,\n    #historias-2 .elementor-post__text{\n        display: grid !important;\n        grid-template-columns: 100%;\n    }\n}\n  margin: 0 auto;\n  max-width: 1400px;     \/* \ud83d\udc49 aqu\u00ed controlas qu\u00e9 tan ancha es la card *\/\n}\n\n<\/style>\n\n<script>\njQuery( document ).ready(function() {\n    \n    jQuery(\"#historias-1 .elementor-post__title\").addClass(\"font-26\");\n    \n    jQuery(\"#historias-1 .elementor-post__excerpt\").addClass(\"font-17\");\n    \n    jQuery(\"#historias-2 .elementor-post__title\").addClass(\"font-26\");\n    \n    jQuery(\"#historias-2 .elementor-post__excerpt\").addClass(\"font-17\");\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Historias de \u00c9xito Cuando la decisi\u00f3n correcta transforma una carrera En AMIR hemos acompa\u00f1ado a miles de profesionales de la salud en procesos que cambian vidas. Cada historia que comienza con una duda, un sue\u00f1o o una meta profesional termina convirti\u00e9ndose en un logro real: una plaza, una maestr\u00eda, una pr\u00e1ctica renovada, una consulta propia, &hellip;<\/p>\n","protected":false},"author":12,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_genesis_block_theme_hide_title":true,"footnotes":""},"class_list":["post-557","page","type-page","status-publish","hentry","post","without-featured-image"],"acf":[],"_links":{"self":[{"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/pages\/557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/comments?post=557"}],"version-history":[{"count":704,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/pages\/557\/revisions"}],"predecessor-version":[{"id":17969,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/pages\/557\/revisions\/17969"}],"wp:attachment":[{"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/media?parent=557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}