{"id":2152,"date":"2025-11-21T17:04:23","date_gmt":"2025-11-21T17:04:23","guid":{"rendered":"https:\/\/amir.tag25.com\/?post_type=product&#038;p=2152"},"modified":"2026-02-11T19:46:29","modified_gmt":"2026-02-11T19:46:29","slug":"sexologia-terapia-pareja","status":"publish","type":"product","link":"https:\/\/qa-server.amircolombia.com\/mexico\/masters-posgrados\/sexologia-terapia-pareja\/","title":{"rendered":"M\u00e1ster en Sexolog\u00eda y Terapia de Pareja"},"content":{"rendered":"<h2>Un m\u00e1ster con enfoque cl\u00ednico, bases cient\u00edficas y \u00e9ticas.<\/h2>\n<p>Formarte en sexolog\u00eda cl\u00ednica y terapia de pareja hoy es m\u00e1s que una opci\u00f3n acad\u00e9mica: es una respuesta a la creciente necesidad de profesionales capaces de abordar<strong> salud sexual, v\u00ednculos afectivos y bienestar emocional <\/strong>con rigor, \u00e9tica y sensibilidad humana.<\/p>\n<p>Este es el \u00fanico M\u00e1ster con <strong>titulaci\u00f3n europea UDIMA<\/strong>, aval cl\u00ednico de <strong>SOCOMEG<\/strong>, y un enfoque 100 % pr\u00e1ctico basado en casos reales. Una formaci\u00f3n s\u00f3lida, cient\u00edfica y moderna para empezar a <strong>ejercer con seguridad desde el primer d\u00eda.<\/strong><\/p>\n<ul>\n<li>ONLINE<\/li>\n<li>Flexibilidad Total<\/li>\n<li>Aval Europeo y Cl\u00ednico<\/li>\n<\/ul>\n<p><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/mask_group-1.webp\" sizes=\"(max-width: 510px) 100vw, 510px\" srcset=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/mask_group-1.webp 510w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/mask_group-1-300x299.webp 300w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/mask_group-1-100x100.webp 100w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/mask_group-1-150x150.webp 150w\" alt=\"\" width=\"510\" height=\"508\" title=\"\"><\/p>\n<style>\n<p>  \/* Opcional: estilo para marcar el campo con error *\/<br \/>  .campo-error {<br \/>    border-color: #ff0000 !important;<br \/>  }<br \/><\/style>\n<p><img decoding=\"async\" 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\" sizes=\"(max-width: 528px) 100vw, 528px\" 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\" alt=\"\" width=\"528\" height=\"404\" title=\"\"><\/p>\n<h2>Nuestros asesores expertos<\/h2>\n<h2>te guiar\u00e1n en cada paso&#8230;<\/h2>\n<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=\"7ec5f95548\" 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=\"7ec5f95548\"\n     data-program-id=\"1884\"\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;:false,&quot;sede&quot;:false,&quot;modalidad&quot;:false,&quot;edicion&quot;:false}\">\n    <form class=\"hc-form hc-api-form\" novalidate>\n        <input type=\"hidden\" name=\"program_id\" value=\"1884\">\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_4693');\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_4693');\n                if (testContainer) {\n                    initForm();\n                }\n            }, 100);\n        }\n    }\n})();\n<\/script>\n\n<h2>Detalles clave<\/h2>\n<ul>\n<li><strong>Duraci\u00f3n:<\/strong>8 meses de formaci\u00f3n (1500 horas te\u00f3rico-pr\u00e1cticas)<\/li>\n<li><strong>Modalidad:<\/strong> Online<\/li>\n<li><strong>Certificaci\u00f3n:<\/strong> T\u00edtulo Propio de M\u00e1ster Espa\u00f1ol (60 ECTS) acreditado por la UDIMA. Avalado por SOCOMEG.<\/li>\n<li><strong>Acceso:<\/strong> Plataforma Blackboard 24\/7 | Clases en vivo y grabadas<\/li>\n<li>Inscripciones abiertas | Cupos limitados<\/li>\n<\/ul>\n<h2>\u00a0Una formaci\u00f3n cl\u00ednica y \u00e9tica para una demanda en crecimiento<\/h2>\n<p>La salud sexual y las din\u00e1micas de pareja se han convertido en pilares centrales del bienestar psicol\u00f3gico en la pr\u00e1ctica cl\u00ednica actual.<\/p>\n<p>El M\u00e1ster de AMIR te da un dominio completo de los procedimientos de evaluaci\u00f3n, prevenci\u00f3n, intervenci\u00f3n y acompa\u00f1amiento, con un enfoque biopsicosocial y \u00e9tico, garantizando que puedas ejercer con responsabilidad y seguridad.<\/p>\n<h2>M\u00e1s del 50 % de las parejas buscan orientaci\u00f3n profesional en alg\u00fan momento de su relaci\u00f3n.<\/h2>\n<h2>Metodolog\u00eda AMIR: Expertos y Casos Reales<\/h2>\n<p>Una metodolog\u00eda dise\u00f1ada para convertir conocimiento en pr\u00e1ctica cl\u00ednica real.<\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/App.svg\" alt=\"\" width=\"54\" height=\"54\" title=\"\"><\/figure>\n<h3>Sesiones Cl\u00ednicas Mensuales en Streaming<\/h3>\n<p>Participa activamente en la evaluaci\u00f3n e intervenci\u00f3n de casos reales presentados por los docentes.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/App-1.svg\" alt=\"\" width=\"54\" height=\"54\" title=\"\"><\/figure>\n<h3>100 % Online y Flexible<\/h3>\n<p>Accede a v\u00eddeos, audios, PDF, res\u00famenes y recursos especializados en Blackboard 24\/7.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/App-7.svg\" alt=\"\" width=\"54\" height=\"54\" title=\"\"><\/figure>\n<h3>Profesorado de Vanguardia<\/h3>\n<p>Psic\u00f3logos y m\u00e9dicos con pr\u00e1ctica cl\u00ednica activa en consultas privadas y hospitales, que ense\u00f1an desde la experiencia directa.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/App-4.svg\" alt=\"\" width=\"54\" height=\"54\" title=\"\"><\/figure>\n<h3>Acompa\u00f1amiento Personalizado<\/h3>\n<p>Tutor\u00edas, seguimiento y orientaci\u00f3n constante de los docentes a lo largo de la formaci\u00f3n.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/App-6.svg\" alt=\"\" width=\"54\" height=\"54\" title=\"\"><\/figure>\n<h3>Rigor Cient\u00edfico y Est\u00e1ndares \u00c9ticos<\/h3>\n<p>Todas las t\u00e9cnicas est\u00e1n basadas en evidencia, con una mirada respetuosa, moderna y profesional.<\/p>\n<h2>\u00bfPor qu\u00e9 estudiar el M\u00e1ster en Sexolog\u00eda y Terapia de Pareja con AMIR?<\/h2>\n<p>Una especializaci\u00f3n necesaria, vigente y con oportunidades reales de ejercicio inmediato.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/Container.svg\" alt=\"\" width=\"50\" height=\"50\" title=\"\"><\/figure>\n<h3>Salida Laboral Inmediata<\/h3>\n<p>Aprende herramientas cl\u00ednicas listas para aplicar desde el primer d\u00eda en consulta psicol\u00f3gica, atenci\u00f3n privada o intervenci\u00f3n terap\u00e9utica.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/Container-5.svg\" alt=\"\" width=\"50\" height=\"50\" title=\"\"><\/figure>\n<h3>Aval Europeo con Alto Reconocimiento<\/h3>\n<p>Obt\u00e9n un M\u00e1ster Propio Espa\u00f1ol de 60 ECTS, acreditado por UDIMA y avalado por SOCOMEG, con validez internacional.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/Container-3.svg\" alt=\"\" width=\"50\" height=\"50\" title=\"\"><\/figure>\n<h3>Networking con L\u00edderes Cl\u00ednicos<\/h3>\n<p>Con\u00e9ctate con docentes, profesionales del sector y otros estudiantes apasionados por la salud sexual y emocional.<\/p>\n<figure><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/App-3.svg\" alt=\"\" width=\"54\" height=\"54\" title=\"\"><\/figure>\n<h3>Perspectiva Biopsicosocial Integral<\/h3>\n<p>Comprende al paciente desde sus dimensiones biol\u00f3gicas, psicol\u00f3gicas y sociales, logrando intervenciones m\u00e1s profundas y efectivas.<\/p>\n<h2>Homologaci\u00f3n de t\u00edtulo<\/h2>\n<p>La\u00a0homologaci\u00f3n del t\u00edtulo\u00a0de medicina es un\u00a0<strong>requisito indispensable\u00a0para que un ciudadano extranjero y no comunitario<\/strong> pueda presentarse al\u00a0Examen MIR. Desde el a\u00f1o 2010 se exige tener el\u00a0t\u00edtulo\u00a0ya homologado\u00a0en el momento de efectuar la inscripci\u00f3n\u00a0al MIR. Al tratarse de un documento imprescindible para la inscripci\u00f3n en el examen MIR,\u00a0se recomienda iniciar la solicitud lo antes posible.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/doctor_holding_medical_stamp_put_prescription_paper_health_care_exam_hand_physician_putting_seal_checkup_report_giving_medicine_patient_consultation_close_up_1.webp\" sizes=\"(max-width: 1348px) 100vw, 1348px\" srcset=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/doctor_holding_medical_stamp_put_prescription_paper_health_care_exam_hand_physician_putting_seal_checkup_report_giving_medicine_patient_consultation_close_up_1.webp 1348w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/doctor_holding_medical_stamp_put_prescription_paper_health_care_exam_hand_physician_putting_seal_checkup_report_giving_medicine_patient_consultation_close_up_1-300x177.webp 300w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/doctor_holding_medical_stamp_put_prescription_paper_health_care_exam_hand_physician_putting_seal_checkup_report_giving_medicine_patient_consultation_close_up_1-600x354.webp 600w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/doctor_holding_medical_stamp_put_prescription_paper_health_care_exam_hand_physician_putting_seal_checkup_report_giving_medicine_patient_consultation_close_up_1-1024x605.webp 1024w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/doctor_holding_medical_stamp_put_prescription_paper_health_care_exam_hand_physician_putting_seal_checkup_report_giving_medicine_patient_consultation_close_up_1-768x454.webp 768w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/doctor_holding_medical_stamp_put_prescription_paper_health_care_exam_hand_physician_putting_seal_checkup_report_giving_medicine_patient_consultation_close_up_1-1200x709.webp 1200w\" alt=\"\" width=\"1348\" height=\"796\" title=\"\"><\/p>\n<h2>Acreditaci\u00f3n UDIMA:<\/p>\n<p>M\u00e1ster Propio en Medicina Cl\u00ednica<\/h2>\n<p>Gracias al convenio entre AMIR y la\u00a0Universidad a Distancia de Madrid (UDIMA), nuestros cursos de preparaci\u00f3n al examen MIR pueden ser reconocidos como\u00a0M\u00e1ster Propio en Medicina Cl\u00ednica, otorgado por una de las universidades m\u00e1s prestigiosas de Europa en educaci\u00f3n a distancia.<\/p>\n<ul>\n<li>El\u00a0Curso de Sexto MIR\u00a0puede reconocerse como M\u00e1ster Propio de\u00a0120 cr\u00e9ditos ECTS.<\/li>\n<li>Los cursos de duraci\u00f3n igual o superior a 7 meses, como\u00a0M\u00e1ster Propio de 60 cr\u00e9ditos ECTS.<\/li>\n<\/ul>\n<p><em>*Aplica para las <strong>modalidades\u00a0presencial, virtual e h\u00edbrida<\/strong>\u00a0siempre que el estudiante cumpla con los requisitos acad\u00e9micos y de permanencia establecidos.<\/em><\/p>\n<p><strong style=\"color: #b8be14;\">Una preparaci\u00f3n, dos logros:\u00a0tu plaza MIR y tu titulaci\u00f3n europea.<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/aliado_2_udima.webp\" sizes=\"(max-width: 1332px) 100vw, 1332px\" srcset=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/aliado_2_udima.webp 1332w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/aliado_2_udima-300x120.webp 300w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/aliado_2_udima-600x240.webp 600w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/aliado_2_udima-1024x409.webp 1024w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/aliado_2_udima-768x307.webp 768w, https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/aliado_2_udima-1200x479.webp 1200w\" alt=\"\" width=\"1332\" height=\"532\" title=\"\"><\/p>\n<h2>Historias de \u00e9xito<\/h2>\n<div style=\"width: 640px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-2152-1\" width=\"640\" height=\"360\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/YTDown.com_YouTube_Por-que-decidiste-hacer-el-master-en-Sex_Media__DyGFrBLcLI_001_1080p.mp4?_=1\" \/><a href=\"https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/YTDown.com_YouTube_Por-que-decidiste-hacer-el-master-en-Sex_Media__DyGFrBLcLI_001_1080p.mp4\">https:\/\/qa-server.amircolombia.com\/mexico\/wp-content\/uploads\/2025\/11\/YTDown.com_YouTube_Por-que-decidiste-hacer-el-master-en-Sex_Media__DyGFrBLcLI_001_1080p.mp4<\/a><\/video><\/div>\n<p>Hoy, nuestros egresados ya ejercen en cl\u00ednicas especializadas, laboratorios tricol\u00f3gicos y centros de restauraci\u00f3n capilar en Latinoam\u00e9rica y Europa.<\/p>\n<h2>Acreditaci\u00f3n UDIMA y SOCOMEG<\/h2>\n<p>Gracias al convenio AMIR + UDIMA (Universidad a Distancia de Madrid), obtienes un M\u00e1ster Propio oficial espa\u00f1ol con certificaci\u00f3n acad\u00e9mica internacional.<\/p>\n<ul role=\"list\">\n<li><strong>M\u00e1ster Propio en Sexolog\u00eda y Terapia de Pareja<\/strong> (60 ECTS)<\/li>\n<li><strong>Aval cient\u00edfico de SOCOMEG<\/strong>, la entidad l\u00edder en Medicina General en Colombia<\/li>\n<li><strong>Diploma emitido en Blockchain<\/strong>, con verificaci\u00f3n por c\u00f3digo QR<\/li>\n<li><strong>Validez internacional<\/strong> para ejercicio cl\u00ednico y acad\u00e9mico<\/li>\n<\/ul>\n<p>Seguridad, credibilidad y reconocimiento global para tu carrera profesional.<\/p>\n<h2>Tu curso incluye:<\/h2>\n<ul>\n<li>Manuales AMIR impresos y digitales.<\/li>\n<li>Curso de Memorizaci\u00f3n Genius Gratis.<\/li>\n<li>Clases en vivo y grabadas.<\/li>\n<li>Acceso 24\/7 a la App del alumno.<\/li>\n<li>40 simulacros y evaluaciones progresivas.<\/li>\n<li>Acompa\u00f1amiento personalizado y sesiones con expositores MIR.<\/li>\n<li>Entrenamiento mental y estrat\u00e9gico con MIR Coach.<\/li>\n<li>Garant\u00eda de repetici\u00f3n.<\/li>\n<\/ul>\n<p><a role=\"button\"><\/p>\n<p>DESCARGAR BROCHURE<\/p>\n<p><\/a><\/p>\n<details id=\"e-n-accordion-item-2500\">\n<summary tabindex=\"0\" data-accordion-index=\"1\" aria-expanded=\"false\" aria-controls=\"e-n-accordion-item-2500\">Preguntas frecuentes<\/summary>\n<h2>\u00bfQu\u00e9 hace un sex\u00f3logo cl\u00ednico y qu\u00e9 oportunidades existen hoy en Colombia y LATAM?<\/h2>\n<p style=\"font-weight: 400;\">El sex\u00f3logo acompa\u00f1a:<\/p>\n<ul>\n<li>Disfunciones sexuales (deseo, excitaci\u00f3n, dolor, anorgasmia, disfunci\u00f3n er\u00e9ctil, etc.).<\/li>\n<li>Terapia de pareja y comunicaci\u00f3n afectiva.<\/li>\n<li>Procesos psicosexuales basados en evidencia.<\/li>\n<\/ul>\n<p style=\"font-weight: 400;\">La demanda crece m\u00e1s del <strong>30% en la regi\u00f3n<\/strong> por ansiedad, estr\u00e9s, redes sociales y mayor apertura al bienestar emocional.<\/p>\n<h2>\u00bfQu\u00e9 debo estudiar para ejercer sexolog\u00eda de forma \u00e9tica y segura?<\/h2>\n<ul>\n<li>Formaci\u00f3n cl\u00ednica rigurosa.<\/li>\n<li>Enfoque multidisciplinario (psicolog\u00eda, medicina, neurociencia, pareja).<\/li>\n<li>Supervisi\u00f3n profesional.<\/li>\n<li>Marco \u00e9tico actualizado.<\/li>\n<li>Metodolog\u00edas basadas en evidencia (CBT, terapia sist\u00e9mica, enfoque integrativo).<\/li>\n<\/ul>\n<p style=\"font-weight: 400;\">El M\u00e1ster AMIR + UDIMA ofrece esta estructura universitaria europea.<\/p>\n<h2>\u00bfC\u00f3mo mejora mi pr\u00e1ctica cl\u00ednica un m\u00e1ster en sexolog\u00eda?<\/h2>\n<ul>\n<li>Ampl\u00eda tus servicios profesionales.<\/li>\n<li>Mejora diagn\u00f3stico y abordaje de disfunciones.<\/li>\n<li>Permite ofrecer terapia de pareja como l\u00ednea adicional.<\/li>\n<li>Incrementa la continuidad y el valor por consulta.<\/li>\n<li>Abre oportunidades en consulta privada, teleconsulta y centros especializados.<\/li>\n<li><\/li>\n<\/ul>\n<h2>\u00bfCurso b\u00e1sico o M\u00e1ster cl\u00ednico avalado? Diferencias reales<\/h2>\n<ul>\n<li>\n<table style=\"font-weight: 400;\">\n<tbody>\n<tr>\n<td><strong>Curso b\u00e1sico<\/strong><\/td>\n<td><strong>M\u00e1ster Cl\u00ednico AMIR + UDIMA<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Informaci\u00f3n superficial<\/td>\n<td>Diagn\u00f3stico + intervenci\u00f3n completa<\/td>\n<\/tr>\n<tr>\n<td>Sin supervisi\u00f3n<\/td>\n<td>Casos reales supervisados<\/td>\n<\/tr>\n<tr>\n<td>No certifica pr\u00e1ctica<\/td>\n<td>Titulaci\u00f3n europea 60 ECTS<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<h2>\u00bfQu\u00e9 tan alta es la demanda de profesionales en sexolog\u00eda y terapia de pareja?<\/h2>\n<ul>\n<li>\n<p style=\"font-weight: 400;\">Muy alta. En LATAM:<\/p>\n<ul>\n<li>Crecen los casos de ansiedad sexual, disfunciones y rupturas de pareja.<\/li>\n<li>Solo un n\u00famero peque\u00f1o de profesionales tiene formaci\u00f3n cl\u00ednica formal.<\/li>\n<li>La teleconsulta ha incrementado la demanda de atenci\u00f3n especializada.<\/li>\n<\/ul>\n<p style=\"font-weight: 400;\">La formaci\u00f3n adecuada permite atender esta necesidad real, con rigor cient\u00edfico y seguridad para el paciente.<\/p>\n<\/li>\n<\/ul>\n<\/details>\n<h2>\u00bfQu\u00e9 hace un sex\u00f3logo cl\u00ednico y qu\u00e9 oportunidades existen hoy en Colombia y LATAM?<\/h2>\n<p style=\"font-weight: 400;\">El sex\u00f3logo acompa\u00f1a:<\/p>\n<ul>\n<li>Disfunciones sexuales (deseo, excitaci\u00f3n, dolor, anorgasmia, disfunci\u00f3n er\u00e9ctil, etc.).<\/li>\n<li>Terapia de pareja y comunicaci\u00f3n afectiva.<\/li>\n<li>Procesos psicosexuales basados en evidencia.<\/li>\n<\/ul>\n<p style=\"font-weight: 400;\">La demanda crece m\u00e1s del <strong>30% en la regi\u00f3n<\/strong> por ansiedad, estr\u00e9s, redes sociales y mayor apertura al bienestar emocional.<\/p>\n<h2>\u00bfQu\u00e9 debo estudiar para ejercer sexolog\u00eda de forma \u00e9tica y segura?<\/h2>\n<ul>\n<li>Formaci\u00f3n cl\u00ednica rigurosa.<\/li>\n<li>Enfoque multidisciplinario (psicolog\u00eda, medicina, neurociencia, pareja).<\/li>\n<li>Supervisi\u00f3n profesional.<\/li>\n<li>Marco \u00e9tico actualizado.<\/li>\n<li>Metodolog\u00edas basadas en evidencia (CBT, terapia sist\u00e9mica, enfoque integrativo).<\/li>\n<\/ul>\n<p style=\"font-weight: 400;\">El M\u00e1ster AMIR + UDIMA ofrece esta estructura universitaria europea.<\/p>\n<h2>\u00bfC\u00f3mo mejora mi pr\u00e1ctica cl\u00ednica un m\u00e1ster en sexolog\u00eda?<\/h2>\n<ul>\n<li>Ampl\u00eda tus servicios profesionales.<\/li>\n<li>Mejora diagn\u00f3stico y abordaje de disfunciones.<\/li>\n<li>Permite ofrecer terapia de pareja como l\u00ednea adicional.<\/li>\n<li>Incrementa la continuidad y el valor por consulta.<\/li>\n<li>Abre oportunidades en consulta privada, teleconsulta y centros especializados.<\/li>\n<li><\/li>\n<\/ul>\n<h2>\u00bfCurso b\u00e1sico o M\u00e1ster cl\u00ednico avalado? Diferencias reales<\/h2>\n<ul>\n<li>\n<table style=\"font-weight: 400;\">\n<tbody>\n<tr>\n<td><strong>Curso b\u00e1sico<\/strong><\/td>\n<td><strong>M\u00e1ster Cl\u00ednico AMIR + UDIMA<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Informaci\u00f3n superficial<\/td>\n<td>Diagn\u00f3stico + intervenci\u00f3n completa<\/td>\n<\/tr>\n<tr>\n<td>Sin supervisi\u00f3n<\/td>\n<td>Casos reales supervisados<\/td>\n<\/tr>\n<tr>\n<td>No certifica pr\u00e1ctica<\/td>\n<td>Titulaci\u00f3n europea 60 ECTS<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/li>\n<\/ul>\n<h2>\u00bfQu\u00e9 tan alta es la demanda de profesionales en sexolog\u00eda y terapia de pareja?<\/h2>\n<ul>\n<li>\n<p style=\"font-weight: 400;\">Muy alta. En LATAM:<\/p>\n<ul>\n<li>Crecen los casos de ansiedad sexual, disfunciones y rupturas de pareja.<\/li>\n<li>Solo un n\u00famero peque\u00f1o de profesionales tiene formaci\u00f3n cl\u00ednica formal.<\/li>\n<li>La teleconsulta ha incrementado la demanda de atenci\u00f3n especializada.<\/li>\n<\/ul>\n<p style=\"font-weight: 400;\">La formaci\u00f3n adecuada permite atender esta necesidad real, con rigor cient\u00edfico y seguridad para el paciente.<\/p>\n<\/li>\n<\/ul>\n<h2>Todo lo que necesitas en un solo lugar<\/h2>\n<p>Da el siguiente paso en tu carrera cl\u00ednica. Convi\u00e9rtete en un profesional capaz de intervenir con seguridad, sensibilidad y ciencia en dos \u00e1reas centrales del bienestar humano: la sexualidad y las relaciones.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un m\u00e1ster con enfoque cl\u00ednico, bases cient\u00edficas y \u00e9ticas. Formarte en sexolog\u00eda cl\u00ednica y terapia de pareja hoy es m\u00e1s que una opci\u00f3n acad\u00e9mica: es una respuesta a la creciente necesidad de profesionales capaces de abordar salud sexual, v\u00ednculos afectivos y bienestar emocional con rigor, \u00e9tica y sensibilidad humana. Este es el \u00fanico M\u00e1ster con &hellip;<\/p>\n","protected":false},"featured_media":2252,"template":"","meta":{"_acf_changed":false,"_genesis_block_theme_hide_title":false},"product_brand":[],"product_cat":[68],"product_tag":[63],"class_list":{"0":"post-2152","1":"product","2":"type-product","3":"status-publish","4":"has-post-thumbnail","6":"product_cat-masters-posgrados","7":"product_tag-master","8":"post","9":"with-featured-image","11":"first","12":"instock","13":"shipping-taxable","14":"product-type-simple"},"acf":[],"_links":{"self":[{"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/product\/2152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/product"}],"about":[{"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/types\/product"}],"version-history":[{"count":137,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/product\/2152\/revisions"}],"predecessor-version":[{"id":16744,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/product\/2152\/revisions\/16744"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/media\/2252"}],"wp:attachment":[{"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/media?parent=2152"}],"wp:term":[{"taxonomy":"product_brand","embeddable":true,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/product_brand?post=2152"},{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/product_cat?post=2152"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/qa-server.amircolombia.com\/mexico\/wp-json\/wp\/v2\/product_tag?post=2152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}