<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":33,"date":"2026-07-04T11:48:34","date_gmt":"2026-07-04T11:48:34","guid":{"rendered":"https:\/\/incantomodelos.com\/cursos\/?page_id=33"},"modified":"2026-07-30T21:59:40","modified_gmt":"2026-07-30T21:59:40","slug":"inicio","status":"publish","type":"page","link":"https:\/\/incantomodelos.com\/cursos\/","title":{"rendered":"Inicio"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"33\" class=\"elementor elementor-33\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0be3e1e e-con e-atomic-element e-flexbox-base e-8ea0ab7 \" data-id=\"0be3e1e\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"0be3e1e\" data-e-type=\"e-flexbox\" data-id=\"0be3e1e\">\n    \t\t<div class=\"elementor-element elementor-element-b0fa221 elementor-widget elementor-widget-html\" data-id=\"b0fa221\" 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 TIENDA = HOME (Products Archive + Front Page) \u00b7 v1 self-contained\r\n  ============================================================================\r\n  D\u00d3NDE PEGARLO (Theme Builder de Elementor Pro):\r\n    Elementor \u2192 Theme Builder \u2192 \"Products Archive\" (o \"Product Archive\").\r\n    Setear ese Archive como la plantilla de la tienda \/cursos\/ y como front page.\r\n    Poner TODO este bloque en UN SOLO widget \"HTML\" dentro de un Container.\r\n  CONFIGURACI\u00d3N DEL CONTAINER:\r\n    Ancho: FULL WIDTH \u00b7 Padding: 0 \u00b7 Gap (Elementos): 0 \u00b7 Margen: 0.\r\n    Nada de widgets extra: header y footer salen de sus plantillas globales.\r\n\r\n  QU\u00c9 HACE:\r\n    - HERO editorial partido (panel pastel + foto): kicker + titular N27\/Space Grotesk + CTA salvia.\r\n    - GRID DE CURSOS renderizado client-side v\u00eda WooCommerce Store API (\/cursos\/).\r\n    - Detecta \/cursos\/categoria-producto\/{slug}\/ y filtra por esa categor\u00eda.\r\n    - Franja de beneficios + bloque de confianza de marca.\r\n    - Sidebar de categor\u00edas din\u00e1mico SOLO si hay >=2 categor\u00edas (si hay 1, se oculta y se centra el grid).\r\n    - Add-to-cart AJAX nativo de Woo (\"INSCRIBIRME\") + dispara eventos de fragments.\r\n    - Skeleton shimmer, estado vac\u00edo y estado de error (con WhatsApp).\r\n\r\n  SCOPE: todo el CSS bajo #inc-shop \u00b7 clases prefijadas inc-shop__ \u00b7 reset * bajo el id.\r\n-->\r\n\r\n<style>\r\n  \/* N27 = t\u00edtulos (subir en Elementor > Fuentes personalizadas como \"N27\"); Space Grotesk = fallback Google. Lato = cuerpo. *\/\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-shop, #inc-shop *, #inc-shop *::before, #inc-shop *::after { box-sizing: border-box; }\r\n  #inc-shop {\r\n    --inc-turq:       #23222B;   \/* acci\u00f3n primaria \u2192 tinta navy *\/\r\n    --inc-turq-deep:  #15141B;   \/* hover acci\u00f3n *\/\r\n    --inc-turq-soft:  #F2ECEE;   \/* tinte suave \u2192 rosa palo claro *\/\r\n    --inc-ink:        #23222B;\r\n    --inc-ink-2:      #4A4952;\r\n    --inc-mauve:      #C4C9D6;   \/* decorativo \u2192 periwinkle *\/\r\n    --inc-mauve-soft: #EBEDF2;\r\n    --inc-paper:      #FFFFFF;\r\n    --inc-paper-2:    #F6F4F0;   \/* superficie c\u00e1lida (canvas del manual) *\/\r\n    --inc-line:       #E3E0DA;\r\n    --inc-muted:      #7A767C;\r\n    --inc-success:    #2E7D5B;\r\n    --inc-danger:     #C0392B;\r\n    --inc-pink:       #DAC9CD;   \/* rosa palo (paneles\/acento) *\/\r\n    --inc-peri:       #C4C9D6;   \/* periwinkle *\/\r\n    --inc-sage:       #BDC5B1;   \/* salvia (CTA) *\/\r\n    --inc-sage-deep:  #A7B098;\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-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:       1360px;\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  #inc-shop a { color: inherit; text-decoration: none; }\r\n  \/* Fix contraste: los CTA RELLENOS son <a> y el color claro ven\u00eda por selectores de clase\r\n     (0,1,0\/0,1,1) que perd\u00edan contra #inc-shop a (1,0,1). Subimos especificidad a 1,1,0\/1,1,1\r\n     en la regla BASE para que el texto quede claro en AMBOS temas (turquesa y neutro). *\/\r\n  #inc-shop .inc-shop__btn--primary,\r\n  #inc-shop .inc-shop__enroll,\r\n  #inc-shop .inc-shop__state a { color: #fff; }\r\n  #inc-shop img { max-width: 100%; display: block; }\r\n\r\n  \/* ===== Blindaje de titulares vs Kit de Elementor ===== *\/\r\n  #inc-shop .inc-shop__title,\r\n  #inc-shop .inc-shop__band-title,\r\n  #inc-shop .inc-shop__trust-title,\r\n  #inc-shop h1.inc-shop__title,\r\n  #inc-shop h2.inc-shop__band-title,\r\n  #inc-shop h2.inc-shop__trust-title {\r\n    font-family: var(--inc-display) !important;\r\n    font-weight: 300 !important;\r\n    text-transform: uppercase !important;\r\n    line-height: .98 !important;\r\n    letter-spacing: .03em !important;\r\n    color: var(--inc-ink) !important;\r\n    margin: 0;\r\n  }\r\n  #inc-shop .inc-shop__card-name,\r\n  #inc-shop h3.inc-shop__card-name {\r\n    font-family: var(--inc-font) !important;\r\n    font-weight: 600 !important;\r\n    text-transform: none !important;\r\n    line-height: 1.2 !important;\r\n    letter-spacing: .01em !important;\r\n    color: var(--inc-ink) !important;\r\n    margin: 0;\r\n  }\r\n\r\n  \/* ===== HERO (una sola escena \u00b7 Brand Book) ===== *\/\r\n  \/* Fondo \u00daNICO copiado del degradado de la foto original: lila fr\u00edo izq \u2192 rosa c\u00e1lido der.\r\n     Los dos paneles son TRANSPARENTES para que no se vea la costura entre izquierda y derecha. *\/\r\n  .inc-shop__hero {\r\n    position: relative; overflow: hidden; border-bottom: 1px solid var(--inc-line);\r\n    background: linear-gradient(100deg, #E9F0FA 0%, #ECEDF8 36%, #F1E7EF 56%, #F5D9DF 80%, #F4C9D1 100%);\r\n  }\r\n  .inc-shop__hero-grid {\r\n    max-width: var(--inc-maxw); margin: 0 auto;\r\n    display: grid; grid-template-columns: 1fr 1.08fr; align-items: stretch;\r\n    min-height: 100vh; min-height: 100svh;   \/* hero a pantalla completa *\/\r\n  }\r\n  .inc-shop__hero-panel {\r\n    background: transparent;\r\n    display: flex; align-items: center;\r\n    padding: clamp(44px, 6vw, 96px) clamp(26px, 4vw, 72px);\r\n  }\r\n  .inc-shop__hero-inner { width: 100%; max-width: 46ch; position: relative; z-index: 2; }\r\n  .inc-shop__eyebrow {\r\n    display: inline-flex; align-items: center; gap: 12px;\r\n    font-family: var(--inc-display);\r\n    font-weight: 500; font-size: 12px; letter-spacing: .28em; text-transform: uppercase;\r\n    color: var(--inc-ink);\r\n    margin-bottom: 24px;\r\n  }\r\n  .inc-shop__eyebrow::before {\r\n    content: \"\"; width: 34px; height: 1.5px; background: var(--inc-ink); opacity: .7;\r\n  }\r\n  .inc-shop__title {\r\n    font-size: clamp(40px, 5.6vw, 84px);\r\n    max-width: 14ch;\r\n    margin: 0 0 30px;\r\n    letter-spacing: .04em;\r\n    overflow-wrap: break-word;\r\n  }\r\n  .inc-shop__title b { font-weight: 600; color: var(--inc-ink); }\r\n  .inc-shop__intro {\r\n    font-size: clamp(15px, 1.3vw, 18px); line-height: 1.65; color: var(--inc-ink-2);\r\n    max-width: 52ch; margin: 0 0 34px; font-weight: 400;\r\n  }\r\n  .inc-shop__hero-actions { display: flex; flex-wrap: wrap; gap: 14px; align-items: center; }\r\n  \/* CTA del hero en SALVIA con texto tinta (como el manual). #inc-shop prefija para ganarle al color:#fff base. *\/\r\n  #inc-shop .inc-shop__hero-actions .inc-shop__btn--primary { background: var(--inc-sage); color: var(--inc-ink); }\r\n  #inc-shop .inc-shop__hero-actions .inc-shop__btn--primary:hover { background: var(--inc-sage-deep); }\r\n  \/* La columna derecha solo reserva el espacio del grid; la foto es FONDO del bloque entero. *\/\r\n  .inc-shop__hero-media {\r\n    position: static; min-height: 300px;\r\n    background: transparent;\r\n  }\r\n  \/* Foto = FONDO del hero (no un cuadro): anclada abajo-derecha, alto completo del bloque y\r\n     ancho proporcional (width:auto) \u2192 NUNCA se recorta a los costados. Prefijada con #inc-shop\r\n     + !important porque `.elementor img{height:auto;max-width:100%}` pisa las clases solas. *\/\r\n  #inc-shop .inc-shop__hero-photo {\r\n    position: absolute; right: 0; bottom: 0; top: auto; left: auto;\r\n    height: 100% !important; width: auto !important; max-width: none !important;\r\n    pointer-events: none; user-select: none;\r\n  }\r\n  .inc-shop__hero-scroll {\r\n    position: absolute; right: clamp(16px, 3vw, 34px); bottom: clamp(16px, 3vw, 30px);\r\n    width: 42px; height: 42px; border-radius: 50%;\r\n    border: 1.5px solid rgba(35,34,43,.35); color: var(--inc-ink);\r\n    display: flex; align-items: center; justify-content: center;\r\n    background: rgba(255,255,255,.28); transition: background .2s ease, transform .2s ease;\r\n  }\r\n  .inc-shop__hero-scroll:hover { background: rgba(255,255,255,.6); transform: translateY(2px); }\r\n  .inc-shop__hero-scroll svg { width: 18px; height: 18px; }\r\n\r\n  \/* ===== Botones (PLANOS, sin glow) ===== *\/\r\n  .inc-shop__btn {\r\n    display: inline-flex; align-items: center; justify-content: center; gap: 10px;\r\n    padding: 15px 30px; border: 0; border-radius: var(--inc-pill);\r\n    font-family: var(--inc-font); font-weight: 700; font-size: 13px;\r\n    letter-spacing: .14em; text-transform: uppercase; cursor: pointer;\r\n    transition: background .2s ease, color .2s ease, transform .2s ease, border-color .2s ease;\r\n  }\r\n  .inc-shop__btn--primary { background: var(--inc-turq); color: #fff; }\r\n  .inc-shop__btn--primary:hover { background: var(--inc-turq-deep); transform: translateY(-2px); }\r\n  .inc-shop__btn--ghost {\r\n    background: transparent; color: var(--inc-ink);\r\n    border: 1.5px solid var(--inc-line);\r\n  }\r\n  .inc-shop__btn--ghost:hover { border-color: var(--inc-ink); transform: translateY(-2px); }\r\n\r\n  \/* ===== Head bar (contador + orden) ===== *\/\r\n  .inc-shop__headbar {\r\n    max-width: var(--inc-maxw); margin: 0 auto;\r\n    padding: clamp(24px,4vw,44px) var(--inc-pad-x) 0;\r\n    display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; flex-wrap: wrap;\r\n  }\r\n  .inc-shop__headbar-eyebrow { font-weight: 600; font-size: 11px; letter-spacing: .22em; text-transform: uppercase; color: var(--inc-turq-deep); margin-bottom: 8px; }\r\n  .inc-shop__headbar h2 {\r\n    font-family: var(--inc-display) !important; font-weight: 300 !important; text-transform: uppercase !important;\r\n    letter-spacing: .04em !important; line-height: 1 !important; color: var(--inc-ink) !important;\r\n    font-size: clamp(26px, 3.4vw, 40px); margin: 0;\r\n  }\r\n  .inc-shop__headbar-count { font-size: 13px; color: var(--inc-ink-2); font-weight: 500; margin-top: 8px; }\r\n  .inc-shop__headbar-count strong { color: var(--inc-ink); font-weight: 700; }\r\n  .inc-shop__sort {\r\n    appearance: none; -webkit-appearance: none;\r\n    padding: 11px 40px 11px 16px; border: 1px solid var(--inc-line); border-radius: var(--inc-pill);\r\n    background: var(--inc-paper) url(\"data:image\/svg+xml;utf8,<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%233C3C3B' stroke-width='2'><path d='m2 4 4 4 4-4'\/><\/svg>\") no-repeat right 15px center;\r\n    font-family: var(--inc-font); font-size: 13px; font-weight: 500; color: var(--inc-ink);\r\n    cursor: pointer; min-width: 210px;\r\n  }\r\n\r\n  \/* ===== Body layout ===== *\/\r\n  .inc-shop__body {\r\n    max-width: var(--inc-maxw); margin: 0 auto;\r\n    padding: 28px var(--inc-pad-x) clamp(60px,7vw,96px);\r\n    display: grid; grid-template-columns: 260px 1fr; gap: 44px; align-items: start;\r\n  }\r\n  .inc-shop__body.is-solo { grid-template-columns: 1fr; }\r\n  .inc-shop__body.is-solo .inc-shop__sidebar { display: none; }\r\n\r\n  \/* ===== Sidebar ===== *\/\r\n  .inc-shop__sidebar { position: sticky; top: 24px; align-self: start; }\r\n  .inc-shop__panel-h {\r\n    font-weight: 600; font-size: 12px; letter-spacing: .2em; text-transform: uppercase; color: var(--inc-ink);\r\n    margin: 0 0 14px; padding-bottom: 12px; border-bottom: 2px solid var(--inc-turq);\r\n  }\r\n  .inc-shop__cats { list-style: none; margin: 0; padding: 0; }\r\n  .inc-shop__cats li a {\r\n    display: flex; align-items: center; justify-content: space-between; gap: 10px;\r\n    padding: 10px 0; font-size: 14px; font-weight: 500; color: var(--inc-ink-2);\r\n    border-bottom: 1px solid var(--inc-line);\r\n    transition: padding-left .2s ease, color .2s ease;\r\n  }\r\n  .inc-shop__cats li a:hover { padding-left: 8px; color: var(--inc-ink); }\r\n  .inc-shop__cats li a.is-current { color: var(--inc-turq-deep); font-weight: 700; }\r\n  .inc-shop__cats li a .count { font-size: 12px; color: var(--inc-muted); font-weight: 600; }\r\n  .inc-shop__help {\r\n    margin-top: 26px; padding: 20px; background: var(--inc-turq-soft);\r\n    border-radius: var(--inc-radius-sm); border-left: 3px solid var(--inc-turq);\r\n  }\r\n  .inc-shop__help h5 { margin: 0 0 8px; font-weight: 700; font-size: 13px; letter-spacing: .04em; color: var(--inc-ink); text-transform: uppercase; }\r\n  .inc-shop__help p { margin: 0 0 12px; font-size: 12.5px; line-height: 1.5; color: var(--inc-ink-2); }\r\n  .inc-shop__help a {\r\n    display: inline-flex; align-items: center; gap: 7px; font-weight: 700; font-size: 12px;\r\n    letter-spacing: .06em; color: var(--inc-turq-deep);\r\n  }\r\n\r\n  \/* ===== Grid de cursos ===== *\/\r\n  .inc-shop__main { min-width: 0; }\r\n  .inc-shop__grid {\r\n    list-style: none; margin: 0; padding: 0;\r\n    display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 440px));\r\n    justify-content: center; gap: 28px;\r\n  }\r\n  .inc-shop__card {\r\n    background: var(--inc-paper); border: 1px solid var(--inc-line); border-radius: var(--inc-radius);\r\n    overflow: hidden; display: flex; flex-direction: column;\r\n    transition: border-color .25s ease, transform .25s ease, box-shadow .25s ease;\r\n  }\r\n  .inc-shop__card:hover { border-color: var(--inc-turq); transform: translateY(-4px); box-shadow: var(--inc-shadow); }\r\n  .inc-shop__card-media { position: relative; aspect-ratio: 16\/10; background: var(--inc-mauve-soft); overflow: hidden; display: block; }\r\n  .inc-shop__card-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .4s ease; }\r\n  .inc-shop__card:hover .inc-shop__card-media img { transform: scale(1.05); }\r\n  .inc-shop__card-media-fallback {\r\n    position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;\r\n    background: linear-gradient(135deg, var(--inc-turq-soft), var(--inc-mauve-soft));\r\n    color: var(--inc-turq); font-weight: 300; font-size: 44px; letter-spacing: .1em;\r\n  }\r\n  .inc-shop__card-body { padding: 22px 24px 24px; display: flex; flex-direction: column; gap: 12px; flex: 1; }\r\n  .inc-shop__chips { display: flex; flex-wrap: wrap; gap: 7px; }\r\n  .inc-shop__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-size: 10.5px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase;\r\n    white-space: nowrap;\r\n  }\r\n  .inc-shop__chip svg { width: 12px; height: 12px; }\r\n  .inc-shop__card-name { font-size: clamp(18px, 2vw, 23px); }\r\n  .inc-shop__card-desc { font-size: 14px; line-height: 1.55; color: var(--inc-ink-2); margin: 0; flex: 1; }\r\n  .inc-shop__card-foot { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-top: 6px; flex-wrap: wrap; }\r\n  .inc-shop__price { font-weight: 700; font-size: 24px; letter-spacing: .01em; color: var(--inc-ink); }\r\n  .inc-shop__price del { color: var(--inc-muted); font-size: 15px; font-weight: 500; margin-right: 8px; }\r\n  .inc-shop__card-actions { display: flex; gap: 10px; margin-top: 4px; }\r\n  .inc-shop__enroll {\r\n    flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 8px;\r\n    padding: 13px 18px; border: 0; border-radius: var(--inc-pill);\r\n    background: var(--inc-turq); color: #fff;\r\n    font-family: var(--inc-font); font-weight: 700; font-size: 12.5px; letter-spacing: .12em; text-transform: uppercase;\r\n    cursor: pointer; transition: background .2s ease, transform .2s ease;\r\n  }\r\n  .inc-shop__enroll:hover { background: var(--inc-turq-deep); transform: translateY(-2px); }\r\n  .inc-shop__enroll.loading { opacity: .6; pointer-events: none; }\r\n  .inc-shop__enroll.added { background: var(--inc-success); }\r\n  .inc-shop__view {\r\n    display: inline-flex; align-items: center; justify-content: center;\r\n    padding: 13px 18px; border: 1.5px solid var(--inc-line); border-radius: var(--inc-pill);\r\n    color: var(--inc-ink); font-weight: 700; font-size: 12.5px; letter-spacing: .1em; text-transform: uppercase;\r\n    transition: border-color .2s ease, transform .2s ease;\r\n  }\r\n  .inc-shop__view:hover { border-color: var(--inc-ink); transform: translateY(-2px); }\r\n\r\n  \/* Skeleton *\/\r\n  .inc-shop__skel { background: var(--inc-paper); border: 1px solid var(--inc-line); border-radius: var(--inc-radius); overflow: hidden; }\r\n  .inc-shop__skel-media { aspect-ratio: 16\/10; }\r\n  .inc-shop__skel-line, .inc-shop__skel-media {\r\n    background: linear-gradient(90deg, var(--inc-paper-2) 0%, #ececec 50%, var(--inc-paper-2) 100%);\r\n    background-size: 200% 100%; animation: inc-shimmer 1.4s infinite linear;\r\n  }\r\n  .inc-shop__skel-line { height: 14px; border-radius: 5px; margin: 16px 24px 0; }\r\n  .inc-shop__skel-line.sm { width: 45%; }\r\n  .inc-shop__skel-line.lg { height: 22px; margin-top: 18px; }\r\n  .inc-shop__skel-line.btn { height: 44px; border-radius: 999px; margin: 22px 24px 24px; }\r\n  @keyframes inc-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }\r\n\r\n  \/* Estado vac\u00edo \/ error *\/\r\n  .inc-shop__state {\r\n    grid-column: 1 \/ -1; padding: 64px 32px; text-align: center;\r\n    background: var(--inc-paper-2); border: 1px dashed var(--inc-line); border-radius: var(--inc-radius);\r\n  }\r\n  .inc-shop__state svg { width: 40px; height: 40px; color: var(--inc-turq); margin: 0 auto 16px; }\r\n  .inc-shop__state h3 { font-family: var(--inc-display) !important; font-weight: 400 !important; text-transform: uppercase !important; letter-spacing: .04em !important; font-size: 26px; margin: 0 0 8px; color: var(--inc-ink); }\r\n  .inc-shop__state p { margin: 0; color: var(--inc-ink-2); font-size: 15px; }\r\n  .inc-shop__state a {\r\n    display: inline-flex; align-items: center; gap: 8px; margin-top: 22px;\r\n    padding: 13px 24px; background: var(--inc-turq); color: #fff; border-radius: var(--inc-pill);\r\n    font-weight: 700; font-size: 12.5px; letter-spacing: .12em; text-transform: uppercase;\r\n    transition: background .2s ease, transform .2s ease;\r\n  }\r\n  .inc-shop__state a:hover { background: var(--inc-turq-deep); transform: translateY(-2px); }\r\n\r\n  \/* Paginaci\u00f3n *\/\r\n  .inc-shop__pager { margin-top: 44px; display: flex; justify-content: center; gap: 8px; flex-wrap: wrap; }\r\n  .inc-shop__pager a, .inc-shop__pager span {\r\n    display: inline-flex; align-items: center; justify-content: center; min-width: 44px; height: 44px; padding: 0 12px;\r\n    border: 1.5px solid var(--inc-line); border-radius: var(--inc-pill);\r\n    font-weight: 600; font-size: 14px; color: var(--inc-ink);\r\n    transition: border-color .2s ease, background .2s ease, color .2s ease;\r\n  }\r\n  .inc-shop__pager a:hover { border-color: var(--inc-ink); }\r\n  .inc-shop__pager .current { background: var(--inc-turq); border-color: var(--inc-turq); color: #fff; }\r\n  .inc-shop__pager .dots { border: 0; }\r\n\r\n  \/* ===== Franja de beneficios ===== *\/\r\n  .inc-shop__band { background: var(--inc-paper-2); border-top: 1px solid var(--inc-line); border-bottom: 1px solid var(--inc-line); }\r\n  .inc-shop__band-inner {\r\n    max-width: var(--inc-maxw); margin: 0 auto; padding: clamp(44px,6vw,72px) var(--inc-pad-x);\r\n    display: grid; grid-template-columns: repeat(4, 1fr); gap: 28px;\r\n  }\r\n  .inc-shop__benefit { display: flex; flex-direction: column; gap: 12px; }\r\n  .inc-shop__benefit-icon {\r\n    width: 52px; height: 52px; border-radius: 14px; 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-shop__benefit-icon svg { width: 26px; height: 26px; }\r\n  .inc-shop__benefit h4 { margin: 0; font-weight: 700; font-size: 15px; letter-spacing: .02em; color: var(--inc-ink); }\r\n  .inc-shop__benefit p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--inc-ink-2); }\r\n\r\n  \/* ===== Bloque de confianza ===== *\/\r\n  .inc-shop__trust {\r\n    position: relative; overflow: hidden;\r\n    padding: clamp(60px,8vw,110px) var(--inc-pad-x);\r\n    background: var(--inc-sage);\r\n    color: var(--inc-ink); text-align: center;\r\n  }\r\n  .inc-shop__trust::after {\r\n    content: \"\"; position: absolute; inset: 0;\r\n    background: radial-gradient(760px 420px at 50% -10%, rgba(255,255,255,.34), transparent 62%);\r\n    pointer-events: none;\r\n  }\r\n  .inc-shop__trust-inner { max-width: 920px; margin: 0 auto; position: relative; z-index: 2; }\r\n  .inc-shop__trust-eyebrow { font-family: var(--inc-display); font-weight: 500; font-size: 12px; letter-spacing: .26em; text-transform: uppercase; color: rgba(35,34,43,.7); margin-bottom: 20px; }\r\n  #inc-shop h2.inc-shop__trust-title { color: var(--inc-ink) !important; font-size: clamp(30px, 5vw, 60px); margin: 0 0 22px; }\r\n  .inc-shop__trust-title em { font-style: normal; font-weight: 700; }\r\n  .inc-shop__trust p { font-size: clamp(15px, 1.5vw, 19px); line-height: 1.6; color: var(--inc-ink-2); margin: 0 auto 34px; max-width: 60ch; }\r\n  #inc-shop .inc-shop__trust .inc-shop__btn--primary { background: var(--inc-ink) !important; color: #fff !important; }\r\n  #inc-shop .inc-shop__trust .inc-shop__btn--primary:hover { background: #000 !important; transform: translateY(-2px); }\r\n\r\n  \/* ===== Responsive ===== *\/\r\n  @media (max-width: 860px) {\r\n    .inc-shop__hero-grid { grid-template-columns: 1fr; min-height: 0; }\r\n    \/* Apilado: la foto ocupa todo el ancho, alto proporcional, pegada al borde inferior;\r\n       la columna reserva exactamente ese alto (ratio 2384\/2560 \u2248 93vw). *\/\r\n    .inc-shop__hero-media { min-height: 93vw; }\r\n    #inc-shop .inc-shop__hero-photo { width: 100% !important; height: auto !important; right: 0; bottom: 0; }\r\n    .inc-shop__hero-inner { max-width: none; }\r\n  }\r\n  @media (max-width: 992px) {\r\n    .inc-shop__body { grid-template-columns: 1fr; gap: 32px; }\r\n    .inc-shop__sidebar { position: static; }\r\n    .inc-shop__band-inner { grid-template-columns: 1fr 1fr; gap: 32px; }\r\n  }\r\n  @media (max-width: 768px) {\r\n    .inc-shop__grid { grid-template-columns: 1fr; gap: 22px; }\r\n    .inc-shop__headbar { align-items: flex-start; }\r\n    .inc-shop__sort { min-width: 0; width: 100%; }\r\n  }\r\n  @media (max-width: 480px) {\r\n    .inc-shop__band-inner { grid-template-columns: 1fr; }\r\n    .inc-shop__card-actions { flex-direction: column; }\r\n    .inc-shop__hero-actions { width: 100%; }\r\n    .inc-shop__hero-actions .inc-shop__btn { flex: 1; }\r\n  }\r\n  @media (prefers-reduced-motion: reduce) {\r\n    #inc-shop * { animation: none !important; transition: none !important; }\r\n    #inc-shop .inc-shop__card:hover { transform: none; }\r\n  }\r\n<\/style>\r\n\r\n<div id=\"inc-shop\">\r\n\r\n  <!-- ===== HERO (split panel \u00b7 Brand Book) ===== -->\r\n  <section class=\"inc-shop__hero\">\r\n    <div class=\"inc-shop__hero-grid\">\r\n      <div class=\"inc-shop__hero-panel\">\r\n        <div class=\"inc-shop__hero-inner\">\r\n          <div class=\"inc-shop__eyebrow\" data-inc-eyebrow>ACADEMIA DE MODELAJE \u00b7 +20 A\u00d1OS<\/div>\r\n          <h1 class=\"inc-shop__title\" data-inc-title>TU CARRERA <b>EMPIEZA AC\u00c1<\/b><\/h1>\r\n          <p class=\"inc-shop__intro\" data-inc-intro>\r\n            Formate con la experiencia de m\u00e1s de veinte a\u00f1os de Incanto. Cursos online de modelaje y pasarela\r\n            para llevar tu talento al siguiente nivel: mir\u00e1 los videos, descarg\u00e1 el material y acced\u00e9 al\r\n            contenido apenas te inscrib\u00eds. A tu ritmo, desde donde est\u00e9s.\r\n          <\/p>\r\n          <div class=\"inc-shop__hero-actions\">\r\n            <a class=\"inc-shop__btn inc-shop__btn--primary\" href=\"#inc-shop-cursos\">VER CURSOS<\/a>\r\n            <a class=\"inc-shop__btn inc-shop__btn--ghost\" href=\"https:\/\/incantomodelos.com\/\" target=\"_blank\" rel=\"noopener\">CONOC\u00c9 INCANTO<\/a>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"inc-shop__hero-media\">\r\n        <!-- Modelo de portada (recorte sin fondo). Para cambiarla, reemplaz\u00e1 el src por otra imagen PNG\/WEBP sin fondo. -->\r\n        <img decoding=\"async\" class=\"inc-shop__hero-photo\" src=\"https:\/\/incantomodelos.com\/cursos\/wp-content\/uploads\/2026\/07\/Modelo-portada-scaled.webp\" alt=\"Modelo de Incanto\">\r\n        <a class=\"inc-shop__hero-scroll\" href=\"#inc-shop-cursos\" aria-label=\"Ver cursos\">\r\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 5v14M5 12l7 7 7-7\"\/><\/svg>\r\n        <\/a>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- ===== HEAD BAR (contador + orden) ===== -->\r\n  <div class=\"inc-shop__headbar\" id=\"inc-shop-cursos\">\r\n    <div>\r\n      <div class=\"inc-shop__headbar-eyebrow\" data-inc-headeyebrow>NUESTROS CURSOS<\/div>\r\n      <h2 data-inc-headtitle>ELEG\u00cd TU CAMINO<\/h2>\r\n      <div class=\"inc-shop__headbar-count\"><strong data-inc-count>\u2014<\/strong> <span data-inc-count-word>cursos disponibles<\/span><\/div>\r\n    <\/div>\r\n    <select class=\"inc-shop__sort\" id=\"inc-shop-sort\" aria-label=\"Ordenar cursos\">\r\n      <option value=\"menu_order\">Orden sugerido<\/option>\r\n      <option value=\"date\">M\u00e1s recientes<\/option>\r\n      <option value=\"popularity\">M\u00e1s elegidos<\/option>\r\n      <option value=\"price\">Precio: menor a mayor<\/option>\r\n      <option value=\"price-desc\">Precio: mayor a menor<\/option>\r\n      <option value=\"title\">Alfab\u00e9tico A-Z<\/option>\r\n    <\/select>\r\n  <\/div>\r\n\r\n  <!-- ===== BODY ===== -->\r\n  <section class=\"inc-shop__body is-solo\" id=\"inc-shop-body\">\r\n\r\n    <!-- SIDEBAR (din\u00e1mico, s\u00f3lo si >=2 categor\u00edas) -->\r\n    <aside class=\"inc-shop__sidebar\" id=\"inc-shop-sidebar\" style=\"display:none;\">\r\n      <h4 class=\"inc-shop__panel-h\">Categor\u00edas<\/h4>\r\n      <ul class=\"inc-shop__cats\" id=\"inc-shop-cats\"><\/ul>\r\n      <div class=\"inc-shop__help\">\r\n        <h5>\u00bfDudas antes de inscribirte?<\/h5>\r\n        <p>Escribinos y te contamos qu\u00e9 curso se ajusta mejor a vos.<\/p>\r\n        <a href=\"https:\/\/wa.me\/5493875460464\" target=\"_blank\" rel=\"noopener\">\r\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"\/><\/svg>\r\n          WhatsApp\r\n        <\/a>\r\n      <\/div>\r\n    <\/aside>\r\n\r\n    <!-- MAIN GRID -->\r\n    <main class=\"inc-shop__main\" aria-live=\"polite\">\r\n      <ul class=\"inc-shop__grid\" id=\"inc-shop-grid\">\r\n        <!-- Skeleton inicial -->\r\n        <li class=\"inc-shop__skel\"><div class=\"inc-shop__skel-media\"><\/div><div class=\"inc-shop__skel-line lg\"><\/div><div class=\"inc-shop__skel-line\"><\/div><div class=\"inc-shop__skel-line sm\"><\/div><div class=\"inc-shop__skel-line btn\"><\/div><\/li>\r\n        <li class=\"inc-shop__skel\"><div class=\"inc-shop__skel-media\"><\/div><div class=\"inc-shop__skel-line lg\"><\/div><div class=\"inc-shop__skel-line\"><\/div><div class=\"inc-shop__skel-line sm\"><\/div><div class=\"inc-shop__skel-line btn\"><\/div><\/li>\r\n        <li class=\"inc-shop__skel\"><div class=\"inc-shop__skel-media\"><\/div><div class=\"inc-shop__skel-line lg\"><\/div><div class=\"inc-shop__skel-line\"><\/div><div class=\"inc-shop__skel-line sm\"><\/div><div class=\"inc-shop__skel-line btn\"><\/div><\/li>\r\n        <li class=\"inc-shop__skel\"><div class=\"inc-shop__skel-media\"><\/div><div class=\"inc-shop__skel-line lg\"><\/div><div class=\"inc-shop__skel-line\"><\/div><div class=\"inc-shop__skel-line sm\"><\/div><div class=\"inc-shop__skel-line btn\"><\/div><\/li>\r\n      <\/ul>\r\n      <div id=\"inc-shop-pager\"><\/div>\r\n    <\/main>\r\n  <\/section>\r\n\r\n  <!-- ===== FRANJA DE BENEFICIOS ===== -->\r\n  <section class=\"inc-shop__band\">\r\n    <div class=\"inc-shop__band-inner\">\r\n      <div class=\"inc-shop__benefit\">\r\n        <div class=\"inc-shop__benefit-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M12 7v5l3 2\"\/><\/svg><\/div>\r\n        <h4>Acceso inmediato<\/h4>\r\n        <p>Apenas te inscrib\u00eds, el curso queda disponible en tu cuenta. Empez\u00e1 hoy mismo.<\/p>\r\n      <\/div>\r\n      <div class=\"inc-shop__benefit\">\r\n        <div class=\"inc-shop__benefit-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><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><\/div>\r\n        <h4>Material descargable<\/h4>\r\n        <p>Videos y PDF para ver a tu ritmo. Descarg\u00e1 el contenido y estudi\u00e1 cuando quieras.<\/p>\r\n      <\/div>\r\n      <div class=\"inc-shop__benefit\">\r\n        <div class=\"inc-shop__benefit-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 2l2.5 6.5L21 9l-5 4.5L17.5 20 12 16.5 6.5 20 8 13.5 3 9l6.5-.5z\"\/><\/svg><\/div>\r\n        <h4>+20 a\u00f1os de experiencia<\/h4>\r\n        <p>M\u00e1s de dos d\u00e9cadas formando modelos en Salta. La escuela detr\u00e1s de cada curso.<\/p>\r\n      <\/div>\r\n      <div class=\"inc-shop__benefit\">\r\n        <div class=\"inc-shop__benefit-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"\/><\/svg><\/div>\r\n        <h4>Comunidad y soporte<\/h4>\r\n        <p>No est\u00e1s sola: acompa\u00f1amos tu proceso y respondemos tus dudas por WhatsApp.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <!-- ===== BLOQUE DE CONFIANZA ===== -->\r\n  <section class=\"inc-shop__trust\">\r\n    <div class=\"inc-shop__trust-inner\">\r\n      <div class=\"inc-shop__trust-eyebrow\">Experiencia que transforma<\/div>\r\n      <h2 class=\"inc-shop__trust-title\">Que te <em>AMES<\/em> es nuestro legado<\/h2>\r\n      <p>\r\n        En Incanto no formamos modelos: acompa\u00f1amos personas. Cada curso est\u00e1 pensado para que crezcas\r\n        con seguridad, disfrutes el proceso y descubras todo tu potencial. Tu carrera empieza ac\u00e1.\r\n      <\/p>\r\n      <a class=\"inc-shop__btn inc-shop__btn--primary\" href=\"#inc-shop-cursos\">VER CURSOS<\/a>\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  \/* ===== Alto del hero = pantalla completa menos el header (para que la escena entre entera) ===== *\/\r\n  (function () {\r\n    var grid = document.querySelector('#inc-shop .inc-shop__hero-grid');\r\n    if (!grid) return;\r\n    var hd = document.getElementById('inc-header');\r\n    function fitHero() {\r\n      \/* En mobile (grid apilado) NO forzamos alto: dejamos el CSS (min-height:0). *\/\r\n      if (window.matchMedia('(max-width: 860px)').matches) { grid.style.minHeight = ''; return; }\r\n      var hh = hd ? Math.round(hd.getBoundingClientRect().height) : 0;\r\n      grid.style.minHeight = hh ? 'calc(100vh - ' + hh + 'px)' : '100vh';\r\n    }\r\n    fitHero();\r\n    window.addEventListener('resize', fitHero, { passive: true });\r\n    window.addEventListener('load', fitHero);\r\n  })();\r\n\r\n  \/* ===== Constantes centralizadas (f\u00e1ciles de cambiar) ===== *\/\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    cart:     BASE + '\/carrito\/',\r\n    checkout: BASE + '\/finalizar-compra\/',\r\n    account:  BASE + '\/mi-cuenta\/',\r\n    catBase:  BASE + '\/categoria-producto\/'\r\n  };\r\n  var WHATSAPP = 'https:\/\/wa.me\/5493875460464';\r\n  var PER_PAGE = 12;\r\n\r\n  \/* ===== Detecci\u00f3n de contexto (home vs \/categoria-producto\/{slug}\/) ===== *\/\r\n  var rawSegments = window.location.pathname.replace(\/^\\\/+|\\\/+$\/g, '').split('\/').filter(Boolean);\r\n  \/\/ rawSegments[0] === 'cursos' cuando est\u00e1 en el subdirectorio; lo saltamos\r\n  var segs = rawSegments[0] === 'cursos' ? rawSegments.slice(1) : rawSegments;\r\n  var pageIdx = segs.indexOf('page');\r\n  var pageFromPath = (pageIdx !== -1 && segs[pageIdx + 1]) ? parseInt(segs[pageIdx + 1], 10) : 0;\r\n  var ctxSegs = pageIdx !== -1 ? segs.slice(0, pageIdx) : segs;\r\n\r\n  var isCategory = false, activeSlug = null;\r\n  if (ctxSegs[0] === 'categoria-producto') {\r\n    isCategory = true;\r\n    activeSlug = ctxSegs[ctxSegs.length - 1];\r\n  }\r\n\r\n  var params = new URLSearchParams(window.location.search);\r\n  var orderbyParam = params.get('orderby') || 'menu_order';\r\n  var page = pageFromPath || parseInt(params.get('paged') || '1', 10) || 1;\r\n\r\n  var sortMap = {\r\n    'menu_order': { orderby: 'menu_order', order: 'asc'  },\r\n    'date':       { orderby: 'date',       order: 'desc' },\r\n    'popularity': { orderby: 'popularity', order: 'desc' },\r\n    'price':      { orderby: 'price',      order: 'asc'  },\r\n    'price-desc': { orderby: 'price',      order: 'desc' },\r\n    'title':      { orderby: 'title',      order: 'asc'  }\r\n  };\r\n  var sort = sortMap[orderbyParam] || sortMap['menu_order'];\r\n\r\n  \/* ===== DOM refs ===== *\/\r\n  function $(s, c) { return (c || document).querySelector(s); }\r\n  var gridEl    = $('#inc-shop-grid');\r\n  var pagerEl   = $('#inc-shop-pager');\r\n  var sortEl    = $('#inc-shop-sort');\r\n  var bodyEl    = $('#inc-shop-body');\r\n  var sidebarEl = $('#inc-shop-sidebar');\r\n  var catsEl    = $('#inc-shop-cats');\r\n  var countEl     = $('[data-inc-count]');\r\n  var countWordEl = $('[data-inc-count-word]');\r\n  var eyebrowEl   = $('[data-inc-eyebrow]');\r\n  var titleEl     = $('[data-inc-title]');\r\n  var introEl     = $('[data-inc-intro]');\r\n  var headEyebrowEl = $('[data-inc-headeyebrow]');\r\n  var headTitleEl   = $('[data-inc-headtitle]');\r\n\r\n  \/* ===== Helpers ===== *\/\r\n  function fmtPrice(priceStr, minor, symbol) {\r\n    var num = parseFloat(priceStr || 0) \/ Math.pow(10, minor || 2);\r\n    return (symbol || '$') + ' ' + num.toLocaleString('es-AR', {\r\n      minimumFractionDigits: num % 1 === 0 ? 0 : 2,\r\n      maximumFractionDigits: 2\r\n    });\r\n  }\r\n  function decodeEntities(s) {\r\n    if (!s) return '';\r\n    var t = document.createElement('textarea'); t.innerHTML = s; return t.value;\r\n  }\r\n  function stripHtml(s) {\r\n    var d = document.createElement('div'); d.innerHTML = s || '';\r\n    return (d.textContent || '').trim();\r\n  }\r\n  function safeText(s) {\r\n    return decodeEntities(s).replace(\/[&<>\"']\/g, function (c) {\r\n      return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;' }[c];\r\n    });\r\n  }\r\n  function truncate(s, n) { s = s || ''; return s.length > n ? s.slice(0, n - 1).trim() + '\u2026' : s; }\r\n\r\n  \/* Chips fijos de formato (todos los cursos comparten modalidad) *\/\r\n  var CHIPS_HTML =\r\n    '<span class=\"inc-shop__chip\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"\/><path d=\"M8 21h8M12 17v4\"\/><\/svg>Online<\/span>' +\r\n    '<span class=\"inc-shop__chip\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><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>Videos + PDF<\/span>' +\r\n    '<span class=\"inc-shop__chip\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 2 3 14h9l-1 8 10-12h-9z\"\/><\/svg>Acceso inmediato<\/span>';\r\n\r\n  function renderCard(p) {\r\n    var img = (p.images && p.images[0]) ? p.images[0].src : '';\r\n    var name = safeText(p.name);\r\n    var symbol = (p.prices && p.prices.currency_symbol) || '$';\r\n    var minor = (p.prices && p.prices.currency_minor_unit) || 2;\r\n\r\n    var priceHTML = '';\r\n    if (p.prices && p.prices.price_range) {\r\n      priceHTML = fmtPrice(p.prices.price_range.min_amount, minor, symbol);\r\n    } else if (p.on_sale && p.prices) {\r\n      priceHTML = '<del>' + fmtPrice(p.prices.regular_price, minor, symbol) + '<\/del>' + fmtPrice(p.prices.sale_price, minor, symbol);\r\n    } else if (p.prices) {\r\n      priceHTML = fmtPrice(p.prices.price, minor, symbol);\r\n    }\r\n\r\n    var desc = truncate(stripHtml(decodeEntities(p.short_description || p.description || '')), 140);\r\n    var mediaInner = img\r\n      ? '<img decoding=\"async\" src=\"' + img + '\" alt=\"' + name + '\" loading=\"lazy\">'\r\n      : '<div class=\"inc-shop__card-media-fallback\">im<\/div>';\r\n\r\n    var canAjax = (p.type === 'simple') && p.is_purchasable && p.is_in_stock;\r\n    var enrollBtn;\r\n    if (canAjax) {\r\n      enrollBtn = '<a href=\"?add-to-cart=' + p.id + '\" class=\"inc-shop__enroll add_to_cart_button ajax_add_to_cart\" ' +\r\n        'data-product_id=\"' + p.id + '\" data-quantity=\"1\" rel=\"nofollow\">INSCRIBIRME<\/a>';\r\n    } else {\r\n      enrollBtn = '<a href=\"' + p.permalink + '\" class=\"inc-shop__enroll\">VER CURSO<\/a>';\r\n    }\r\n\r\n    return '' +\r\n      '<li class=\"inc-shop__card\" data-id=\"' + p.id + '\">' +\r\n        '<a class=\"inc-shop__card-media\" href=\"' + p.permalink + '\" aria-label=\"' + name + '\">' + mediaInner + '<\/a>' +\r\n        '<div class=\"inc-shop__card-body\">' +\r\n          '<div class=\"inc-shop__chips\">' + CHIPS_HTML + '<\/div>' +\r\n          '<h3 class=\"inc-shop__card-name\"><a href=\"' + p.permalink + '\">' + name + '<\/a><\/h3>' +\r\n          (desc ? '<p class=\"inc-shop__card-desc\">' + safeText(desc) + '<\/p>' : '') +\r\n          '<div class=\"inc-shop__card-foot\"><span class=\"inc-shop__price\">' + priceHTML + '<\/span><\/div>' +\r\n          '<div class=\"inc-shop__card-actions\">' +\r\n            enrollBtn +\r\n            '<a class=\"inc-shop__view\" href=\"' + p.permalink + '\">Ver curso<\/a>' +\r\n          '<\/div>' +\r\n        '<\/div>' +\r\n      '<\/li>';\r\n  }\r\n\r\n  function renderPagination(totalPages, currentPage) {\r\n    if (totalPages <= 1) { pagerEl.innerHTML = ''; return; }\r\n    var items = [];\r\n    function link(n, label, cls) {\r\n      if (n === currentPage && !cls) return '<span class=\"current\">' + (label || n) + '<\/span>';\r\n      var u = new URL(window.location.href);\r\n      var cleanPath = u.pathname.replace(\/\\\/page\\\/\\d+\\\/?$\/, '\/').replace(\/\\\/+$\/, '\/');\r\n      u.searchParams.delete('paged');\r\n      u.pathname = (cleanPath.endsWith('\/') ? cleanPath : cleanPath + '\/') + (n > 1 ? 'page\/' + n + '\/' : '');\r\n      return '<a href=\"' + u.toString() + '\" class=\"' + (cls || '') + '\">' + (label || n) + '<\/a>';\r\n    }\r\n    if (currentPage > 1) items.push(link(currentPage - 1, '\u2039', 'prev'));\r\n    var last = 0;\r\n    for (var i = 1; i <= totalPages; i++) {\r\n      var near = Math.abs(i - currentPage) <= 1;\r\n      var edge = i === 1 || i === totalPages;\r\n      if (near || edge) {\r\n        if (last && i - last > 1) items.push('<span class=\"dots\">\u2026<\/span>');\r\n        items.push(link(i));\r\n        last = i;\r\n      }\r\n    }\r\n    if (currentPage < totalPages) items.push(link(currentPage + 1, '\u203a', 'next'));\r\n    pagerEl.innerHTML = '<nav class=\"inc-shop__pager\" aria-label=\"Paginaci\u00f3n\">' + items.join('') + '<\/nav>';\r\n  }\r\n\r\n  \/* ===== Categor\u00edas din\u00e1micas (sidebar s\u00f3lo si >=2) ===== *\/\r\n  function loadCategories(activeId) {\r\n    fetch(STORE + '\/products\/categories?per_page=100&orderby=count&order=desc&hide_empty=true', { credentials: 'same-origin' })\r\n      .then(function (r) { return r.ok ? r.json() : []; })\r\n      .then(function (cats) {\r\n        cats = (cats || []).filter(function (c) { return c.count > 0 && c.slug !== 'uncategorized' && c.slug !== 'sin-categorizar'; });\r\n        if (cats.length < 2) return; \/\/ con 0 \u00f3 1 categor\u00eda, ocultar sidebar (ya est\u00e1 display:none)\r\n        var html = '<li><a href=\"' + PAGES.shop + '\"' + (!isCategory ? ' class=\"is-current\"' : '') + '>Todos los cursos<\/a><\/li>';\r\n        cats.forEach(function (c) {\r\n          var isCur = isCategory && (c.id === activeId || c.slug === activeSlug);\r\n          html += '<li><a href=\"' + PAGES.catBase + c.slug + '\/\"' + (isCur ? ' class=\"is-current\"' : '') + '>' +\r\n                  safeText(decodeEntities(c.name)) + ' <span class=\"count\">' + c.count + '<\/span><\/a><\/li>';\r\n        });\r\n        catsEl.innerHTML = html;\r\n        sidebarEl.style.display = '';\r\n        bodyEl.classList.remove('is-solo');\r\n      })\r\n      .catch(function () { \/* si falla, se queda el layout centrado *\/ });\r\n  }\r\n\r\n  \/* ===== Resolver categor\u00eda por slug (WP REST filtra bien; Store API no) ===== *\/\r\n  function resolveCategory(slug) {\r\n    return fetch(WPV2 + '\/product_cat?slug=' + encodeURIComponent(slug) + '&_fields=id,name,slug,description,parent', { credentials: 'same-origin' })\r\n      .then(function (r) { return r.ok ? r.json() : null; })\r\n      .then(function (data) {\r\n        if (!data || !data.length) return null;\r\n        return { id: data[0].id, name: decodeEntities(data[0].name), slug: data[0].slug, description: data[0].description || '' };\r\n      })\r\n      .catch(function () { return null; });\r\n  }\r\n\r\n  \/* ===== Estados ===== *\/\r\n  function showEmpty() {\r\n    gridEl.innerHTML =\r\n      '<div class=\"inc-shop__state\">' +\r\n        '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"11\" cy=\"11\" r=\"7\"\/><path d=\"m21 21-4.3-4.3\"\/><\/svg>' +\r\n        '<h3>Todav\u00eda no hay cursos por ac\u00e1<\/h3>' +\r\n        '<p>Estamos preparando nuevas formaciones. Volv\u00e9 pronto o escribinos para avisarte.<\/p>' +\r\n        '<a href=\"' + WHATSAPP + '\" target=\"_blank\" rel=\"noopener\">CONSULTAR POR WHATSAPP<\/a>' +\r\n      '<\/div>';\r\n    pagerEl.innerHTML = '';\r\n  }\r\n  function showError() {\r\n    gridEl.innerHTML =\r\n      '<div class=\"inc-shop__state\">' +\r\n        '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><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>' +\r\n        '<h3>No pudimos cargar los cursos<\/h3>' +\r\n        '<p>Recarg\u00e1 la p\u00e1gina o prob\u00e1 en unos segundos. Si el problema sigue, escribinos.<\/p>' +\r\n        '<a href=\"' + WHATSAPP + '\" target=\"_blank\" rel=\"noopener\">ESCRIBINOS POR WHATSAPP<\/a>' +\r\n      '<\/div>';\r\n    pagerEl.innerHTML = '';\r\n  }\r\n\r\n  \/* ===== Carga principal ===== *\/\r\n  function load() {\r\n    var pre = isCategory && activeSlug ? resolveCategory(activeSlug) : Promise.resolve(null);\r\n\r\n    pre.then(function (cat) {\r\n      \/\/ Ajustar copys del hero\/headbar si estamos dentro de una categor\u00eda\r\n      if (cat) {\r\n        if (eyebrowEl) eyebrowEl.textContent = 'CURSOS \u00b7 ' + cat.name.toUpperCase();\r\n        if (titleEl) { titleEl.innerHTML = safeText(cat.name.toUpperCase()); }\r\n        var d = stripHtml(cat.description);\r\n        if (introEl && d) introEl.textContent = d;\r\n        if (headEyebrowEl) headEyebrowEl.textContent = 'CATEGOR\u00cdA';\r\n        if (headTitleEl) headTitleEl.textContent = cat.name.toUpperCase();\r\n      }\r\n\r\n      loadCategories(cat ? cat.id : null);\r\n\r\n      var url = new URL(STORE + '\/products', window.location.origin);\r\n      url.searchParams.set('per_page', PER_PAGE);\r\n      url.searchParams.set('page', page);\r\n      url.searchParams.set('orderby', sort.orderby);\r\n      url.searchParams.set('order', sort.order);\r\n      if (cat) url.searchParams.set('category', cat.id);\r\n\r\n      return fetch(url.toString(), { credentials: 'same-origin' }).then(function (r) {\r\n        if (!r.ok) throw new Error('API ' + r.status);\r\n        var total = parseInt(r.headers.get('x-wp-total') || '0', 10);\r\n        var totalPages = parseInt(r.headers.get('x-wp-totalpages') || '1', 10);\r\n        return r.json().then(function (products) {\r\n          if (countEl) countEl.textContent = total;\r\n          if (countWordEl) countWordEl.textContent = total === 1 ? 'curso disponible' : 'cursos disponibles';\r\n\r\n          if (!products.length) { showEmpty(); return; }\r\n\r\n          gridEl.innerHTML = products.map(renderCard).join('');\r\n          renderPagination(totalPages, page);\r\n\r\n          \/\/ Inicializar add-to-cart AJAX de Woo + refrescar fragments\/eventos\r\n          if (window.jQuery) {\r\n            try {\r\n              window.jQuery(document.body).trigger('init_add_to_cart');\r\n              window.jQuery(document.body).trigger('wc_fragment_refresh');\r\n            } catch (e) {}\r\n          }\r\n        });\r\n      });\r\n    }).catch(function (e) {\r\n      if (window.console) console.error('[inc-shop]', e);\r\n      showError();\r\n    });\r\n  }\r\n\r\n  \/* ===== Feedback visual \"added\" en el bot\u00f3n (adem\u00e1s del AJAX de Woo) ===== *\/\r\n  document.addEventListener('click', function (e) {\r\n    var btn = e.target.closest && e.target.closest('.inc-shop__enroll.ajax_add_to_cart');\r\n    if (!btn) return;\r\n    btn.classList.add('loading');\r\n  });\r\n  if (window.jQuery) {\r\n    window.jQuery(document.body).on('added_to_cart', function (ev, fragments, hash, $btn) {\r\n      if ($btn && $btn.length && $btn[0].classList.contains('inc-shop__enroll')) {\r\n        $btn[0].classList.remove('loading');\r\n        $btn[0].classList.add('added');\r\n        var prevHTML = $btn[0].innerHTML;\r\n        $btn[0].innerHTML = '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\" style=\"vertical-align:middle;margin-right:.4em\"><path d=\"M20 6 9 17l-5-5\"\/><\/svg>AGREGADO';\r\n        setTimeout(function () { $btn[0].classList.remove('added'); $btn[0].innerHTML = prevHTML; }, 2200);\r\n      }\r\n    });\r\n  }\r\n\r\n  \/* ===== Sort ===== *\/\r\n  if (sortEl) {\r\n    sortEl.value = orderbyParam;\r\n    sortEl.addEventListener('change', function () {\r\n      var url = new URL(window.location.href);\r\n      url.searchParams.set('orderby', sortEl.value);\r\n      url.searchParams.delete('paged');\r\n      url.pathname = url.pathname.replace(\/\\\/page\\\/\\d+\\\/?$\/, '\/');\r\n      window.location.href = url.toString();\r\n    });\r\n  }\r\n\r\n  load();\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>ACADEMIA DE MODELAJE \u00b7 +20 A\u00d1OS TU CARRERA EMPIEZA AC\u00c1 Formate con la experiencia de m\u00e1s de veinte a\u00f1os de Incanto. Cursos online de modelaje y pasarela para llevar tu talento al siguiente nivel: mir\u00e1 los videos, descarg\u00e1 el material y acced\u00e9 al contenido apenas te inscrib\u00eds. A tu ritmo, desde donde est\u00e9s. VER CURSOS [&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-33","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/pages\/33","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=33"}],"version-history":[{"count":28,"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/pages\/33\/revisions"}],"predecessor-version":[{"id":190,"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/pages\/33\/revisions\/190"}],"wp:attachment":[{"href":"https:\/\/incantomodelos.com\/cursos\/wp-json\/wp\/v2\/media?parent=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}