<br />
<b>Deprecated</b>:  Elementor\Modules\GlobalClasses\Atomic_Global_Styles::get_cache_root_key(): Implicitly marking parameter $key as nullable is deprecated, the explicit nullable type must be used instead in <b>/home/incantomodelosco/public_html/cursos/wp-content/plugins/elementor/modules/global-classes/atomic-global-styles.php</b> on line <b>410</b><br />
{"id":14,"date":"2026-07-03T15:52:59","date_gmt":"2026-07-03T15:52:59","guid":{"rendered":"https:\/\/incantomodelos.com\/cursos\/mi-cuenta\/"},"modified":"2026-07-30T23:10:58","modified_gmt":"2026-07-30T23:10:58","slug":"mi-cuenta","status":"publish","type":"page","link":"https:\/\/incantomodelos.com\/cursos\/mi-cuenta\/","title":{"rendered":"Mi cuenta"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"14\" class=\"elementor elementor-14\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d60da29 e-con e-atomic-element e-flexbox-base e-800a946 \" data-id=\"d60da29\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"d60da29\" data-e-type=\"e-flexbox\" data-id=\"d60da29\">\n    \t\t<div class=\"elementor-element elementor-element-6e18aaa elementor-widget elementor-widget-html\" data-id=\"6e18aaa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\r\n  ============================================================================\r\n  INCANTO MODELOS \u00b7 PORTAL DE ALUMNO \"MIS CURSOS\" \u00b7 v2 self-contained\r\n  ============================================================================\r\n  D\u00d3NDE PEGARLO (Theme Builder de Elementor Pro):\r\n    Elementor \u2192 Theme Builder \u2192 Single (o Page) \u2192 Conditions: P\u00e1gina \"Mi cuenta\"\r\n    (\/cursos\/mi-cuenta\/ y TODOS sus endpoints: pedidos, descargas, direcciones,\r\n     editar-cuenta, perdiste-tu-contrasena, cerrar-sesion, etc.).\r\n    Poner TODO este bloque en UN SOLO widget dentro de un Container.\r\n\r\n  CONFIGURACI\u00d3N DEL CONTAINER:\r\n    Ancho: FULL WIDTH \u00b7 Padding: 0 \u00b7 Gap (Elementos): 0 \u00b7 Margen: 0.\r\n    Header y footer salen de sus plantillas globales.\r\n\r\n  \u2605 IMPORTANTE \u2014 el shortcode [woocommerce_my_account] es OBLIGATORIO:\r\n    Este portal usa el output del shortcode para (1) mostrar login\/registro cuando\r\n    la visitante est\u00e1 DESLOGUEADA y (2) DETECTAR el estado de sesi\u00f3n + leer el link\r\n    de \"Cerrar sesi\u00f3n\" cuando est\u00e1 LOGUEADA. El shortcode DEBE quedar DENTRO del\r\n    contenedor #inc-acc-woo de este HTML.\r\n    C\u00f3mo lograrlo:\r\n      - Peg\u00e1 TODO este bloque en el widget \"Custom HTML\" de ElementsKit (procesa\r\n        shortcodes nativamente). El [woocommerce_my_account] literal de m\u00e1s abajo\r\n        (dentro de #inc-acc-woo) se renderiza solo. \u2190 RECOMENDADO.\r\n      - Alternativa: dej\u00e1 este HTML sin el shortcode y coloc\u00e1 un widget \"Shortcode\"\r\n        con [woocommerce_my_account] justo dentro de un HTML #inc-acc-woo. O en el\r\n        child theme: add_filter('widget_text','do_shortcode');\r\n    #inc-acc-woo arranca oculto visualmente pero PRESENTE en el DOM (el portal lo\r\n    lee). Cuando la alumna est\u00e1 deslogueada, se hace visible para mostrar el login.\r\n\r\n  C\u00d3MO FUNCIONA (CERO PHP):\r\n    - DESLOGUEADA \u2192 detecta #inc-acc-woo .woocommerce-form-login (o -register):\r\n      revela el skin de login\/registro de Woo (el mismo que ya funcionaba) y oculta\r\n      el portal.\r\n    - LOGUEADA \u2192 detecta .woocommerce-MyAccount-navigation \/ -content:\r\n      oculta el output de Woo y renderiza el portal custom \"Mis Cursos\".\r\n      Fetchea (credentials:'same-origin') \/cursos\/mi-cuenta\/descargas\/ y\r\n      \/cursos\/mi-cuenta\/pedidos\/, parsea con DOMParser cursos+descargas+pedidos,\r\n      enriquece cada curso por Store API (slug\u2192id, imagen) y trae las lecciones\r\n      por wp\/v2\/product\/{id}?_fields=acf (acf.lecciones=[{titulo,duracion,video_url}]).\r\n      Videos embebidos on-demand (iframe 16:9) v\u00eda helper toEmbed (YouTube\/Vimeo).\r\n      Materiales = links de descarga protegidos por Woo (gating real por sesi\u00f3n).\r\n\r\n  SEGURIDAD \/ GATING:\r\n    - PDF\/materiales \u2192 links de descarga de Woo, protegidos por sesi\u00f3n + compra. \u2714\r\n    - Videos \u2192 salen de ACF (REST p\u00fablico). El portal solo los muestra a quien est\u00e1\r\n      logueada y tiene el curso, pero la URL en s\u00ed no est\u00e1 cifrada: usar Vimeo \/\r\n      YouTube NO listado (unlisted). No hay gating server-side (ser\u00eda PHP).\r\n\r\n  SCOPE: todo el CSS bajo #inc-account \u00b7 clases prefijadas inc-acc__ \u00b7 reset * bajo\r\n  el id. Dos temas (turquesa default + neutro) + reglas de contraste de botones.\r\n-->\r\n\r\n<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Lato:wght@400;500;700;900&display=swap');\r\n\r\n  #inc-account, #inc-account *, #inc-account *::before, #inc-account *::after { box-sizing: border-box; }\r\n  #inc-account {\r\n    --inc-turq:       #23222B;\r\n    --inc-turq-deep:  #15141B;\r\n    --inc-turq-soft:  #F2ECEE;\r\n    --inc-turq-text:  #23222B;\r\n    --inc-turq-title: #23222B;\r\n    --inc-turq-cta-h: #33323D;\r\n    --inc-ink:        #23222B;\r\n    --inc-ink-2:      #4A4952;\r\n    --inc-mauve:      #C4C9D6;\r\n    --inc-mauve-soft: #EBEDF2;\r\n    --inc-paper:      #FFFFFF;\r\n    --inc-paper-2:    #F6F4F0;\r\n    --inc-line:       #E3E0DA;\r\n    --inc-muted:      #7A767C;\r\n    --inc-success:    #2E7D5B;\r\n    --inc-danger:     #C0392B;\r\n    --inc-danger-deep:#96271B;\r\n    --inc-font:       \"Lato\", \"Helvetica Neue\", Arial, sans-serif;\r\n    --inc-display:    \"N27\", \"Space Grotesk\", \"Helvetica Neue\", Arial, sans-serif;\r\n    --inc-pink:       #DAC9CD;\r\n    --inc-peri:       #C4C9D6;\r\n    --inc-sage:       #BDC5B1;\r\n    --inc-sage-deep:  #A7B098;\r\n    --inc-radius:     16px;\r\n    --inc-radius-sm:  10px;\r\n    --inc-pill:       999px;\r\n    --inc-pad-x:      clamp(16px, 4vw, 56px);\r\n    --inc-maxw:       1200px;\r\n    --inc-shadow:     0 24px 48px -28px rgba(60,60,59,.28);\r\n    font-family: var(--inc-font);\r\n    color: var(--inc-ink);\r\n    background: var(--inc-paper);\r\n    line-height: 1.55;\r\n    -webkit-font-smoothing: antialiased;\r\n  }\r\n\r\n  #inc-account a { color: inherit; text-decoration: none; }\r\n  \/* Fix contraste: los CTA\/botones rellenos que son <a> deben conservar su texto claro\r\n     y ganarle a `#inc-account a{color:inherit}` (1,0,1). Antepongo #inc-account al\r\n     selector de clase \u2192 1,1,0. En la regla BASE para que valga en AMBOS temas. *\/\r\n  #inc-account .inc-acc__help-btn--ghost { color: var(--inc-ink); }\r\n  #inc-account .inc-acc__help-btn--ghost:hover { color: #fff; }\r\n  #inc-account .inc-acc__help-btn--primary { color: #fff; }\r\n  \/* Botones rellenos del portal que son <a>: texto claro prefijado con el #id *\/\r\n  #inc-account a.inc-acc__btn--solid,\r\n  #inc-account a.inc-acc__logout,\r\n  #inc-account a.inc-acc__nav-link.is-active,\r\n  #inc-account a.inc-acc__mat { color: #fff; }\r\n  #inc-account a.inc-acc__btn--ghost,\r\n  #inc-account a.inc-acc__nav-link { color: var(--inc-ink-2); }\r\n  \/* Link \"Salir\": anchor rojo. Prefijo con #id (1,2,0 \/ 1,2,1) para ganarle\r\n     a la regla generica `#inc-account a.inc-acc__nav-link` (1,1,0). *\/\r\n  #inc-account a.inc-acc__nav-link.inc-acc__nav-link--out { color: var(--inc-danger); }\r\n  #inc-account a.inc-acc__nav-link.inc-acc__nav-link--out:hover { color: #fff; }\r\n  \/* Boton \"Ver\" de la tabla de Pedidos: anchor. Prefijo con #id para ganarle\r\n     a `#inc-account a{color:inherit}` (1,0,1) en reposo y en hover. *\/\r\n  #inc-account a.inc-acc__order-view { color: var(--inc-ink); }\r\n  #inc-account a.inc-acc__order-view:hover { color: #fff; }\r\n  #inc-account img { max-width: 100%; display: block; }\r\n\r\n  \/* ===== Blindaje de titulares vs Kit de Elementor ===== *\/\r\n  #inc-account .inc-acc__title,\r\n  #inc-account .inc-acc__help-title,\r\n  #inc-account .inc-acc__sec-title,\r\n  #inc-account .inc-acc__course-title,\r\n  #inc-account h1.inc-acc__title,\r\n  #inc-account h2.inc-acc__help-title,\r\n  #inc-account .woocommerce h2,\r\n  #inc-account .woocommerce h3 {\r\n    font-family: var(--inc-display) !important;\r\n    font-weight: 300 !important;\r\n    text-transform: uppercase !important;\r\n    line-height: 1.02 !important;\r\n    letter-spacing: .03em !important;\r\n    color: var(--inc-ink) !important;\r\n  }\r\n  #inc-account h1.inc-acc__title { margin: 0 0 26px; }\r\n\r\n  \/* ===== HERO ===== *\/\r\n  .inc-acc__hero {\r\n    position: relative;\r\n    overflow: hidden;\r\n    padding: clamp(48px, 7vw, 96px) var(--inc-pad-x) clamp(32px, 4vw, 52px);\r\n    background:\r\n      radial-gradient(1000px 480px at 108% -12%, rgba(0,178,201,.16), transparent 62%),\r\n      radial-gradient(640px 380px at -8% 130%, rgba(162,153,156,.14), transparent 60%),\r\n      linear-gradient(180deg, var(--inc-paper-2) 0%, var(--inc-paper) 82%);\r\n    border-bottom: 1px solid var(--inc-line);\r\n  }\r\n  .inc-acc__hero-inner { max-width: var(--inc-maxw); margin: 0 auto; position: relative; z-index: 2; }\r\n  .inc-acc__crumbs {\r\n    display: flex; align-items: center; gap: 8px;\r\n    font-size: 11px; letter-spacing: .18em; text-transform: uppercase;\r\n    color: var(--inc-muted); font-weight: 600; margin-bottom: 22px;\r\n  }\r\n  .inc-acc__crumbs a { color: var(--inc-muted); }\r\n  .inc-acc__crumbs a:hover { color: var(--inc-ink); }\r\n  .inc-acc__crumbs strong { color: var(--inc-ink); font-weight: 700; }\r\n  .inc-acc__crumbs svg { width: 10px; height: 10px; opacity: .6; }\r\n  .inc-acc__eyebrow {\r\n    display: inline-flex; align-items: center; gap: 10px;\r\n    font-weight: 600; font-size: 12px; letter-spacing: .24em; text-transform: uppercase;\r\n    color: var(--inc-turq-deep); margin-bottom: 20px;\r\n  }\r\n  .inc-acc__eyebrow::before {\r\n    content: \"\"; width: 8px; height: 8px; border-radius: 999px; background: var(--inc-turq);\r\n  }\r\n  .inc-acc__title {\r\n    font-size: clamp(40px, 7vw, 92px);\r\n    max-width: 16ch;\r\n    overflow-wrap: break-word;\r\n  }\r\n  .inc-acc__lead {\r\n    font-size: clamp(15px, 1.4vw, 18px); line-height: 1.6; color: var(--inc-ink-2);\r\n    max-width: 62ch; margin: 0; font-weight: 400;\r\n  }\r\n  .inc-acc__lead strong { color: var(--inc-ink); font-weight: 700; }\r\n\r\n  \/* ===== BODY ===== *\/\r\n  .inc-acc__body {\r\n    max-width: var(--inc-maxw); margin: 0 auto;\r\n    padding: clamp(32px, 5vw, 60px) var(--inc-pad-x) clamp(44px, 6vw, 76px);\r\n  }\r\n\r\n  \/* ========================================================================\r\n     ESTADO DESLOGUEADA \u00b7 skin del shortcode Woo (login \/ registro)\r\n     #inc-acc-woo arranca oculto; el JS lo revela SOLO si hay form de login.\r\n     ======================================================================== *\/\r\n  #inc-account #inc-acc-woo { display: none; }\r\n  #inc-account #inc-acc-woo.is-visible { display: block; }\r\n  \/* El atributo [hidden] debe ganarle a los display:grid\/flex de las clases (skeleton, grid, etc.) *\/\r\n  #inc-account [hidden] { display: none !important; }\r\n\r\n  \/* ===== Login \/ Registro (deslogueada) \u2014 Acceder | Registrarse LADO A LADO (2 columnas).\r\n     Robusto ante variantes de Woo: se ancla al id #customer_login (siempre presente) y a los HIJOS\r\n     DIRECTOS del contenedor (sean .u-column1\/.col-1 o lo que sea). En mobile se apilan (media query). *\/\r\n  #inc-account #inc-acc-woo.is-visible .woocommerce { max-width: 940px; margin: 0 auto; }\r\n  #inc-account #customer_login,\r\n  #inc-account .woocommerce .col2-set,\r\n  #inc-account .woocommerce .u-columns.col2-set {\r\n    display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 28px !important;\r\n    align-items: start !important; max-width: none !important; margin: 0 !important; float: none !important; width: auto !important;\r\n  }\r\n  #inc-account #customer_login > div,\r\n  #inc-account .woocommerce .col2-set > div,\r\n  #inc-account .woocommerce .u-column1,\r\n  #inc-account .woocommerce .u-column2,\r\n  #inc-account .woocommerce .col2-set .col-1,\r\n  #inc-account .woocommerce .col2-set .col-2 {\r\n    display: block !important; width: 100% !important; max-width: none !important; float: none !important; margin: 0 !important;\r\n  }\r\n  #inc-account .woocommerce form.login,\r\n  #inc-account .woocommerce form.register,\r\n  #inc-account .woocommerce form.woocommerce-form-login,\r\n  #inc-account .woocommerce form.woocommerce-form-register {\r\n    width: 100% !important; max-width: none !important; margin: 0 !important; float: none !important;\r\n  }\r\n  \/* Recuperar contrase\u00f1a (form suelto): centrado *\/\r\n  #inc-account .woocommerce form.lost_reset_password { max-width: 460px !important; margin: 0 auto !important; float: none !important; }\r\n\r\n  \/* ===== Fallback AGN\u00d3STICO DE CLASES (v\u00eda :has): apunta al contenedor que tiene AMBOS formularios,\r\n     sin importar su id\/clase. Cubre login+registro cuando el wrapper de Woo usa clases distintas. ===== *\/\r\n  #inc-account .woocommerce *:has(> .woocommerce-form-login):has(> .woocommerce-form-register),\r\n  #inc-account .woocommerce *:has(> * > .woocommerce-form-login):has(> * > .woocommerce-form-register) {\r\n    display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 28px !important;\r\n    align-items: start !important; max-width: none !important; width: auto !important; margin: 0 !important; float: none !important;\r\n  }\r\n  \/* Columnas intermedias (cuando cada form est\u00e1 dentro de su columna) \u2192 sin float, ancho completo *\/\r\n  #inc-account .woocommerce *:has(> * > .woocommerce-form-login):has(> * > .woocommerce-form-register) > * {\r\n    display: block !important; float: none !important; width: 100% !important; max-width: none !important; margin: 0 !important;\r\n  }\r\n  \/* CAUSA REAL DEL DIAGONAL: el clearfix ::before\/::after de Woo (content:\" \"; display:table) se vuelve\r\n     un ITEM del grid y ocupa celdas \u2192 empuja login\/registro a la diagonal. Anular esos pseudo-elementos. *\/\r\n  #inc-account #customer_login::before, #inc-account #customer_login::after,\r\n  #inc-account .woocommerce .col2-set::before, #inc-account .woocommerce .col2-set::after,\r\n  #inc-account .woocommerce .u-columns::before, #inc-account .woocommerce .u-columns::after,\r\n  #inc-account .woocommerce *:has(> .woocommerce-form-login):has(> .woocommerce-form-register)::before,\r\n  #inc-account .woocommerce *:has(> .woocommerce-form-login):has(> .woocommerce-form-register)::after,\r\n  #inc-account .woocommerce *:has(> * > .woocommerce-form-login):has(> * > .woocommerce-form-register)::before,\r\n  #inc-account .woocommerce *:has(> * > .woocommerce-form-login):has(> * > .woocommerce-form-register)::after {\r\n    display: none !important; content: none !important;\r\n  }\r\n\r\n  #inc-account .woocommerce form {\r\n    background: transparent; border: 0; padding: 0; margin: 0;\r\n  }\r\n  #inc-account .woocommerce form.login,\r\n  #inc-account .woocommerce form.register,\r\n  #inc-account .woocommerce form.lost_reset_password {\r\n    background: var(--inc-paper);\r\n    border: 1px solid var(--inc-line);\r\n    border-radius: var(--inc-radius);\r\n    padding: clamp(28px, 4vw, 44px);\r\n    box-shadow: var(--inc-shadow);\r\n  }\r\n  #inc-account .woocommerce form.login h2,\r\n  #inc-account .woocommerce form.register h2,\r\n  #inc-account .woocommerce h2 {\r\n    font-size: clamp(24px, 3vw, 34px);\r\n    margin: 0 0 22px;\r\n    padding-bottom: 14px;\r\n    border-bottom: 2px solid var(--inc-turq);\r\n    display: inline-block;\r\n  }\r\n  #inc-account .woocommerce-form-row {\r\n    display: flex; flex-direction: column; gap: 8px; margin-bottom: 18px;\r\n  }\r\n  #inc-account .woocommerce-form-row label,\r\n  #inc-account .woocommerce form .form-row label {\r\n    font-weight: 600; font-size: 11px; letter-spacing: .16em;\r\n    color: var(--inc-ink); text-transform: uppercase;\r\n  }\r\n  #inc-account .woocommerce-form-row label .required,\r\n  #inc-account .woocommerce .required { color: var(--inc-turq-deep); font-weight: 700; border: 0; }\r\n  #inc-account .woocommerce-form__input,\r\n  #inc-account .woocommerce input[type=\"text\"],\r\n  #inc-account .woocommerce input[type=\"email\"],\r\n  #inc-account .woocommerce input[type=\"password\"],\r\n  #inc-account .woocommerce input[type=\"tel\"],\r\n  #inc-account .woocommerce input[type=\"number\"],\r\n  #inc-account .woocommerce select,\r\n  #inc-account .woocommerce textarea {\r\n    width: 100%;\r\n    border: 1.5px solid var(--inc-line);\r\n    background: var(--inc-paper);\r\n    padding: 14px 18px;\r\n    border-radius: var(--inc-pill);\r\n    font-family: var(--inc-font);\r\n    font-size: 15px; color: var(--inc-ink);\r\n    outline: 0;\r\n    transition: border-color .2s ease;\r\n  }\r\n  #inc-account .woocommerce textarea { border-radius: var(--inc-radius); resize: vertical; }\r\n  #inc-account .woocommerce input:focus,\r\n  #inc-account .woocommerce select:focus,\r\n  #inc-account .woocommerce textarea:focus { border-color: var(--inc-turq); }\r\n  #inc-account .woocommerce form .form-row .description,\r\n  #inc-account .woocommerce em { font-size: 12px; color: var(--inc-muted); font-style: normal; }\r\n  #inc-account .woocommerce-form__label-for-checkbox {\r\n    display: flex; align-items: center; gap: 8px;\r\n    font-weight: 500; font-size: 13.5px; color: var(--inc-ink-2);\r\n    cursor: pointer; text-transform: none; letter-spacing: 0;\r\n  }\r\n  #inc-account .woocommerce-form__input-checkbox,\r\n  #inc-account .woocommerce input[type=\"checkbox\"] { width: 18px; height: 18px; accent-color: var(--inc-turq); }\r\n\r\n  #inc-account .woocommerce button.button,\r\n  #inc-account .woocommerce input[type=\"submit\"].button,\r\n  #inc-account .woocommerce input[type=\"submit\"],\r\n  #inc-account .woocommerce a.button {\r\n    display: inline-flex; align-items: center; justify-content: center; gap: 10px;\r\n    padding: 14px 28px;\r\n    background: var(--inc-turq); color: #fff !important;\r\n    border: 0; border-radius: var(--inc-pill);\r\n    font-family: var(--inc-font);\r\n    font-weight: 700; font-size: 12.5px; letter-spacing: .14em; text-transform: uppercase;\r\n    cursor: pointer; text-decoration: none;\r\n    transition: background .2s ease, transform .2s ease, border-color .2s ease, color .2s ease;\r\n  }\r\n  #inc-account .woocommerce button.button:hover,\r\n  #inc-account .woocommerce input[type=\"submit\"].button:hover,\r\n  #inc-account .woocommerce input[type=\"submit\"]:hover,\r\n  #inc-account .woocommerce a.button:hover { background: var(--inc-turq-deep); transform: translateY(-2px); }\r\n  #inc-account .woocommerce form.login .lost_password { text-align: right; margin-top: 14px; }\r\n  #inc-account .woocommerce form.login .lost_password a {\r\n    font-weight: 500; font-size: 13px; color: var(--inc-muted);\r\n    text-decoration: underline; text-decoration-color: var(--inc-line);\r\n  }\r\n  #inc-account .woocommerce form.login .lost_password a:hover { color: var(--inc-ink); }\r\n  #inc-account .woocommerce .clear { clear: both; }\r\n  \/* Notices de Woo (errores de login, mensajes) *\/\r\n  #inc-account .woocommerce-message,\r\n  #inc-account .woocommerce-info,\r\n  #inc-account .woocommerce-error,\r\n  #inc-account .woocommerce-notice {\r\n    background: var(--inc-paper-2);\r\n    border: 0; border-left: 4px solid var(--inc-turq);\r\n    padding: 16px 20px; border-radius: 0 var(--inc-radius-sm) var(--inc-radius-sm) 0;\r\n    margin: 0 0 22px; font-size: 14px; color: var(--inc-ink-2); line-height: 1.5; list-style: none;\r\n  }\r\n  #inc-account .woocommerce-message { border-left-color: var(--inc-success); background: rgba(30,158,106,.08); }\r\n  #inc-account .woocommerce-error { border-left-color: var(--inc-danger); background: #fdf0ee; color: var(--inc-danger); }\r\n  #inc-account .woocommerce-info { border-left-color: var(--inc-turq); background: var(--inc-turq-soft); }\r\n  \/* Nav lateral de Woo: si por lo que sea queda visible en deslogueada, no molesta *\/\r\n  #inc-account #inc-acc-woo .woocommerce-MyAccount-navigation { display: none; }\r\n\r\n  \/* ========================================================================\r\n     ESTADO LOGUEADA \u00b7 PORTAL CUSTOM \"MIS CURSOS\"\r\n     ======================================================================== *\/\r\n  #inc-account .inc-acc__portal { display: none; }\r\n  #inc-account .inc-acc__portal.is-active { display: block; }\r\n\r\n  \/* Nav propia del portal (tabs) *\/\r\n  .inc-acc__nav {\r\n    display: flex; align-items: center; gap: 8px; flex-wrap: wrap;\r\n    padding: 8px; margin: 0 0 clamp(26px, 4vw, 40px);\r\n    background: var(--inc-paper-2); border: 1px solid var(--inc-line);\r\n    border-radius: var(--inc-pill);\r\n  }\r\n  .inc-acc__nav-link {\r\n    display: inline-flex; align-items: center; gap: 9px;\r\n    padding: 11px 20px; border-radius: var(--inc-pill);\r\n    font-weight: 600; font-size: 12px; letter-spacing: .1em; text-transform: uppercase;\r\n    color: var(--inc-ink-2); cursor: pointer; background: transparent; border: 0;\r\n    font-family: var(--inc-font);\r\n    transition: background .2s ease, color .2s ease;\r\n  }\r\n  .inc-acc__nav-link svg { width: 15px; height: 15px; }\r\n  .inc-acc__nav-link:hover { color: var(--inc-ink); background: var(--inc-paper); }\r\n  .inc-acc__nav-link.is-active { background: var(--inc-turq); color: #fff; }\r\n  .inc-acc__nav-link.inc-acc__nav-link--out { margin-left: auto; color: var(--inc-danger); }\r\n  .inc-acc__nav-link.inc-acc__nav-link--out:hover { background: var(--inc-danger); color: #fff; }\r\n\r\n  \/* Encabezado de saludo del portal *\/\r\n  .inc-acc__salute {\r\n    display: flex; align-items: flex-end; justify-content: space-between; gap: 20px;\r\n    flex-wrap: wrap; margin: 0 0 clamp(20px, 3vw, 30px);\r\n  }\r\n  .inc-acc__salute-kicker { font-weight: 600; font-size: 11px; letter-spacing: .22em; text-transform: uppercase; color: var(--inc-turq-deep); margin: 0 0 6px; }\r\n  .inc-acc__salute h2 { font-size: clamp(26px, 3.4vw, 40px); margin: 0; }\r\n  .inc-acc__logout {\r\n    display: inline-flex; align-items: center; gap: 8px;\r\n    padding: 11px 20px; border-radius: var(--inc-pill);\r\n    background: var(--inc-ink); color: #fff;\r\n    font-weight: 700; font-size: 11.5px; letter-spacing: .12em; text-transform: uppercase;\r\n    transition: background .2s ease, transform .2s ease;\r\n  }\r\n  .inc-acc__logout svg { width: 15px; height: 15px; }\r\n  .inc-acc__logout:hover { background: #232221; transform: translateY(-2px); }\r\n\r\n  \/* Panels de secci\u00f3n *\/\r\n  .inc-acc__panel { display: none; }\r\n  .inc-acc__panel.is-active { display: block; }\r\n\r\n  \/* ===== Grid de tarjetas de curso ===== *\/\r\n  .inc-acc__grid {\r\n    display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\r\n    gap: clamp(18px, 2.4vw, 28px);\r\n  }\r\n  .inc-acc__course-card {\r\n    position: relative; overflow: hidden;\r\n    background: var(--inc-paper); border: 1px solid var(--inc-line);\r\n    border-radius: var(--inc-radius); display: flex; flex-direction: column;\r\n    transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease;\r\n  }\r\n  .inc-acc__course-card::before {\r\n    content: \"\"; position: absolute; top: 0; left: 0; right: 0; height: 4px;\r\n    background: var(--inc-turq); opacity: 0; transition: opacity .2s ease; z-index: 2;\r\n  }\r\n  .inc-acc__course-card:hover { transform: translateY(-4px); border-color: var(--inc-turq); box-shadow: var(--inc-shadow); }\r\n  .inc-acc__course-card:hover::before { opacity: 1; }\r\n  .inc-acc__course-media {\r\n    aspect-ratio: 16\/10; background: var(--inc-paper-2);\r\n    position: relative; overflow: hidden;\r\n  }\r\n  .inc-acc__course-media img { width: 100%; height: 100%; object-fit: cover; }\r\n  .inc-acc__course-media-fallback {\r\n    position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;\r\n    color: var(--inc-line);\r\n  }\r\n  .inc-acc__course-media-fallback svg { width: 54px; height: 54px; }\r\n  .inc-acc__course-body { padding: 22px; display: flex; flex-direction: column; gap: 14px; flex: 1; }\r\n  .inc-acc__course-title { font-size: 18px !important; margin: 0; letter-spacing: .01em !important; }\r\n  .inc-acc__course-meta { display: flex; gap: 8px; flex-wrap: wrap; }\r\n  .inc-acc__chip {\r\n    display: inline-flex; align-items: center; gap: 6px;\r\n    padding: 5px 11px; border-radius: var(--inc-pill);\r\n    background: var(--inc-turq-soft); color: var(--inc-turq-deep);\r\n    font-weight: 600; font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase;\r\n  }\r\n  .inc-acc__chip svg { width: 12px; height: 12px; }\r\n  .inc-acc__course-cta { margin-top: auto; }\r\n\r\n  \/* Botones gen\u00e9ricos del portal *\/\r\n  .inc-acc__btn {\r\n    display: inline-flex; align-items: center; justify-content: center; gap: 9px;\r\n    padding: 13px 24px; border-radius: var(--inc-pill);\r\n    font-family: var(--inc-font); font-weight: 700; font-size: 12px; letter-spacing: .12em; text-transform: uppercase;\r\n    cursor: pointer; border: 0; text-decoration: none;\r\n    transition: background .2s ease, transform .2s ease, border-color .2s ease, color .2s ease;\r\n  }\r\n  .inc-acc__btn svg { width: 16px; height: 16px; }\r\n  .inc-acc__btn--solid { background: var(--inc-turq); color: #fff; width: 100%; }\r\n  .inc-acc__btn--solid:hover { background: var(--inc-turq-deep); transform: translateY(-2px); }\r\n  .inc-acc__btn--ghost { background: transparent; color: var(--inc-ink-2); border: 1.5px solid var(--inc-line); }\r\n  .inc-acc__btn--ghost:hover { border-color: var(--inc-ink); color: var(--inc-ink); }\r\n\r\n  \/* ===== Vista de contenido de un curso ===== *\/\r\n  .inc-acc__course-view { display: none; }\r\n  .inc-acc__course-view.is-active { display: block; }\r\n  .inc-acc__back {\r\n    display: inline-flex; align-items: center; gap: 8px; cursor: pointer;\r\n    background: transparent; border: 0; padding: 8px 0; margin: 0 0 18px;\r\n    font-family: var(--inc-font); font-weight: 600; font-size: 12px; letter-spacing: .1em; text-transform: uppercase;\r\n    color: var(--inc-ink-2); transition: color .2s ease;\r\n  }\r\n  .inc-acc__back svg { width: 15px; height: 15px; }\r\n  .inc-acc__back:hover { color: var(--inc-turq-deep); }\r\n  .inc-acc__course-header { margin: 0 0 clamp(24px, 3vw, 34px); }\r\n  .inc-acc__course-header h2 { font-size: clamp(26px, 3.6vw, 44px); margin: 0 0 12px; }\r\n  .inc-acc__course-substats { display: flex; gap: 8px; flex-wrap: wrap; }\r\n\r\n  .inc-acc__sec { margin: 0 0 clamp(30px, 4vw, 46px); }\r\n  .inc-acc__sec-head {\r\n    display: flex; align-items: center; gap: 12px; margin: 0 0 18px;\r\n    padding-bottom: 14px; border-bottom: 1px solid var(--inc-line);\r\n  }\r\n  .inc-acc__sec-ic {\r\n    width: 34px; height: 34px; flex-shrink: 0; border-radius: 9px;\r\n    display: flex; align-items: center; justify-content: center;\r\n    background: var(--inc-turq-soft); color: var(--inc-turq-deep);\r\n  }\r\n  .inc-acc__sec-ic svg { width: 18px; height: 18px; }\r\n  .inc-acc__sec-title { font-size: 15px !important; margin: 0; letter-spacing: .06em !important; }\r\n  .inc-acc__sec-count { margin-left: auto; font-size: 12px; color: var(--inc-muted); font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }\r\n\r\n  \/* ===== Lecciones (acorde\u00f3n + video on-demand) ===== *\/\r\n  .inc-acc__lessons { display: flex; flex-direction: column; gap: 12px; }\r\n  .inc-acc__lesson {\r\n    border: 1px solid var(--inc-line); border-radius: var(--inc-radius);\r\n    overflow: hidden; background: var(--inc-paper); transition: border-color .2s ease;\r\n  }\r\n  .inc-acc__lesson.is-open { border-color: var(--inc-turq); }\r\n  .inc-acc__lesson-btn {\r\n    display: flex; align-items: center; gap: 16px; width: 100%;\r\n    padding: 18px 20px; background: transparent; border: 0; cursor: pointer;\r\n    text-align: left; font-family: var(--inc-font); color: var(--inc-ink);\r\n  }\r\n  \/* Blindaje vs el color de acento del Kit\/tema en <button> estados (que se ve\u00eda rosa al abrir\/enfocar) *\/\r\n  #inc-account .inc-acc__lesson-btn,\r\n  #inc-account .inc-acc__lesson-btn:hover,\r\n  #inc-account .inc-acc__lesson-btn:focus,\r\n  #inc-account .inc-acc__lesson-btn:active,\r\n  #inc-account .inc-acc__lesson-btn:focus-visible {\r\n    background: transparent !important; color: var(--inc-ink) !important; box-shadow: none !important;\r\n  }\r\n  #inc-account .inc-acc__lesson:hover .inc-acc__lesson-btn { background: var(--inc-paper-2) !important; }\r\n  #inc-account .inc-acc__lesson.is-open .inc-acc__lesson-btn { background: var(--inc-turq-soft) !important; }\r\n  .inc-acc__lesson-num {\r\n    flex-shrink: 0; font-weight: 700; font-size: 13px; color: var(--inc-turq-deep);\r\n    min-width: 26px; letter-spacing: .04em;\r\n  }\r\n  .inc-acc__lesson-info { flex: 1; min-width: 0; }\r\n  .inc-acc__lesson-t { display: block; font-weight: 600; font-size: 14.5px; color: var(--inc-ink); line-height: 1.35; }\r\n  .inc-acc__lesson-d { display: inline-flex; align-items: center; gap: 5px; margin-top: 4px; font-size: 12px; color: var(--inc-muted); font-weight: 500; }\r\n  .inc-acc__lesson-d svg { width: 12px; height: 12px; }\r\n  .inc-acc__lesson-chevron { flex-shrink: 0; color: var(--inc-muted); transition: transform .25s ease; }\r\n  .inc-acc__lesson-chevron svg { width: 18px; height: 18px; display: block; }\r\n  .inc-acc__lesson.is-open .inc-acc__lesson-chevron { transform: rotate(180deg); color: var(--inc-turq-deep); }\r\n  .inc-acc__lesson-panel { display: none; padding: 0 20px 20px; }\r\n  .inc-acc__lesson.is-open .inc-acc__lesson-panel { display: block; }\r\n  \/* Wrapper de video 16:9 responsive *\/\r\n  .inc-acc__video {\r\n    position: relative; width: 100%; aspect-ratio: 16\/9;\r\n    background: #000; border-radius: var(--inc-radius-sm); overflow: hidden;\r\n  }\r\n  .inc-acc__video iframe, .inc-acc__video video { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; background: #000; }\r\n  .inc-acc__video-link {\r\n    display: flex; align-items: center; justify-content: center; gap: 10px;\r\n    padding: 26px; border: 1.5px dashed var(--inc-line); border-radius: var(--inc-radius-sm);\r\n    color: var(--inc-turq-deep); font-weight: 600; font-size: 13px; letter-spacing: .04em;\r\n  }\r\n  .inc-acc__video-link svg { width: 18px; height: 18px; }\r\n  .inc-acc__video-none { font-size: 13px; color: var(--inc-muted); padding: 6px 0; }\r\n\r\n  \/* ===== Materiales (descargas gated) ===== *\/\r\n  .inc-acc__mats { display: flex; flex-direction: column; gap: 10px; }\r\n  .inc-acc__mat {\r\n    display: flex; align-items: center; gap: 14px;\r\n    padding: 15px 18px; border: 1px solid var(--inc-line); border-radius: var(--inc-radius);\r\n    background: var(--inc-paper); transition: border-color .2s ease, background .2s ease, transform .2s ease;\r\n  }\r\n  .inc-acc__mat:hover { border-color: var(--inc-turq); background: var(--inc-turq-soft); transform: translateX(3px); }\r\n  .inc-acc__mat-ic {\r\n    width: 40px; height: 40px; flex-shrink: 0; border-radius: 9px;\r\n    display: flex; align-items: center; justify-content: center;\r\n    background: var(--inc-turq-soft); color: var(--inc-turq-deep);\r\n  }\r\n  .inc-acc__mat-ic svg { width: 20px; height: 20px; }\r\n  .inc-acc__mat-name { flex: 1; min-width: 0; font-weight: 600; font-size: 14px; color: var(--inc-ink); word-break: break-word; }\r\n  .inc-acc__mat-dl { flex-shrink: 0; color: var(--inc-turq-deep); display: flex; align-items: center; gap: 6px; font-weight: 700; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; }\r\n  .inc-acc__mat-dl svg { width: 16px; height: 16px; }\r\n  .inc-acc__mat:hover .inc-acc__mat-ic { background: var(--inc-turq); color: #fff; }\r\n\r\n  \/* ===== Tabla de pedidos ===== *\/\r\n  .inc-acc__orders-wrap { overflow-x: auto; }\r\n  .inc-acc__orders { width: 100%; border-collapse: collapse; }\r\n  .inc-acc__orders thead th {\r\n    font-weight: 600; font-size: 11px; letter-spacing: .16em; text-transform: uppercase;\r\n    color: var(--inc-ink); padding: 15px 16px; text-align: left;\r\n    border-bottom: 2px solid var(--inc-turq); white-space: nowrap;\r\n  }\r\n  .inc-acc__orders tbody td { padding: 16px; border-bottom: 1px solid var(--inc-line); font-size: 14px; color: var(--inc-ink-2); vertical-align: middle; }\r\n  .inc-acc__orders tbody tr:hover { background: rgba(0,178,201,.05); }\r\n  .inc-acc__order-num { color: var(--inc-ink); font-weight: 700; }\r\n  .inc-acc__order-actions { text-align: right; }\r\n  .inc-acc__order-view {\r\n    display: inline-flex; align-items: center; gap: 6px; padding: 9px 16px;\r\n    border: 1.5px solid var(--inc-line); border-radius: var(--inc-pill);\r\n    font-weight: 700; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--inc-ink);\r\n    transition: border-color .2s ease, background .2s ease, color .2s ease;\r\n  }\r\n  .inc-acc__order-view:hover { border-color: var(--inc-turq); background: var(--inc-turq); color: #fff; }\r\n  .inc-acc__badge {\r\n    display: inline-flex; align-items: center; padding: 4px 12px; border-radius: var(--inc-pill);\r\n    background: var(--inc-paper-2); color: var(--inc-ink); border: 1px solid var(--inc-line);\r\n    font-weight: 600; font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase; white-space: nowrap;\r\n  }\r\n  .inc-acc__badge--completed { background: rgba(30,158,106,.12); color: var(--inc-success); border-color: rgba(30,158,106,.3); }\r\n  .inc-acc__badge--processing { background: var(--inc-turq-soft); color: var(--inc-turq-deep); border-color: rgba(0,178,201,.3); }\r\n  .inc-acc__badge--pending, .inc-acc__badge--on-hold { background: #fff7e6; color: #b8741e; border-color: #f4d398; }\r\n  .inc-acc__badge--cancelled, .inc-acc__badge--failed, .inc-acc__badge--refunded { background: #fdf0ee; color: var(--inc-danger); border-color: rgba(192,57,43,.25); }\r\n\r\n  \/* ===== Mi cuenta (datos) ===== *\/\r\n  .inc-acc__data-card {\r\n    background: var(--inc-paper); border: 1px solid var(--inc-line);\r\n    border-radius: var(--inc-radius); padding: clamp(24px, 3vw, 34px);\r\n    display: flex; flex-direction: column; gap: 18px; max-width: 640px;\r\n  }\r\n  .inc-acc__data-card p { margin: 0; color: var(--inc-ink-2); font-size: 14.5px; line-height: 1.6; }\r\n  .inc-acc__data-actions { display: flex; gap: 12px; flex-wrap: wrap; }\r\n\r\n  \/* ===== Estados: skeleton \/ vac\u00edo \/ error ===== *\/\r\n  .inc-acc__skel-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 28px; }\r\n  .inc-acc__skel-card {\r\n    border: 1px solid var(--inc-line); border-radius: var(--inc-radius); overflow: hidden; background: var(--inc-paper);\r\n  }\r\n  .inc-acc__skel-media { aspect-ratio: 16\/10; }\r\n  .inc-acc__skel-line { height: 14px; border-radius: 6px; margin: 14px 22px; }\r\n  .inc-acc__skel-line:last-child { margin-bottom: 22px; width: 55%; }\r\n  .inc-acc__shimmer {\r\n    background: linear-gradient(100deg, var(--inc-paper-2) 30%, var(--inc-line) 50%, var(--inc-paper-2) 70%);\r\n    background-size: 220% 100%; animation: inc-acc-shimmer 1.3s ease-in-out infinite;\r\n  }\r\n  @keyframes inc-acc-shimmer { 0% { background-position: 180% 0; } 100% { background-position: -40% 0; } }\r\n\r\n  .inc-acc__state {\r\n    text-align: center; padding: clamp(40px, 6vw, 72px) 24px;\r\n    border: 1px dashed var(--inc-line); border-radius: var(--inc-radius); background: var(--inc-paper-2);\r\n  }\r\n  .inc-acc__state-ic {\r\n    width: 64px; height: 64px; margin: 0 auto 20px; border-radius: 18px;\r\n    display: flex; align-items: center; justify-content: center;\r\n    background: var(--inc-turq-soft); color: var(--inc-turq-deep);\r\n  }\r\n  .inc-acc__state-ic svg { width: 30px; height: 30px; }\r\n  .inc-acc__state h3 { font-family: var(--inc-font); font-weight: 300; text-transform: uppercase; letter-spacing: .04em; font-size: clamp(20px, 2.6vw, 28px); color: var(--inc-ink); margin: 0 0 10px; }\r\n  .inc-acc__state p { margin: 0 auto 22px; max-width: 46ch; color: var(--inc-ink-2); font-size: 14.5px; line-height: 1.6; }\r\n  .inc-acc__state-actions { display: inline-flex; gap: 12px; flex-wrap: wrap; justify-content: center; }\r\n  .inc-acc__state--error .inc-acc__state-ic { background: #fdf0ee; color: var(--inc-danger); }\r\n\r\n  \/* ===== SECCI\u00d3N DE AYUDA (band pastel rosa \u00b7 Brand Book) ===== *\/\r\n  .inc-acc__help {\r\n    padding: clamp(40px, 5vw, 68px) var(--inc-pad-x);\r\n    background: var(--inc-pink); color: var(--inc-ink); position: relative; overflow: hidden;\r\n  }\r\n  .inc-acc__help::after {\r\n    content: \"\"; position: absolute; inset: 0;\r\n    background: radial-gradient(700px 400px at 50% -20%, rgba(255,255,255,.35), transparent 62%);\r\n    pointer-events: none;\r\n  }\r\n  .inc-acc__help-inner {\r\n    max-width: var(--inc-maxw); margin: 0 auto; position: relative; z-index: 2;\r\n    display: grid; grid-template-columns: 1.2fr 1fr; gap: 36px; align-items: center;\r\n  }\r\n  .inc-acc__help-eyebrow { font-family: var(--inc-display); font-weight: 500; font-size: 11px; letter-spacing: .26em; text-transform: uppercase; color: rgba(35,34,43,.7); margin-bottom: 12px; }\r\n  #inc-account h2.inc-acc__help-title { color: var(--inc-ink) !important; font-size: clamp(28px, 4vw, 48px); margin: 0 0 10px; }\r\n  .inc-acc__help p { margin: 0; font-size: 14.5px; line-height: 1.6; color: var(--inc-ink-2); max-width: 52ch; }\r\n  .inc-acc__help-actions { display: flex; flex-direction: column; gap: 12px; }\r\n  .inc-acc__help-btn {\r\n    display: inline-flex; align-items: center; justify-content: space-between; gap: 12px;\r\n    padding: 16px 22px; border-radius: var(--inc-pill); text-decoration: none;\r\n    font-family: var(--inc-font); font-weight: 700; font-size: 12.5px; letter-spacing: .12em; text-transform: uppercase;\r\n    transition: transform .2s ease, background .2s ease, color .2s ease, border-color .2s ease;\r\n  }\r\n  .inc-acc__help-btn--primary { background: var(--inc-ink); }\r\n  .inc-acc__help-btn--primary:hover { background: #000; transform: translateX(4px); }\r\n  .inc-acc__help-btn--ghost { background: transparent; border: 1.5px solid rgba(35,34,43,.35); }\r\n  .inc-acc__help-btn--ghost:hover { background: var(--inc-ink); border-color: var(--inc-ink); }\r\n  .inc-acc__help-btn svg { flex-shrink: 0; }\r\n\r\n  \/* ===== Responsive ===== *\/\r\n  @media (max-width: 992px) {\r\n    .inc-acc__help-inner { grid-template-columns: 1fr; gap: 22px; }\r\n  }\r\n  @media (max-width: 768px) {\r\n    \/* Login\/registro: en mobile se apilan y el contenedor se angosta *\/\r\n    #inc-account #inc-acc-woo.is-visible .woocommerce { max-width: 480px; }\r\n    #inc-account #customer_login,\r\n    #inc-account .woocommerce .col2-set,\r\n    #inc-account .woocommerce .u-columns.col2-set,\r\n    #inc-account .woocommerce *:has(> .woocommerce-form-login):has(> .woocommerce-form-register),\r\n    #inc-account .woocommerce *:has(> * > .woocommerce-form-login):has(> * > .woocommerce-form-register) { grid-template-columns: 1fr !important; gap: 22px !important; }\r\n    .inc-acc__nav { border-radius: var(--inc-radius); flex-wrap: wrap; }\r\n    .inc-acc__nav-link { flex: 1 1 auto; justify-content: center; }\r\n    .inc-acc__nav-link.inc-acc__nav-link--out { margin-left: 0; }\r\n    .inc-acc__salute { align-items: flex-start; }\r\n  }\r\n  @media (max-width: 480px) {\r\n    .inc-acc__title { font-size: clamp(34px, 11vw, 56px); }\r\n    .inc-acc__grid { grid-template-columns: 1fr; }\r\n    \/* Tabla de pedidos \u2192 cards apiladas *\/\r\n    .inc-acc__orders thead { display: none; }\r\n    .inc-acc__orders tbody tr { display: block; border: 1px solid var(--inc-line); border-radius: var(--inc-radius-sm); margin-bottom: 12px; padding: 6px 0; }\r\n    .inc-acc__orders tbody td { display: flex; justify-content: space-between; gap: 14px; text-align: right; padding: 10px 16px; border: 0; }\r\n    .inc-acc__orders tbody td::before { content: attr(data-title); font-weight: 600; letter-spacing: .1em; text-transform: uppercase; color: var(--inc-muted); font-size: 10.5px; text-align: left; }\r\n    .inc-acc__order-actions { justify-content: flex-end; }\r\n  }\r\n  @media (prefers-reduced-motion: reduce) {\r\n    #inc-account * { animation: none !important; transition: none !important; }\r\n  }\r\n<\/style>\r\n\r\n<div id=\"inc-account\">\r\n\r\n  <!-- ===== HERO ===== -->\r\n  <section class=\"inc-acc__hero\">\r\n    <div class=\"inc-acc__hero-inner\">\r\n      <nav class=\"inc-acc__crumbs\" aria-label=\"Ruta de navegaci\u00f3n\">\r\n        <a href=\"\/cursos\/\" data-inc-shop>Inicio<\/a>\r\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"m9 6 6 6-6 6\"\/><\/svg>\r\n        <strong data-inc-crumb>Mi cuenta<\/strong>\r\n      <\/nav>\r\n      <div class=\"inc-acc__eyebrow\">TU ESPACIO EN INCANTO<\/div>\r\n      <h1 class=\"inc-acc__title\" data-inc-title>MI CUENTA<\/h1>\r\n      <p class=\"inc-acc__lead\" data-inc-lead>\r\n        Bienvenida a tu espacio. Ac\u00e1 acced\u00e9s a <strong>tus cursos, las lecciones en video, el material\r\n        descargable y tus pedidos<\/strong>. Todo lo que necesit\u00e1s para seguir form\u00e1ndote, en un solo lugar.\r\n      <\/p>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- ===== BODY ===== -->\r\n  <section class=\"inc-acc__body\">\r\n\r\n    <!--\r\n      CONTENEDOR DEL SHORTCODE WOO.\r\n      Arranca oculto (display:none via CSS). El portal lo lee para detectar el estado:\r\n        - Si hay form de login \u2192 se le agrega .is-visible (muestra el skin de login).\r\n        - Si hay nav\/content de dashboard \u2192 queda oculto y se muestra el portal custom.\r\n      El [woocommerce_my_account] DEBE quedar literal ac\u00e1 dentro (widget Custom HTML de ElementsKit).\r\n    -->\r\n    <div id=\"inc-acc-woo\">\r\n      <div class=\"woocommerce\"><\/div>\r\n    <\/div>\r\n\r\n    <!-- ===== PORTAL CUSTOM (logueada) \u2014 se activa por JS ===== -->\r\n    <div class=\"inc-acc__portal\" data-inc-portal>\r\n\r\n      <!-- Saludo + logout -->\r\n      <div class=\"inc-acc__salute\">\r\n        <div>\r\n          <p class=\"inc-acc__salute-kicker\">Tu campus<\/p>\r\n          <h2 data-inc-hello>Hola<\/h2>\r\n        <\/div>\r\n        <a class=\"inc-acc__logout\" href=\"\/cursos\/mi-cuenta\/cerrar-sesion\/\" data-inc-logout>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"\/><path d=\"m16 17 5-5-5-5\"\/><path d=\"M21 12H9\"\/><\/svg>\r\n          Cerrar sesi\u00f3n\r\n        <\/a>\r\n      <\/div>\r\n\r\n      <!-- Nav propia -->\r\n      <nav class=\"inc-acc__nav\" aria-label=\"Navegaci\u00f3n del campus\">\r\n        <button type=\"button\" class=\"inc-acc__nav-link is-active\" data-inc-tab=\"cursos\">\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"\/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"\/><\/svg>\r\n          Mis Cursos\r\n        <\/button>\r\n        <button type=\"button\" class=\"inc-acc__nav-link\" data-inc-tab=\"pedidos\">\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\"\/><path d=\"M3 6h18\"\/><path d=\"M16 10a4 4 0 0 1-8 0\"\/><\/svg>\r\n          Pedidos\r\n        <\/button>\r\n        <button type=\"button\" class=\"inc-acc__nav-link\" data-inc-tab=\"cuenta\">\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"\/><circle cx=\"12\" cy=\"7\" r=\"4\"\/><\/svg>\r\n          Mi cuenta\r\n        <\/button>\r\n        <a class=\"inc-acc__nav-link inc-acc__nav-link--out\" href=\"\/cursos\/mi-cuenta\/cerrar-sesion\/\" data-inc-logout>\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\"\/><path d=\"m16 17 5-5-5-5\"\/><path d=\"M21 12H9\"\/><\/svg>\r\n          Salir\r\n        <\/a>\r\n      <\/nav>\r\n\r\n      <!-- ===== PANEL: MIS CURSOS ===== -->\r\n      <div class=\"inc-acc__panel is-active\" data-inc-panel=\"cursos\">\r\n\r\n        <!-- Skeleton -->\r\n        <div class=\"inc-acc__skel-grid\" data-inc-courses-skel>\r\n          <div class=\"inc-acc__skel-card\"><div class=\"inc-acc__skel-media inc-acc__shimmer\"><\/div><div class=\"inc-acc__skel-line inc-acc__shimmer\"><\/div><div class=\"inc-acc__skel-line inc-acc__shimmer\"><\/div><\/div>\r\n          <div class=\"inc-acc__skel-card\"><div class=\"inc-acc__skel-media inc-acc__shimmer\"><\/div><div class=\"inc-acc__skel-line inc-acc__shimmer\"><\/div><div class=\"inc-acc__skel-line inc-acc__shimmer\"><\/div><\/div>\r\n          <div class=\"inc-acc__skel-card\"><div class=\"inc-acc__skel-media inc-acc__shimmer\"><\/div><div class=\"inc-acc__skel-line inc-acc__shimmer\"><\/div><div class=\"inc-acc__skel-line inc-acc__shimmer\"><\/div><\/div>\r\n        <\/div>\r\n\r\n        <!-- Grid de cursos (render JS) -->\r\n        <div class=\"inc-acc__grid\" data-inc-courses-grid hidden><\/div>\r\n\r\n        <!-- Vista de contenido de un curso (render JS) -->\r\n        <div class=\"inc-acc__course-view\" data-inc-course-view><\/div>\r\n\r\n        <!-- Estado vac\u00edo \/ error (render JS) -->\r\n        <div data-inc-courses-state hidden><\/div>\r\n      <\/div>\r\n\r\n      <!-- ===== PANEL: PEDIDOS ===== -->\r\n      <div class=\"inc-acc__panel\" data-inc-panel=\"pedidos\">\r\n        <div class=\"inc-acc__skel-grid\" data-inc-orders-skel style=\"grid-template-columns:1fr\">\r\n          <div class=\"inc-acc__skel-card\"><div class=\"inc-acc__skel-line inc-acc__shimmer\" style=\"margin:20px 22px\"><\/div><div class=\"inc-acc__skel-line inc-acc__shimmer\" style=\"margin:14px 22px 22px;width:70%\"><\/div><\/div>\r\n        <\/div>\r\n        <div data-inc-orders-mount hidden><\/div>\r\n      <\/div>\r\n\r\n      <!-- ===== PANEL: MI CUENTA (datos) ===== -->\r\n      <div class=\"inc-acc__panel\" data-inc-panel=\"cuenta\">\r\n        <div class=\"inc-acc__data-card\">\r\n          <p>Actualiz\u00e1 tu <strong>nombre, email o contrase\u00f1a<\/strong> desde el panel seguro de tu cuenta.\r\n             Tus datos viajan cifrados y no los compartimos con nadie.<\/p>\r\n          <div class=\"inc-acc__data-actions\">\r\n            <a class=\"inc-acc__btn inc-acc__btn--solid\" style=\"width:auto\" href=\"\/cursos\/mi-cuenta\/edit-account\/\" data-inc-editacc>\r\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 20h9\"\/><path d=\"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4z\"\/><\/svg>\r\n              Editar mis datos\r\n            <\/a>\r\n            <a class=\"inc-acc__btn inc-acc__btn--ghost\" href=\"\/cursos\/mi-cuenta\/edit-address\/\" data-inc-addresses>\r\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/><\/svg>\r\n              Datos de facturaci\u00f3n\r\n            <\/a>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div><!-- \/portal -->\r\n  <\/section>\r\n\r\n  <!-- ===== AYUDA \/ CTA ===== -->\r\n  <section class=\"inc-acc__help\">\r\n    <div class=\"inc-acc__help-inner\">\r\n      <div>\r\n        <div class=\"inc-acc__help-eyebrow\">Experiencia que transforma<\/div>\r\n        <h2 class=\"inc-acc__help-title\">\u00bfNecesit\u00e1s una mano?<\/h2>\r\n        <p>\r\n          Si no encontr\u00e1s un curso que compraste, ten\u00e9s dudas con una descarga o quer\u00e9s\r\n          cambiar alg\u00fan dato, escribinos. Te respondemos por WhatsApp de lunes a viernes.\r\n        <\/p>\r\n      <\/div>\r\n      <div class=\"inc-acc__help-actions\">\r\n        <a class=\"inc-acc__help-btn inc-acc__help-btn--primary\" href=\"https:\/\/wa.me\/5493875460464\" target=\"_blank\" rel=\"noopener\">\r\n          <span>WHATSAPP \u00b7 (387) 546 0464<\/span>\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M17.5 14.4c-.3-.1-1.6-.8-1.9-.9-.3-.1-.4-.1-.6.1-.2.3-.7.9-.8 1-.2.2-.3.2-.6.1-.3-.1-1.2-.5-2.3-1.4-.9-.8-1.4-1.8-1.6-2.1-.2-.3 0-.5.1-.6.1-.1.3-.3.4-.5.1-.2.2-.3.3-.5.1-.2 0-.4 0-.5-.1-.1-.6-1.4-.8-1.9-.2-.5-.4-.4-.6-.4h-.5c-.2 0-.5.1-.7.4-.2.3-.9.9-.9 2.2 0 1.3.9 2.5 1.1 2.7.1.2 1.8 2.7 4.3 3.8 1.5.6 2.1.7 2.9.5.4-.1 1.6-.6 1.8-1.3.2-.6.2-1.2.2-1.3-.1-.2-.3-.2-.6-.3zM12 2C6.5 2 2 6.5 2 12c0 1.8.5 3.5 1.3 4.9L2 22l5.2-1.4c1.4.7 3 1.2 4.8 1.2 5.5 0 10-4.5 10-10S17.5 2 12 2z\"\/><\/svg>\r\n        <\/a>\r\n        <a class=\"inc-acc__help-btn inc-acc__help-btn--ghost\" href=\"\/cursos\/\" data-inc-shop>\r\n          <span>VER TODOS LOS CURSOS<\/span>\r\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M5 12h14M13 5l7 7-7 7\"\/><\/svg>\r\n        <\/a>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n<\/div>\r\n\r\n<script>\r\n(function () {\r\n  \"use strict\";\r\n\r\n  \/* ===== Constantes centralizadas ===== *\/\r\n  var BASE  = '\/cursos';\r\n  var STORE = BASE + '\/wp-json\/wc\/store\/v1';\r\n  var WPV2  = BASE + '\/wp-json\/wp\/v2';\r\n  var PAGES = {\r\n    shop:      BASE + '\/',\r\n    account:   BASE + '\/mi-cuenta\/',\r\n    downloads: BASE + '\/mi-cuenta\/downloads\/',\r\n    orders:    BASE + '\/mi-cuenta\/orders\/',\r\n    editAcc:   BASE + '\/mi-cuenta\/edit-account\/',\r\n    addresses: BASE + '\/mi-cuenta\/edit-address\/',\r\n    logout:    BASE + '\/mi-cuenta\/customer-logout\/'\r\n  };\r\n  var WHATSAPP = 'https:\/\/wa.me\/5493875460464';\r\n\r\n  var root = document.getElementById('inc-account');\r\n  if (!root) return;\r\n  var $  = function (s, c) { return (c || root).querySelector(s); };\r\n  var $$ = function (s, c) { return [].slice.call((c || root).querySelectorAll(s)); };\r\n\r\n  \/* Links de tienda centralizados *\/\r\n  $$('[data-inc-shop]').forEach(function (a) { a.setAttribute('href', PAGES.shop); });\r\n\r\n  \/* ===== Helpers ===== *\/\r\n  \/\/ Decodifica entidades HTML de forma segura (nombres con &amp;, &#39;, etc.)\r\n  var _ta = document.createElement('textarea');\r\n  function decode(s) { if (s == null) return ''; _ta.innerHTML = String(s); return _ta.value; }\r\n  \/\/ Escapa para inyecci\u00f3n segura como HTML\r\n  function esc(s) { return String(s == null ? '' : s).replace(\/[&<>\"']\/g, function (c) {\r\n    return { '&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;' }[c];\r\n  }); }\r\n  \/\/ Slug desde un permalink de producto (\/cursos\/producto\/{slug}\/ o ?product=)\r\n  function slugFromUrl(url) {\r\n    if (!url) return null;\r\n    try {\r\n      var u = new URL(url, window.location.origin);\r\n      var m = u.pathname.match(\/\\\/producto\\\/([^\\\/]+)\\\/?\/i) || u.pathname.match(\/\\\/product\\\/([^\\\/]+)\\\/?\/i);\r\n      if (m) return decodeURIComponent(m[1]);\r\n      var qp = u.searchParams.get('product') || u.searchParams.get('add-to-cart');\r\n      return qp || null;\r\n    } catch (e) { return null; }\r\n  }\r\n  \/\/ Helper de embed (spec): YouTube \/ Vimeo \u2192 URL de iframe; desconocido \u2192 null\r\n  function toEmbed(url) {\r\n    if (!url) return null;\r\n    var yt = url.match(\/(?:youtu\\.be\\\/|youtube\\.com\\\/(?:watch\\?v=|embed\\\/|v\\\/))([\\w-]{6,})\/);\r\n    if (yt) return 'https:\/\/www.youtube-nocookie.com\/embed\/' + yt[1] + '?rel=0';\r\n    var vm = url.match(\/vimeo\\.com\\\/(?:video\\\/)?(\\d+)\/);\r\n    if (vm) return 'https:\/\/player.vimeo.com\/video\/' + vm[1];\r\n    return null;\r\n  }\r\n  \/\/ URL del archivo de video subido (ACF file field: string url, u objeto {url})\r\n  function fileUrl(l) {\r\n    var f = l && l.archivo_video;\r\n    if (!f) return '';\r\n    return (typeof f === 'string') ? f : ((f && f.url) || '');\r\n  }\r\n  function fetchDoc(url) {\r\n    return fetch(url, { credentials: 'same-origin' })\r\n      .then(function (r) { if (!r.ok) throw new Error('HTTP ' + r.status); return r.text(); })\r\n      .then(function (html) { return new DOMParser().parseFromString(html, 'text\/html'); });\r\n  }\r\n  function jget(url) {\r\n    return fetch(url, { credentials: 'same-origin', headers: { 'Accept': 'application\/json' } })\r\n      .then(function (r) { return r.ok ? r.json() : null; })\r\n      .catch(function () { return null; });\r\n  }\r\n\r\n  \/* ========================================================================\r\n     DETECCI\u00d3N DE ESTADO (leyendo el DOM ya renderizado por el shortcode)\r\n     ======================================================================== *\/\r\n  var woo    = document.getElementById('inc-acc-woo');\r\n  var portal = $('[data-inc-portal]');\r\n\r\n  function detectState() {\r\n    if (!woo) return 'logout'; \/\/ sin shortcode \u2192 tratar como deslogueada por seguridad\r\n    var isLogged = woo.querySelector('.woocommerce-MyAccount-navigation') ||\r\n                   woo.querySelector('.woocommerce-MyAccount-content');\r\n    var isLogin  = woo.querySelector('.woocommerce-form-login') ||\r\n                   woo.querySelector('.woocommerce-form-register') ||\r\n                   woo.querySelector('form.login') || woo.querySelector('form.register');\r\n    if (isLogged) return 'in';\r\n    if (isLogin)  return 'out';\r\n    return null; \/\/ a\u00fan no hidratado\r\n  }\r\n\r\n  \/\/ Link real de logout le\u00eddo del nav de Woo (fallback al slug por defecto)\r\n  function realLogoutHref() {\r\n    var a = woo && woo.querySelector('.woocommerce-MyAccount-navigation-link--customer-logout a');\r\n    return (a && a.getAttribute('href')) || PAGES.logout;\r\n  }\r\n\r\n  \/\/ Resuelve las URLs REALES de los endpoints ley\u00e9ndolas del men\u00fa de Woo (funciona en cualquier\r\n  \/\/ idioma\/slug: downloads\/descargas, orders\/pedidos, etc.). Fallback a los defaults.\r\n  function navHref(mod) {\r\n    var a = woo && woo.querySelector('.woocommerce-MyAccount-navigation-link--' + mod + ' a');\r\n    return (a && a.getAttribute('href')) || null;\r\n  }\r\n  function resolveEndpoints() {\r\n    var ord = navHref('orders'), dl = navHref('downloads'), ed = navHref('edit-account'), ad = navHref('edit-address'), lo = navHref('customer-logout');\r\n    if (ord) PAGES.orders = ord;\r\n    if (dl)  PAGES.downloads = dl;\r\n    if (ed)  PAGES.editAcc = ed;\r\n    if (ad)  PAGES.addresses = ad;\r\n    if (lo)  PAGES.logout = lo;\r\n    \/\/ Si no hay tab de Descargas (sin archivos a\u00fan), derivar su URL del base del link de Pedidos.\r\n    if (!dl && ord) {\r\n      try { var u = new URL(ord, location.origin); var p = u.pathname.replace(\/\\\/+$\/, '').split('\/'); p.pop(); PAGES.downloads = u.origin + p.join('\/') + '\/downloads\/'; } catch (e) {}\r\n    }\r\n  }\r\n\r\n  function showLoggedOut() {\r\n    if (woo) woo.classList.add('is-visible');\r\n    if (portal) portal.classList.remove('is-active');\r\n  }\r\n  function showLoggedIn() {\r\n    if (woo) woo.classList.remove('is-visible'); \/\/ queda display:none\r\n    if (portal) portal.classList.add('is-active');\r\n    resolveEndpoints(); \/\/ URLs reales de descargas\/pedidos\/logout desde el men\u00fa de Woo\r\n    var href = realLogoutHref();\r\n    $$('[data-inc-logout]').forEach(function (a) { a.setAttribute('href', href); });\r\n    $$('[data-inc-editacc]').forEach(function (a) { a.setAttribute('href', PAGES.editAcc); });\r\n    $$('[data-inc-addresses]').forEach(function (a) { a.setAttribute('href', PAGES.addresses); });\r\n    initPortal();\r\n  }\r\n\r\n  \/* ========================================================================\r\n     NAV DEL PORTAL (tabs)\r\n     ======================================================================== *\/\r\n  function initTabs() {\r\n    $$('[data-inc-tab]').forEach(function (btn) {\r\n      btn.addEventListener('click', function () {\r\n        var tab = btn.getAttribute('data-inc-tab');\r\n        $$('[data-inc-tab]').forEach(function (b) { b.classList.toggle('is-active', b === btn); });\r\n        $$('[data-inc-panel]').forEach(function (p) { p.classList.toggle('is-active', p.getAttribute('data-inc-panel') === tab); });\r\n        if (tab === 'pedidos') loadOrders();\r\n        \/\/ volver al grid si estaba dentro de un curso\r\n        if (tab === 'cursos') showCourseGrid();\r\n      });\r\n    });\r\n  }\r\n\r\n  \/* ========================================================================\r\n     MIS CURSOS \u00b7 fetch descargas \u2192 cursos \u2192 enriquecer \u2192 lecciones\r\n     ======================================================================== *\/\r\n  var COURSES = [];      \/\/ [{key,name,permalink,slug,id,image,materials:[{name,href}],lessons:[]}]\r\n  var lessonsLoaded = {}; \/\/ id \u2192 true (evita re-fetch)\r\n\r\n  var grid   = $('[data-inc-courses-grid]');\r\n  var skel   = $('[data-inc-courses-skel]');\r\n  var stateB = $('[data-inc-courses-state]');\r\n  var cview  = $('[data-inc-course-view]');\r\n\r\n  function parseDownloads(doc) {\r\n    \/\/ Buscar la tabla de descargas de Woo con varios selectores de fallback\r\n    var table = doc.querySelector('.woocommerce-MyAccount-downloads') ||\r\n                doc.querySelector('.woocommerce-table--order-downloads') ||\r\n                doc.querySelector('.woocommerce-orders-table--downloads');\r\n    var rows = table ? table.querySelectorAll('tbody tr, tr') : doc.querySelectorAll('.download-file');\r\n    var map = {}; var order = [];\r\n    [].forEach.call(rows, function (tr) {\r\n      \/\/ producto\r\n      var pa = tr.querySelector ? tr.querySelector('.download-product a') : null;\r\n      \/\/ archivo (link de descarga protegido)\r\n      \/\/ En el fallback sin tabla, `tr` ya ES la celda `.download-file`: tomar su <a> directo.\r\n      var fa = tr.querySelector\r\n        ? ((tr.matches && tr.matches('.download-file') ? tr.querySelector('a') : null) ||\r\n           tr.querySelector('.download-file a') ||\r\n           tr.querySelector('.woocommerce-MyAccount-downloads-file'))\r\n        : null;\r\n      if (!fa) return;\r\n      var href = fa.getAttribute('href'); if (!href) return;\r\n      var fileName = decode((fa.textContent || 'Descargar').trim()) || 'Descargar';\r\n      var pName = pa ? decode((pa.textContent || '').trim()) : '';\r\n      var pLink = pa ? pa.getAttribute('href') : '';\r\n      var key = (pLink && slugFromUrl(pLink)) || pName || fileName;\r\n      if (!map[key]) {\r\n        map[key] = { key: key, name: pName || fileName, permalink: pLink || '', slug: slugFromUrl(pLink), materials: [], lessons: [], id: null, image: '' };\r\n        order.push(key);\r\n      }\r\n      \/\/ evitar duplicados de material\r\n      if (!map[key].materials.some(function (m) { return m.href === href; })) {\r\n        map[key].materials.push({ name: fileName, href: href });\r\n      }\r\n    });\r\n    return order.map(function (k) { return map[k]; });\r\n  }\r\n\r\n  \/\/ Enriquecer un curso por Store API (slug \u2192 id, imagen, nombre limpio)\r\n  function enrichCourse(c) {\r\n    if (!c.slug) return Promise.resolve(c);\r\n    return jget(STORE + '\/products?slug=' + encodeURIComponent(c.slug))\r\n      .then(function (arr) {\r\n        var p = arr && arr[0];\r\n        if (p) {\r\n          c.id = p.id;\r\n          if (p.name) c.name = decode(p.name);\r\n          if (p.images && p.images[0]) c.image = p.images[0].src;\r\n          if (p.permalink) c.permalink = p.permalink;\r\n        }\r\n        return c;\r\n      })\r\n      .catch(function () { return c; });\r\n  }\r\n\r\n  \/\/ Lecciones de un curso (ACF v\u00eda wp\/v2). Lazy: se llama al abrir la vista del curso.\r\n  function loadLessons(c) {\r\n    if (!c.id || lessonsLoaded[c.id]) return Promise.resolve(c.lessons);\r\n    return jget(WPV2 + '\/product\/' + c.id + '?_fields=acf')\r\n      .then(function (d) {\r\n        lessonsLoaded[c.id] = true;\r\n        var lec = d && d.acf && d.acf.lecciones;\r\n        c.lessons = Array.isArray(lec) ? lec.filter(function (l) { return l && (l.titulo || l.video_url || fileUrl(l)); }) : [];\r\n        return c.lessons;\r\n      })\r\n      .catch(function () { lessonsLoaded[c.id] = true; c.lessons = []; return []; });\r\n  }\r\n\r\n  function courseCardHTML(c, i) {\r\n    var nLes = c.lessons.length; \/\/ puede ser 0 hasta abrir (contamos materiales seguro)\r\n    var media = c.image\r\n      ? '<img decoding=\"async\" src=\"' + esc(c.image) + '\" alt=\"' + esc(c.name) + '\" loading=\"lazy\">'\r\n      : '<div class=\"inc-acc__course-media-fallback\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"\/><path d=\"m10 8 5 3-5 3z\"\/><\/svg><\/div>';\r\n    var matChip = '<span class=\"inc-acc__chip\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\/><path d=\"M7 10l5 5 5-5\"\/><path d=\"M12 15V3\"\/><\/svg>' + c.materials.length + ' material' + (c.materials.length === 1 ? '' : 'es') + '<\/span>';\r\n    var vidChip = '<span class=\"inc-acc__chip\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m22 8-6 4 6 4V8z\"\/><rect x=\"2\" y=\"6\" width=\"14\" height=\"12\" rx=\"2\"\/><\/svg>Lecciones en video<\/span>';\r\n    return '' +\r\n      '<article class=\"inc-acc__course-card\">' +\r\n        '<div class=\"inc-acc__course-media\">' + media + '<\/div>' +\r\n        '<div class=\"inc-acc__course-body\">' +\r\n          '<h3 class=\"inc-acc__course-title\">' + esc(c.name) + '<\/h3>' +\r\n          '<div class=\"inc-acc__course-meta\">' + vidChip + matChip + '<\/div>' +\r\n          '<div class=\"inc-acc__course-cta\">' +\r\n            '<button type=\"button\" class=\"inc-acc__btn inc-acc__btn--solid\" data-inc-open=\"' + i + '\">' +\r\n              'Entrar al curso' +\r\n              '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14M13 5l7 7-7 7\"\/><\/svg>' +\r\n            '<\/button>' +\r\n          '<\/div>' +\r\n        '<\/div>' +\r\n      '<\/article>';\r\n  }\r\n\r\n  function renderGrid() {\r\n    if (skel) skel.hidden = true;\r\n    if (!COURSES.length) { renderCoursesEmpty(); return; }\r\n    grid.innerHTML = COURSES.map(courseCardHTML).join('');\r\n    grid.hidden = false;\r\n    stateB.hidden = true;\r\n    $$('[data-inc-open]', grid).forEach(function (btn) {\r\n      btn.addEventListener('click', function () { openCourse(parseInt(btn.getAttribute('data-inc-open'), 10)); });\r\n    });\r\n  }\r\n\r\n  function showCourseGrid() {\r\n    if (cview) { cview.classList.remove('is-active'); cview.innerHTML = ''; }\r\n    if (grid) grid.hidden = COURSES.length ? false : true;\r\n  }\r\n\r\n  function openCourse(i) {\r\n    var c = COURSES[i];\r\n    if (!c) return;\r\n    if (grid) grid.hidden = true;\r\n    stateB.hidden = true;\r\n    cview.innerHTML = '<div class=\"inc-acc__skel-grid\" style=\"grid-template-columns:1fr\"><div class=\"inc-acc__skel-card\"><div class=\"inc-acc__skel-line inc-acc__shimmer\" style=\"margin:22px\"><\/div><div class=\"inc-acc__skel-line inc-acc__shimmer\" style=\"margin:14px 22px 22px;width:60%\"><\/div><\/div><\/div>';\r\n    cview.classList.add('is-active');\r\n    cview.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n    loadLessons(c).then(function () { renderCourseView(c); });\r\n  }\r\n\r\n  function renderCourseView(c) {\r\n    var lessons = c.lessons || [], mats = c.materials || [];\r\n    var subs = '';\r\n    if (lessons.length) subs += '<span class=\"inc-acc__chip\">' + lessons.length + ' lecci\u00f3n' + (lessons.length === 1 ? '' : 'es') + '<\/span>';\r\n    if (mats.length)    subs += '<span class=\"inc-acc__chip\">' + mats.length + ' material' + (mats.length === 1 ? '' : 'es') + '<\/span>';\r\n\r\n    var html = '' +\r\n      '<button type=\"button\" class=\"inc-acc__back\" data-inc-back>' +\r\n        '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M19 12H5M12 19l-7-7 7-7\"\/><\/svg>' +\r\n        'Volver a mis cursos' +\r\n      '<\/button>' +\r\n      '<div class=\"inc-acc__course-header\"><h2>' + esc(c.name) + '<\/h2><div class=\"inc-acc__course-substats\">' + subs + '<\/div><\/div>';\r\n\r\n    \/\/ ---- Lecciones ----\r\n    if (lessons.length) {\r\n      html += '<div class=\"inc-acc__sec\"><div class=\"inc-acc__sec-head\">' +\r\n        '<span class=\"inc-acc__sec-ic\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m22 8-6 4 6 4V8z\"\/><rect x=\"2\" y=\"6\" width=\"14\" height=\"12\" rx=\"2\"\/><\/svg><\/span>' +\r\n        '<h3 class=\"inc-acc__sec-title\">Lecciones<\/h3><span class=\"inc-acc__sec-count\">' + lessons.length + ' videos<\/span><\/div>' +\r\n        '<div class=\"inc-acc__lessons\">';\r\n      lessons.forEach(function (l, idx) {\r\n        var num = (idx + 1 < 10 ? '0' : '') + (idx + 1);\r\n        var dur = l.duracion ? ('<span class=\"inc-acc__lesson-d\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 6v6l4 2\"\/><\/svg>' + esc(l.duracion) + '<\/span>') : '';\r\n        html += '<div class=\"inc-acc__lesson\" data-inc-lesson data-vurl=\"' + esc(l.video_url || '') + '\" data-vfile=\"' + esc(fileUrl(l)) + '\">' +\r\n          '<button type=\"button\" class=\"inc-acc__lesson-btn\">' +\r\n            '<span class=\"inc-acc__lesson-num\">' + num + '<\/span>' +\r\n            '<span class=\"inc-acc__lesson-info\"><span class=\"inc-acc__lesson-t\">' + esc(l.titulo || ('Lecci\u00f3n ' + (idx + 1))) + '<\/span>' + dur + '<\/span>' +\r\n            '<span class=\"inc-acc__lesson-chevron\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/span>' +\r\n          '<\/button>' +\r\n          '<div class=\"inc-acc__lesson-panel\" data-inc-lesson-panel><\/div>' +\r\n        '<\/div>';\r\n      });\r\n      html += '<\/div><\/div>';\r\n    }\r\n\r\n    \/\/ ---- Materiales ----\r\n    if (mats.length) {\r\n      html += '<div class=\"inc-acc__sec\"><div class=\"inc-acc__sec-head\">' +\r\n        '<span class=\"inc-acc__sec-ic\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\/><path d=\"M7 10l5 5 5-5\"\/><path d=\"M12 15V3\"\/><\/svg><\/span>' +\r\n        '<h3 class=\"inc-acc__sec-title\">Materiales para descargar<\/h3><span class=\"inc-acc__sec-count\">' + mats.length + ' archivos<\/span><\/div>' +\r\n        '<div class=\"inc-acc__mats\">';\r\n      mats.forEach(function (m) {\r\n        html += '<a class=\"inc-acc__mat\" href=\"' + esc(m.href) + '\" rel=\"nofollow noopener\">' +\r\n          '<span class=\"inc-acc__mat-ic\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><\/svg><\/span>' +\r\n          '<span class=\"inc-acc__mat-name\">' + esc(m.name) + '<\/span>' +\r\n          '<span class=\"inc-acc__mat-dl\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\/><path d=\"M7 10l5 5 5-5\"\/><path d=\"M12 15V3\"\/><\/svg>Descargar<\/span>' +\r\n        '<\/a>';\r\n      });\r\n      html += '<\/div><\/div>';\r\n    }\r\n\r\n    \/\/ Curso sin lecciones ni materiales (raro): mensaje\r\n    if (!lessons.length && !mats.length) {\r\n      html += '<div class=\"inc-acc__state\"><div class=\"inc-acc__state-ic\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 8v4M12 16h.01\"\/><\/svg><\/div>' +\r\n        '<h3>Contenido en camino<\/h3><p>Este curso todav\u00eda no tiene lecciones ni materiales cargados. Si cre\u00e9s que es un error, escribinos.<\/p>' +\r\n        '<div class=\"inc-acc__state-actions\"><a class=\"inc-acc__btn inc-acc__btn--ghost\" href=\"' + WHATSAPP + '\" target=\"_blank\" rel=\"noopener\">Escribir por WhatsApp<\/a><\/div><\/div>';\r\n    }\r\n\r\n    cview.innerHTML = html;\r\n\r\n    \/\/ Volver\r\n    var back = $('[data-inc-back]', cview);\r\n    if (back) back.addEventListener('click', function () { showCourseGrid(); if (grid) grid.scrollIntoView({ behavior: 'smooth', block: 'start' }); });\r\n\r\n    \/\/ Acorde\u00f3n de lecciones + carga de video on-demand\r\n    $$('[data-inc-lesson]', cview).forEach(function (les) {\r\n      var btn = $('.inc-acc__lesson-btn', les);\r\n      var panel = $('[data-inc-lesson-panel]', les);\r\n      btn.addEventListener('click', function () {\r\n        var open = les.classList.toggle('is-open');\r\n        if (open && !panel.getAttribute('data-loaded')) {\r\n          panel.setAttribute('data-loaded', '1');\r\n          var vfile = les.getAttribute('data-vfile');\r\n          var vurl = les.getAttribute('data-vurl');\r\n          var emb = toEmbed(vurl);\r\n          if (vfile) {\r\n            panel.innerHTML = '<div class=\"inc-acc__video\"><video src=\"' + esc(vfile) + '\" controls controlslist=\"nodownload\" preload=\"metadata\" playsinline><\/video><\/div>';\r\n          } else if (emb) {\r\n            panel.innerHTML = '<div class=\"inc-acc__video\"><iframe src=\"' + esc(emb) + '\" title=\"Lecci\u00f3n\" loading=\"lazy\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><\/div>';\r\n          } else if (vurl) {\r\n            panel.innerHTML = '<a class=\"inc-acc__video-link\" href=\"' + esc(vurl) + '\" target=\"_blank\" rel=\"noopener\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"\/><path d=\"M15 3h6v6\"\/><path d=\"M10 14 21 3\"\/><\/svg>Ver el video en una pesta\u00f1a nueva<\/a>';\r\n          } else {\r\n            panel.innerHTML = '<p class=\"inc-acc__video-none\">Esta lecci\u00f3n todav\u00eda no tiene video cargado.<\/p>';\r\n          }\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  function renderCoursesEmpty() {\r\n    grid.hidden = true;\r\n    if (cview) cview.classList.remove('is-active');\r\n    stateB.hidden = false;\r\n    stateB.innerHTML = '<div class=\"inc-acc__state\"><div class=\"inc-acc__state-ic\">' +\r\n      '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\"\/><path d=\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\"\/><\/svg><\/div>' +\r\n      '<h3>Todav\u00eda no ten\u00e9s cursos<\/h3><p>Cuando te inscribas a un curso, vas a verlo ac\u00e1 con todas sus lecciones y materiales.<\/p>' +\r\n      '<div class=\"inc-acc__state-actions\"><a class=\"inc-acc__btn inc-acc__btn--solid\" style=\"width:auto\" href=\"' + PAGES.shop + '\">Ver cursos<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14M13 5l7 7-7 7\"\/><\/svg><\/a><\/div><\/div>';\r\n  }\r\n\r\n  function renderCoursesError() {\r\n    if (skel) skel.hidden = true;\r\n    grid.hidden = true;\r\n    stateB.hidden = false;\r\n    stateB.innerHTML = '<div class=\"inc-acc__state inc-acc__state--error\"><div class=\"inc-acc__state-ic\">' +\r\n      '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><path d=\"M12 9v4M12 17h.01\"\/><\/svg><\/div>' +\r\n      '<h3>No pudimos cargar tus cursos<\/h3><p>Puede ser un problema de conexi\u00f3n moment\u00e1neo. Prob\u00e1 de nuevo o escribinos y lo resolvemos al toque.<\/p>' +\r\n      '<div class=\"inc-acc__state-actions\"><button type=\"button\" class=\"inc-acc__btn inc-acc__btn--solid\" style=\"width:auto\" data-inc-retry>Reintentar<\/button>' +\r\n      '<a class=\"inc-acc__btn inc-acc__btn--ghost\" href=\"' + WHATSAPP + '\" target=\"_blank\" rel=\"noopener\">WhatsApp<\/a><\/div><\/div>';\r\n    var rb = $('[data-inc-retry]', stateB);\r\n    if (rb) rb.addEventListener('click', function () { stateB.hidden = true; if (skel) skel.hidden = false; loadCourses(); });\r\n  }\r\n\r\n  var coursesLoaded = false;\r\n  \/\/ Extrae los productos (cursos) de la p\u00e1gina de detalle de un pedido (\/view-order|ver-pedido\/{id}\/)\r\n  function extractProductsFromOrder(doc) {\r\n    var scope = doc.querySelector('.woocommerce-order-details') ||\r\n                doc.querySelector('.order_details') ||\r\n                doc.querySelector('.woocommerce-table--order-details') || doc;\r\n    var seen = {}, out = [];\r\n    [].forEach.call(scope.querySelectorAll('a[href*=\"\/producto\/\"], a[href*=\"\/product\/\"]'), function (a) {\r\n      var href = a.getAttribute('href'); var slug = slugFromUrl(href);\r\n      var name = decode((a.textContent || '').trim());\r\n      if (!slug || seen[slug] || !name) return;\r\n      seen[slug] = 1;\r\n      out.push({ key: slug, name: name, permalink: href, slug: slug, materials: [], lessons: [], id: null, image: '' });\r\n    });\r\n    return out;\r\n  }\r\n\r\n  \/\/ Cursos comprados derivados de los PEDIDOS (aparecen aunque el curso no tenga archivos a\u00fan).\r\n  \/\/ Devuelve null si falla el fetch de la lista de pedidos.\r\n  function deriveCoursesFromOrders() {\r\n    return fetchDoc(PAGES.orders).then(function (doc) {\r\n      var orders = parseOrders(doc) || [];\r\n      var urls = orders.map(function (o) { return o.href; }).filter(Boolean);\r\n      if (!urls.length) return [];\r\n      return Promise.all(urls.slice(0, 25).map(function (u) {\r\n        return fetchDoc(u).then(extractProductsFromOrder).catch(function () { return []; });\r\n      })).then(function (lists) {\r\n        var map = {}, order = [];\r\n        lists.forEach(function (ps) { ps.forEach(function (p) {\r\n          if (!map[p.slug]) { map[p.slug] = p; order.push(p.slug); }\r\n        }); });\r\n        return order.map(function (k) { return map[k]; });\r\n      });\r\n    }).catch(function () { return null; });\r\n  }\r\n\r\n  \/\/ Une cursos de pedidos (lista) + descargas (materiales), por slug.\r\n  function mergeCourses(fromOrders, fromDownloads) {\r\n    var map = {}, order = [];\r\n    function upsert(c) {\r\n      var k = c.slug || c.key || c.name; if (!k) return;\r\n      if (!map[k]) { map[k] = { key: k, name: c.name || '', permalink: c.permalink || '', slug: c.slug || null, materials: [], lessons: [], id: null, image: '' }; order.push(k); }\r\n      if (c.name && !map[k].name) map[k].name = c.name;\r\n      if (c.permalink && !map[k].permalink) map[k].permalink = c.permalink;\r\n      if (c.materials && c.materials.length) c.materials.forEach(function (m) {\r\n        if (!map[k].materials.some(function (x) { return x.href === m.href; })) map[k].materials.push(m);\r\n      });\r\n    }\r\n    (fromOrders || []).forEach(upsert);    \/\/ define el orden y la lista base\r\n    (fromDownloads || []).forEach(upsert); \/\/ agrega materiales (y cursos con descarga por si acaso)\r\n    return order.map(function (k) { return map[k]; });\r\n  }\r\n\r\n  function loadCourses() {\r\n    Promise.all([\r\n      deriveCoursesFromOrders(),                                                        \/\/ cursos (aunque no tengan PDF)\r\n      fetchDoc(PAGES.downloads).then(parseDownloads).catch(function () { return null; }) \/\/ materiales protegidos\r\n    ]).then(function (res) {\r\n      var ord = res[0], dl = res[1];\r\n      if (ord === null && dl === null) { renderCoursesError(); coursesLoaded = true; return; } \/\/ ambos fallaron\r\n      COURSES = mergeCourses(ord || [], dl || []);\r\n      if (!COURSES.length) { renderGrid(); coursesLoaded = true; return; } \/\/ estado vac\u00edo\r\n      return Promise.all(COURSES.map(enrichCourse)).then(function () {\r\n        renderGrid(); coursesLoaded = true;\r\n      });\r\n    }).catch(function () { renderCoursesError(); coursesLoaded = true; });\r\n  }\r\n\r\n  \/* ========================================================================\r\n     PEDIDOS \u00b7 fetch + parse tabla de Woo\r\n     ======================================================================== *\/\r\n  var ordersLoaded = false;\r\n  var oskel  = $('[data-inc-orders-skel]');\r\n  var omount = $('[data-inc-orders-mount]');\r\n\r\n  function badgeClass(status) {\r\n    var s = (status || '').toLowerCase();\r\n    if (\/complet|entreg\/.test(s)) return 'inc-acc__badge--completed';\r\n    if (\/proces\/.test(s))         return 'inc-acc__badge--processing';\r\n    if (\/espera|hold|retenid\/.test(s)) return 'inc-acc__badge--on-hold';\r\n    if (\/pend\/.test(s))           return 'inc-acc__badge--pending';\r\n    if (\/cancel|fall|rechaz|reembol\/.test(s)) return 'inc-acc__badge--cancelled';\r\n    return '';\r\n  }\r\n\r\n  function parseOrders(doc) {\r\n    var table = doc.querySelector('.woocommerce-orders-table') || doc.querySelector('table.shop_table');\r\n    if (!table) return null; \/\/ null = no se encontr\u00f3 tabla (degradar); [] = sin pedidos\r\n    var out = [];\r\n    [].forEach.call(table.querySelectorAll('tbody tr'), function (tr) {\r\n      var numEl = tr.querySelector('.woocommerce-orders-table__cell-order-number');\r\n      var dateEl = tr.querySelector('.woocommerce-orders-table__cell-order-date');\r\n      var statEl = tr.querySelector('.woocommerce-orders-table__cell-order-status');\r\n      var totEl  = tr.querySelector('.woocommerce-orders-table__cell-order-total');\r\n      var viewA  = tr.querySelector('.woocommerce-button.view') || tr.querySelector('a.view');\r\n      var num  = numEl ? decode(numEl.textContent.trim()) : '';\r\n      var date = dateEl ? decode(dateEl.textContent.trim()) : '';\r\n      var stat = statEl ? decode(statEl.textContent.trim()) : '';\r\n      \/\/ total: sacar el importe visible (quitar \"por N items\" que a veces agrega Woo)\r\n      var tot  = totEl ? decode(totEl.textContent.replace(\/\\s+\/g, ' ').trim()) : '';\r\n      var href = viewA ? viewA.getAttribute('href') : '';\r\n      if (!num && !date && !tot) return;\r\n      out.push({ num: num, date: date, status: stat, total: tot, href: href });\r\n    });\r\n    return out;\r\n  }\r\n\r\n  function renderOrders(orders) {\r\n    if (oskel) oskel.hidden = true;\r\n    omount.hidden = false;\r\n    if (orders === null) {\r\n      omount.innerHTML = '<div class=\"inc-acc__state inc-acc__state--error\"><div class=\"inc-acc__state-ic\">' +\r\n        '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"\/><path d=\"M12 9v4M12 17h.01\"\/><\/svg><\/div>' +\r\n        '<h3>No pudimos cargar tus pedidos<\/h3><p>Prob\u00e1 de nuevo en un momento o mir\u00e1 tus pedidos en el panel de Woo.<\/p>' +\r\n        '<div class=\"inc-acc__state-actions\"><button type=\"button\" class=\"inc-acc__btn inc-acc__btn--solid\" style=\"width:auto\" data-inc-oretry>Reintentar<\/button>' +\r\n        '<a class=\"inc-acc__btn inc-acc__btn--ghost\" href=\"' + PAGES.orders + '\">Abrir en Woo<\/a><\/div><\/div>';\r\n      var b = $('[data-inc-oretry]', omount);\r\n      if (b) b.addEventListener('click', function () { omount.hidden = true; if (oskel) oskel.hidden = false; ordersLoaded = false; loadOrders(); });\r\n      return;\r\n    }\r\n    if (!orders.length) {\r\n      omount.innerHTML = '<div class=\"inc-acc__state\"><div class=\"inc-acc__state-ic\">' +\r\n        '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6 2 3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\"\/><path d=\"M3 6h18\"\/><path d=\"M16 10a4 4 0 0 1-8 0\"\/><\/svg><\/div>' +\r\n        '<h3>Todav\u00eda no hay pedidos<\/h3><p>Cuando te inscribas a tu primer curso, vas a ver el detalle de la compra ac\u00e1.<\/p>' +\r\n        '<div class=\"inc-acc__state-actions\"><a class=\"inc-acc__btn inc-acc__btn--solid\" style=\"width:auto\" href=\"' + PAGES.shop + '\">Ver cursos<\/a><\/div><\/div>';\r\n      return;\r\n    }\r\n    var rows = orders.map(function (o) {\r\n      var view = o.href ? '<a class=\"inc-acc__order-view\" href=\"' + esc(o.href) + '\">Ver<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14M13 5l7 7-7 7\"\/><\/svg><\/a>' : '';\r\n      return '<tr>' +\r\n        '<td data-title=\"Pedido\"><span class=\"inc-acc__order-num\">' + esc(o.num) + '<\/span><\/td>' +\r\n        '<td data-title=\"Fecha\">' + esc(o.date) + '<\/td>' +\r\n        '<td data-title=\"Estado\"><span class=\"inc-acc__badge ' + badgeClass(o.status) + '\">' + esc(o.status) + '<\/span><\/td>' +\r\n        '<td data-title=\"Total\">' + esc(o.total) + '<\/td>' +\r\n        '<td class=\"inc-acc__order-actions\" data-title=\"\">' + view + '<\/td>' +\r\n      '<\/tr>';\r\n    }).join('');\r\n    omount.innerHTML = '<div class=\"inc-acc__orders-wrap\"><table class=\"inc-acc__orders\"><thead><tr>' +\r\n      '<th>Pedido<\/th><th>Fecha<\/th><th>Estado<\/th><th>Total<\/th><th><\/th><\/tr><\/thead><tbody>' + rows + '<\/tbody><\/table><\/div>';\r\n  }\r\n\r\n  function loadOrders() {\r\n    if (ordersLoaded) return;\r\n    ordersLoaded = true;\r\n    fetchDoc(PAGES.orders)\r\n      .then(function (doc) { renderOrders(parseOrders(doc)); })\r\n      .catch(function () { renderOrders(null); });\r\n  }\r\n\r\n  \/* ========================================================================\r\n     NOMBRE DE LA ALUMNA\r\n     ======================================================================== *\/\r\n  function setHello(name) {\r\n    var el = $('[data-inc-hello]');\r\n    if (!el) return;\r\n    el.textContent = name ? ('Hola, ' + name) : 'Hola';\r\n    \/\/ Personalizar tambi\u00e9n el titular del hero\r\n    var t = $('[data-inc-title]');\r\n    if (t && name) t.textContent = 'HOLA, ' + String(name).toUpperCase();\r\n  }\r\n  function nameFromWoo() {\r\n    \/\/ Woo pinta \"Hola NOMBRE (\u2026)\" en el dashboard: leerlo del #inc-acc-woo\r\n    var content = woo && woo.querySelector('.woocommerce-MyAccount-content');\r\n    if (content) {\r\n      var strong = content.querySelector('p strong');\r\n      if (strong && strong.textContent.trim()) return strong.textContent.trim();\r\n      var m = (content.textContent || '').match(\/hola\\s+([^\\s,.!(]+)\/i);\r\n      if (m) return m[1];\r\n    }\r\n    return null;\r\n  }\r\n  function resolveName() {\r\n    var n = nameFromWoo();\r\n    if (n) { setHello(n); return; }\r\n    \/\/ Fallback: billing del carrito (Store API)\r\n    jget(STORE + '\/cart').then(function (d) {\r\n      var a = d && (d.billing_address || d.shipping_address);\r\n      setHello(a && a.first_name ? a.first_name : null);\r\n    });\r\n  }\r\n\r\n  \/* ========================================================================\r\n     INIT\r\n     ======================================================================== *\/\r\n  var portalInited = false;\r\n  function initPortal() {\r\n    if (portalInited) return;\r\n    portalInited = true;\r\n    initTabs();\r\n    resolveName();\r\n    loadCourses(); \/\/ pesta\u00f1a por defecto = Mis Cursos\r\n  }\r\n\r\n  function boot() {\r\n    var state = detectState();\r\n    if (state === 'in')  { showLoggedIn();  return true; }\r\n    if (state === 'out' || state === 'logout') { showLoggedOut(); return true; }\r\n    return false; \/\/ a\u00fan no hidratado\r\n  }\r\n\r\n  \/\/ El shortcode puede hidratarse tarde. Poll corto con reintentos + fallback.\r\n  function ready() {\r\n    if (boot()) return;\r\n    var tries = 0;\r\n    var iv = setInterval(function () {\r\n      tries++;\r\n      if (boot() || tries >= 20) { clearInterval(iv); if (tries >= 20) showLoggedOut(); }\r\n    }, 150);\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', ready);\r\n  } else {\r\n    ready();\r\n  }\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Inicio Mi cuenta TU ESPACIO EN INCANTO MI CUENTA Bienvenida a tu espacio. Ac\u00e1 acced\u00e9s a tus cursos, las lecciones en video, el material descargable y tus pedidos. Todo lo que necesit\u00e1s para seguir form\u00e1ndote, en un solo lugar. Tu campus Hola Cerrar sesi\u00f3n Mis Cursos Pedidos Mi cuenta Salir Actualiz\u00e1 tu nombre, email o [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-14","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/pages\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/comments?post=14"}],"version-history":[{"count":48,"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/pages\/14\/revisions"}],"predecessor-version":[{"id":194,"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/pages\/14\/revisions\/194"}],"wp:attachment":[{"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/media?parent=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}