{"id":3068,"date":"2025-12-12T16:45:09","date_gmt":"2025-12-12T15:45:09","guid":{"rendered":"https:\/\/test.tablaoflamencolassetas.com\/?page_id=3068"},"modified":"2026-02-10T19:46:18","modified_gmt":"2026-02-10T18:46:18","slug":"elenco-artistas","status":"publish","type":"page","link":"https:\/\/test.tablaoflamencolassetas.com\/en\/elenco-artistas\/","title":{"rendered":"Elenco de Artistas"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3068\" class=\"elementor elementor-3068\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-59b0cc4 e-con-full e-flex e-con e-parent\" data-id=\"59b0cc4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-25b6af5 elementor-widget elementor-widget-html\" data-id=\"25b6af5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================\n     P\u00c1GINA ARTISTAS - M1: HERO (VERSI\u00d3N SIN DORADO)\n     Tablao Flamenco Las Setas\n\n     VERSI\u00d3N: 5.2 CORRECCIONES PRE-PRODUCCI\u00d3N\n     Fecha: 10 Febrero 2026\n     ENTORNO: TEST (test.tablaoflamencolassetas.com)\n     \n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     CAMBIOS v5.2 (correcciones auditor\u00eda pre-producci\u00f3n):\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     \u2705 FIX #1: Eliminado fallback mobile forzado Canela\u2192Playfair\n              (Canela funciona en mobile, Playfair solo es fallback\n               natural si Canela no carga, NO sustituci\u00f3n forzada)\n     \u2705 FIX #2: decoding=\"async\" \u2192 decoding=\"auto\" en imagen LCP\n     \u2705 FIX #3: <strong> con font-weight 500 para diferencia visual\n     \u2705 FIX #4: Nota sobre preload de fuentes (head global WordPress)\n     \u2705 FIX #5: Nota sobre optimizaci\u00f3n imagen fondo\n     \u2705 FIX #6: Overlay m\u00ednimo subido 0.72\u21920.75 para WCAG AAA\n     \u2705 FIX #7: rel=\"noopener noreferrer\" en todos los links externos\n     \u2705 FIX #8: Eliminadas variables CSS no usadas en este m\u00f3dulo\n     \u2705 FIX #9: Precio badge 12px\u219213px en mobile\n     \u2705 FIX #10: aria-label simplificado en bot\u00f3n primario\n     \u2705 FIX #11: Modal title fallback mobile solo si Canela no carga\n     \n     CONSERVADO de v5.1:\n     \u2705 Paleta sin dorado (GUIA-PALETA-SIN-DORADO.md)\n     \u2705 Tipograf\u00eda v3 (GUIA-TIPOGRAFICA-v3-DEFINITIVA.md)\n     \u2705 Focus Trap en modal (WCAG 2.1.2, 2.4.3)\n     \u2705 Bot\u00f3n cerrar modal 44px m\u00ednimo\n     \u2705 Schema mejorado con breadcrumb y speakable\n     \n     HORARIOS (desde 1\/2\/26):\n     - 4 pases: 18:00, 19:30, 21:00, 22:30\n     - Pase extra alta demanda: 16:30\n     - Duraci\u00f3n: 60 minutos SIN descanso\n     \n     NOTAS PRE-PRODUCCI\u00d3N:\n     - Verificar que Canela Light y GT America est\u00e1n en preload\n       del <head> global de WordPress (functions.php o Astra child)\n     - Verificar peso de Fondo_dibujos.jpg (<300KB, idealmente WebP)\n     - Buscar\/reemplazar: test.tablaoflamencolassetas.com \u2192 tablaoflamencolassetas.com\n     ===================================================== -->\n\n<style>\n\/* =====================================================\n   VARIABLES GLOBALES - TIPOGRAF\u00cdA v3 + PALETA SIN DORADO\n   Actualizada seg\u00fan GUIA-TIPOGRAFICA-v3-DEFINITIVA.md\n   ===================================================== *\/\n:root {\n  \/* === COLORES PRINCIPALES === *\/\n  --tfs-red: #C8102E;\n  --tfs-red-hover: #A00D24;\n  --tfs-red-dark: #8B1A1A;\n  --tfs-black: #1A1512;\n  --tfs-black-deep: #0D0A08;\n  --tfs-white: #FFFFFF;\n  --tfs-cream: #FCE2BF;\n  --tfs-cream-soft: #F9E5DA;\n  \n  \/* === \u00daNICA EXCEPCI\u00d3N: Estrellas rating === *\/\n  --tfs-stars: #E3AD43;\n  \n  \/* === TIPOGRAF\u00cdAS v3 - Canela + GT America === *\/\n  --tfs-font-hero: 'Canela', 'Canela Light', 'Playfair Display', Georgia, serif;\n  --tfs-font-nav: 'GT America', 'GT America Standard', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n  --tfs-font-body: 'GT America', 'GT America Standard', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n  \n  \/* === PESOS === *\/\n  --tfs-weight-light: 300;\n  --tfs-weight-regular: 400;\n  --tfs-weight-medium: 500;\n  \n  \/* === LETTER-SPACING === *\/\n  --tfs-ls-hero: -0.02em;\n  --tfs-ls-heading: -0.01em;\n  --tfs-ls-nav: 0.15em;\n  --tfs-ls-button: 0.12em;\n  --tfs-ls-body: 0.01em;\n  --tfs-ls-micro: 0.08em;\n}\n\n\/* =====================================================\n   SKIP LINK (Accesibilidad WCAG 2.4.1)\n   ===================================================== *\/\n.tfs-skip-link {\n  position: absolute !important;\n  left: -9999px !important;\n  top: auto !important;\n  width: 1px !important;\n  height: 1px !important;\n  overflow: hidden !important;\n  z-index: 999999 !important;\n}\n.tfs-skip-link:focus {\n  position: fixed !important;\n  top: 10px !important;\n  left: 10px !important;\n  width: auto !important;\n  height: auto !important;\n  padding: 12px 20px !important;\n  background: var(--tfs-white) !important;\n  color: var(--tfs-black) !important;\n  font-family: var(--tfs-font-nav) !important;\n  font-size: 14px !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  text-decoration: none !important;\n  border-radius: 8px !important;\n  box-shadow: 0 4px 20px rgba(0,0,0,0.3) !important;\n  outline: 3px solid var(--tfs-red) !important;\n  outline-offset: 2px !important;\n}\n\n\/* =====================================================\n   M1 HERO ARTISTAS - CSS v5.2 CORREGIDO\n   ===================================================== *\/\n.tfs-artistas-hero {\n  position: relative !important;\n  width: 100% !important;\n  min-height: 70vh !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  padding: clamp(70px, 10vw, 120px) 24px !important;\n  background-color: var(--tfs-black) !important;\n  overflow: hidden !important;\n  box-sizing: border-box !important;\n}\n\n.tfs-artistas-hero *,\n.tfs-artistas-hero *::before,\n.tfs-artistas-hero *::after {\n  box-sizing: border-box !important;\n}\n\n\/* Imagen fondo (LCP optimizado) *\/\n.tfs-artistas-hero__bg {\n  position: absolute !important;\n  top: 0 !important;\n  right: 0 !important;\n  bottom: 0 !important;\n  left: 0 !important;\n  width: 100% !important;\n  height: 100% !important;\n  object-fit: cover !important;\n  object-position: center !important;\n  z-index: 0 !important;\n}\n\n\/* =====================================================\n   OVERLAY - FIX #6: m\u00ednimo subido 0.72\u21920.75 para WCAG AAA\n   ===================================================== *\/\n.tfs-artistas-hero::before {\n  content: '' !important;\n  position: absolute !important;\n  top: 0 !important;\n  right: 0 !important;\n  bottom: 0 !important;\n  left: 0 !important;\n  background: linear-gradient(\n    180deg,\n    rgba(26,21,18,0.78) 0%,\n    rgba(26,21,18,0.75) 40%,\n    rgba(26,21,18,0.82) 100%\n  ) !important;\n  z-index: 1 !important;\n  pointer-events: none !important;\n}\n\n\/* Contenido *\/\n.tfs-artistas-hero__content {\n  position: relative !important;\n  z-index: 2 !important;\n  text-align: center !important;\n  width: 100% !important;\n  max-width: 940px !important;\n}\n\n\/* =====================================================\n   KICKER - GT America Light (300) uppercase\n   ===================================================== *\/\n.tfs-artistas-hero__kicker {\n  display: inline-block !important;\n  font-family: var(--tfs-font-nav) !important;\n  font-size: 12px !important;\n  font-weight: var(--tfs-weight-light) !important;\n  text-transform: uppercase !important;\n  letter-spacing: var(--tfs-ls-nav) !important;\n  color: var(--tfs-white) !important;\n  margin: 0 0 22px 0 !important;\n  padding: 8px 20px !important;\n  background: rgba(255,255,255,0.08) !important;\n  border: 1px solid rgba(255,255,255,0.35) !important;\n  border-radius: 50px !important;\n}\n\n\/* =====================================================\n   H1 - CANELA LIGHT (300)\n   FIX #1: Sin fallback forzado en mobile - Canela\n   funciona a 32-38px. Playfair solo como fallback\n   natural si la fuente no carga.\n   ===================================================== *\/\n.tfs-artistas-hero__title {\n  font-family: var(--tfs-font-hero) !important;\n  font-weight: var(--tfs-weight-light) !important;\n  font-style: normal !important;\n  font-size: clamp(38px, 7vw, 64px) !important;\n  color: var(--tfs-cream) !important;\n  margin: 0 0 20px 0 !important;\n  padding: 0 !important;\n  line-height: 1.08 !important;\n  letter-spacing: var(--tfs-ls-hero) !important;\n  text-shadow: 0 4px 30px rgba(0,0,0,0.25) !important;\n  text-rendering: optimizeLegibility !important;\n  -webkit-font-smoothing: antialiased !important;\n  -moz-osx-font-smoothing: grayscale !important;\n}\n\n\/* =====================================================\n   TITLE HIGHLIGHT - BLANCO (sin dorado)\n   ===================================================== *\/\n.tfs-artistas-hero__title-highlight {\n  color: var(--tfs-white) !important;\n  display: block !important;\n}\n\n\/* =====================================================\n   SUBT\u00cdTULO - GT America Regular (400)\n   ===================================================== *\/\n.tfs-artistas-hero__subtitle {\n  font-family: var(--tfs-font-body) !important;\n  font-size: clamp(18px, 2.5vw, 22px) !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  color: var(--tfs-cream) !important;\n  margin: 0 auto 16px !important;\n  padding: 0 !important;\n  line-height: 1.55 !important;\n  letter-spacing: var(--tfs-ls-body) !important;\n  max-width: 680px !important;\n  opacity: 0.95 !important;\n}\n\n\/* =====================================================\n   FIX #3: <strong> con weight-medium (500) para\n   diferencia visual perceptible vs regular (400).\n   Cumple WCAG 1.3.1 (Info and Relationships).\n   ===================================================== *\/\n.tfs-artistas-hero__subtitle strong {\n  color: var(--tfs-white) !important;\n  font-weight: var(--tfs-weight-medium) !important;\n}\n\n\/* =====================================================\n   INTRO - GT America Regular (400)\n   ===================================================== *\/\n.tfs-artistas-hero__intro {\n  font-family: var(--tfs-font-body) !important;\n  font-size: clamp(15px, 2vw, 17px) !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  color: var(--tfs-cream-soft) !important;\n  margin: 0 auto 30px !important;\n  padding: 0 !important;\n  line-height: 1.7 !important;\n  letter-spacing: var(--tfs-ls-body) !important;\n  max-width: 720px !important;\n  opacity: 0.88 !important;\n}\n\n.tfs-artistas-hero__intro strong {\n  color: var(--tfs-cream) !important;\n  font-weight: var(--tfs-weight-medium) !important;\n}\n\n\/* CTA Buttons Container *\/\n.tfs-artistas-hero__ctas {\n  display: flex !important;\n  flex-wrap: wrap !important;\n  justify-content: center !important;\n  gap: 16px !important;\n  margin-bottom: 32px !important;\n}\n\n\/* =====================================================\n   BOT\u00d3N PRIMARIO - GT America Light (300) uppercase\n   BLANCO FONDO + NEGRO TEXTO\n   ===================================================== *\/\n.tfs-artistas-hero__btn-primary {\n  display: inline-flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  gap: 10px !important;\n  padding: 16px 34px !important;\n  background: var(--tfs-white) !important;\n  color: var(--tfs-black) !important;\n  font-family: var(--tfs-font-nav) !important;\n  font-size: 13px !important;\n  font-weight: var(--tfs-weight-light) !important;\n  text-transform: uppercase !important;\n  letter-spacing: var(--tfs-ls-button) !important;\n  border: 2px solid var(--tfs-white) !important;\n  border-radius: 50px !important;\n  cursor: pointer !important;\n  text-decoration: none !important;\n  transition: all 0.3s ease !important;\n  min-height: 48px !important;\n}\n\n.tfs-artistas-hero__btn-primary:hover {\n  background: var(--tfs-cream) !important;\n  border-color: var(--tfs-cream) !important;\n  color: var(--tfs-black) !important;\n  transform: translateY(-2px) !important;\n  box-shadow: 0 8px 25px rgba(255,255,255,0.25) !important;\n}\n\n.tfs-artistas-hero__btn-primary:focus-visible {\n  outline: 3px solid var(--tfs-white) !important;\n  outline-offset: 4px !important;\n}\n\n\/* =====================================================\n   BOT\u00d3N SECUNDARIO - GT America Light (300) uppercase\n   GHOST BORDE BLANCO\n   ===================================================== *\/\n.tfs-artistas-hero__btn-secondary {\n  display: inline-flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  gap: 8px !important;\n  padding: 14px 28px !important;\n  background: transparent !important;\n  color: var(--tfs-white) !important;\n  font-family: var(--tfs-font-nav) !important;\n  font-size: 13px !important;\n  font-weight: var(--tfs-weight-light) !important;\n  text-transform: uppercase !important;\n  letter-spacing: var(--tfs-ls-button) !important;\n  border: 2px solid var(--tfs-white) !important;\n  border-radius: 50px !important;\n  cursor: pointer !important;\n  text-decoration: none !important;\n  transition: all 0.3s ease !important;\n  min-height: 48px !important;\n}\n\n.tfs-artistas-hero__btn-secondary:hover {\n  background: var(--tfs-white) !important;\n  color: var(--tfs-black) !important;\n}\n\n.tfs-artistas-hero__btn-secondary:focus-visible {\n  outline: 3px solid var(--tfs-white) !important;\n  outline-offset: 4px !important;\n}\n\n.tfs-artistas-hero__btn-secondary svg {\n  width: 18px !important;\n  height: 18px !important;\n  stroke: currentColor !important;\n  transition: transform 0.2s ease !important;\n}\n\n.tfs-artistas-hero__btn-secondary:hover svg {\n  transform: translateY(3px) !important;\n}\n\n\/* Meta info *\/\n.tfs-artistas-hero__meta {\n  display: flex !important;\n  flex-direction: column !important;\n  align-items: center !important;\n  gap: 14px !important;\n}\n\n\/* L\u00ednea decorativa - BLANCO con opacidad *\/\n.tfs-artistas-hero__divider {\n  width: 60px !important;\n  height: 2px !important;\n  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.25), transparent) !important;\n  display: block !important;\n  border: none !important;\n  margin: 0 !important;\n}\n\n\/* =====================================================\n   TRUST BADGES \/ PROOF - GT America Regular (400)\n   ===================================================== *\/\n.tfs-artistas-hero__proof {\n  font-family: var(--tfs-font-body) !important;\n  font-size: 13px !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  color: var(--tfs-cream-soft) !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  line-height: 1.6 !important;\n  letter-spacing: var(--tfs-ls-body) !important;\n  opacity: 0.85 !important;\n}\n\n.tfs-artistas-hero__proof a {\n  color: var(--tfs-white) !important;\n  text-decoration: none !important;\n  border-bottom: 1px solid rgba(255,255,255,0.5) !important;\n  transition: all 0.2s ease !important;\n  padding: 4px 2px !important;\n  margin: -4px -2px !important;\n  display: inline-block !important;\n}\n\n.tfs-artistas-hero__proof a:hover {\n  color: var(--tfs-cream) !important;\n  border-bottom-color: var(--tfs-cream) !important;\n}\n\n.tfs-artistas-hero__proof a:focus-visible {\n  outline: 2px solid var(--tfs-white) !important;\n  outline-offset: 2px !important;\n}\n\n\/* Estrellas rating - \u00daNICA EXCEPCI\u00d3N: DORADO *\/\n.tfs-artistas-hero__stars {\n  color: var(--tfs-stars) !important;\n}\n\n\/* =====================================================\n   PRECIO BADGE - GT America Light (300) uppercase\n   ===================================================== *\/\n.tfs-artistas-hero__price {\n  display: inline-block !important;\n  font-family: var(--tfs-font-nav) !important;\n  font-size: 12px !important;\n  font-weight: var(--tfs-weight-light) !important;\n  letter-spacing: var(--tfs-ls-micro) !important;\n  color: var(--tfs-white) !important;\n  background: var(--tfs-red) !important;\n  padding: 6px 14px !important;\n  border-radius: 20px !important;\n  margin-top: 10px !important;\n}\n\n\/* =====================================================\n   DISCLAIMER - GT America Regular (400)\n   ===================================================== *\/\n.tfs-artistas-hero__disclaimer {\n  font-family: var(--tfs-font-body) !important;\n  font-size: 12px !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  font-style: italic !important;\n  color: var(--tfs-cream-soft) !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  opacity: 0.6 !important;\n}\n\n\/* =====================================================\n   SCROLL INDICATOR - GT America Light (300) uppercase\n   ===================================================== *\/\n.tfs-artistas-hero__scroll {\n  position: absolute !important;\n  bottom: 28px !important;\n  left: 50% !important;\n  transform: translateX(-50%) !important;\n  z-index: 3 !important;\n  display: flex !important;\n  flex-direction: column !important;\n  align-items: center !important;\n  gap: 6px !important;\n  color: var(--tfs-cream) !important;\n  opacity: 0.5 !important;\n  text-decoration: none !important;\n  transition: all 0.3s ease !important;\n  animation: tfs-artistas-bounce 2s infinite !important;\n  padding: 8px !important;\n  margin: -8px !important;\n}\n\n.tfs-artistas-hero__scroll:hover {\n  opacity: 1 !important;\n  color: var(--tfs-white) !important;\n}\n\n.tfs-artistas-hero__scroll:focus-visible {\n  outline: 2px solid var(--tfs-white) !important;\n  outline-offset: 3px !important;\n  opacity: 1 !important;\n}\n\n.tfs-artistas-hero__scroll span {\n  font-family: var(--tfs-font-nav) !important;\n  font-size: 10px !important;\n  font-weight: var(--tfs-weight-light) !important;\n  text-transform: uppercase !important;\n  letter-spacing: 2px !important;\n}\n\n.tfs-artistas-hero__scroll svg {\n  stroke: currentColor !important;\n}\n\n@keyframes tfs-artistas-bounce {\n  0%, 20%, 50%, 80%, 100% { transform: translateX(-50%) translateY(0); }\n  40% { transform: translateX(-50%) translateY(-6px); }\n  60% { transform: translateX(-50%) translateY(-3px); }\n}\n\n\/* =====================================================\n   MODAL TURITOP - Focus trap + bot\u00f3n 44px\n   ===================================================== *\/\n.tfs-artistas-modal {\n  display: none !important;\n  position: fixed !important;\n  top: 0 !important;\n  right: 0 !important;\n  bottom: 0 !important;\n  left: 0 !important;\n  background: rgba(0,0,0,0.88) !important;\n  z-index: 999999 !important;\n  align-items: center !important;\n  justify-content: center !important;\n  padding: 20px !important;\n}\n.tfs-artistas-modal.tfs-artistas-modal--open { \n  display: flex !important; \n}\n\n.tfs-artistas-modal__box {\n  background: #fff !important;\n  border-radius: 16px !important;\n  width: 100% !important;\n  max-width: 520px !important;\n  max-height: 90vh !important;\n  overflow: hidden !important;\n  box-shadow: 0 25px 80px rgba(0,0,0,0.5) !important;\n}\n\n.tfs-artistas-modal__head {\n  background: var(--tfs-red) !important;\n  padding: 18px 22px !important;\n  display: flex !important;\n  justify-content: space-between !important;\n  align-items: center !important;\n}\n\n\/* =====================================================\n   T\u00cdTULO MODAL - CANELA LIGHT (300)\n   FIX #11: Sin fallback forzado en mobile (misma \n   raz\u00f3n que FIX #1)\n   ===================================================== *\/\n.tfs-artistas-modal__title {\n  font-family: var(--tfs-font-hero) !important;\n  font-size: 26px !important;\n  font-weight: var(--tfs-weight-light) !important;\n  font-style: normal !important;\n  letter-spacing: var(--tfs-ls-heading) !important;\n  color: var(--tfs-white) !important;\n  margin: 0 !important;\n  text-rendering: optimizeLegibility !important;\n}\n\n\/* Bot\u00f3n X cerrar - 44px m\u00ednimo (WCAG 2.5.5) *\/\n.tfs-artistas-modal__close {\n  background: rgba(255,255,255,0.2) !important;\n  border: 2px solid rgba(255,255,255,0.5) !important;\n  width: 44px !important;\n  height: 44px !important;\n  min-width: 44px !important;\n  min-height: 44px !important;\n  border-radius: 50% !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  cursor: pointer !important;\n  transition: all 0.25s ease !important;\n  padding: 0 !important;\n  margin: 0 !important;\n  flex-shrink: 0 !important;\n}\n.tfs-artistas-modal__close:hover { \n  background: rgba(255,255,255,0.35) !important;\n  border-color: #fff !important;\n  transform: rotate(90deg) !important;\n}\n.tfs-artistas-modal__close:focus-visible {\n  outline: 3px solid var(--tfs-white) !important;\n  outline-offset: 3px !important;\n}\n.tfs-artistas-modal__close svg { \n  width: 22px !important;\n  height: 22px !important;\n  color: #fff !important;\n  stroke: #fff !important;\n  stroke-width: 2.5 !important;\n  fill: none !important;\n}\n\n.tfs-artistas-modal__body {\n  padding: 18px 18px 14px 18px !important;\n  overflow-y: auto !important;\n  overflow-x: hidden !important;\n  max-height: calc(90vh - 80px) !important;\n}\n\n\/* =====================================================\n   LOADING - GT America Regular (400)\n   ===================================================== *\/\n.tfs-artistas-loading {\n  text-align: center !important;\n  padding: 22px 12px !important;\n}\n.tfs-artistas-spinner {\n  width: 38px !important;\n  height: 38px !important;\n  border: 3px solid rgba(200,16,46,0.2) !important;\n  border-top-color: var(--tfs-red) !important;\n  border-radius: 50% !important;\n  animation: tfs-artistas-spin 0.8s linear infinite !important;\n  margin: 0 auto 12px auto !important;\n}\n@keyframes tfs-artistas-spin { \n  to { transform: rotate(360deg); } \n}\n\n.tfs-artistas-loading p {\n  color: #555 !important;\n  font-family: var(--tfs-font-body) !important;\n  font-size: 14px !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  margin: 0 !important;\n}\n\n\/* =====================================================\n   FALLBACK - GT America Regular (400)\n   ===================================================== *\/\n.tfs-artistas-fallback {\n  display: none !important;\n  margin: 14px 0 0 0 !important;\n  padding: 12px 14px !important;\n  border: 1px solid rgba(200,16,46,0.25) !important;\n  border-radius: 12px !important;\n  background: rgba(200,16,46,0.06) !important;\n  font-family: var(--tfs-font-body) !important;\n  font-size: 13px !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  color: #444 !important;\n}\n.tfs-artistas-fallback a {\n  color: var(--tfs-red) !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  text-decoration: underline !important;\n  text-underline-offset: 3px !important;\n}\n\n\/* =====================================================\n   RESPONSIVE\n   ===================================================== *\/\n@media (max-width: 768px) {\n  .tfs-artistas-hero {\n    min-height: 65vh !important;\n    padding: 60px 20px 80px !important;\n  }\n\n  .tfs-artistas-hero__kicker {\n    font-size: 11px !important;\n    letter-spacing: 2px !important;\n    padding: 6px 16px !important;\n  }\n\n  .tfs-artistas-hero__ctas {\n    flex-direction: column !important;\n    width: 100% !important;\n    max-width: 300px !important;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .tfs-artistas-hero__btn-primary,\n  .tfs-artistas-hero__btn-secondary {\n    width: 100% !important;\n    justify-content: center !important;\n  }\n\n  .tfs-artistas-hero__proof {\n    font-size: 12px !important;\n    max-width: 90% !important;\n  }\n\n  \/* FIX #9: Precio badge 13px en mobile para legibilidad *\/\n  .tfs-artistas-hero__price {\n    font-size: 13px !important;\n  }\n\n  .tfs-artistas-hero__scroll {\n    bottom: 20px !important;\n  }\n\n  .tfs-artistas-modal__box { \n    max-width: 96% !important; \n  }\n  \n  .tfs-artistas-modal__head {\n    padding: 14px 16px !important;\n  }\n  \n  .tfs-artistas-modal__title {\n    font-size: 22px !important;\n  }\n}\n\n\/* =====================================================\n   FIX #1 + #11: ELIMINADO bloque @media (max-width: 767px)\n   que forzaba Playfair Display en mobile.\n   \n   Canela Light funciona perfectamente en mobile a 32-38px\n   seg\u00fan GUIA-TIPOGRAFICA-v3-DEFINITIVA.md.\n   El fallback natural ya est\u00e1 en la variable --tfs-font-hero:\n   'Canela', 'Canela Light', 'Playfair Display', Georgia, serif\n   \u2192 Playfair solo se activa si Canela no se carga.\n   ===================================================== *\/\n\n@media (max-width: 480px) {\n  .tfs-artistas-hero {\n    min-height: 60vh !important;\n    padding: 50px 16px 70px !important;\n  }\n\n  .tfs-artistas-hero__title {\n    font-size: 32px !important;\n  }\n\n  .tfs-artistas-hero__subtitle {\n    font-size: 16px !important;\n  }\n\n  .tfs-artistas-hero__intro {\n    font-size: 14px !important;\n  }\n}\n\n\/* M\u00f3viles muy peque\u00f1os (<375px) *\/\n@media (max-width: 374px) {\n  .tfs-artistas-hero__title {\n    font-size: 28px !important;\n  }\n  \n  .tfs-artistas-hero__kicker {\n    font-size: 10px !important;\n    padding: 5px 12px !important;\n    letter-spacing: 1.5px !important;\n  }\n  \n  .tfs-artistas-hero__subtitle {\n    font-size: 15px !important;\n  }\n  \n  .tfs-artistas-hero__intro {\n    font-size: 13px !important;\n  }\n  \n  .tfs-artistas-hero__proof {\n    font-size: 11px !important;\n  }\n  \n  .tfs-artistas-modal__title {\n    font-size: 20px !important;\n  }\n}\n\n\/* =====================================================\n   ACCESIBILIDAD\n   ===================================================== *\/\n@media (prefers-reduced-motion: reduce) {\n  .tfs-artistas-hero__scroll {\n    animation: none !important;\n  }\n\n  .tfs-artistas-hero__btn-primary,\n  .tfs-artistas-hero__btn-secondary,\n  .tfs-artistas-modal__close,\n  .tfs-artistas-spinner {\n    transition: none !important;\n    animation: none !important;\n  }\n}\n\n\/* Alto contraste *\/\n@media (prefers-contrast: high) {\n  .tfs-artistas-hero__title,\n  .tfs-artistas-hero__subtitle,\n  .tfs-artistas-hero__intro {\n    color: #FFFFFF !important;\n    text-shadow: 0 2px 4px rgba(0,0,0,0.8) !important;\n  }\n  \n  .tfs-artistas-hero__title-highlight {\n    color: #FFFFFF !important;\n  }\n  \n  .tfs-artistas-hero::before {\n    background: rgba(0,0,0,0.85) !important;\n  }\n}\n\n\/* Print styles *\/\n@media print {\n  .tfs-artistas-hero {\n    min-height: auto !important;\n    background: white !important;\n    color: black !important;\n  }\n  \n  .tfs-artistas-hero__bg,\n  .tfs-artistas-hero::before,\n  .tfs-artistas-hero__scroll,\n  .tfs-artistas-modal {\n    display: none !important;\n  }\n  \n  .tfs-artistas-hero__title,\n  .tfs-artistas-hero__subtitle,\n  .tfs-artistas-hero__intro {\n    color: black !important;\n    text-shadow: none !important;\n  }\n}\n<\/style>\n\n<!-- Skip Link (Accesibilidad WCAG 2.4.1) -->\n<a href=\"#cuadro-artistico\" class=\"tfs-skip-link\">\n  Saltar al elenco de artistas\n<\/a>\n\n<section class=\"tfs-artistas-hero\" aria-labelledby=\"tfs-artistas-hero-title\">\n  <!-- FIX #2: decoding=\"auto\" para imagen LCP (no async) -->\n  <img fetchpriority=\"high\"\n    class=\"tfs-artistas-hero__bg\"\n    src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Fondo_dibujos.jpg\"\n    alt=\"\"\n    role=\"presentation\"\n    loading=\"eager\"\n    fetchpriority=\"high\"\n    decoding=\"auto\"\n    width=\"1920\"\n    height=\"1080\"\n  \/>\n\n  <div class=\"tfs-artistas-hero__content\">\n    <span class=\"tfs-artistas-hero__kicker\">Tablao flamenco en Sevilla<\/span>\n\n    <h1 id=\"tfs-artistas-hero-title\" class=\"tfs-artistas-hero__title\">\n      Artistas del Tablao Flamenco\n      <span class=\"tfs-artistas-hero__title-highlight\">Las Setas en Sevilla<\/span>\n    <\/h1>\n\n    <p class=\"tfs-artistas-hero__subtitle\">\n      Un cuadro flamenco de primer nivel bajo la direcci\u00f3n art\u00edstica de\n      <strong>Sandra Guerrero \"La Negra\"<\/strong>\n    <\/p>\n\n    <p class=\"tfs-artistas-hero__intro\">\n      En pleno <strong>Metropol Parasol<\/strong>, reunimos solistas, cante, guitarra y percusi\u00f3n\n      en un espect\u00e1culo \u00edntimo de 60 minutos con artistas reconocidos en la\n      Bienal de Sevilla, Festival de Jerez y Las Minas de La Uni\u00f3n.\n    <\/p>\n\n    <div class=\"tfs-artistas-hero__ctas\">\n      <!-- FIX #10: aria-label simplificado (texto visible ya descriptivo) -->\n      <button\n        type=\"button\"\n        class=\"tfs-artistas-hero__btn-primary\"\n        data-tfs-artistas-booking-open\n        aria-haspopup=\"dialog\"\n        aria-controls=\"tfs-artistas-booking-modal\"\n      >\n        Reservar entradas\n      <\/button>\n\n      <a\n        href=\"#cuadro-artistico\"\n        class=\"tfs-artistas-hero__btn-secondary\"\n        aria-label=\"Ver el elenco completo de artistas\"\n      >\n        <span>Ver elenco<\/span>\n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <path d=\"M12 5v14M5 12l7 7 7-7\"\/>\n        <\/svg>\n      <\/a>\n    <\/div>\n\n    <div class=\"tfs-artistas-hero__meta\">\n      <span class=\"tfs-artistas-hero__divider\" aria-hidden=\"true\"><\/span>\n\n      <!-- FIX #7: rel=\"noopener noreferrer\" en todos los links externos -->\n      <p class=\"tfs-artistas-hero__proof\">\n        <span class=\"tfs-artistas-hero__stars\">\u2605<\/span> 4.9\/5 en\n        <a href=\"https:\/\/www.google.com\/maps\/place\/Tablao+Flamenco+Las+Setas\/@37.3934981,-5.9917189,15z\/data=!4m6!3m5!1s0xd126d7fe8f8f3b9:0x789ccf32e71f7941!8m2!3d37.3934981!4d-5.9917189!16s%2Fg%2F11s7npj9dl\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Ver rese\u00f1as en Google (abre en nueva pesta\u00f1a)\">Google<\/a>\n        \u00b7 +11.000 rese\u00f1as \u00b7\n        <a href=\"https:\/\/www.tripadvisor.es\/Attraction_Review-g187443-d25276011-Reviews-Tablao_Flamenco_Las_Setas-Seville_Province_of_Seville_Andalucia.html\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Ver rese\u00f1as en TripAdvisor (abre en nueva pesta\u00f1a)\">TripAdvisor<\/a>\n        \u00b7\n        <a href=\"https:\/\/www.getyourguide.es\/tablao-flamenco-las-setas-l190124\/\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Ver en GetYourGuide (abre en nueva pesta\u00f1a)\">GetYourGuide<\/a>\n      <\/p>\n\n      <span class=\"tfs-artistas-hero__price\">Desde 28\u20ac por persona<\/span>\n\n      <p class=\"tfs-artistas-hero__disclaimer\">\n        *El elenco puede variar seg\u00fan fecha y disponibilidad\n      <\/p>\n    <\/div>\n  <\/div>\n\n  <!-- Scroll indicator -->\n  <a href=\"#cuadro-artistico\" class=\"tfs-artistas-hero__scroll\" aria-label=\"Scroll hacia el cuadro art\u00edstico\">\n    <span>Descubrir<\/span>\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n      <path d=\"M12 5v14M5 12l7 7 7-7\"\/>\n    <\/svg>\n  <\/a>\n<\/section>\n\n<!-- MODAL TURITOP -->\n<div \n  class=\"tfs-artistas-modal\" \n  id=\"tfs-artistas-booking-modal\" \n  data-tfs-booking-modal \n  role=\"dialog\" \n  aria-modal=\"true\" \n  aria-labelledby=\"tfs-artistas-modal-title\" \n  aria-hidden=\"true\"\n>\n  <div class=\"tfs-artistas-modal__box\" role=\"document\">\n    <div class=\"tfs-artistas-modal__head\">\n      <h2 class=\"tfs-artistas-modal__title\" id=\"tfs-artistas-modal-title\">Reservar entradas<\/h2>\n      <button \n        type=\"button\" \n        class=\"tfs-artistas-modal__close\" \n        data-tfs-artistas-booking-close \n        aria-label=\"Cerrar ventana de reservas\"\n      >\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#ffffff\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n          <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/>\n          <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/>\n        <\/svg>\n      <\/button>\n    <\/div>\n\n    <div class=\"tfs-artistas-modal__body\">\n      <div class=\"tfs-artistas-loading\" data-tfs-artistas-loading aria-live=\"polite\">\n        <div class=\"tfs-artistas-spinner\" aria-hidden=\"true\"><\/div>\n        <p>Cargando calendario\u2026<\/p>\n      <\/div>\n\n      <div data-tfs-artistas-turitop-host><\/div>\n\n      <div class=\"tfs-artistas-fallback\" data-tfs-artistas-fallback>\n        Si el calendario no carga (bloqueadores\/privacidad del navegador), puedes reservar desde\n        <a href=\"\/entradas-y-horarios\/\">Entradas y horarios<\/a>.\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- SCHEMA.ORG - dateModified actualizada a fecha de correcci\u00f3n -->\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"WebPage\",\n  \"@id\": \"https:\/\/test.tablaoflamencolassetas.com\/artistas\/#webpage\",\n  \"name\": \"Artistas del Tablao Flamenco Las Setas en Sevilla\",\n  \"description\": \"Conoce al elenco de solistas, cantaores, guitarristas y percusionistas del Tablao Flamenco Las Setas en Sevilla. Direcci\u00f3n art\u00edstica de Sandra Guerrero 'La Negra'. Espect\u00e1culos de 60 minutos con artistas galardonados en la Bienal de Sevilla, Festival de Jerez y Las Minas de La Uni\u00f3n. Desde 28\u20ac.\",\n  \"url\": \"https:\/\/test.tablaoflamencolassetas.com\/artistas\/\",\n  \"inLanguage\": [\"es\", \"en\"],\n  \"datePublished\": \"2025-12-01\",\n  \"dateModified\": \"2026-02-10\",\n  \"isPartOf\": {\n    \"@type\": \"WebSite\",\n    \"@id\": \"https:\/\/test.tablaoflamencolassetas.com\/#website\",\n    \"name\": \"Tablao Flamenco Las Setas\",\n    \"url\": \"https:\/\/test.tablaoflamencolassetas.com\/\"\n  },\n  \"about\": {\n    \"@id\": \"https:\/\/test.tablaoflamencolassetas.com\/#organization\"\n  },\n  \"breadcrumb\": {\n    \"@type\": \"BreadcrumbList\",\n    \"itemListElement\": [\n      {\n        \"@type\": \"ListItem\",\n        \"position\": 1,\n        \"name\": \"Inicio\",\n        \"item\": \"https:\/\/test.tablaoflamencolassetas.com\/\"\n      },\n      {\n        \"@type\": \"ListItem\",\n        \"position\": 2,\n        \"name\": \"Artistas\",\n        \"item\": \"https:\/\/test.tablaoflamencolassetas.com\/artistas\/\"\n      }\n    ]\n  },\n  \"speakable\": {\n    \"@type\": \"SpeakableSpecification\",\n    \"cssSelector\": [\n      \".tfs-artistas-hero__title\",\n      \".tfs-artistas-hero__subtitle\",\n      \".tfs-artistas-hero__intro\"\n    ]\n  },\n  \"mainEntity\": {\n    \"@type\": \"PerformingGroup\",\n    \"name\": \"Cuadro Flamenco Tablao Las Setas\",\n    \"description\": \"Elenco de artistas profesionales de flamenco dirigido por Sandra Guerrero 'La Negra'. Solistas, cantaores, guitarristas y percusionistas galardonados en festivales internacionales.\",\n    \"url\": \"https:\/\/test.tablaoflamencolassetas.com\/artistas\/\",\n    \"member\": {\n      \"@type\": \"Person\",\n      \"name\": \"Sandra Guerrero La Negra\",\n      \"jobTitle\": \"Directora Art\u00edstica y Bailaora Principal\",\n      \"description\": \"Bailaora sevillana con m\u00e1s de 30 a\u00f1os de trayectoria, especialista en bata de cola y mant\u00f3n\"\n    }\n  }\n}\n<\/script>\n\n<script>\n\/* =====================================================\n   ARTISTAS: MODAL + TURITOP + FOCUS TRAP\n   v5.2 - Sin cambios funcionales (solo CSS y HTML)\n   ===================================================== *\/\n(function(){\n  'use strict';\n\n  if (window.__TFS_ARTISTAS_BOOKING_INIT__) return;\n  window.__TFS_ARTISTAS_BOOKING_INIT__ = true;\n\n  var modal    = document.querySelector('#tfs-artistas-booking-modal');\n  if (!modal) return;\n\n  var closeBtn = modal.querySelector('[data-tfs-artistas-booking-close]');\n  var loading  = modal.querySelector('[data-tfs-artistas-loading]');\n  var host     = modal.querySelector('[data-tfs-artistas-turitop-host]');\n  var fallback = modal.querySelector('[data-tfs-artistas-fallback]');\n  var modalBox = modal.querySelector('.tfs-artistas-modal__box');\n\n  if (!closeBtn || !host) return;\n\n  var lastActive = null;\n  var observer = null;\n  var widgetMounted = false;\n  var kickedOnce = false;\n  var focusTrapHandler = null;\n\n  var TURITOP_COMPANY = 'T1263';\n  var TURITOP_SERVICE = 'P1';\n  var TURITOP_LANG    = 'es';\n  var TURITOP_EMBED   = 'box';\n\n  function getFocusableElements(container) {\n    return container.querySelectorAll(\n      'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), ' +\n      'textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n    );\n  }\n\n  function createFocusTrap(container) {\n    return function(e) {\n      if (e.key !== 'Tab') return;\n\n      var focusable = getFocusableElements(container);\n      if (focusable.length === 0) return;\n\n      var firstEl = focusable[0];\n      var lastEl = focusable[focusable.length - 1];\n\n      if (e.shiftKey) {\n        if (document.activeElement === firstEl) {\n          e.preventDefault();\n          lastEl.focus();\n        }\n      } else {\n        if (document.activeElement === lastEl) {\n          e.preventDefault();\n          firstEl.focus();\n        }\n      }\n    };\n  }\n\n  function enableFocusTrap() {\n    if (focusTrapHandler) return;\n    focusTrapHandler = createFocusTrap(modalBox);\n    document.addEventListener('keydown', focusTrapHandler);\n  }\n\n  function disableFocusTrap() {\n    if (focusTrapHandler) {\n      document.removeEventListener('keydown', focusTrapHandler);\n      focusTrapHandler = null;\n    }\n  }\n\n  function qsTuritopScript() {\n    return document.querySelector('script[src*=\"app.turitop.com\/js\/load-turitop.min.js\"][data-company]');\n  }\n\n  function injectTuritopScript(temp) {\n    return new Promise(function(resolve) {\n      var s = document.createElement('script');\n      s.src = 'https:\/\/app.turitop.com\/js\/load-turitop.min.js';\n      s.async = true;\n      s.setAttribute('data-company', TURITOP_COMPANY);\n      if (temp) s.setAttribute('data-tfs-temp', '1');\n      s.onload = function() { \n        resolve(true); \n        try { if (temp && s.parentNode) s.parentNode.removeChild(s); } catch(e) {} \n      };\n      s.onerror = function() { \n        resolve(false); \n        try { if (temp && s.parentNode) s.parentNode.removeChild(s); } catch(e) {} \n      };\n      document.body.appendChild(s);\n    });\n  }\n\n  function ensureTuritopScript() {\n    var existing = qsTuritopScript();\n    if (existing) return Promise.resolve(true);\n    return injectTuritopScript(false);\n  }\n\n  function mountWidgetIfNeeded() {\n    if (widgetMounted) return;\n\n    host.innerHTML =\n      '<div class=\"load-turitop\" data-service=\"' + TURITOP_SERVICE + '\" data-lang=\"' + TURITOP_LANG + '\" data-embed=\"' + TURITOP_EMBED + '\"><\/div>';\n    widgetMounted = true;\n\n    if (observer) { \n      try { observer.disconnect(); } catch(e) {} \n    }\n\n    observer = new MutationObserver(function() {\n      var iframe = host.querySelector('iframe');\n      if (iframe) {\n        if (loading) loading.style.display = 'none';\n        if (fallback) fallback.style.display = 'none';\n        try { observer.disconnect(); } catch(e) {}\n      }\n    });\n    observer.observe(host, { childList: true, subtree: true });\n\n    window.setTimeout(function() {\n      var iframe = host.querySelector('iframe');\n      if (!iframe) {\n        if (loading) loading.style.display = 'none';\n        if (fallback) fallback.style.display = 'block';\n\n        if (!kickedOnce && qsTuritopScript()) {\n          kickedOnce = true;\n          injectTuritopScript(true);\n        }\n      }\n    }, 6500);\n  }\n\n  var scrollY = 0;\n  \n  function lockScroll() {\n    scrollY = window.pageYOffset || document.documentElement.scrollTop || 0;\n    document.body.style.position = 'fixed';\n    document.body.style.top = (-scrollY) + 'px';\n    document.body.style.left = '0';\n    document.body.style.right = '0';\n    document.body.style.width = '100%';\n  }\n  \n  function unlockScroll() {\n    document.body.style.position = '';\n    document.body.style.top = '';\n    document.body.style.left = '';\n    document.body.style.right = '';\n    document.body.style.width = '';\n    window.scrollTo(0, scrollY);\n  }\n\n  function openModal(triggerEl) {\n    lastActive = triggerEl || document.activeElement;\n\n    if (loading) loading.style.display = '';\n    if (fallback) fallback.style.display = 'none';\n\n    modal.classList.add('tfs-artistas-modal--open');\n    modal.setAttribute('aria-hidden', 'false');\n    lockScroll();\n\n    mountWidgetIfNeeded();\n\n    ensureTuritopScript().then(function() {\n      if (!kickedOnce && qsTuritopScript()) {\n        kickedOnce = true;\n        injectTuritopScript(true);\n      }\n    });\n\n    enableFocusTrap();\n\n    window.setTimeout(function() { \n      try { closeBtn.focus(); } catch(e) {} \n    }, 50);\n  }\n\n  function closeModal() {\n    modal.classList.remove('tfs-artistas-modal--open');\n    modal.setAttribute('aria-hidden', 'true');\n    unlockScroll();\n\n    disableFocusTrap();\n\n    if (observer) {\n      try { observer.disconnect(); } catch(e) {}\n    }\n\n    if (lastActive && typeof lastActive.focus === 'function') {\n      try { lastActive.focus(); } catch(e) {}\n    }\n  }\n\n  document.addEventListener('click', function(e) {\n    var btn = e.target.closest ? e.target.closest('[data-tfs-artistas-booking-open]') : null;\n    if (!btn) return;\n    e.preventDefault();\n    openModal(btn);\n  });\n\n  closeBtn.addEventListener('click', function(e) { \n    e.preventDefault();\n    e.stopPropagation();\n    closeModal(); \n  });\n\n  modal.addEventListener('click', function(e) {\n    if (e.target === modal) closeModal();\n  });\n\n  document.addEventListener('keydown', function(e) {\n    if (e.key === 'Escape' && modal.classList.contains('tfs-artistas-modal--open')) {\n      closeModal();\n    }\n  });\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d25ddf4 e-con-full e-flex e-con e-parent\" data-id=\"d25ddf4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-634f535 elementor-widget elementor-widget-html\" data-id=\"634f535\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================\n     P\u00c1GINA ARTISTAS - M2: DIRECCI\u00d3N ART\u00cdSTICA - SIN DORADO\n     Sandra Guerrero \"La Negra\"\n     \n     VERSI\u00d3N: 2.2 CORRECCIONES FINALES\n     Fecha: 10 Febrero 2026\n     ENTORNO: PRODUCCI\u00d3N\n     \n     DEPENDENCIA: CSS-ADICIONAL-ACTUALIZADO-v2.css debe cargar\n     globalmente ANTES de este m\u00f3dulo (contiene @font-face de\n     Canela Light y GT America).\n     \n     CAMBIOS v2.2 (correcciones auditor\u00eda 18 puntos):\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     \u2705 #3  fetchpriority\u2192lazy (no above-fold)\n     \u2705 #9  Eliminado aria-controls a modal inexistente\n     \u2705 #18 Eliminada variable --tfs-font-accent (dead code)\n     \u2705 #10 A\u00f1adido comentario dependencia CSS-ADICIONAL\n     \u2705 #5  Bio line-height: 1.65 (gu\u00eda v3)\n     \u2705 #4  Bio font-size: clamp(15px, 1.6vw, 16px)\n     \u2705 #6  Alias weight: 400 (regular)\n     \u2705 #7  Alias font-size: clamp(18px, 2vw, 20px)\n     \u2705 #8  Role responsive: clamp(12px, 1.5vw, 13px)\n     \u2705 #11 Eliminado Fondo_dibujos.jpg (imperceptible)\n     \u2705 #12 Barras decorativas ocultas en mobile <768px\n     \u2705 #16 Bio max-width: 45ch en mobile (centrado)\n     \u2705 #17 Card hover solo en @media (hover: hover)\n     \n     CAMBIOS TIPOGR\u00c1FICOS v2.1 (seg\u00fan GUIA-TIPOGRAFICA-v3):\n     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n     \u2705 Variables actualizadas: Canela + GT America\n     \u2705 Nombre H2: Romans Flower \u2192 Canela Light (300)\n     \u2705 Label badge: Montserrat \u2192 GT America Light (300)\n     \u2705 Role: Montserrat \u2192 GT America Light (300)\n     \u2705 Alias: Work Sans \u2192 GT America Regular (400)\n     \u2705 Bio: Work Sans \u2192 GT America Regular (400)\n     \u2705 Highlights: Work Sans \u2192 GT America Regular (400)\n     \u2705 Botones: Montserrat \u2192 GT America Light (300)\n     \u2705 Letter-spacing ajustado seg\u00fan gu\u00eda\n     \u2705 Mobile <768px: Canela fallback a Playfair Display\n     \n     CONSERVADO de v2.0:\n     \u2705 Paleta sin dorado (GUIA-PALETA-SIN-DORADO.md)\n     \u2705 Fondo: tablao_setas_enero30.jpg\n     \u2705 Foto circular Sandra: Fondo_flamenca_2.jpg\n     \u2705 Schema.org Person completo\n     \u2705 Accesibilidad WCAG 2.1 AA\n     \n     CONTRASTES VERIFICADOS:\n     - Blanco sobre negro: 15.82:1 \u2713 AAA\n     - Crema sobre negro: 12.89:1 \u2713 AAA\n     - Bot\u00f3n blanco con texto negro: 15.82:1 \u2713 AAA\n     ===================================================== -->\n\n<style>\n\/* =====================================================\n   M2 DIRECCI\u00d3N ART\u00cdSTICA - CSS v2.2 CORRECCIONES FINALES\n   Tablao Flamenco Las Setas\n   \n   Tipograf\u00edas: Canela Light + GT America (seg\u00fan gu\u00eda v3)\n   Paleta: Rojo \u00b7 Blanco \u00b7 Negro (sin dorado)\n   ===================================================== *\/\n\n\/* Variables locales - TIPOGRAF\u00cdA v3 + SIN DORADO *\/\n.tfs-director {\n  \/* === COLORES === *\/\n  --tfs-red: #C8102E;\n  --tfs-red-dark: #9A0C24;\n  --tfs-red-hover: #A00D24;\n  --tfs-black: #1A1512;\n  --tfs-black-warm: #2A2320;\n  --tfs-cream: #FCE2BF;\n  --tfs-cream-soft: #F9E5DA;\n  --tfs-white: #FFFFFF;\n  \n  \/* === TIPOGRAF\u00cdAS v3 - Canela + GT America === *\/\n  --tfs-font-hero: 'Canela', 'Canela Light', 'Playfair Display', Georgia, serif;\n  --tfs-font-nav: 'GT America', 'GT America Standard', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n  --tfs-font-body: 'GT America', 'GT America Standard', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n  \n  \/* === PESOS === *\/\n  --tfs-weight-light: 300;\n  --tfs-weight-regular: 400;\n  \n  \/* === LETTER-SPACING === *\/\n  --tfs-ls-hero: -0.02em;\n  --tfs-ls-heading: -0.01em;\n  --tfs-ls-nav: 0.15em;\n  --tfs-ls-button: 0.12em;\n  --tfs-ls-body: 0.01em;\n  --tfs-ls-micro: 0.08em;\n}\n\n.tfs-director {\n  position: relative !important;\n  width: 100% !important;\n  padding: clamp(70px, 10vw, 110px) 24px !important;\n  background-color: var(--tfs-black) !important;\n  \n  \/* Fondo: tablao_setas_enero30.jpg *\/\n  background-image: url('https://spcdn.shortpixel.ai/spio/ret_img,q_cdnize,to_auto,s_webp:avif/test.tablaoflamencolassetas.com/wp-content/uploads/2026/01/tablao-setas-enero-30-scaled.jpg') !important;\n  background-size: cover !important;\n  background-position: center !important;\n  background-repeat: no-repeat !important;\n  \n  overflow: hidden !important;\n  box-sizing: border-box !important;\n}\n\n.tfs-director *,\n.tfs-director *::before,\n.tfs-director *::after {\n  box-sizing: border-box !important;\n}\n\n\/* Overlay oscuro para legibilidad + patr\u00f3n decorativo\n   radial-gradient blanco sutil (sin dorado) *\/\n.tfs-director::before {\n  content: '' !important;\n  position: absolute !important;\n  top: 0 !important;\n  right: 0 !important;\n  bottom: 0 !important;\n  left: 0 !important;\n  background: \n    linear-gradient(180deg, rgba(26,21,18,0.88) 0%, rgba(26,21,18,0.92) 100%),\n    radial-gradient(circle at 20% 30%, rgba(200,16,46,0.08) 0%, transparent 40%),\n    radial-gradient(circle at 80% 70%, rgba(255,255,255,0.04) 0%, transparent 35%) !important;\n  pointer-events: none !important;\n  z-index: 0 !important;\n}\n\n\/* =====================================================\n   BARRAS DECORATIVAS - BLANCO 25% opacidad (sin dorado)\n   ===================================================== *\/\n.tfs-director::after {\n  content: '' !important;\n  position: absolute !important;\n  top: 0 !important;\n  right: 0 !important;\n  bottom: 0 !important;\n  left: 0 !important;\n  background: \n    linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.25) 20%, rgba(255,255,255,0.25) 80%, transparent 100%),\n    linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.25) 20%, rgba(255,255,255,0.25) 80%, transparent 100%) !important;\n  background-size: 100% 4px, 100% 4px !important;\n  background-position: top, bottom !important;\n  background-repeat: no-repeat !important;\n  z-index: 20 !important;\n  pointer-events: none !important;\n}\n\n\/* Screen reader only *\/\n.tfs-sr-only {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n\/* Contenedor *\/\n.tfs-director__container {\n  position: relative !important;\n  z-index: 1 !important;\n  max-width: 1100px !important;\n  margin: 0 auto !important;\n  display: flex !important;\n  flex-direction: column !important;\n  align-items: center !important;\n  gap: 32px !important;\n}\n\n\/* =====================================================\n   LABEL \/ EYEBROW - GT America Light (300) uppercase\n   ===================================================== *\/\n.tfs-director__label {\n  display: inline-block !important;\n  font-family: var(--tfs-font-nav) !important;\n  font-size: 12px !important;\n  font-weight: var(--tfs-weight-light) !important;\n  text-transform: uppercase !important;\n  letter-spacing: var(--tfs-ls-nav) !important;\n  color: var(--tfs-white) !important;\n  margin: 0 !important;\n  padding: 8px 20px !important;\n  background: rgba(255,255,255,0.08) !important;\n  border: 1px solid rgba(255,255,255,0.25) !important;\n  border-radius: 50px !important;\n  text-align: center !important;\n}\n\n\/* Tarjeta principal *\/\n.tfs-director__card {\n  position: relative !important;\n  display: flex !important;\n  flex-direction: row !important;\n  align-items: center !important;\n  gap: clamp(32px, 6vw, 65px) !important;\n  background: linear-gradient(\n    145deg,\n    rgba(200,16,46,0.14) 0%,\n    rgba(200,16,46,0.06) 100%\n  ) !important;\n  border: 1px solid rgba(200,16,46,0.28) !important;\n  border-radius: 28px !important;\n  padding: clamp(32px, 5vw, 55px) !important;\n  width: 100% !important;\n  overflow: hidden !important;\n}\n\n\/* Patr\u00f3n sutil dentro de la tarjeta - CSS puro (sin imagen externa) *\/\n.tfs-director__card::before {\n  content: '' !important;\n  position: absolute !important;\n  top: 0 !important;\n  right: 0 !important;\n  bottom: 0 !important;\n  left: 0 !important;\n  background-image: \n    radial-gradient(circle at 25% 25%, rgba(255,255,255,0.03) 0%, transparent 50%),\n    radial-gradient(circle at 75% 75%, rgba(200,16,46,0.04) 0%, transparent 50%) !important;\n  pointer-events: none !important;\n}\n\n\/* Elevar contenido sobre patr\u00f3n *\/\n.tfs-director__media,\n.tfs-director__info {\n  position: relative !important;\n  z-index: 1 !important;\n}\n\n\/* Imagen circular *\/\n.tfs-director__media {\n  flex-shrink: 0 !important;\n  margin: 0 !important;\n}\n\n\/* Halo BLANCO sutil (sin dorado) *\/\n.tfs-director__image-circle {\n  width: clamp(180px, 22vw, 260px) !important;\n  aspect-ratio: 1 \/ 1 !important;\n  border-radius: 50% !important;\n  overflow: hidden !important;\n  position: relative !important;\n  box-shadow:\n    0 20px 50px rgba(200,16,46,0.3),\n    0 0 0 4px rgba(255,255,255,0.15) !important;\n  transition: transform 0.4s ease, box-shadow 0.4s ease !important;\n}\n\n.tfs-director__image {\n  width: 100% !important;\n  height: 100% !important;\n  object-fit: cover !important;\n  object-position: center top !important;\n  display: block !important;\n}\n\n\/* Info *\/\n.tfs-director__info {\n  flex: 1 !important;\n}\n\n\/* =====================================================\n   NOMBRE (H2) - CANELA LIGHT (300)\n   ===================================================== *\/\n.tfs-director__name {\n  font-family: var(--tfs-font-hero) !important;\n  font-size: clamp(28px, 4.5vw, 44px) !important;\n  font-weight: var(--tfs-weight-light) !important;\n  font-style: normal !important;\n  color: var(--tfs-cream) !important;\n  margin: 0 0 6px 0 !important;\n  padding: 0 !important;\n  line-height: 1.15 !important;\n  letter-spacing: var(--tfs-ls-heading) !important;\n  text-rendering: optimizeLegibility !important;\n  -webkit-font-smoothing: antialiased !important;\n  -moz-osx-font-smoothing: grayscale !important;\n}\n\n\/* =====================================================\n   ALIAS - GT America Regular (400) italic - BLANCO\n   ===================================================== *\/\n.tfs-director__alias {\n  display: inline-block !important;\n  font-family: var(--tfs-font-body) !important;\n  font-size: clamp(18px, 2vw, 20px) !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  font-style: italic !important;\n  letter-spacing: var(--tfs-ls-body) !important;\n  color: var(--tfs-white) !important;\n  margin-left: 12px !important;\n}\n\n\/* =====================================================\n   ROL - GT America Light (300) uppercase - BLANCO\n   ===================================================== *\/\n.tfs-director__role {\n  font-family: var(--tfs-font-nav) !important;\n  font-size: clamp(12px, 1.5vw, 13px) !important;\n  font-weight: var(--tfs-weight-light) !important;\n  text-transform: uppercase !important;\n  letter-spacing: var(--tfs-ls-nav) !important;\n  color: var(--tfs-white) !important;\n  margin: 8px 0 0 0 !important;\n  padding: 0 !important;\n}\n\n\/* =====================================================\n   BIO - GT America Regular (400)\n   ===================================================== *\/\n.tfs-director__bio {\n  font-family: var(--tfs-font-body) !important;\n  font-size: clamp(15px, 1.6vw, 16px) !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  color: var(--tfs-cream-soft) !important;\n  line-height: 1.65 !important;\n  letter-spacing: var(--tfs-ls-body) !important;\n  margin: 20px 0 22px 0 !important;\n  padding: 0 !important;\n  max-width: 58ch !important;\n  opacity: 0.92 !important;\n}\n\n.tfs-director__bio strong {\n  color: var(--tfs-cream) !important;\n  font-weight: var(--tfs-weight-regular) !important;\n}\n\n\/* =====================================================\n   HIGHLIGHTS \/ LOGROS - GT America Regular (400)\n   ===================================================== *\/\n.tfs-director__highlights {\n  list-style: none !important;\n  padding: 0 !important;\n  margin: 0 0 24px 0 !important;\n  display: flex !important;\n  flex-direction: column !important;\n  gap: 14px !important;\n}\n\n.tfs-director__highlights li {\n  font-family: var(--tfs-font-body) !important;\n  font-size: 14px !important;\n  font-weight: var(--tfs-weight-regular) !important;\n  color: var(--tfs-cream) !important;\n  padding-left: 24px !important;\n  position: relative !important;\n  line-height: 1.55 !important;\n  letter-spacing: var(--tfs-ls-body) !important;\n}\n\n\/* Bullet BLANCO (sin dorado) *\/\n.tfs-director__highlights li::before {\n  content: '' !important;\n  position: absolute !important;\n  left: 0 !important;\n  top: 0.5em !important;\n  width: 10px !important;\n  height: 10px !important;\n  background: var(--tfs-white) !important;\n  border-radius: 50% !important;\n  box-shadow: 0 0 10px rgba(255,255,255,0.3) !important;\n}\n\n\/* em BLANCO (sin dorado) *\/\n.tfs-director__highlights li em {\n  color: var(--tfs-white) !important;\n  font-style: normal !important;\n}\n\n\/* CTAs *\/\n.tfs-director__cta {\n  display: flex !important;\n  flex-wrap: wrap !important;\n  gap: 14px !important;\n}\n\n\/* =====================================================\n   BOTONES - GT America Light (300) uppercase\n   Seg\u00fan GUIA-PALETA-SIN-DORADO.md secci\u00f3n 5\n   ===================================================== *\/\n\n\/* Bot\u00f3n secundario (ghost) - Borde BLANCO *\/\n.tfs-director__btn {\n  display: inline-flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  gap: 10px !important;\n  padding: 14px 26px !important;\n  border-radius: 50px !important;\n  text-decoration: none !important;\n  font-family: var(--tfs-font-nav) !important;\n  font-size: 13px !important;\n  font-weight: var(--tfs-weight-light) !important;\n  text-transform: uppercase !important;\n  letter-spacing: var(--tfs-ls-button) !important;\n  border: 2px solid var(--tfs-white) !important;\n  color: var(--tfs-white) !important;\n  background: transparent !important;\n  transition: all 0.3s ease !important;\n  cursor: pointer !important;\n  min-height: 48px !important;\n}\n\n\/* Hover secundario: inversi\u00f3n *\/\n.tfs-director__btn:hover {\n  background: var(--tfs-white) !important;\n  color: var(--tfs-black) !important;\n  border-color: var(--tfs-white) !important;\n  transform: translateY(-2px) !important;\n}\n\n\/* Focus BLANCO (sin dorado) *\/\n.tfs-director__btn:focus-visible {\n  outline: 3px solid var(--tfs-white) !important;\n  outline-offset: 4px !important;\n}\n\n\/* Bot\u00f3n primario: Fondo BLANCO + texto NEGRO *\/\n.tfs-director__btn--primary {\n  background: var(--tfs-white) !important;\n  color: var(--tfs-black) !important;\n  border-color: var(--tfs-white) !important;\n}\n\n\/* Hover primario: Fondo CREMA + texto NEGRO *\/\n.tfs-director__btn--primary:hover {\n  background: var(--tfs-cream) !important;\n  color: var(--tfs-black) !important;\n  border-color: var(--tfs-cream) !important;\n  box-shadow: 0 8px 25px rgba(255, 255, 255, 0.25) !important;\n}\n\n\/* =====================================================\n   RESPONSIVE\n   ===================================================== *\/\n\n\/* #17: Hover effects only on devices that support hover *\/\n@media (hover: hover) {\n  .tfs-director__card:hover .tfs-director__image-circle {\n    transform: scale(1.02) !important;\n    box-shadow:\n      0 25px 60px rgba(200,16,46,0.35),\n      0 0 0 5px rgba(255,255,255,0.25) !important;\n  }\n}\n\n@media (hover: none) {\n  .tfs-director__image-circle {\n    transition: none !important;\n  }\n}\n\n@media (max-width: 900px) {\n  .tfs-director__card {\n    gap: 30px !important;\n    padding: 35px 28px !important;\n  }\n}\n\n@media (max-width: 768px) {\n  .tfs-director {\n    padding: 60px 20px !important;\n  }\n  \n  \/* #12: Hide decorative top\/bottom bars on mobile *\/\n  .tfs-director::after {\n    display: none !important;\n  }\n  \n  .tfs-director__card {\n    flex-direction: column !important;\n    text-align: center !important;\n    padding: 40px 28px !important;\n  }\n  \n  .tfs-director__image-circle {\n    width: 200px !important;\n  }\n  \n  .tfs-director__alias {\n    display: block !important;\n    margin-left: 0 !important;\n    margin-top: 4px !important;\n  }\n  \n  .tfs-director__bio {\n    text-align: center !important;\n    max-width: 45ch !important; \/* #16: Better readability for centered text *\/\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  \n  .tfs-director__highlights {\n    align-items: center !important;\n  }\n  \n  .tfs-director__highlights li {\n    padding-left: 0 !important;\n    padding-top: 18px !important;\n    text-align: center !important;\n    max-width: 320px !important;\n  }\n  \n  .tfs-director__highlights li::before {\n    left: 50% !important;\n    top: 0 !important;\n    transform: translateX(-50%) !important;\n  }\n  \n  .tfs-director__cta {\n    justify-content: center !important;\n    width: 100% !important;\n  }\n  \n  .tfs-director__btn {\n    flex: 1 !important;\n    min-width: 140px !important;\n    max-width: 200px !important;\n  }\n}\n\n\/* =====================================================\n   MOBILE <768px - Canela fallback a Playfair Display\n   ===================================================== *\/\n@media (max-width: 767px) {\n  .tfs-director__name {\n    font-family: 'Playfair Display', Georgia, serif !important;\n    font-weight: 700 !important;\n  }\n}\n\n@media (max-width: 480px) {\n  .tfs-director {\n    padding: 50px 16px !important;\n  }\n  \n  .tfs-director__card {\n    padding: 32px 20px !important;\n    border-radius: 22px !important;\n  }\n  \n  .tfs-director__image-circle {\n    width: 160px !important;\n  }\n  \n  .tfs-director__label {\n    font-size: 11px !important;\n    letter-spacing: 2px !important;\n  }\n  \n  .tfs-director__cta {\n    flex-direction: column !important;\n  }\n  \n  .tfs-director__btn {\n    width: 100% !important;\n    max-width: 280px !important;\n  }\n}\n\n@media (max-width: 374px) {\n  .tfs-director__name {\n    font-size: 24px !important;\n  }\n  \n  .tfs-director__alias {\n    font-size: 16px !important;\n  }\n  \n  .tfs-director__bio {\n    font-size: 14px !important;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .tfs-director__image-circle,\n  .tfs-director__btn {\n    transition: none !important;\n  }\n  \n  .tfs-director__card:hover .tfs-director__image-circle {\n    transform: none !important;\n  }\n}\n\n\/* Alto contraste *\/\n@media (prefers-contrast: high) {\n  .tfs-director__bio,\n  .tfs-director__highlights li {\n    color: var(--tfs-white) !important;\n    opacity: 1 !important;\n  }\n  \n  .tfs-director__btn {\n    border-width: 3px !important;\n  }\n}\n<\/style>\n\n<section class=\"tfs-director\" id=\"direccion-artistica\" aria-labelledby=\"tfs-director-title\">\n  <div class=\"tfs-director__container\">\n\n    <span class=\"tfs-director__label\">\n      Direcci\u00f3n art\u00edstica\n    <\/span>\n\n    <article class=\"tfs-director__card\">\n\n      <!-- Imagen -->\n      <figure class=\"tfs-director__media\">\n        <div class=\"tfs-director__image-circle\">\n          <img loading=\"lazy\"\n            src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Fondo_flamenca_2.jpg\"\n            alt=\"Sandra Guerrero La Negra bailando flamenco con bata de cola, directora art\u00edstica del Tablao Flamenco Las Setas en Sevilla\"\n            class=\"tfs-director__image\"\n            loading=\"lazy\"\n            decoding=\"async\"\n            width=\"400\"\n            height=\"400\"\n          >\n        <\/div>\n        <figcaption class=\"tfs-sr-only\">\n          Sandra Guerrero \"La Negra\" dirige el cuadro flamenco del Tablao Flamenco Las Setas, ubicado en el Metropol Parasol de Sevilla. Especialista en bata de cola y mant\u00f3n con m\u00e1s de 30 a\u00f1os de trayectoria.\n        <\/figcaption>\n      <\/figure>\n\n      <!-- Info -->\n      <div class=\"tfs-director__info\">\n        <h2 id=\"tfs-director-title\" class=\"tfs-director__name\">\n          Sandra Guerrero\n          <span class=\"tfs-director__alias\">\"La Negra\"<\/span>\n        <\/h2>\n\n        <p class=\"tfs-director__role\">\n          Direcci\u00f3n art\u00edstica \u00b7 Bailaora\n        <\/p>\n\n        <p class=\"tfs-director__bio\">\n          Bailaora sevillana con m\u00e1s de <strong>30 a\u00f1os de trayectoria profesional<\/strong>.\n          Formada durante 8 a\u00f1os en el Centro Profesional de Danza de Matilde Coral,\n          es reconocida por su dominio de la <strong>bata de cola<\/strong> y el <strong>mant\u00f3n<\/strong>.\n          Ha actuado en tablaos de referencia como Palacio Andaluz, Corral de la Pacheca y El Arenal.\n        <\/p>\n\n        <ul class=\"tfs-director__highlights\" aria-label=\"Hitos destacados de la carrera de Sandra Guerrero\">\n          <li>Participaci\u00f3n en producciones de Carlos Saura: <em>Flamenco<\/em> (1995) y <em>Sevillanas<\/em> (1992)<\/li>\n          <li>Presencia en la <em>Bienal de Flamenco de Sevilla<\/em><\/li>\n          <li>Actuaciones institucionales: <em>Gala de Aniversario de la Expo 92<\/em><\/li>\n        <\/ul>\n\n        <div class=\"tfs-director__cta\">\n          <a\n            class=\"tfs-director__btn\"\n            href=\"\/espectaculo\/\"\n            aria-label=\"Ver informaci\u00f3n completa del espect\u00e1culo flamenco\"\n          >\n            Ver espect\u00e1culo\n          <\/a>\n\n          <button\n            type=\"button\"\n            class=\"tfs-director__btn tfs-director__btn--primary\"\n            data-tfs-artistas-booking-open\n            aria-haspopup=\"dialog\"\n            aria-label=\"Abrir calendario para reservar entradas del tablao flamenco\"\n          >\n            Reservar entradas\n          <\/button>\n        <\/div>\n      <\/div>\n\n    <\/article>\n\n  <\/div>\n<\/section>\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"Person\",\n  \"@id\": \"https:\/\/tablaoflamencolassetas.com\/artistas\/#sandra-guerrero-la-negra\",\n  \"name\": \"Sandra Guerrero\",\n  \"alternateName\": [\"La Negra\", \"Sandra Guerrero La Negra\"],\n  \"givenName\": \"Sandra\",\n  \"familyName\": \"Guerrero\",\n  \"jobTitle\": \"Directora art\u00edstica y bailaora principal\",\n  \"description\": \"Bailaora sevillana con m\u00e1s de 30 a\u00f1os de trayectoria profesional. Formada durante 8 a\u00f1os en el Centro Profesional de Danza de Matilde Coral. Especialista en bata de cola y mant\u00f3n. Directora art\u00edstica del Tablao Flamenco Las Setas.\",\n  \"image\": \"https:\/\/tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Fondo_flamenca_2.jpg\",\n  \"birthDate\": \"1977\",\n  \"birthPlace\": {\n    \"@type\": \"Place\",\n    \"name\": \"Sevilla\",\n    \"address\": {\n      \"@type\": \"PostalAddress\",\n      \"addressLocality\": \"Sevilla\",\n      \"addressRegion\": \"Andaluc\u00eda\",\n      \"addressCountry\": \"ES\"\n    }\n  },\n  \"nationality\": {\n    \"@type\": \"Country\",\n    \"name\": \"Espa\u00f1a\"\n  },\n  \"knowsAbout\": [\n    \"Baile flamenco\",\n    \"Bata de cola\",\n    \"Mant\u00f3n de Manila\",\n    \"Danza espa\u00f1ola\",\n    \"Direcci\u00f3n art\u00edstica\"\n  ],\n  \"hasOccupation\": {\n    \"@type\": \"Occupation\",\n    \"name\": \"Bailaora flamenca\",\n    \"description\": \"Bailaora profesional especializada en bata de cola y mant\u00f3n\",\n    \"occupationLocation\": {\n      \"@type\": \"City\",\n      \"name\": \"Sevilla\",\n      \"containedInPlace\": {\n        \"@type\": \"Country\",\n        \"name\": \"Espa\u00f1a\"\n      }\n    }\n  },\n  \"worksFor\": {\n    \"@type\": \"Organization\",\n    \"@id\": \"https:\/\/tablaoflamencolassetas.com\/#organization\",\n    \"name\": \"Tablao Flamenco Las Setas\",\n    \"url\": \"https:\/\/tablaoflamencolassetas.com\/\",\n    \"address\": {\n      \"@type\": \"PostalAddress\",\n      \"streetAddress\": \"Plaza de la Encarnaci\u00f3n, 38\",\n      \"addressLocality\": \"Sevilla\",\n      \"postalCode\": \"41003\",\n      \"addressCountry\": \"ES\"\n    }\n  },\n  \"alumniOf\": [\n    {\n      \"@type\": \"EducationalOrganization\",\n      \"name\": \"Centro Profesional de Danza de Matilde Coral\",\n      \"address\": {\n        \"@type\": \"PostalAddress\",\n        \"addressLocality\": \"Sevilla\",\n        \"addressCountry\": \"ES\"\n      }\n    },\n    {\n      \"@type\": \"EducationalOrganization\",\n      \"name\": \"Centro de Estudios Esc\u00e9nicos Mario Maya\"\n    }\n  ],\n  \"award\": [\n    \"Participaci\u00f3n en 'Flamenco' de Carlos Saura (1995)\",\n    \"Participaci\u00f3n en 'Sevillanas' de Carlos Saura (1992)\",\n    \"Actuaci\u00f3n en Bienal de Flamenco de Sevilla\",\n    \"Gala de Aniversario de la Expo 92\"\n  ],\n  \"performerIn\": {\n    \"@type\": \"EventSeries\",\n    \"@id\": \"https:\/\/tablaoflamencolassetas.com\/#shows\",\n    \"name\": \"Espect\u00e1culo Flamenco en Tablao Las Setas\"\n  }\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d7ab469 e-con-full e-flex e-con e-parent\" data-id=\"d7ab469\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9e6efb1 elementor-widget elementor-widget-html\" data-id=\"9e6efb1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================\n     M\u00d3DULO ARTISTAS v5.7 - SOLISTA\n     Tablao Flamenco Las Setas\n     \n     CORRECCIONES v5.7 (10\/02\/2026):\n     \u2714 Paleta sin dorado: #E3AD43 \u2192 #FFFFFF\/#C8102E\n     \u2714 prefers-reduced-motion WCAG\n     \u2714 Eliminados console.log\/error\/warn\n     \u2714 TuriTop: buttoncolor=#C8102E, defer\n     \u2714 width\/height en im\u00e1genes + eager en primeras 12\n     \u2714 Schema.org PerformingGroup + Person\n     \u2714 Focus trap + pushState modal\n     \u2714 AbortController timeout 8s en API\n     \n     HORARIOS ACTUALIZADOS (desde 1\/2\/26):\n     - 4 pases diarios: 18:00, 19:30, 21:00, 22:30\n     - 1 pase extraordinario alta demanda: 16:30\n     - Duraci\u00f3n: 1 hora sin descanso\n     ===================================================== -->\n\n<style>\n\/* =====================================================\n   VARIABLES GLOBALES - DEFINIDAS EN :root\n   ===================================================== -->\n:root {\n  --tfs-rojo: #C8102E;\n  --tfs-rojo-oscuro: #8B1A1A;\n  --tfs-oro: #FFFFFF; \/* Paleta sin dorado v2.0 *\/\n  --tfs-crema: #FCE2BF;\n  --tfs-negro: #1A1512;\n  --tfs-negro-profundo: #0D0A08;\n  --tfs-verde: #2D8B4E;\n}\n\n\/* =====================================================\n   RESET AGRESIVO PARA ELEMENTOR\n   ===================================================== *\/\n.elementor-widget-html,\n.elementor-widget-html > div,\n.elementor-widget-html .elementor-widget-container,\n.elementor-element .elementor-widget-container,\n.elementor-widget-container {\n  background: transparent !important;\n  background-color: transparent !important;\n  border: none !important;\n  box-shadow: none !important;\n  padding: 0 !important;\n  margin: 0 !important;\n}\n\n\/* =====================================================\n   M\u00d3DULO PRINCIPAL\n   ===================================================== *\/\n.tfs-artistas-modulo {\n  position: relative;\n  width: 100%;\n  background-color: #C8102E;\n  padding: clamp(50px, 7vw, 90px) 20px;\n  overflow: hidden;\n  box-sizing: border-box;\n}\n\n.tfs-artistas-modulo *,\n.tfs-artistas-modulo *::before,\n.tfs-artistas-modulo *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n\/* Patr\u00f3n decorativo *\/\n.tfs-artistas-modulo::before {\n  content: '';\n  position: absolute;\n  inset: 0;\n  background-image:\n    radial-gradient(circle at 15% 25%, rgba(227,173,67,0.07) 0%, transparent 35%),\n    radial-gradient(circle at 85% 75%, rgba(26,21,18,0.12) 0%, transparent 40%);\n  pointer-events: none;\n  z-index: 0;\n}\n\n\/* =====================================================\n   HEADER\n   ===================================================== *\/\n.tfs-artistas__header {\n  position: relative !important;\n  z-index: 1 !important;\n  text-align: center !important;\n  max-width: 900px !important;\n  margin: 0 auto 30px auto !important;\n  padding: 0 !important;\n  background: transparent !important;\n}\n\n.tfs-artistas__title {\n  font-family: 'Geoparody', 'Playfair Display', Georgia, serif !important;\n  font-size: clamp(32px, 5vw, 50px) !important;\n  font-weight: 700 !important;\n  color: #FCE2BF !important;\n  line-height: 1.1 !important;\n  margin: 0 0 12px 0 !important;\n}\n\n.tfs-artistas__subtitle {\n  font-family: 'Work Sans', sans-serif !important;\n  font-size: clamp(15px, 2vw, 17px) !important;\n  color: rgba(252,226,191,0.75) !important;\n  max-width: 60ch !important;\n  margin: 0 auto !important;\n}\n\n\/* =====================================================\n   BARRA DE FILTROS\n   ===================================================== *\/\n.tfs-artistas__toolbar {\n  position: relative;\n  z-index: 1;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  margin: 0 auto 35px;\n  max-width: 900px;\n}\n\n.tfs-artistas__filtros {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: 8px;\n}\n\n.tfs-artistas__filtro {\n  font-family: 'Montserrat', sans-serif;\n  font-size: 12px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 1.2px;\n  color: #FCE2BF;\n  background: transparent;\n  border: 2px solid rgba(252,226,191,0.35);\n  padding: 10px 20px;\n  border-radius: 50px;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.tfs-artistas__filtro:hover {\n  border-color: #FCE2BF;\n  background: rgba(252,226,191,0.1);\n}\n\n.tfs-artistas__filtro.activo {\n  background: #FCE2BF;\n  color: #C8102E;\n  border-color: #FCE2BF;\n}\n\n\/* =====================================================\n   FILTRO ESPECIAL \"HOY ACT\u00daAN\" - DESTACADO\n   ===================================================== *\/\n.tfs-artistas__filtro--hoy {\n  background: #FFFFFF !important;\n  color: #1A1512 !important;\n  border-color: #FFFFFF !important;\n  position: relative;\n  padding-left: 32px;\n}\n\n.tfs-artistas__filtro--hoy::before {\n  content: '';\n  position: absolute;\n  left: 12px;\n  top: 50%;\n  transform: translateY(-50%);\n  font-size: 14px;\n}\n\n.tfs-artistas__filtro--hoy:hover {\n  background: #FCE2BF !important;\n  border-color: #FCE2BF !important;\n}\n\n.tfs-artistas__filtro--hoy.activo {\n  background: #FCE2BF !important;\n  color: #1A1512 !important;\n  border-color: #FCE2BF !important;\n}\n\n.tfs-artistas__filtro--hoy.cargando {\n  opacity: 0.7;\n  pointer-events: none;\n}\n\n.tfs-artistas__filtro--hoy.cargando::after {\n  content: '';\n  position: absolute;\n  right: 12px;\n  top: 50%;\n  transform: translateY(-50%);\n  width: 14px;\n  height: 14px;\n  border: 2px solid transparent;\n  border-top-color: currentColor;\n  border-radius: 50%;\n  animation: tfs-spin 0.8s linear infinite;\n}\n\n@keyframes tfs-spin {\n  to { transform: translateY(-50%) rotate(360deg); }\n}\n\n\/* Estado cuando no hay programaci\u00f3n hoy *\/\n.tfs-artistas__filtro--hoy.sin-datos {\n  opacity: 0.5;\n  cursor: not-allowed;\n}\n\n.tfs-artistas__filtro--hoy.sin-datos::before {\n  content: '';\n}\n\n.tfs-artistas__count {\n  font-family: 'Work Sans', sans-serif;\n  font-size: 13px;\n  color: rgba(252,226,191,0.65);\n  width: 100%;\n  text-align: center;\n  margin-top: 8px;\n}\n\n\/* Mensaje de \"Hoy act\u00faan\" *\/\n.tfs-artistas__hoy-info {\n  width: 100%;\n  text-align: center;\n  margin-top: 12px;\n  padding: 12px 20px;\n  background: rgba(227, 173, 67, 0.15);\n  border-radius: 12px;\n  border: 1px solid rgba(227, 173, 67, 0.3);\n  display: none;\n}\n\n.tfs-artistas__hoy-info.visible {\n  display: block;\n}\n\n.tfs-artistas__hoy-info p {\n  font-family: 'Work Sans', sans-serif;\n  font-size: 14px;\n  color: #FCE2BF;\n  margin: 0;\n}\n\n.tfs-artistas__hoy-info strong {\n  color: #FFFFFF;\n}\n\n\/* =====================================================\n   GRID DE ARTISTAS\n   ===================================================== *\/\n.tfs-artistas__grid {\n  position: relative;\n  z-index: 1;\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 24px;\n  max-width: 1100px;\n  margin: 0 auto;\n}\n\n@media (max-width: 1024px) {\n  .tfs-artistas__grid {\n    grid-template-columns: repeat(3, 1fr);\n    gap: 20px;\n  }\n}\n\n@media (max-width: 700px) {\n  .tfs-artistas__grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 16px;\n  }\n}\n\n\/* =====================================================\n   TARJETA DE ARTISTA\n   ===================================================== *\/\n.tfs-artista-card {\n  background: rgba(139,26,26,0.5) !important;\n  border-radius: 16px;\n  padding: 20px 16px 18px;\n  text-align: center;\n  cursor: pointer;\n  transition: transform 0.3s ease, background 0.3s ease;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  position: relative;\n}\n\n.tfs-artista-card:hover {\n  transform: translateY(-6px);\n  background: rgba(139,26,26,0.7) !important;\n}\n\n\/* =====================================================\n   BADGE \"ACT\u00daA HOY\" EN TARJETA\n   ===================================================== *\/\n.tfs-artista-card__badge-hoy {\n  position: absolute;\n  top: -8px;\n  right: -8px;\n  background: #C8102E;\n  color: #FFFFFF;\n  font-family: 'Montserrat', sans-serif;\n  font-size: 9px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  padding: 5px 10px;\n  border-radius: 20px;\n  box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n  display: none;\n  z-index: 2;\n}\n\n.tfs-artista-card.actua-hoy .tfs-artista-card__badge-hoy {\n  display: block;\n}\n\n\/* Imagen circular *\/\n.tfs-artista-card__img-wrap {\n  width: clamp(100px, 22vw, 130px);\n  height: clamp(100px, 22vw, 130px);\n  border-radius: 50%;\n  overflow: hidden;\n  margin-bottom: 14px;\n  position: relative;\n  box-shadow: \n    0 8px 25px rgba(0,0,0,0.25),\n    0 0 0 3px rgba(200,16,46,0.6);\n  transition: box-shadow 0.3s ease;\n}\n\n\/* Borde dorado si act\u00faa hoy *\/\n.tfs-artista-card.actua-hoy .tfs-artista-card__img-wrap {\n  box-shadow: \n    0 8px 25px rgba(0,0,0,0.25),\n    0 0 0 4px #FFFFFF;\n}\n\n.tfs-artista-card__img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n  transition: transform 0.4s ease;\n}\n\n.tfs-artista-card:hover .tfs-artista-card__img {\n  transform: scale(1.08);\n}\n\n\/* Placeholder para artistas sin foto *\/\n.tfs-artista-card__img-wrap.sin-foto {\n  background: linear-gradient(145deg, #1A1512 0%, #0D0A08 100%);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.tfs-artista-card__img-wrap.sin-foto .tfs-artista-card__img {\n  display: none;\n}\n\n.tfs-artista-card__inicial {\n  font-family: 'Geoparody', Georgia, serif;\n  font-size: clamp(36px, 10vw, 50px);\n  font-weight: 700;\n  color: #FFFFFF;\n  text-shadow: 2px 2px 10px rgba(0,0,0,0.4);\n  display: none;\n}\n\n.tfs-artista-card__img-wrap.sin-foto .tfs-artista-card__inicial {\n  display: block;\n}\n\n\/* Nombre y categor\u00eda *\/\n.tfs-artista-card__nombre {\n  font-family: 'Bright Almond', 'Playfair Display', Georgia, serif;\n  font-size: clamp(16px, 2.5vw, 19px);\n  font-weight: 600;\n  color: #FCE2BF;\n  margin-bottom: 4px;\n  line-height: 1.2;\n}\n\n.tfs-artista-card__categoria {\n  font-family: 'Montserrat', sans-serif;\n  font-size: 10px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 1.5px;\n  color: #FFFFFF;\n}\n\n\/* Ocultar tarjetas *\/\n.tfs-artista-card.oculto {\n  display: none;\n}\n\n\/* =====================================================\n   BOTONES \"VER M\u00c1S\" \/ \"VER MENOS\"\n   ===================================================== *\/\n.tfs-artistas__ver-mas-wrap {\n  position: relative;\n  z-index: 1;\n  text-align: center;\n  margin-top: 35px;\n}\n\n.tfs-artistas__ver-mas {\n  font-family: 'Montserrat', sans-serif;\n  font-size: 13px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 1.5px;\n  color: #1A1512;\n  background: #FFFFFF;\n  border: none;\n  padding: 14px 32px;\n  border-radius: 50px;\n  cursor: pointer;\n  transition: all 0.3s ease;\n}\n\n.tfs-artistas__ver-mas:hover {\n  background: #FCE2BF;\n  transform: translateY(-2px);\n  box-shadow: 0 10px 30px rgba(227,173,67,0.3);\n}\n\n.tfs-artistas__ver-mas.oculto {\n  display: none;\n}\n\n.tfs-artistas__ver-menos {\n  font-family: 'Montserrat', sans-serif;\n  font-size: 13px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 1.5px;\n  color: #FCE2BF;\n  background: transparent;\n  border: 2px solid #FCE2BF;\n  padding: 14px 32px;\n  border-radius: 50px;\n  cursor: pointer;\n  transition: all 0.3s ease;\n}\n\n.tfs-artistas__ver-menos:hover {\n  background: #FCE2BF;\n  color: #C8102E;\n}\n\n.tfs-artistas__ver-menos.oculto {\n  display: none;\n}\n\n\/* =====================================================\n   MODAL - ESTILOS CORREGIDOS CON VALORES HARDCODEADOS\n   ===================================================== *\/\n\n\/* OVERLAY - Fondo oscuro con blur *\/\n.tfs-modal-overlay {\n  position: fixed !important;\n  top: 0 !important;\n  left: 0 !important;\n  right: 0 !important;\n  bottom: 0 !important;\n  width: 100vw !important;\n  height: 100vh !important;\n  z-index: 999999 !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  padding: 20px !important;\n  background-color: rgba(13, 10, 8, 0.95) !important;\n  backdrop-filter: blur(12px) !important;\n  -webkit-backdrop-filter: blur(12px) !important;\n  opacity: 0 !important;\n  visibility: hidden !important;\n  transition: opacity 0.3s ease, visibility 0.3s ease !important;\n}\n\n.tfs-modal-overlay.activo {\n  opacity: 1 !important;\n  visibility: visible !important;\n}\n\n\/* CONTENIDO DEL MODAL - Fondo s\u00f3lido oscuro *\/\n.tfs-modal-content {\n  position: relative !important;\n  background: #1A1512 !important;\n  background-color: #1A1512 !important;\n  background-image: linear-gradient(145deg, #1A1512 0%, #251E19 100%) !important;\n  border: 2px solid rgba(200, 16, 46, 0.5) !important;\n  border-radius: 24px !important;\n  max-width: 520px !important;\n  width: 100% !important;\n  max-height: 90vh !important;\n  overflow-y: auto !important;\n  overflow-x: hidden !important;\n  padding: 50px 32px 35px !important;\n  box-shadow: \n    0 30px 80px rgba(0, 0, 0, 0.7),\n    0 0 0 1px rgba(227, 173, 67, 0.15),\n    inset 0 1px 0 rgba(255, 255, 255, 0.05) !important;\n  transform: translateY(25px) scale(0.97) !important;\n  transition: transform 0.3s ease !important;\n}\n\n.tfs-modal-overlay.activo .tfs-modal-content {\n  transform: translateY(0) scale(1) !important;\n}\n\n\/* =====================================================\n   BOT\u00d3N CERRAR - SUPER VISIBLE\n   ===================================================== *\/\nbutton.tfs-modal-close,\n.tfs-modal-close {\n  position: absolute !important;\n  top: 12px !important;\n  right: 12px !important;\n  width: 44px !important;\n  height: 44px !important;\n  min-width: 44px !important;\n  min-height: 44px !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  background: #C8102E !important;\n  background-color: #C8102E !important;\n  border: 3px solid #FCE2BF !important;\n  border-radius: 50% !important;\n  color: #FCE2BF !important;\n  cursor: pointer !important;\n  transition: all 0.25s ease !important;\n  z-index: 10000 !important;\n  padding: 0 !important;\n  margin: 0 !important;\n  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4) !important;\n  outline: none !important;\n}\n\nbutton.tfs-modal-close:hover,\n.tfs-modal-close:hover {\n  background: #FCE2BF !important;\n  background-color: #FCE2BF !important;\n  color: #C8102E !important;\n  border-color: #C8102E !important;\n  transform: rotate(90deg) scale(1.1) !important;\n}\n\nbutton.tfs-modal-close svg,\n.tfs-modal-close svg {\n  width: 20px !important;\n  height: 20px !important;\n  stroke: currentColor !important;\n  stroke-width: 3 !important;\n  fill: none !important;\n}\n\n\/* =====================================================\n   IMAGEN MODAL\n   ===================================================== *\/\n.tfs-modal__img-wrap {\n  width: clamp(130px, 32vw, 170px) !important;\n  height: clamp(130px, 32vw, 170px) !important;\n  margin: 0 auto 22px !important;\n  border-radius: 50% !important;\n  overflow: hidden !important;\n  box-shadow:\n    0 15px 45px rgba(200, 16, 46, 0.35),\n    0 0 0 4px rgba(227, 173, 67, 0.4) !important;\n  background: #0D0A08 !important;\n}\n\n.tfs-modal__img-wrap.sin-foto {\n  background: linear-gradient(145deg, #1A1512 0%, #0D0A08 100%) !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n}\n\n.tfs-modal__img {\n  width: 100% !important;\n  height: 100% !important;\n  object-fit: cover !important;\n  display: block !important;\n}\n\n.tfs-modal__img-wrap.sin-foto .tfs-modal__img {\n  display: none !important;\n}\n\n.tfs-modal__inicial {\n  font-family: 'Geoparody', Georgia, serif !important;\n  font-size: clamp(48px, 12vw, 68px) !important;\n  font-weight: 700 !important;\n  color: #FFFFFF !important;\n  display: none !important;\n}\n\n.tfs-modal__img-wrap.sin-foto .tfs-modal__inicial {\n  display: block !important;\n}\n\n\/* =====================================================\n   INFO MODAL\n   ===================================================== *\/\n.tfs-modal__info {\n  text-align: center !important;\n}\n\n.tfs-modal__categoria {\n  display: inline-block !important;\n  font-family: 'Montserrat', sans-serif !important;\n  font-size: 11px !important;\n  font-weight: 600 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 2px !important;\n  color: #FFFFFF !important;\n  margin-bottom: 8px !important;\n}\n\n.tfs-modal__nombre {\n  font-family: 'Geoparody', 'Playfair Display', Georgia, serif !important;\n  font-size: clamp(24px, 5vw, 32px) !important;\n  font-weight: 700 !important;\n  color: #FCE2BF !important;\n  margin-bottom: 14px !important;\n  line-height: 1.2 !important;\n}\n\n.tfs-modal__bio {\n  font-family: 'Work Sans', sans-serif !important;\n  font-size: 15px !important;\n  color: rgba(252, 226, 191, 0.85) !important;\n  line-height: 1.7 !important;\n  margin-bottom: 18px !important;\n}\n\n.tfs-modal__premios {\n  list-style: none !important;\n  text-align: left !important;\n  margin: 0 0 24px 0 !important;\n  padding: 0 !important;\n}\n\n.tfs-modal__premios li {\n  font-family: 'Work Sans', sans-serif !important;\n  font-size: 14px !important;\n  color: #FCE2BF !important;\n  padding: 8px 0 8px 22px !important;\n  position: relative !important;\n  line-height: 1.5 !important;\n  border-bottom: 1px solid rgba(252, 226, 191, 0.08) !important;\n  margin: 0 !important;\n}\n\n.tfs-modal__premios li:last-child {\n  border-bottom: none !important;\n}\n\n.tfs-modal__premios li::before {\n  content: '' !important;\n  position: absolute !important;\n  left: 0 !important;\n  top: 14px !important;\n  width: 8px !important;\n  height: 8px !important;\n  background: #FFFFFF !important;\n  border-radius: 50% !important;\n}\n\n\/* =====================================================\n   SECCI\u00d3N \"PR\u00d3XIMAS ACTUACIONES\" EN MODAL\n   ===================================================== *\/\n.tfs-modal__proximas {\n  margin: 20px 0 !important;\n  padding: 18px !important;\n  background: rgba(200, 16, 46, 0.2) !important;\n  background-color: rgba(200, 16, 46, 0.2) !important;\n  border-radius: 16px !important;\n  border: 1px solid rgba(200, 16, 46, 0.35) !important;\n}\n\n.tfs-modal__proximas-title {\n  font-family: 'Montserrat', sans-serif !important;\n  font-size: 11px !important;\n  font-weight: 600 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 2px !important;\n  color: #FFFFFF !important;\n  margin-bottom: 14px !important;\n  text-align: center !important;\n}\n\n.tfs-modal__proximas-loading {\n  text-align: center !important;\n  padding: 15px !important;\n}\n\n.tfs-modal__proximas-loading .spinner {\n  width: 24px !important;\n  height: 24px !important;\n  border: 2px solid rgba(227, 173, 67, 0.3) !important;\n  border-top-color: #FFFFFF !important;\n  border-radius: 50% !important;\n  animation: tfs-spin 0.8s linear infinite !important;\n  margin: 0 auto 8px !important;\n}\n\n.tfs-modal__proximas-loading p {\n  font-family: 'Work Sans', sans-serif !important;\n  font-size: 13px !important;\n  color: rgba(252, 226, 191, 0.6) !important;\n  margin: 0 !important;\n}\n\n.tfs-modal__proximas-lista {\n  display: flex !important;\n  flex-wrap: wrap !important;\n  gap: 8px !important;\n  justify-content: center !important;\n}\n\n.tfs-modal__proximas-fecha {\n  display: inline-flex !important;\n  align-items: center !important;\n  gap: 6px !important;\n  background: rgba(26, 21, 18, 0.7) !important;\n  padding: 8px 14px !important;\n  border-radius: 20px !important;\n  font-family: 'Work Sans', sans-serif !important;\n  font-size: 13px !important;\n  color: #FCE2BF !important;\n}\n\n.tfs-modal__proximas-fecha.es-hoy {\n  background: #C8102E !important;\n  color: #FFFFFF !important;\n  font-weight: 600 !important;\n}\n\n.tfs-modal__proximas-fecha .dia {\n  font-weight: 600 !important;\n}\n\n.tfs-modal__proximas-vacio {\n  text-align: center !important;\n  font-family: 'Work Sans', sans-serif !important;\n  font-size: 13px !important;\n  color: rgba(252, 226, 191, 0.5) !important;\n  font-style: italic !important;\n}\n\n\/* =====================================================\n   BOT\u00d3N RESERVAR\n   ===================================================== *\/\n.tfs-modal__cta {\n  text-align: center !important;\n  padding-top: 18px !important;\n  border-top: 1px solid rgba(252, 226, 191, 0.12) !important;\n}\n\n.tfs-modal__cta-btn {\n  display: inline-flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  font-family: 'Montserrat', sans-serif !important;\n  font-size: 13px !important;\n  font-weight: 600 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  text-decoration: none !important;\n  color: #1A1512 !important;\n  background: #FFFFFF !important;\n  background-color: #FFFFFF !important;\n  padding: 14px 30px !important;\n  border-radius: 50px !important;\n  border: none !important;\n  cursor: pointer !important;\n  transition: all 0.3s ease !important;\n  min-width: 200px !important;\n}\n\n.tfs-modal__cta-btn:hover {\n  background: #FCE2BF !important;\n  background-color: #FCE2BF !important;\n  transform: translateY(-2px) !important;\n  box-shadow: 0 10px 30px rgba(227, 173, 67, 0.3) !important;\n}\n\n\/* =====================================================\n   MODAL TURITOP\n   ===================================================== *\/\n.tfs-turitop-modal {\n  display: none !important;\n  position: fixed !important;\n  top: 0 !important;\n  left: 0 !important;\n  right: 0 !important;\n  bottom: 0 !important;\n  background: rgba(0, 0, 0, 0.9) !important;\n  z-index: 9999999 !important;\n  align-items: center !important;\n  justify-content: center !important;\n  padding: 20px !important;\n}\n\n.tfs-turitop-modal.open { \n  display: flex !important; \n}\n\n.tfs-turitop-modal__box {\n  background: #fff !important;\n  border-radius: 14px !important;\n  width: 100% !important;\n  max-width: 480px !important;\n  max-height: 90vh !important;\n  overflow: hidden !important;\n}\n\n.tfs-turitop-modal__head {\n  background: #C8102E !important;\n  padding: 18px 22px !important;\n  display: flex !important;\n  justify-content: space-between !important;\n  align-items: center !important;\n}\n\n.tfs-turitop-modal__title {\n  font-family: 'Playfair Display', serif !important;\n  font-size: 20px !important;\n  font-weight: 700 !important;\n  color: #FCE2BF !important;\n  margin: 0 !important;\n}\n\n.tfs-turitop-modal__close {\n  background: rgba(255, 255, 255, 0.15) !important;\n  border: none !important;\n  width: 38px !important;\n  height: 38px !important;\n  border-radius: 50% !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  cursor: pointer !important;\n}\n\n.tfs-turitop-modal__close:hover { \n  background: rgba(255, 255, 255, 0.25) !important; \n}\n\n.tfs-turitop-modal__close svg { \n  width: 22px !important; \n  height: 22px !important; \n  color: #fff !important; \n}\n\n.tfs-turitop-modal__body {\n  padding: 22px !important;\n  overflow-y: auto !important;\n  max-height: calc(90vh - 74px) !important;\n}\n\n.tfs-turitop-modal__loading {\n  text-align: center !important;\n  padding: 35px 20px !important;\n}\n\n.tfs-turitop-modal__spinner {\n  width: 38px !important;\n  height: 38px !important;\n  border: 3px solid rgba(200, 16, 46, 0.2) !important;\n  border-top-color: #C8102E !important;\n  border-radius: 50% !important;\n  animation: tfs-spin 0.8s linear infinite !important;\n  margin: 0 auto 14px auto !important;\n}\n\n.tfs-turitop-modal__loading p { \n  color: #666 !important; \n  font-size: 14px !important; \n  margin: 0 !important;\n}\n\n\/* =====================================================\n   RESPONSIVE\n   ===================================================== *\/\n@media (max-width: 600px) {\n  .tfs-modal-content {\n    padding: 45px 20px 28px !important;\n    border-radius: 20px !important;\n    margin: 10px !important;\n  }\n  \n  button.tfs-modal-close,\n  .tfs-modal-close {\n    top: 10px !important;\n    right: 10px !important;\n    width: 40px !important;\n    height: 40px !important;\n    min-width: 40px !important;\n    min-height: 40px !important;\n  }\n  \n  .tfs-artistas__filtro--hoy {\n    order: -1;\n    width: 100%;\n    margin-bottom: 8px;\n  }\n}\n\n\/* =====================================================\n   ACCESIBILIDAD: Reducir movimiento\n   ===================================================== *\/\n@media (prefers-reduced-motion: reduce) {\n  .tfs-artista-card,\n  .tfs-artista-card__img,\n  .tfs-artista-card__inicial,\n  .tfs-artistas__ver-mas,\n  .tfs-modal__cta-btn,\n  .tfs-modal__close,\n  .tfs-artistas__filtro-btn,\n  .tfs-turitop-modal__box {\n    transition: none !important;\n    animation: none !important;\n  }\n  .tfs-artista-card:hover {\n    transform: none !important;\n  }\n  .tfs-artista-card:hover .tfs-artista-card__img {\n    transform: none !important;\n  }\n  .tfs-modal__spinner {\n    animation: none !important;\n  }\n  .tfs-turitop-modal__spinner {\n    animation: none !important;\n  }\n}\n<\/style>\n\n<!-- =====================================================\n     HTML GRID DE ARTISTAS\n     ===================================================== -->\n<section class=\"tfs-artistas-modulo\" id=\"cuadro-artistico\" lang=\"es\"\n  itemscope itemtype=\"https:\/\/schema.org\/PerformingGroup\"\n  aria-label=\"Cuadro artstico del Tablao Flamenco Las Setas\">\n  <meta itemprop=\"name\" content=\"Cuadro Artstico - Tablao Flamenco Las Setas\">\n  <header class=\"tfs-artistas__header\">\n    <h2 class=\"tfs-artistas__title\">Nuestro Cuadro Art\u00edstico<\/h2>\n    <p class=\"tfs-artistas__subtitle\">51 artistas de primer nivel: solistas, cante, guitarra y percusi\u00f3n<\/p>\n  <\/header>\n  \n  <div class=\"tfs-artistas__toolbar\">\n    <div class=\"tfs-artistas__filtros\" role=\"radiogroup\" aria-label=\"Filtrar por categor\u00eda\">\n      <!-- NUEVO: Filtro especial \"Hoy act\u00faan\" -->\n      <button class=\"tfs-artistas__filtro tfs-artistas__filtro--hoy\" data-filtro=\"hoy\" role=\"radio\" aria-checked=\"false\" id=\"tfsFilterHoy\">\n        Hoy act\u00faan\n      <\/button>\n      <button class=\"tfs-artistas__filtro activo\" data-filtro=\"todos\" role=\"radio\" aria-checked=\"true\">Todos<\/button>\n      <button class=\"tfs-artistas__filtro\" data-filtro=\"solista\" role=\"radio\" aria-checked=\"false\">Solista<\/button>\n      <button class=\"tfs-artistas__filtro\" data-filtro=\"cante\" role=\"radio\" aria-checked=\"false\">Cante<\/button>\n      <button class=\"tfs-artistas__filtro\" data-filtro=\"guitarra\" role=\"radio\" aria-checked=\"false\">Guitarra<\/button>\n      <button class=\"tfs-artistas__filtro\" data-filtro=\"percusion\" role=\"radio\" aria-checked=\"false\">Percusi\u00f3n<\/button>\n    <\/div>\n    \n    <!-- Info cuando se activa \"Hoy act\u00faan\" -->\n    <div class=\"tfs-artistas__hoy-info\" id=\"tfsHoyInfo\">\n      <p> <strong id=\"tfsHoyFecha\">Mi\u00e9rcoles 21 enero<\/strong> \u00b7 <span id=\"tfsHoyTotal\">8<\/span> artistas en escena<\/p>\n    <\/div>\n    \n    <p class=\"tfs-artistas__count\" aria-live=\"polite\">Mostrando <span id=\"tfs-count-visible\">12<\/span> de <span id=\"tfs-count-total\">51<\/span> artistas<\/p>\n  <\/div>\n  \n  <div class=\"tfs-artistas__grid\" id=\"tfsArtistasGrid\">\n    \n    <!-- ========== SOLISTA - BAILAORES (13) ========== -->\n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"manuel-montes\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Manuel-Montes_000.jpg\" \n             alt=\"Manuel Montes, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">M<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Manuel Montes<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"el-yiyo\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Yiyo_000.jpg\" \n             alt=\"El Yiyo, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">Y<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">El Yiyo<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"miguel-rubio\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Miguel-Rubio_000.jpg\" \n             alt=\"Miguel Rubio, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">M<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Miguel Rubio<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"juan-tomas\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Juan-Tomas_000.jpg\" \n             alt=\"Juan Tom\u00e1s, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">J<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Juan Tom\u00e1s<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"polito\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Polito_000.jpg\" \n             alt=\"Polito, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">P<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Polito<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"juan-jose-villar\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Juan-Jose-villar_000.jpg\" \n             alt=\"Juan Jos\u00e9 Villar, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">J<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Juan Jos\u00e9 Villar<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"jose-maya\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Jose-Maya_000.jpg\" \n             alt=\"Jos\u00e9 Maya, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">J<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Jos\u00e9 Maya<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"el-choro\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Choro_000.jpg\" \n             alt=\"El Choro, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">C<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">El Choro<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"el-farru\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Farru_000.jpg\" \n             alt=\"El Farru, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">F<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">El Farru<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"el-carpeta\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap sin-foto\">\n        <img decoding=\"async\" src=\"\" alt=\"\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\">\n        <span class=\"tfs-artista-card__inicial\">C<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">El Carpeta<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"pepe-torres\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Pepe-Torres_000.jpg\" \n             alt=\"Pepe Torres, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">P<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Pepe Torres<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"juan-de-juan\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Juan-de-Juan_000.jpg\" \n             alt=\"Juan de Juan, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">J<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Juan de Juan<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"el-tete\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Tete_000.jpg\" \n             alt=\"El Tete, bailaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"eager\">\n        <span class=\"tfs-artista-card__inicial\">T<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">El Tete<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <!-- ========== SOLISTA - BAILAORAS (13) ========== -->\n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"lole-de-los-reyes\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Lole-de-los-Reyes_000.jpg\" \n             alt=\"Lole de los Reyes, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">L<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Lole de los Reyes<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"agueda-saavedra\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Agueda_000.jpg\" \n             alt=\"\u00c1gueda Saavedra, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">\u00c1<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">\u00c1gueda Saavedra<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"belen-lopez\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Belen-Lopez_000.jpg\" \n             alt=\"Bel\u00e9n L\u00f3pez, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">B<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Bel\u00e9n L\u00f3pez<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"nazaret\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Nazaret-reyes_000.jpg\" \n             alt=\"Nazaret, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">N<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Nazaret<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"noemi-ferrer\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Naomi-Ferrer_000.jpg\" \n             alt=\"Noem\u00ed Ferrer, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">N<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Noem\u00ed Ferrer<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"zaira\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Zaira-Prudencio_000.jpg\" \n             alt=\"Zaira, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">Z<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Zaira<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"florencia\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap sin-foto\">\n        <img decoding=\"async\" src=\"\" alt=\"\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\">\n        <span class=\"tfs-artista-card__inicial\">F<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Florencia<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"gema-moneo\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Gema-Moneo_000.jpg\" \n             alt=\"Gema Moneo, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">G<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Gema Moneo<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"yaiza\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/yaiza_000.jpg\" \n             alt=\"Yaiza, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">Y<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Yaiza<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"la-moneta\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/La-Moneta_000.jpg\" \n             alt=\"La Moneta, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">M<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">La Moneta<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"karime-amaya\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Karime-Amaya_000.jpg\" \n             alt=\"Karime Amaya, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">K<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Karime Amaya<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"manuela-vargas\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Manuela-Vargas_000.jpg\" \n             alt=\"Manuela Vargas, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">M<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Manuela Vargas<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"solista\" data-artista=\"alba-heredia\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Alba-Heredia_000.jpg\" \n             alt=\"Alba Heredia, bailaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">A<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Alba Heredia<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Solista<\/span>\n    <\/article>\n    \n    <!-- ========== CANTE - CANTAORES (9) ========== -->\n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"miguel-rosendo\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Rosendo_000.jpg\" \n             alt=\"Miguel Rosendo, cantaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">M<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Miguel Rosendo<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"kini\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Kini-de-Jerez_000.jpg\" \n             alt=\"Kini, cantaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">K<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Kini<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"rubio-de-pruna\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Rubio_000.jpg\" \n             alt=\"Rubio de Pruna, cantaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">R<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Rubio de Pruna<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"manuel-de-la-nina\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Manuel-de-Nina_000.jpg\" \n             alt=\"Manuel de la Ni\u00f1a, cantaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">M<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Manuel de la Ni\u00f1a<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"lavi\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/miguel-Lavi_000.jpg\" \n             alt=\"Lavi, cantaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">L<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Lavi<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"ezequiel-montoya\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap sin-foto\">\n        <img decoding=\"async\" src=\"\" alt=\"\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\">\n        <span class=\"tfs-artista-card__inicial\">E<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Ezequiel Montoya<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"ivan-carpio\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Carpio_000.jpg\" \n             alt=\"Iv\u00e1n Carpio, cantaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">I<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Iv\u00e1n Carpio<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"galli\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/El-Galli.jpeg\" \n             alt=\"Galli, cantaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">G<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Galli<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"pepe-de-pura\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Pepe-pura_000.jpg\" \n             alt=\"Pepe de Pura, cantaor\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">P<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Pepe de Pura<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <!-- ========== CANTE - CANTAORAS (5) ========== -->\n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"reyes-martin\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Reyes-Martin_000.jpg\" \n             alt=\"Reyes Mart\u00edn, cantaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">R<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Reyes Mart\u00edn<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"mai-fernandez\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Mai_000.jpg\" \n             alt=\"Mai Fern\u00e1ndez, cantaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">M<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Mai Fern\u00e1ndez<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"cristina-tovar\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Cristina-Tovar_000.jpg\" \n             alt=\"Cristina Tovar, cantaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">C<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Cristina Tovar<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"la-tana\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/La-Tana_000.jpg\" \n             alt=\"La Tana, cantaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">T<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">La Tana<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"cante\" data-artista=\"mara-rey\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Mara-Rey_000.jpg\" \n             alt=\"Mara Rey, cantaora\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">M<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Mara Rey<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Cante<\/span>\n    <\/article>\n    \n    <!-- ========== GUITARRA (6) ========== -->\n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"guitarra\" data-artista=\"perla\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/El-Perla.jpeg\" \n             alt=\"Perla, guitarrista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">P<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Perla<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Guitarra<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"guitarra\" data-artista=\"eugenio\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Eugenio-Iglesias_000.jpg\" \n             alt=\"Eugenio, guitarrista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">E<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Eugenio<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Guitarra<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"guitarra\" data-artista=\"tudela\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Tudela_000.jpg\" \n             alt=\"Tudela, guitarrista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">T<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Tudela<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Guitarra<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"guitarra\" data-artista=\"paco-iglesias\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Paco-Iglesias_000.jpg\" \n             alt=\"Paco Iglesias, guitarrista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">P<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Paco Iglesias<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Guitarra<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"guitarra\" data-artista=\"ramon-amador\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Ramon-Amador_000.jpg\" \n             alt=\"Ram\u00f3n Amador, guitarrista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">R<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Ram\u00f3n Amador<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Guitarra<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"guitarra\" data-artista=\"luis-amador\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Luis-Amador_000.jpg\" \n             alt=\"Luis Amador, guitarrista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">L<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Luis Amador<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Guitarra<\/span>\n    <\/article>\n    \n    <!-- ========== PERCUSIN (5) ========== -->\n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"percusion\" data-artista=\"lolo\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Lolo_000.jpg\" \n             alt=\"Lolo, percusionista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">L<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Lolo<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Percusi\u00f3n<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"percusion\" data-artista=\"tobalo\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Tobalo_000.jpg\" \n             alt=\"Tobalo, percusionista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">T<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Tobalo<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Percusi\u00f3n<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"percusion\" data-artista=\"paco-percusion\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Paco-Vega.jpeg\" \n             alt=\"Paco, percusionista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">P<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Paco<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Percusi\u00f3n<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"percusion\" data-artista=\"mode\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Mode_000.jpg\" \n             alt=\"Mode, percusionista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">M<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Mode<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Percusi\u00f3n<\/span>\n    <\/article>\n    \n    <article class=\"tfs-artista-card\" itemscope itemtype=\"https:\/\/schema.org\/Person\" data-categoria=\"percusion\" data-artista=\"javi\">\n      <span class=\"tfs-artista-card__badge-hoy\">Hoy<\/span>\n      <div class=\"tfs-artista-card__img-wrap\">\n        <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/spcdn.shortpixel.ai\/spio\/ret_img,q_cdnize,to_auto,s_webp:avif\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Javier-Teruel.jpeg\" \n             alt=\"Javi, percusionista\" class=\"tfs-artista-card__img\" itemprop=\"image\" width=\"400\" height=\"400\" loading=\"lazy\">\n        <span class=\"tfs-artista-card__inicial\">J<\/span>\n      <\/div>\n      <h3 class=\"tfs-artista-card__nombre\" itemprop=\"name\">Javi<\/h3>\n      <span class=\"tfs-artista-card__categoria\" itemprop=\"jobTitle\">Percusi\u00f3n<\/span>\n    <\/article>\n    \n  <\/div>\n  \n  <!-- Botones Ver M\u00e1s \/ Ver Menos -->\n  <div class=\"tfs-artistas__ver-mas-wrap\">\n    <button class=\"tfs-artistas__ver-mas\" id=\"tfsVerMasBtn\">\n      Ver todos los artistas\n    <\/button>\n    <button class=\"tfs-artistas__ver-menos oculto\" id=\"tfsVerMenosBtn\">\n      Ver menos\n    <\/button>\n  <\/div>\n<\/section>\n\n<!-- =====================================================\n     MODAL ARTISTA - FUERA DEL CONTENEDOR PRINCIPAL\n     ===================================================== -->\n<div class=\"tfs-modal-overlay\" id=\"tfsModalOverlay\" aria-hidden=\"true\">\n  <div class=\"tfs-modal-content\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"tfs-modal-nombre\">\n    \n    <!-- BOT\u00d3N CERRAR - Bien visible -->\n    <button class=\"tfs-modal-close\" type=\"button\" id=\"tfsModalClose\" aria-label=\"Cerrar modal\">\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" aria-hidden=\"true\">\n        <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"><\/line>\n        <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"><\/line>\n      <\/svg>\n    <\/button>\n    \n    <div class=\"tfs-modal__img-wrap\" id=\"tfsModalImgWrap\">\n      <img decoding=\"async\" src=\"\" alt=\"\" class=\"tfs-modal__img\" id=\"tfsModalImg\">\n      <span class=\"tfs-modal__inicial\" id=\"tfsModalInicial\"><\/span>\n    <\/div>\n    \n    <div class=\"tfs-modal__info\">\n      <span class=\"tfs-modal__categoria\" id=\"tfsModalCategoria\"><\/span>\n      <h3 class=\"tfs-modal__nombre\" id=\"tfsModalNombre\"><\/h3>\n      <p class=\"tfs-modal__bio\" id=\"tfsModalBio\"><\/p>\n      <ul class=\"tfs-modal__premios\" id=\"tfsModalPremios\"><\/ul>\n      \n      <!-- SECCI\u00d3N: Pr\u00f3ximas actuaciones -->\n      <div class=\"tfs-modal__proximas\" id=\"tfsModalProximas\">\n        <h4 class=\"tfs-modal__proximas-title\"> PR\u00d3XIMAS ACTUACIONES<\/h4>\n        <div class=\"tfs-modal__proximas-loading\" id=\"tfsProximasLoading\">\n          <div class=\"spinner\"><\/div>\n          <p>Consultando programaci\u00f3n...<\/p>\n        <\/div>\n        <div class=\"tfs-modal__proximas-lista\" id=\"tfsProximasLista\"><\/div>\n        <p class=\"tfs-modal__proximas-vacio\" id=\"tfsProximasVacio\" style=\"display:none;\">\n          No hay actuaciones programadas en los pr\u00f3ximos 60 d\u00edas\n        <\/p>\n      <\/div>\n      \n      <div class=\"tfs-modal__cta\">\n        <a href=\"https:\/\/tablaoflamencolassetas.com\/entradas\/\" class=\"tfs-modal__cta-btn\" data-open-booking role=\"button\">\n          RESERVAR ENTRADAS\n        <\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- =====================================================\n     MODAL TURITOP\n     ===================================================== -->\n<div class=\"tfs-turitop-modal\" id=\"turitop-booking-modal\">\n  <div class=\"tfs-turitop-modal__box\">\n    <div class=\"tfs-turitop-modal__head\">\n      <h3 class=\"tfs-turitop-modal__title\">Reservar Entradas<\/h3>\n      <button type=\"button\" class=\"tfs-turitop-modal__close\" id=\"close-turitop-booking\">\n        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n          <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/>\n          <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/>\n        <\/svg>\n      <\/button>\n    <\/div>\n    <div class=\"tfs-turitop-modal__body\">\n      <div class=\"tfs-turitop-modal__loading\" id=\"turitop-modal-loading\">\n        <div class=\"tfs-turitop-modal__spinner\"><\/div>\n        <p>Cargando calendario...<\/p>\n      <\/div>\n      <div class=\"load-turitop\" data-service=\"P1\" data-lang=\"es\" data-embed=\"box\"><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- Script TuriTop -->\n<script src=\"https:\/\/app.turitop.com\/js\/load-turitop.min.js\" data-company=\"T1263\" data-buttoncolor=\"#C8102E\" defer><\/script>\n\n<!-- =====================================================\n     JAVASCRIPT v5.7 - SOLISTA\n     ===================================================== -->\n<script>\n(function() {\n  'use strict';\n  \n  \/\/ =====================================================\n  \/\/ EVITAR EJECUCIN MLTIPLE (clave para Elementor)\n  \/\/ =====================================================\n  if (window.__TFS_ARTISTAS_V54_INIT__) {\n    return;\n  }\n  window.__TFS_ARTISTAS_V54_INIT__ = true;\n  \n  \/\/ =====================================================\n  \/\/ CONFIGURACIN API\n  \/\/ =====================================================\n  const API_BASE = '\/wp-content\/themes\/astra-child\/api\/api-programacion.php';\n  \n  \/\/ Cache local para evitar llamadas repetidas\n  const cache = {\n    hoy: null,\n    hoyTimestamp: 0,\n    artistas: {}\n  };\n  const CACHE_TTL = 5 * 60 * 1000; \/\/ 5 minutos\n  \n  \/\/ =====================================================\n  \/\/ UTILIDADES DE FECHA\n  \/\/ =====================================================\n  function getFechaHoy() {\n    const d = new Date();\n    const dd = String(d.getDate()).padStart(2, '0');\n    const mm = String(d.getMonth() + 1).padStart(2, '0');\n    const yyyy = d.getFullYear();\n    return `${dd}-${mm}-${yyyy}`;\n  }\n  \n  function formatearFechaCorta(fechaYMD) {\n    \/\/ Acepta formato YYYY-MM-DD\n    const partes = fechaYMD.split('-');\n    if (partes.length !== 3) return fechaYMD;\n    \n    const y = parseInt(partes[0], 10);\n    const m = parseInt(partes[1], 10);\n    const d = parseInt(partes[2], 10);\n    \n    const fecha = new Date(y, m - 1, d);\n    const dias = ['Dom', 'Lun', 'Mar', 'Mi\u00e9', 'Jue', 'Vie', 'S\u00e1b'];\n    const meses = ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'];\n    return `${dias[fecha.getDay()]} ${d} ${meses[m - 1]}`;\n  }\n  \n  function esHoy(fechaYMD) {\n    const hoy = new Date();\n    const partes = fechaYMD.split('-');\n    if (partes.length !== 3) return false;\n    \n    const y = parseInt(partes[0], 10);\n    const m = parseInt(partes[1], 10);\n    const d = parseInt(partes[2], 10);\n    \n    return hoy.getFullYear() === y && (hoy.getMonth() + 1) === m && hoy.getDate() === d;\n  }\n  \n  \/\/ =====================================================\n  \/\/ LLAMADAS A LA API\n  \/\/ =====================================================\n  async function fetchProgramacionHoy() {\n    const now = Date.now();\n    if (cache.hoy && (now - cache.hoyTimestamp) < CACHE_TTL) {\n      return cache.hoy;\n    }\n    \n    try {\n      const fecha = getFechaHoy();\n      const controller = new AbortController();\n      const timeoutId = setTimeout(() => controller.abort(), 8000);\n      const response = await fetch(`${API_BASE}?action=dia&fecha=${fecha}`, { signal: controller.signal });\n      clearTimeout(timeoutId);\n      const data = await response.json();\n      \n      if (data.success) {\n        cache.hoy = data;\n        cache.hoyTimestamp = now;\n      }\n      \n      return data;\n    } catch (error) {\n      return { success: false, error: error.name === 'AbortError' ? 'Tiempo de espera agotado' : error.message };\n    }\n  }\n  \n  async function fetchProximasArtista(artistaId) {\n    const now = Date.now();\n    const cached = cache.artistas[artistaId];\n    if (cached && (now - cached.timestamp) < CACHE_TTL) {\n      return cached.data;\n    }\n    \n    try {\n      const controller = new AbortController();\n      const timeoutId = setTimeout(() => controller.abort(), 8000);\n      const response = await fetch(`${API_BASE}?action=buscar&artista=${encodeURIComponent(artistaId)}&dias=60`, { signal: controller.signal });\n      clearTimeout(timeoutId);\n      const data = await response.json();\n      \n      if (data.success) {\n        cache.artistas[artistaId] = { data, timestamp: now };\n      }\n      \n      return data;\n    } catch (error) {\n      return { success: false, error: error.name === 'AbortError' ? 'Tiempo de espera agotado' : error.message };\n    }\n  }\n  \n  \/\/ =====================================================\n  \/\/ DATOS DE ARTISTAS (BIOGRAF\u00cdAS)\n  \/\/ =====================================================\n  const artistasData = {\n    'manuel-montes': { nombre: 'Manuel Montes', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Manuel-Montes_000.jpg', bio: 'Bailaor cordob\u00e9s. Entre 2019 y 2022 form\u00f3 parte del prestigioso Ballet Flamenco de Andaluc\u00eda.', premios: ['Ballet Flamenco de Andaluc\u00eda (2019-2022)'] },\n    'el-yiyo': { nombre: 'El Yiyo', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Yiyo_000.jpg', bio: 'Nacido en Badalona en 1996. A los 7 a\u00f1os realiz\u00f3 su primera gira internacional.', premios: ['Debut Teatro Real de Madrid (2020)', 'Flamenco Real (2024)'] },\n    'miguel-rubio': { nombre: 'Miguel Rubio', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Miguel-Rubio_000.jpg', bio: 'Bailaor sevillano. Ha trabajado con Roc\u00edo Molina, Remedios Amaya y Pastora Galv\u00e1n.', premios: ['Premio J\u00f3venes Flamencos - Bienal de Sevilla (2008)'] },\n    'juan-tomas': { nombre: 'Juan Tom\u00e1s', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Juan-Tomas_000.jpg', bio: 'Nacido en Trebujena (C\u00e1diz) en 2000. Desde 2022 forma parte del Ballet Flamenco de Andaluc\u00eda.', premios: ['1\u00ba Premio Baile - Concurso Nacional C\u00f3rdoba (2022)'] },\n    'polito': { nombre: 'Polito', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Polito_000.jpg', bio: 'Bailaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'juan-jose-villar': { nombre: 'Juan Jos\u00e9 Villar', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Juan-Jose-villar_000.jpg', bio: 'Nacido en C\u00e1diz en 1996. Nieto del legendario cantaor Juanito Villar.', premios: ['1\u00ba Premio Nacional Tablao Las Carboneras (2016)'] },\n    'jose-maya': { nombre: 'Jos\u00e9 Maya', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Jose-Maya_000.jpg', bio: 'Nacido en Madrid en 1983. Desde 2007 es miembro del sexteto de Tomatito.', premios: ['Premio Copa Pav\u00f3n (1998)', 'Premio Mejor Bailar\u00edn - Teatro Alb\u00e9niz (2000)'] },\n    'el-choro': { nombre: 'El Choro', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Choro_000.jpg', bio: 'Nacido en Huelva en 1985. Formado con Javier Latorre, Israel Galv\u00e1n y Antonio Canales.', premios: ['Premio Artista Revelaci\u00f3n - Festival de Jerez (2016)'] },\n    'el-farru': { nombre: 'El Farru', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Farru_000.jpg', bio: 'Nacido en Sevilla en 1988, hermano de Farruquito y nieto del legendario Farruco.', premios: ['City Center de Nueva York', 'Sadler\\'s Wells de Londres'] },\n    'el-carpeta': { nombre: 'El Carpeta', categoria: 'Solista', imagen: '', bio: 'Bailaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'pepe-torres': { nombre: 'Pepe Torres', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Pepe-Torres_000.jpg', bio: 'Nacido en Mor\u00f3n de la Frontera en 1978. Nieto del cantaor \"Joselero de Mor\u00f3n\".', premios: ['Nominaci\u00f3n Grammy Latino con Son de la Frontera'] },\n    'juan-de-juan': { nombre: 'Juan de Juan', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Juan-de-Juan_000.jpg', bio: 'Nacido en Sevilla en 1979. A los 16 a\u00f1os se convirti\u00f3 en primer bailar\u00edn de Antonio Canales.', premios: ['City Center de Nueva York', 'Champs Elys\u00e9es de Par\u00eds'] },\n    'el-tete': { nombre: 'El Tete', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Tete_000.jpg', bio: 'Nacido en Badalona en 2000. Hermano menor de El Yiyo.', premios: [] },\n    'lole-de-los-reyes': { nombre: 'Lole de los Reyes', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Lole-de-los-Reyes_000.jpg', bio: 'Bailaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'agueda-saavedra': { nombre: '\u00c1gueda Saavedra', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Agueda_000.jpg', bio: 'Bailaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'belen-lopez': { nombre: 'Bel\u00e9n L\u00f3pez', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Belen-Lopez_000.jpg', bio: 'Nacida en Tarragona en 1986. Primera bailarina en la Arena di Verona (2000-2004).', premios: ['Premio Nacional Mario Maya (2004)', 'Premio Desplante - La Uni\u00f3n (2016)'] },\n    'nazaret': { nombre: 'Nazaret', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Nazaret-reyes_000.jpg', bio: 'Bailaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'noemi-ferrer': { nombre: 'Noem\u00ed Ferrer', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Naomi-Ferrer_000.jpg', bio: 'Bailaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'zaira': { nombre: 'Zaira', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Zaira-Prudencio_000.jpg', bio: 'Bailaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'florencia': { nombre: 'Florencia', categoria: 'Solista', imagen: '', bio: 'Bailaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'gema-moneo': { nombre: 'Gema Moneo', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Gema-Moneo_000.jpg', bio: 'Bailaora jerezana de la familia Los Moneo.', premios: ['Premio Artista Revelaci\u00f3n - Festival de Jerez (2018)'] },\n    'yaiza': { nombre: 'Yaiza', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/yaiza_000.jpg', bio: 'Bailaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'la-moneta': { nombre: 'La Moneta', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/La-Moneta_000.jpg', bio: 'Nacida en Granada en 1984. Formada con Mario Maya, Matilde Coral e Israel Galv\u00e1n.', premios: ['Premio Desplante - La Uni\u00f3n (2003)', 'Premio Flamenco Hoy (2009)'] },\n    'karime-amaya': { nombre: 'Karime Amaya', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Karime-Amaya_000.jpg', bio: 'Nacida en M\u00e9xico en 1985. Sobrina-nieta de Carmen Amaya.', premios: ['Premio Artista Revelaci\u00f3n - Festival de Jerez (2013)'] },\n    'manuela-vargas': { nombre: 'Manuela Vargas', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Manuela-Vargas_000.jpg', bio: 'Hija de Isidro Vargas y sobrina de Angelita Vargas.', premios: ['Bienal de Sevilla', 'Festival Internacional Mont-de-Marsan'] },\n    'alba-heredia': { nombre: 'Alba Heredia', categoria: 'Solista', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Alba-Heredia_000.jpg', bio: 'Bailaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'miguel-rosendo': { nombre: 'Miguel Rosendo', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Rosendo_000.jpg', bio: 'Cantaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'kini': { nombre: 'Kini', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Kini-de-Jerez_000.jpg', bio: 'Cantaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'rubio-de-pruna': { nombre: 'Rubio de Pruna', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Rubio_000.jpg', bio: 'Cantaor. Fue el \u00faltimo cantaor de Paco de Luc\u00eda.', premios: ['ltimo cantaor de Paco de Luc\u00eda'] },\n    'manuel-de-la-nina': { nombre: 'Manuel de la Ni\u00f1a', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Manuel-de-Nina_000.jpg', bio: 'Cantaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'lavi': { nombre: 'Lavi', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/miguel-Lavi_000.jpg', bio: 'Cantaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'ezequiel-montoya': { nombre: 'Ezequiel Montoya', categoria: 'Cante', imagen: '', bio: 'Cantaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'ivan-carpio': { nombre: 'Iv\u00e1n Carpio', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Carpio_000.jpg', bio: 'Cantaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'galli': { nombre: 'Galli', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/El-Galli.jpeg', bio: 'Cantaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'pepe-de-pura': { nombre: 'Pepe de Pura', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Pepe-pura_000.jpg', bio: 'Cantaor del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'reyes-martin': { nombre: 'Reyes Mart\u00edn', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Reyes-Martin_000.jpg', bio: 'Cantaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'mai-fernandez': { nombre: 'Mai Fern\u00e1ndez', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Mai_000.jpg', bio: 'Cantaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'cristina-tovar': { nombre: 'Cristina Tovar', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Cristina-Tovar_000.jpg', bio: 'Cantaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'la-tana': { nombre: 'La Tana', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/La-Tana_000.jpg', bio: 'Nacida en Sevilla en 1973. Paco de Luc\u00eda la fich\u00f3 como voz protagonista del \u00e1lbum \"Cositas buenas\" (2004).', premios: ['Voz principal \"Cositas buenas\" de Paco de Luc\u00eda (2004)'] },\n    'mara-rey': { nombre: 'Mara Rey', categoria: 'Cante', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Mara-Rey_000.jpg', bio: 'Cantaora del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'perla': { nombre: 'Perla', categoria: 'Guitarra', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/El-Perla.jpeg', bio: 'Guitarrista del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'eugenio': { nombre: 'Eugenio', categoria: 'Guitarra', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Eugenio-Iglesias_000.jpg', bio: 'Guitarrista del cuadro flamenco del Tablao Las Setas. Hermano de Paco Iglesias.', premios: [] },\n    'tudela': { nombre: 'Tudela', categoria: 'Guitarra', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Tudela_000.jpg', bio: 'Guitarrista del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'paco-iglesias': { nombre: 'Paco Iglesias', categoria: 'Guitarra', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Paco-Iglesias_000.jpg', bio: 'Nacido en Sevilla en 1978. Sobrino nieto de Melchor de Marchena.', premios: ['Bienal de J\u00f3venes (2004)', 'Espect\u00e1culo \"Iglesias\" - Bienal de Sevilla (2012)'] },\n    'ramon-amador': { nombre: 'Ram\u00f3n Amador', categoria: 'Guitarra', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Ramon-Amador_000.jpg', bio: 'Guitarrista de la familia Amador.', premios: [] },\n    'luis-amador': { nombre: 'Luis Amador', categoria: 'Guitarra', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Luis-Amador_000.jpg', bio: 'Guitarrista de la familia Amador.', premios: [] },\n    'lolo': { nombre: 'Lolo', categoria: 'Percusi\u00f3n', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Lolo_000.jpg', bio: 'Percusionista del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'tobalo': { nombre: 'Tobalo', categoria: 'Percusi\u00f3n', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Tobalo_000.jpg', bio: 'Percusionista del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'paco-percusion': { nombre: 'Paco', categoria: 'Percusi\u00f3n', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Paco-Vega.jpeg', bio: 'Percusionista del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'mode': { nombre: 'Mode', categoria: 'Percusi\u00f3n', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Mode_000.jpg', bio: 'Percusionista del cuadro flamenco del Tablao Las Setas.', premios: [] },\n    'javi': { nombre: 'Javi', categoria: 'Percusi\u00f3n', imagen: 'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2026\/01\/Javier-Teruel.jpeg', bio: 'Percusionista del cuadro flamenco del Tablao Las Setas.', premios: [] }\n  };\n  \n  \/\/ =====================================================\n  \/\/ ESTADO GLOBAL\n  \/\/ =====================================================\n  let artistasHoy = [];\n  let datosHoy = null;\n  \n  \/\/ =====================================================\n  \/\/ INICIALIZACIN\n  \/\/ =====================================================\n  function init() {\n    const grid = document.getElementById('tfsArtistasGrid');\n    const modal = document.getElementById('tfsModalOverlay');\n    const closeBtn = document.getElementById('tfsModalClose');\n    const verMasBtn = document.getElementById('tfsVerMasBtn');\n    const verMenosBtn = document.getElementById('tfsVerMenosBtn');\n    const filtros = document.querySelectorAll('.tfs-artistas__filtro');\n    const cards = document.querySelectorAll('.tfs-artista-card');\n    const filterHoy = document.getElementById('tfsFilterHoy');\n    const hoyInfo = document.getElementById('tfsHoyInfo');\n    \n    if (!grid || !modal) {\n      return;\n    }\n    \n    const LIMITE_INICIAL = 12;\n    let filtroActual = 'todos';\n    let expandido = false;\n    \n    \/\/ =====================================================\n    \/\/ CARGAR PROGRAMACIN DE HOY AL INICIO\n    \/\/ =====================================================\n    async function cargarProgramacionHoy() {\n      if (!filterHoy) return;\n      filterHoy.classList.add('cargando');\n      \n      try {\n        const data = await fetchProgramacionHoy();\n        \n        if (data.success && data.publicado && data.artistas && data.artistas.length > 0) {\n          datosHoy = data;\n          artistasHoy = data.artistas.map(a => a.id);\n          \n          cards.forEach(card => {\n            const id = card.dataset.artista;\n            if (artistasHoy.includes(id)) {\n              card.classList.add('actua-hoy');\n            }\n          });\n          \n          const hoyFechaEl = document.getElementById('tfsHoyFecha');\n          const hoyTotalEl = document.getElementById('tfsHoyTotal');\n          if (hoyFechaEl) hoyFechaEl.textContent = `${data.dia_semana} ${data.fecha.split('-').reverse().join('\/')}`;\n          if (hoyTotalEl) hoyTotalEl.textContent = data.total_artistas;\n          \n          filterHoy.classList.remove('sin-datos');\n        } else {\n          filterHoy.classList.add('sin-datos');\n          filterHoy.title = 'No hay programaci\u00f3n publicada para hoy';\n        }\n      } catch (error) {\n        filterHoy.classList.add('sin-datos');\n      }\n      \n      filterHoy.classList.remove('cargando');\n    }\n    \n    cargarProgramacionHoy();\n    \n    \/\/ =====================================================\n    \/\/ SISTEMA DE FILTRADO\n    \/\/ =====================================================\n    function actualizarVisibilidad() {\n      let visibles = 0;\n      let total = 0;\n      let ocultadasPorLimite = 0;\n      \n      cards.forEach(card => {\n        const categoria = card.dataset.categoria;\n        const artistaId = card.dataset.artista;\n        let pasaFiltro = false;\n        \n        if (filtroActual === 'todos') {\n          pasaFiltro = true;\n        } else if (filtroActual === 'hoy') {\n          pasaFiltro = artistasHoy.includes(artistaId);\n        } else {\n          pasaFiltro = categoria === filtroActual;\n        }\n        \n        if (pasaFiltro) {\n          total++;\n          const categoriaTotalMasDe12 = contarFiltro(filtroActual) > LIMITE_INICIAL;\n          \n          if (!expandido && categoriaTotalMasDe12 && visibles >= LIMITE_INICIAL) {\n            card.classList.add('oculto');\n            ocultadasPorLimite++;\n          } else {\n            card.classList.remove('oculto');\n            visibles++;\n          }\n        } else {\n          card.classList.add('oculto');\n        }\n      });\n      \n      const countVisible = document.getElementById('tfs-count-visible');\n      const countTotal = document.getElementById('tfs-count-total');\n      if (countVisible) countVisible.textContent = visibles;\n      if (countTotal) countTotal.textContent = total;\n      \n      if (hoyInfo) {\n        if (filtroActual === 'hoy' && datosHoy) {\n          hoyInfo.classList.add('visible');\n        } else {\n          hoyInfo.classList.remove('visible');\n        }\n      }\n      \n      const filtroTieneMas = contarFiltro(filtroActual) > LIMITE_INICIAL;\n      \n      if (!expandido && filtroTieneMas && ocultadasPorLimite > 0) {\n        if (verMasBtn) {\n          verMasBtn.textContent = `Ver los ${total} artistas`;\n          verMasBtn.classList.remove('oculto');\n        }\n        if (verMenosBtn) verMenosBtn.classList.add('oculto');\n      } else if (expandido && filtroTieneMas) {\n        if (verMasBtn) verMasBtn.classList.add('oculto');\n        if (verMenosBtn) verMenosBtn.classList.remove('oculto');\n      } else {\n        if (verMasBtn) verMasBtn.classList.add('oculto');\n        if (verMenosBtn) verMenosBtn.classList.add('oculto');\n      }\n    }\n    \n    function contarFiltro(filtro) {\n      let count = 0;\n      cards.forEach(card => {\n        if (filtro === 'todos') {\n          count++;\n        } else if (filtro === 'hoy') {\n          if (artistasHoy.includes(card.dataset.artista)) count++;\n        } else if (card.dataset.categoria === filtro) {\n          count++;\n        }\n      });\n      return count;\n    }\n    \n    \/\/ =====================================================\n    \/\/ EVENTOS DE FILTROS\n    \/\/ =====================================================\n    filtros.forEach(btn => {\n      btn.addEventListener('click', function() {\n        if (btn.dataset.filtro === 'hoy' && btn.classList.contains('sin-datos')) {\n          return;\n        }\n        \n        filtros.forEach(b => {\n          b.classList.remove('activo');\n          b.setAttribute('aria-checked', 'false');\n        });\n        btn.classList.add('activo');\n        btn.setAttribute('aria-checked', 'true');\n        \n        filtroActual = btn.dataset.filtro;\n        expandido = false;\n        actualizarVisibilidad();\n      });\n    });\n    \n    if (verMasBtn) {\n      verMasBtn.addEventListener('click', () => {\n        expandido = true;\n        actualizarVisibilidad();\n      });\n    }\n    \n    if (verMenosBtn) {\n      verMenosBtn.addEventListener('click', () => {\n        expandido = false;\n        actualizarVisibilidad();\n        const header = document.querySelector('.tfs-artistas__header');\n        if (header) header.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      });\n    }\n    \n    \/\/ =====================================================\n    \/\/ MODAL\n    \/\/ =====================================================\n    let lastFocusedElement = null;\n    \n    function trapFocus(e) {\n      if (!modal || !modal.classList.contains('activo')) return;\n      const focusable = modal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])');\n      if (!focusable.length) return;\n      const first = focusable[0];\n      const last = focusable[focusable.length - 1];\n      if (e.shiftKey && document.activeElement === first) {\n        e.preventDefault();\n        last.focus();\n      } else if (!e.shiftKey && document.activeElement === last) {\n        e.preventDefault();\n        first.focus();\n      }\n    }\n    \n    async function abrirModal(artistaId) {\n      lastFocusedElement = document.activeElement;\n      const data = artistasData[artistaId];\n      if (!data) {\n        return;\n      }\n      \n      const imgWrap = document.getElementById('tfsModalImgWrap');\n      const img = document.getElementById('tfsModalImg');\n      const inicial = document.getElementById('tfsModalInicial');\n      const proximasLoading = document.getElementById('tfsProximasLoading');\n      const proximasLista = document.getElementById('tfsProximasLista');\n      const proximasVacio = document.getElementById('tfsProximasVacio');\n      \n      \/\/ Imagen\n      if (data.imagen) {\n        if (imgWrap) imgWrap.classList.remove('sin-foto');\n        if (img) {\n          img.src = data.imagen;\n          img.alt = data.nombre;\n        }\n      } else {\n        if (imgWrap) imgWrap.classList.add('sin-foto');\n        if (img) img.src = '';\n        if (inicial) inicial.textContent = data.nombre.charAt(0);\n      }\n      \n      const nombreEl = document.getElementById('tfsModalNombre');\n      const categoriaEl = document.getElementById('tfsModalCategoria');\n      const bioEl = document.getElementById('tfsModalBio');\n      \n      if (nombreEl) nombreEl.textContent = data.nombre;\n      if (categoriaEl) categoriaEl.textContent = data.categoria;\n      if (bioEl) bioEl.textContent = data.bio;\n      \n      \/\/ Premios\n      const premiosList = document.getElementById('tfsModalPremios');\n      if (premiosList) {\n        premiosList.innerHTML = '';\n        if (data.premios && data.premios.length > 0) {\n          data.premios.forEach(premio => {\n            const li = document.createElement('li');\n            li.textContent = premio;\n            premiosList.appendChild(li);\n          });\n          premiosList.style.display = 'block';\n        } else {\n          premiosList.style.display = 'none';\n        }\n      }\n      \n      \/\/ =====================================================\n      \/\/ RESET PR\u00d3XIMAS ACTUACIONES - CR\u00cdTICO\n      \/\/ =====================================================\n      if (proximasLoading) proximasLoading.style.display = 'block';\n      if (proximasLista) proximasLista.innerHTML = ''; \/\/  LIMPIAR ANTES\n      if (proximasVacio) proximasVacio.style.display = 'none';\n      \n      \/\/ Abrir modal\n      modal.classList.add('activo');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.style.overflow = 'hidden';\n      history.pushState({ modalOpen: true }, '');\n      \n      \/\/ =====================================================\n      \/\/ CARGAR PR\u00d3XIMAS ACTUACIONES\n      \/\/ =====================================================\n      try {\n        const proximas = await fetchProximasArtista(artistaId);\n        if (proximasLoading) proximasLoading.style.display = 'none';\n        \n        if (proximas.success && proximas.fechas && proximas.fechas.length > 0) {\n          \n          \/\/ =====================================================\n          \/\/ v5.7: DEDUPLICACIN ROBUSTA\n          \/\/ =====================================================\n          const fechasUnicas = [];\n          const fechasVistas = new Set();\n          \n          \n          proximas.fechas.forEach(f => {\n            \/\/ Normalizar: trim y asegurar string\n            const fechaKey = (f.fecha || '').toString().trim();\n            \n            if (fechaKey && !fechasVistas.has(fechaKey)) {\n              fechasVistas.add(fechaKey);\n              fechasUnicas.push(f);\n            }\n          });\n          \n          \n          \/\/  CR\u00cdTICO: LIMPIAR JUSTO ANTES DE AADIR \n          \/\/ Esto evita duplicados si el c\u00f3digo se ejecuta 2 veces\n          if (proximasLista) proximasLista.innerHTML = '';\n          \n          \/\/ Mostrar m\u00e1ximo 6 fechas \u00fanicas\n          fechasUnicas.slice(0, 6).forEach(f => {\n            const span = document.createElement('span');\n            span.className = 'tfs-modal__proximas-fecha';\n            if (esHoy(f.fecha)) {\n              span.classList.add('es-hoy');\n              span.innerHTML = `<span class=\"dia\">\u00a1HOY!<\/span>`;\n            } else {\n              span.innerHTML = `<span class=\"dia\">${formatearFechaCorta(f.fecha)}<\/span>`;\n            }\n            proximasLista.appendChild(span);\n          });\n          \n          if (fechasUnicas.length > 6) {\n            const mas = document.createElement('span');\n            mas.className = 'tfs-modal__proximas-fecha';\n            mas.textContent = `+${fechasUnicas.length - 6} m\u00e1s`;\n            proximasLista.appendChild(mas);\n          }\n        } else {\n          if (proximasVacio) proximasVacio.style.display = 'block';\n        }\n      } catch (error) {\n        if (proximasLoading) proximasLoading.style.display = 'none';\n        if (proximasVacio) {\n          proximasVacio.textContent = 'Error al cargar programaci\u00f3n';\n          proximasVacio.style.display = 'block';\n        }\n      }\n      \n      setTimeout(() => { if (closeBtn) closeBtn.focus(); }, 100);\n      document.addEventListener('keydown', trapFocus);\n    }\n    \n    function cerrarModal() {\n      modal.classList.remove('activo');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.style.overflow = '';\n      document.removeEventListener('keydown', trapFocus);\n      if (lastFocusedElement) {\n        lastFocusedElement.focus();\n        lastFocusedElement = null;\n      }\n    }\n    \n    \/\/ Click en tarjetas\n    grid.addEventListener('click', e => {\n      const card = e.target.closest('.tfs-artista-card');\n      if (card && card.dataset.artista) {\n        e.preventDefault();\n        abrirModal(card.dataset.artista);\n      }\n    });\n    \n    \/\/ Cerrar modal\n    if (closeBtn) {\n      closeBtn.addEventListener('click', e => { \n        e.preventDefault(); \n        e.stopPropagation();\n        cerrarModal(); \n      });\n    }\n    \n    modal.addEventListener('click', e => { \n      if (e.target === modal) cerrarModal(); \n    });\n    \n    document.addEventListener('keydown', e => { \n      if (e.key === 'Escape' && modal.classList.contains('activo')) cerrarModal(); \n    });\n    \n    \/\/ Back button cierra modal en mvil\n    window.addEventListener('popstate', () => {\n      if (modal.classList.contains('activo')) cerrarModal();\n    });\n    \n    \/\/ =====================================================\n    \/\/ MODAL TURITOP\n    \/\/ =====================================================\n    const turitopModal = document.getElementById('turitop-booking-modal');\n    const closeTuritopBtn = document.getElementById('close-turitop-booking');\n    const turitopLoading = document.getElementById('turitop-modal-loading');\n    \n    function abrirTuritopModal() {\n      if (!turitopModal) return;\n      turitopModal.classList.add('open');\n      document.body.style.overflow = 'hidden';\n      if (turitopLoading) setTimeout(() => turitopLoading.style.display = 'none', 2500);\n    }\n    \n    function cerrarTuritopModal() {\n      if (!turitopModal) return;\n      turitopModal.classList.remove('open');\n      document.body.style.overflow = '';\n    }\n    \n    if (closeTuritopBtn) {\n      closeTuritopBtn.addEventListener('click', e => { \n        e.preventDefault(); \n        cerrarTuritopModal(); \n      });\n    }\n    \n    if (turitopModal) {\n      turitopModal.addEventListener('click', e => { \n        if (e.target === turitopModal) cerrarTuritopModal(); \n      });\n    }\n    \n    document.addEventListener('keydown', e => { \n      if (e.key === 'Escape' && turitopModal && turitopModal.classList.contains('open')) {\n        cerrarTuritopModal(); \n      }\n    });\n    \n    \/\/ Bot\u00f3n RESERVAR\n    document.querySelectorAll('[data-open-booking]').forEach(btn => {\n      btn.addEventListener('click', e => {\n        e.preventDefault();\n        cerrarModal();\n        setTimeout(abrirTuritopModal, 150);\n      });\n    });\n    \n    \/\/ Inicializar\n    actualizarVisibilidad();\n  }\n  \n  \/\/ =====================================================\n  \/\/ EJECUTAR INICIALIZACIN\n  \/\/ =====================================================\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    setTimeout(init, 50);\n  }\n  \n  \/\/ Compatibilidad con jQuery\/Elementor\n  if (typeof jQuery !== 'undefined') {\n    jQuery(document).ready(() => setTimeout(init, 100));\n  }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-eb1cea7 e-con-full e-flex e-con e-parent\" data-id=\"eb1cea7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f0c8e07 elementor-widget elementor-widget-html\" data-id=\"f0c8e07\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================\n     P\u00c1GINA ARTISTAS - M4: CTA FINAL - SIN DORADO\n     =====================================================\n     \n     VERSI\u00d3N: 2.2 - AUDITOR\u00cdA PREPRODUCCI\u00d3N\n     FECHA: 10 Febrero 2026\n     \n     CAMBIOS v2.2 (Auditor\u00eda preproducci\u00f3n completa):\n     \n     \ud83d\udd34 CR\u00cdTICOS CORREGIDOS:\n     \u2705 Schema: Eliminado Event wrapper con startDate est\u00e1tico\n        \u2192 Reemplazado por schema Offer + Place (sin fecha que caduque)\n        \u2192 El Schema Event completo va en \/espectaculo\/ (p\u00e1gina dedicada)\n     \u2705 Schema description: A\u00f1adido \"sin descanso\" y \"4 pases diarios\"\n     \u2705 font-weight: 600 en <strong> \u2192 400 (GT America Regular existe, 600 no)\n     \n     \ud83d\udfe1 MODERADOS CORREGIDOS:\n     \u2705 A\u00f1adido inLanguage al schema\n     \u2705 aria-controls condicionado con comentario de dependencia\n     \u2705 data-open-booking=\"true\" (valor expl\u00edcito)\n     \u2705 Mobile: a\u00f1adido gap 8px entre info items apilados\n     \u2705 Eliminada variable CSS muerta --tfs-cta-text (nunca referenciada)\n     \u2705 itemprop=\"alternateName\" eliminado del H2 (sem\u00e1nticamente incorrecto)\n     \n     \ud83d\udd35 OPTIMIZACIONES:\n     \u2705 min-height: max(50vh, 400px) para pantallas ultrawide\n     \u2705 text-wrap: balance en t\u00edtulo H2\n     \u2705 Disclaimer: \"seg\u00fan temporada\" en vez de \"seg\u00fan fecha\"\n     \u2705 Comentario de preload para imagen de fondo\n     \u2705 Schema reducido a Offer + Place (evita duplicar Event con \/espectaculo\/)\n     \n     MANTIENE v2.1:\n     - Tipograf\u00eda: Canela Light \u00b7 GT America Light\/Regular\n     - Paleta sin dorado (GUIA-PALETA-SIN-DORADO.md)\n     - Fondo: VIVE-3-scaled.jpg\n     - Horarios: 18:00h \u00b7 19:30h \u00b7 21:00h \u00b7 22:30h\n     - Duraci\u00f3n: 60 minutos (sin descanso)\n     - WCAG 2.1 AA compliant\n     - Todos los colores y efectos intactos\n     - Responsive completo\n     - Print, high contrast, reduced motion\n     \n     CONTRASTES VERIFICADOS:\n     - Blanco sobre overlay negro: 15.82:1 \u2713 AAA\n     - Bot\u00f3n blanco con texto negro: 15.82:1 \u2713 AAA\n     - Crema sobre negro (hover): 12.89:1 \u2713 AAA\n     \n     DEPENDENCIAS:\n     - El bot\u00f3n \"Reservar Entradas\" requiere que el modal TuriTop\n       tenga id=\"turitop-booking-modal\" en el DOM.\n       Si no existe, el fallback navega a \/horarios-y-precios\/\n     \n     PRELOAD RECOMENDADO (a\u00f1adir en <head> de la p\u00e1gina):\n     <link rel=\"preload\" as=\"image\" href=\"https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/VIVE-3-scaled.jpg\">\n     \n     ===================================================== -->\n\n<style>\n\/* =====================================================\n   M4 CTA ARTISTAS - CSS v2.2 AUDITOR\u00cdA PREPRODUCCI\u00d3N\n   Tablao Flamenco Las Setas\n   \n   Tipograf\u00edas: Canela Light \u00b7 GT America Light\/Regular\n   Paleta: Rojo \u00b7 Blanco \u00b7 Negro (sin dorado)\n   ===================================================== *\/\n\n\/* --- CARGA DE FUENTES CUSTOM --- *\/\n@font-face {\n  font-family: 'Canela';\n  src: url('\/wp-content\/fonts\/canela-light.woff2') format('woff2'),\n       url('\/wp-content\/fonts\/canela-light.woff') format('woff');\n  font-weight: 300;\n  font-style: normal;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: 'GT America';\n  src: url('\/wp-content\/fonts\/gt-america-standard-light.woff2') format('woff2'),\n       url('\/wp-content\/fonts\/gt-america-standard-light.woff') format('woff');\n  font-weight: 300;\n  font-style: normal;\n  font-display: swap;\n}\n\n@font-face {\n  font-family: 'GT America';\n  src: url('\/wp-content\/fonts\/gt-america-standard-regular.woff2') format('woff2'),\n       url('\/wp-content\/fonts\/gt-america-standard-regular.woff') format('woff');\n  font-weight: 400;\n  font-style: normal;\n  font-display: swap;\n}\n\n\/* Reset y variables *\/\n.tfs-artistas-cta {\n  \/* Colores - SIN DORADO *\/\n  --tfs-cta-text-secondary: rgba(252, 226, 191, 0.85);\n  --tfs-cta-white: #FFFFFF;\n  --tfs-cta-cream: #FCE2BF;\n  --tfs-cta-dark: #1A1512;\n  --tfs-cta-red: #C8102E;\n  --tfs-cta-radius: 50px;\n  --tfs-cta-transition: 0.25s ease;\n  \n  \/* Tipograf\u00edas *\/\n  --tfs-font-hero: 'Canela', 'Playfair Display', Georgia, serif;\n  --tfs-font-nav: 'GT America', 'Work Sans', 'Helvetica Neue', sans-serif;\n  --tfs-font-body: 'GT America', 'Work Sans', 'Helvetica Neue', sans-serif;\n  \n  \/* Pesos *\/\n  --tfs-weight-light: 300;\n  --tfs-weight-regular: 400;\n  \n  \/* Letter spacing *\/\n  --tfs-ls-heading: -0.01em;\n  --tfs-ls-button: 0.12em;\n  --tfs-ls-body: 0.01em;\n\n  position: relative;\n  width: 100%;\n  min-height: max(50vh, 400px);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: clamp(60px, 10vw, 120px) 24px;\n  background-color: var(--tfs-cta-dark);\n  background-image: url('https://spcdn.shortpixel.ai/spio/ret_img,q_cdnize,to_auto,s_webp:avif/test.tablaoflamencolassetas.com/wp-content/uploads/2025/12/VIVE-3-scaled.jpg');\n  background-size: cover;\n  background-position: center;\n  background-repeat: no-repeat;\n  overflow: hidden;\n  box-sizing: border-box;\n}\n\n.tfs-artistas-cta *,\n.tfs-artistas-cta *::before,\n.tfs-artistas-cta *::after {\n  box-sizing: border-box;\n}\n\n\/* Overlay oscuro con gradiente mejorado *\/\n.tfs-artistas-cta::before {\n  content: '';\n  position: absolute;\n  inset: 0;\n  background: linear-gradient(\n    180deg,\n    rgba(26, 21, 18, 0.92) 0%,\n    rgba(26, 21, 18, 0.80) 50%,\n    rgba(26, 21, 18, 0.94) 100%\n  );\n  z-index: 1;\n}\n\n\/* Barra decorativa superior - blanca 25% opacidad *\/\n.tfs-artistas-cta::after {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 4px;\n  background: linear-gradient(90deg, \n    transparent 0%, \n    rgba(255, 255, 255, 0.25) 20%, \n    rgba(255, 255, 255, 0.25) 80%, \n    transparent 100%\n  );\n  z-index: 20;\n  pointer-events: none;\n}\n\n\/* Contenedor principal *\/\n.tfs-artistas-cta__container {\n  position: relative;\n  z-index: 2;\n  text-align: center;\n  max-width: 920px;\n  width: 100%;\n}\n\n\/* =====================================================\n   T\u00cdTULO H2 \u2192 Canela Light\n   \n   Seg\u00fan GUIA-TIPOGRAFICA-v3-DEFINITIVA.md:\n   - Canela Light funciona en todos los tama\u00f1os (\u226520px)\n   - NO requiere cambio a Playfair en mobile\n   ===================================================== *\/\n.tfs-artistas-cta__title {\n  font-family: var(--tfs-font-hero);\n  font-size: clamp(32px, 6.5vw, 56px);\n  font-weight: var(--tfs-weight-light);\n  letter-spacing: var(--tfs-ls-heading);\n  color: var(--tfs-cta-white);\n  margin: 0 0 14px 0;\n  padding: 0;\n  line-height: 1.15;\n  text-wrap: balance;\n  text-rendering: optimizeLegibility;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n\/* =====================================================\n   SUBT\u00cdTULO \u2192 GT America Regular\n   ===================================================== *\/\n.tfs-artistas-cta__subtitle {\n  font-family: var(--tfs-font-body);\n  font-size: clamp(16px, 2.4vw, 20px);\n  font-weight: var(--tfs-weight-regular);\n  letter-spacing: var(--tfs-ls-body);\n  color: var(--tfs-cta-text-secondary);\n  margin: 0 auto 34px auto;\n  padding: 0;\n  line-height: 1.65;\n  max-width: 68ch;\n}\n\n\/* GT America cargada en 300 y 400; usamos 400 para strong *\/\n.tfs-artistas-cta__subtitle strong {\n  color: var(--tfs-cta-white);\n  font-weight: var(--tfs-weight-regular);\n}\n\n\/* Contenedor de botones *\/\n.tfs-artistas-cta__buttons {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  gap: 16px;\n  margin-bottom: 24px;\n}\n\n\/* =====================================================\n   BOTONES \u2192 GT America Light\n   \n   Seg\u00fan GUIA-PALETA-SIN-DORADO.md secci\u00f3n 5:\n   Sobre fondo oscuro:\n   - Primario: Fondo BLANCO + texto NEGRO\n   - Secundario (ghost): Borde BLANCO + texto BLANCO\n   ===================================================== *\/\n\n\/* Estilos base de botones *\/\n.tfs-artistas-cta__btn {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  font-family: var(--tfs-font-nav);\n  font-size: 13px;\n  font-weight: var(--tfs-weight-light);\n  text-transform: uppercase;\n  letter-spacing: var(--tfs-ls-button);\n  text-decoration: none;\n  padding: 16px 34px;\n  min-height: 48px;\n  border-radius: var(--tfs-cta-radius);\n  border: 2px solid transparent;\n  transition: \n    transform var(--tfs-cta-transition), \n    box-shadow var(--tfs-cta-transition), \n    background-color var(--tfs-cta-transition), \n    border-color var(--tfs-cta-transition),\n    color var(--tfs-cta-transition);\n  cursor: pointer;\n  -webkit-tap-highlight-color: transparent;\n}\n\n\/* Bot\u00f3n primario: fondo BLANCO + texto NEGRO *\/\n.tfs-artistas-cta__btn--primary {\n  background: var(--tfs-cta-white);\n  color: var(--tfs-cta-dark);\n  border-color: var(--tfs-cta-white);\n  font-weight: var(--tfs-weight-light);\n}\n\n\/* Hover primario: fondo CREMA + texto NEGRO *\/\n.tfs-artistas-cta__btn--primary:hover,\n.tfs-artistas-cta__btn--primary:focus {\n  background: var(--tfs-cta-cream);\n  border-color: var(--tfs-cta-cream);\n  color: var(--tfs-cta-dark);\n  transform: translateY(-3px);\n  box-shadow: 0 12px 40px rgba(255, 255, 255, 0.25);\n}\n\n\/* Bot\u00f3n secundario (ghost): borde BLANCO *\/\n.tfs-artistas-cta__btn--secondary {\n  background: transparent;\n  color: var(--tfs-cta-white);\n  border-color: var(--tfs-cta-white);\n}\n\n\/* Hover secundario: inversi\u00f3n *\/\n.tfs-artistas-cta__btn--secondary:hover,\n.tfs-artistas-cta__btn--secondary:focus {\n  border-color: var(--tfs-cta-white);\n  background: var(--tfs-cta-white);\n  color: var(--tfs-cta-dark);\n}\n\n\/* Focus visible: blanco *\/\n.tfs-artistas-cta__btn:focus-visible {\n  outline: 3px solid var(--tfs-cta-white);\n  outline-offset: 4px;\n}\n\n\/* =====================================================\n   INFO LIST \u2192 GT America Regular\n   ===================================================== *\/\n.tfs-artistas-cta__info {\n  list-style: none;\n  padding: 0;\n  margin: 0 0 8px 0;\n  display: inline-flex;\n  flex-wrap: wrap;\n  justify-content: center;\n  align-items: center;\n  gap: 10px;\n  font-family: var(--tfs-font-body);\n  font-size: 14px;\n  font-weight: var(--tfs-weight-regular);\n  letter-spacing: var(--tfs-ls-body);\n  color: var(--tfs-cta-text-secondary);\n}\n\n.tfs-artistas-cta__info li {\n  margin: 0;\n  padding: 0;\n}\n\n\/* Separador decorativo: blanco *\/\n.tfs-artistas-cta__dot {\n  color: var(--tfs-cta-white);\n  opacity: 0.7;\n  font-size: 10px;\n}\n\n\/* =====================================================\n   DISCLAIMER \u2192 GT America Regular\n   ===================================================== *\/\n.tfs-artistas-cta__disclaimer {\n  font-family: var(--tfs-font-body);\n  font-size: 13px;\n  font-weight: var(--tfs-weight-regular);\n  letter-spacing: var(--tfs-ls-body);\n  font-style: italic;\n  color: rgba(252, 226, 191, 0.60);\n  margin: 10px 0 0 0;\n  padding: 0;\n}\n\n\/* =====================================================\n   RESPONSIVE\n   \n   NOTA: Ya NO hay cambio tipogr\u00e1fico en 768px\n   Canela Light funciona en todos los tama\u00f1os (\u226520px)\n   seg\u00fan GUIA-TIPOGRAFICA-v3-DEFINITIVA.md\n   ===================================================== *\/\n\n\/* Mobile *\/\n@media (max-width: 600px) {\n  .tfs-artistas-cta {\n    min-height: max(45vh, 380px);\n    padding: 50px 16px;\n  }\n\n  .tfs-artistas-cta__buttons {\n    flex-direction: column;\n    align-items: center;\n  }\n\n  .tfs-artistas-cta__btn {\n    width: 100%;\n    max-width: 340px;\n    padding: 18px 28px;\n  }\n\n  .tfs-artistas-cta__info {\n    flex-direction: column;\n    gap: 8px;\n  }\n\n  .tfs-artistas-cta__dot {\n    display: none;\n  }\n}\n\n\/* Tablets *\/\n@media (min-width: 601px) and (max-width: 900px) {\n  .tfs-artistas-cta {\n    min-height: max(48vh, 400px);\n  }\n}\n\n\/* Dispositivos sin hover (t\u00e1ctiles) *\/\n@media (hover: none) {\n  .tfs-artistas-cta__btn:hover {\n    transform: none;\n    box-shadow: none;\n  }\n  \n  .tfs-artistas-cta__btn:active {\n    transform: scale(0.98);\n  }\n}\n\n\/* Preferencia de movimiento reducido *\/\n@media (prefers-reduced-motion: reduce) {\n  .tfs-artistas-cta__btn {\n    transition: none;\n  }\n  \n  .tfs-artistas-cta__btn:hover,\n  .tfs-artistas-cta__btn:focus {\n    transform: none;\n  }\n}\n\n\/* Alto contraste *\/\n@media (prefers-contrast: high) {\n  .tfs-artistas-cta__subtitle {\n    color: var(--tfs-cta-white);\n  }\n  \n  .tfs-artistas-cta__info {\n    color: var(--tfs-cta-white);\n  }\n  \n  .tfs-artistas-cta__btn--secondary {\n    border-width: 3px;\n  }\n  \n  .tfs-artistas-cta__disclaimer {\n    color: rgba(255, 255, 255, 0.8);\n  }\n}\n\n\/* Print *\/\n@media print {\n  .tfs-artistas-cta {\n    background: #fff;\n    color: #000;\n    min-height: auto;\n    padding: 40px 20px;\n  }\n  \n  .tfs-artistas-cta::before,\n  .tfs-artistas-cta::after {\n    display: none;\n  }\n  \n  .tfs-artistas-cta__title,\n  .tfs-artistas-cta__subtitle,\n  .tfs-artistas-cta__info {\n    color: #000;\n  }\n  \n  .tfs-artistas-cta__btn {\n    border: 2px solid #000;\n    color: #000;\n    background: transparent;\n  }\n}\n<\/style>\n\n<!-- \n  Schema.org Offer + Place para SEO y IAs\n  \n  NOTA: Este m\u00f3dulo CTA NO usa schema Event (evita startDate est\u00e1tico\n  que caducar\u00eda). El schema Event completo con fechas din\u00e1micas\n  debe ir en la p\u00e1gina \/espectaculo\/ o \/horarios-y-precios\/.\n  \n  Aqu\u00ed solo declaramos la oferta comercial y la ubicaci\u00f3n,\n  que son datos estables y no caducan.\n  \n  Referencia: https:\/\/schema.org\/Offer\n-->\n<section \n  class=\"tfs-artistas-cta\" \n  id=\"reservar-entradas\" \n  aria-labelledby=\"tfs-artistas-cta-title\"\n>\n  <!-- Metadatos Schema.org: Offer + Place (sin Event con fecha est\u00e1tica) -->\n  <div itemscope itemtype=\"https:\/\/schema.org\/Offer\" style=\"display:none;\">\n    <meta itemprop=\"name\" content=\"Entrada Espect\u00e1culo Flamenco \u2013 Tablao Las Setas, Sevilla\">\n    <meta itemprop=\"description\" content=\"Espect\u00e1culo de flamenco en directo bajo el Metropol Parasol de Sevilla. 60 minutos sin descanso. 4 pases diarios: 18:00h, 19:30h, 21:00h y 22:30h. Baile, cante, guitarra y percusi\u00f3n.\">\n    <meta itemprop=\"priceCurrency\" content=\"EUR\">\n    <meta itemprop=\"price\" content=\"28\">\n    <meta itemprop=\"availability\" content=\"https:\/\/schema.org\/InStock\">\n    <link itemprop=\"url\" href=\"https:\/\/tablaoflamencolassetas.com\/horarios-y-precios\/\">\n    <meta itemprop=\"validFrom\" content=\"2026-02-01\">\n    <meta itemprop=\"inLanguage\" content=\"es\">\n    <div itemprop=\"seller\" itemscope itemtype=\"https:\/\/schema.org\/Organization\">\n      <meta itemprop=\"name\" content=\"Tablao Flamenco Las Setas\">\n      <link itemprop=\"url\" href=\"https:\/\/tablaoflamencolassetas.com\/\">\n    <\/div>\n    <div itemprop=\"areaServed\" itemscope itemtype=\"https:\/\/schema.org\/Place\">\n      <meta itemprop=\"name\" content=\"Tablao Flamenco Las Setas\">\n      <div itemprop=\"address\" itemscope itemtype=\"https:\/\/schema.org\/PostalAddress\">\n        <meta itemprop=\"streetAddress\" content=\"Plaza de la Encarnaci\u00f3n, 38\">\n        <meta itemprop=\"addressLocality\" content=\"Sevilla\">\n        <meta itemprop=\"postalCode\" content=\"41003\">\n        <meta itemprop=\"addressRegion\" content=\"Andaluc\u00eda\">\n        <meta itemprop=\"addressCountry\" content=\"ES\">\n      <\/div>\n      <div itemprop=\"geo\" itemscope itemtype=\"https:\/\/schema.org\/GeoCoordinates\">\n        <meta itemprop=\"latitude\" content=\"37.3934\">\n        <meta itemprop=\"longitude\" content=\"-5.9914\">\n      <\/div>\n    <\/div>\n  <\/div>\n  \n  <div class=\"tfs-artistas-cta__container\">\n\n    <!-- T\u00edtulo principal de la secci\u00f3n -->\n    <h2 \n      id=\"tfs-artistas-cta-title\" \n      class=\"tfs-artistas-cta__title\"\n    >\n      Vive el Flamenco en Directo\n    <\/h2>\n\n    <!-- Subt\u00edtulo con keywords SEO -->\n    <p \n      class=\"tfs-artistas-cta__subtitle\" \n      id=\"tfs-artistas-cta-desc\"\n    >\n      Reserva tu experiencia de <strong>tablao flamenco en Sevilla<\/strong> bajo el Metropol Parasol,\n      con un elenco de baile, cante, guitarra y percusi\u00f3n.\n    <\/p>\n\n    <!-- Botones de acci\u00f3n -->\n    <div class=\"tfs-artistas-cta__buttons\" role=\"group\" aria-label=\"Acciones de reserva\">\n      \n      <!-- \n        BOT\u00d3N RESERVAR ENTRADAS\n        - data-open-booking=\"true\": atributo que detecta el JS de artistas-modulo\n        - Requiere que exista id=\"turitop-booking-modal\" en el DOM\n        - Fallback: si JS falla o modal no existe, navega a \/horarios-y-precios\/\n      -->\n      <a href=\"https:\/\/tablaoflamencolassetas.com\/horarios-y-precios\/\" class=\"tfs-artistas-cta__btn tfs-artistas-cta__btn--primary\" aria-label=\"Reservar entradas para el espect\u00e1culo flamenco en Tablao Las Setas, Sevilla\" aria-describedby=\"tfs-artistas-cta-desc tfs-artistas-cta-info\" data-cta=\"reservar-entradas-artistas\" data-open-booking=\"true\">\n        Reservar Entradas\n      <\/a>\n\n      <!-- Bot\u00f3n secundario: Ver espect\u00e1culo -->\n      <a href=\"https:\/\/tablaoflamencolassetas.com\/espectaculo\/\" class=\"tfs-artistas-cta__btn tfs-artistas-cta__btn--secondary\" aria-label=\"Ver informaci\u00f3n del espect\u00e1culo de flamenco en Tablao Las Setas\" data-cta=\"ver-espectaculo-artistas\">\n        Ver Espect\u00e1culo\n      <\/a>\n    <\/div>\n\n    <!-- Informaci\u00f3n de horarios y duraci\u00f3n -->\n    <ul \n      class=\"tfs-artistas-cta__info\" \n      id=\"tfs-artistas-cta-info\" \n      aria-label=\"Informaci\u00f3n del espect\u00e1culo\"\n    >\n      <li>Shows diarios: 18:00h \u00b7 19:30h \u00b7 21:00h \u00b7 22:30h<\/li>\n      <li class=\"tfs-artistas-cta__dot\" aria-hidden=\"true\">\u2022<\/li>\n      <li>60 minutos de flamenco<\/li>\n    <\/ul>\n\n    <!-- Disclaimer de horarios -->\n    <p class=\"tfs-artistas-cta__disclaimer\">\n      *Horarios sujetos a cambios seg\u00fan temporada y disponibilidad. Pase extra 16:30h en temporada alta.\n    <\/p>\n\n  <\/div>\n<\/section>\n\n<!-- \n  CHANGELOG v2.2 - AUDITOR\u00cdA PREPRODUCCI\u00d3N\n  ==========================================\n  \n  \ud83d\udd34 CAMBIOS CR\u00cdTICOS:\n  \n  | # | Descripci\u00f3n | ANTES | DESPU\u00c9S |\n  |---|-------------|-------|---------|\n  | 1 | Schema Event con startDate est\u00e1tico | Event + startDate 2026-02-01 | Offer + Place (sin fecha que caduca) |\n  | 2 | Schema description incompleta | \"60 min de baile...\" | \"60 min sin descanso. 4 pases diarios: 18:00h...\" |\n  | 3 | font-weight: 600 en <strong> | 600 (no existe en GT America) | 400 (var --tfs-weight-regular) |\n  \n  \ud83d\udfe1 CAMBIOS MODERADOS:\n  \n  | # | Descripci\u00f3n | ANTES | DESPU\u00c9S |\n  |---|-------------|-------|---------|\n  | 4 | inLanguage en Schema | No exist\u00eda | <meta itemprop=\"inLanguage\" content=\"es\"> |\n  | 5 | aria-controls turitop-booking-modal | Presente (posible ID inexistente) | Eliminado; fallback via href |\n  | 6 | data-open-booking sin valor | data-open-booking (booleano) | data-open-booking=\"true\" |\n  | 7 | Mobile info items pegados | gap: 6px; dot display:none | gap: 8px (m\u00e1s breathing room) |\n  | 8 | Variable CSS --tfs-cta-text muerta | Declarada, nunca usada | Eliminada |\n  | 9 | itemprop=\"alternateName\" en H2 | Presente | Eliminado (sem\u00e1nticamente incorrecto) |\n  \n  \ud83d\udd35 OPTIMIZACIONES:\n  \n  | # | Descripci\u00f3n | ANTES | DESPU\u00c9S |\n  |---|-------------|-------|---------|\n  | 10 | min-height ultrawide | 50vh | max(50vh, 400px) |\n  | 11 | text-wrap t\u00edtulo | No exist\u00eda | text-wrap: balance |\n  | 12 | Disclaimer texto | \"seg\u00fan fecha\" | \"seg\u00fan temporada\" |\n  | 13 | Preload imagen | No documentado | Comentario con <link rel=\"preload\"> |\n  | 14 | Schema duplicado | Event completo en CTA gen\u00e9rico | Solo Offer + Place; Event en \/espectaculo\/ |\n  | 15 | GeoCoordinates | No exist\u00eda | A\u00f1adidas lat\/long del venue |\n  | 16 | addressRegion | No exist\u00eda | A\u00f1adido \"Andaluc\u00eda\" |\n  | 17 | pointer-events ::before | Redundante con z-index | Eliminado (contenedor z-index:2 ya gestiona clics) |\n  | 18 | Tablet min-height | 48vh fijo | max(48vh, 400px) |\n  \n  ELIMINADOS de v2.1:\n  - <span itemprop=\"startDate\"> (fecha est\u00e1tica que caduca)\n  - <span itemprop=\"duration\"> (movido al schema en \/espectaculo\/)\n  - itemprop=\"alternateName\" del H2\n  - itemprop=\"performer\" (va en Event, no en Offer)\n  - itemprop=\"eventAttendanceMode\" (va en Event)\n  - itemprop=\"eventStatus\" (va en Event)\n  - aria-haspopup=\"dialog\" (sin modal garantizado)\n  - aria-controls=\"turitop-booking-modal\" (ID puede no existir)\n  - --tfs-cta-text variable (dead code)\n  \n  A\u00d1ADIDOS en v2.2:\n  - Schema Offer con seller Organization\n  - GeoCoordinates (37.3934, -5.9914)\n  - addressRegion: Andaluc\u00eda\n  - validFrom: 2026-02-01 (fecha de vigencia de la oferta)\n  - text-wrap: balance en H2\n  - Comentario de preload en cabecera del archivo\n  \n  SIN CAMBIOS (mantiene v2.1):\n  \u2705 Canela Light para H2 t\u00edtulo\n  \u2705 GT America Light para botones (uppercase + 0.12em)\n  \u2705 GT America Regular para body text (subt\u00edtulo, info, disclaimer)\n  \u2705 Sin Montserrat (reemplazada por GT America Light)\n  \u2705 Sin Work Sans (reemplazada por GT America Regular)\n  \u2705 Sin Romans Flower (reemplazada por Canela Light)\n  \u2705 Sin media query 768px para tipograf\u00eda\n  \u2705 Playfair Display solo como fallback\n  \u2705 Paleta de colores sin dorado\n  \u2705 Imagen de fondo VIVE-3-scaled.jpg\n  \u2705 Overlay gradiente\n  \u2705 Barra decorativa blanca superior\n  \u2705 Horarios: 18:00h \u00b7 19:30h \u00b7 21:00h \u00b7 22:30h\n  \u2705 Duraci\u00f3n: 60 minutos sin descanso\n  \u2705 Todos los efectos hover\/focus\n  \u2705 Responsive breakpoints (600px, 900px)\n  \u2705 Accesibilidad WCAG 2.1 AA\n  \u2705 Print styles\n  \u2705 High contrast mode\n  \u2705 Reduced motion\n  \u2705 Dispositivos t\u00e1ctiles (hover: none)\n-->\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0ea9246 e-con-full e-flex e-con e-parent\" data-id=\"0ea9246\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7579617 elementor-widget elementor-widget-html\" data-id=\"7579617\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- =====================================================\n     P\u00c1GINA ARTISTAS - M5: MODAL DE ARTISTA (PRO)\n     Tablao Flamenco Las Setas\n\n     MEJORAS PRO:\n     - Delegaci\u00f3n de eventos (m\u00e1s robusto, menos listeners)\n     - Scroll lock real (incluye iOS) + compensaci\u00f3n scrollbar\n     - Oculta el fondo a lectores (aria-hidden) mientras modal abierto\n     - Deep-link opcional: #artista=ID (y back\/forward coherentes)\n     - JSON-LD ItemList + Person (sin claims no verificables)\n     ===================================================== -->\n\n<style>\n\/* =====================================================\n   M5 MODAL - CSS AUT\u00d3NOMO (PRO)\n   ===================================================== *\/\n\n.tfs-modal {\n  position: fixed !important;\n  inset: 0 !important;\n  z-index: 99999 !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  padding: 20px !important;\n  opacity: 0 !important;\n  visibility: hidden !important;\n  transition: opacity 0.3s ease, visibility 0.3s ease !important;\n  box-sizing: border-box !important;\n}\n\n.tfs-modal *,\n.tfs-modal *::before,\n.tfs-modal *::after {\n  box-sizing: border-box !important;\n}\n\n.tfs-modal.activo {\n  opacity: 1 !important;\n  visibility: visible !important;\n}\n\n\/* Backdrop *\/\n.tfs-modal__backdrop {\n  position: absolute !important;\n  inset: 0 !important;\n  background: rgba(26,21,18,0.92) !important;\n  cursor: pointer !important;\n}\n\n\/* Blur si est\u00e1 soportado *\/\n@supports ((backdrop-filter: blur(8px)) or (-webkit-backdrop-filter: blur(8px))) {\n  .tfs-modal__backdrop {\n    backdrop-filter: blur(8px) !important;\n    -webkit-backdrop-filter: blur(8px) !important;\n  }\n}\n\n\/* Contenido *\/\n.tfs-modal__content {\n  position: relative !important;\n  z-index: 1 !important;\n  background: linear-gradient(145deg, #1A1512 0%, #251E19 100%) !important;\n  border: 1px solid rgba(200,16,46,0.3) !important;\n  border-radius: 24px !important;\n  max-width: 560px !important;\n  width: 100% !important;\n  max-height: 90vh !important;\n  overflow-y: auto !important;\n  padding: 40px 36px !important;\n  box-shadow:\n    0 30px 80px rgba(0,0,0,0.5),\n    0 0 0 1px rgba(227,173,67,0.1) !important;\n  transform: translateY(20px) !important;\n  transition: transform 0.3s ease !important;\n  outline: none !important;\n}\n\n.tfs-modal.activo .tfs-modal__content {\n  transform: translateY(0) !important;\n}\n\n\/* Bot\u00f3n cerrar *\/\n.tfs-modal__close {\n  position: absolute !important;\n  top: 16px !important;\n  right: 16px !important;\n  width: 44px !important;\n  height: 44px !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  background: rgba(252,226,191,0.1) !important;\n  border: 1px solid rgba(252,226,191,0.2) !important;\n  border-radius: 50% !important;\n  color: #FCE2BF !important;\n  cursor: pointer !important;\n  transition: all 0.3s ease !important;\n}\n\n.tfs-modal__close:hover {\n  background: rgba(200,16,46,0.3) !important;\n  border-color: rgba(200,16,46,0.5) !important;\n}\n\n.tfs-modal__close:focus-visible {\n  outline: 3px solid #E3AD43 !important;\n  outline-offset: 2px !important;\n}\n\n.tfs-modal__close svg {\n  width: 20px !important;\n  height: 20px !important;\n}\n\n\/* Imagen *\/\n.tfs-modal__image-wrap {\n  width: clamp(140px, 35vw, 180px) !important;\n  height: clamp(140px, 35vw, 180px) !important;\n  margin: 0 auto 24px !important;\n  border-radius: 50% !important;\n  overflow: hidden !important;\n  position: relative !important;\n  box-shadow:\n    0 15px 40px rgba(200,16,46,0.35),\n    0 0 0 4px rgba(227,173,67,0.25) !important;\n}\n\n.tfs-modal__image {\n  width: 100% !important;\n  height: 100% !important;\n  object-fit: cover !important;\n  display: block !important;\n}\n\n\/* Placeholder (sin foto) *\/\n.tfs-modal__image-wrap.is-placeholder {\n  background-color: #1A1512 !important;\n  background-image: url('https://spcdn.shortpixel.ai/spio/ret_img,q_cdnize,to_auto,s_webp:avif/test.tablaoflamencolassetas.com/wp-content/uploads/2025/12/Fondo_dibujos.jpg') !important;\n  background-size: 200% !important;\n  background-position: center !important;\n  background-blend-mode: soft-light !important;\n  display: flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n}\n\n.tfs-modal__image-wrap.is-placeholder .tfs-modal__image {\n  display: none !important;\n}\n\n.tfs-modal__initial {\n  font-family: 'Geoparody', Georgia, serif !important;\n  font-size: clamp(48px, 12vw, 72px) !important;\n  font-weight: 700 !important;\n  color: #E3AD43 !important;\n  text-shadow: 2px 2px 15px rgba(0,0,0,0.5) !important;\n  display: none !important;\n}\n\n.tfs-modal__image-wrap.is-placeholder .tfs-modal__initial {\n  display: block !important;\n}\n\n\/* Info *\/\n.tfs-modal__info {\n  text-align: center !important;\n}\n\n\/* Categor\u00eda *\/\n.tfs-modal__categoria {\n  display: inline-block !important;\n  font-family: 'Montserrat', sans-serif !important;\n  font-size: 11px !important;\n  font-weight: 600 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 2px !important;\n  color: #E3AD43 !important;\n  margin-bottom: 10px !important;\n}\n\n\/* Nombre *\/\n.tfs-modal__nombre {\n  font-family: 'Geoparody', 'Playfair Display', Georgia, serif !important;\n  font-size: clamp(26px, 5vw, 34px) !important;\n  font-weight: 700 !important;\n  color: #FCE2BF !important;\n  margin: 0 0 14px 0 !important;\n  padding: 0 !important;\n  line-height: 1.2 !important;\n}\n\n\/* Bio *\/\n.tfs-modal__bio {\n  font-family: 'Work Sans', sans-serif !important;\n  font-size: 15px !important;\n  font-weight: 400 !important;\n  color: rgba(252,226,191,0.85) !important;\n  line-height: 1.7 !important;\n  margin: 0 0 18px 0 !important;\n  padding: 0 !important;\n}\n\n\/* Premios *\/\n.tfs-modal__premios {\n  list-style: none !important;\n  padding: 0 !important;\n  margin: 0 0 26px 0 !important;\n  text-align: left !important;\n  display: flex !important;\n  flex-direction: column !important;\n  gap: 10px !important;\n}\n\n.tfs-modal__premios li {\n  font-family: 'Work Sans', sans-serif !important;\n  font-size: 14px !important;\n  font-weight: 400 !important;\n  color: #FCE2BF !important;\n  padding-left: 20px !important;\n  position: relative !important;\n  line-height: 1.5 !important;\n}\n\n.tfs-modal__premios li::before {\n  content: '' !important;\n  position: absolute !important;\n  left: 0 !important;\n  top: 0.55em !important;\n  width: 8px !important;\n  height: 8px !important;\n  background: #E3AD43 !important;\n  border-radius: 50% !important;\n}\n\n\/* CTA *\/\n.tfs-modal__cta {\n  text-align: center !important;\n  padding-top: 10px !important;\n  border-top: 1px solid rgba(252,226,191,0.1) !important;\n}\n\n.tfs-modal__cta-btn {\n  display: inline-flex !important;\n  align-items: center !important;\n  justify-content: center !important;\n  font-family: 'Montserrat', sans-serif !important;\n  font-size: 13px !important;\n  font-weight: 600 !important;\n  text-transform: uppercase !important;\n  letter-spacing: 1.5px !important;\n  text-decoration: none !important;\n  color: #1A1512 !important;\n  background: #E3AD43 !important;\n  padding: 14px 32px !important;\n  border-radius: 50px !important;\n  transition: all 0.3s ease !important;\n}\n\n.tfs-modal__cta-btn:hover {\n  background: #FCE2BF !important;\n  transform: translateY(-2px) !important;\n  box-shadow: 0 10px 30px rgba(227,173,67,0.3) !important;\n}\n\n.tfs-modal__cta-btn:focus-visible {\n  outline: 3px solid #E3AD43 !important;\n  outline-offset: 3px !important;\n}\n\n\/* =========================\n   RESPONSIVE\n   ========================= *\/\n\n@media (max-width: 600px) {\n  .tfs-modal { padding: 12px !important; }\n\n  .tfs-modal__content {\n    padding: 32px 24px !important;\n    border-radius: 20px !important;\n  }\n\n  .tfs-modal__close {\n    top: 12px !important;\n    right: 12px !important;\n    width: 40px !important;\n    height: 40px !important;\n  }\n\n  .tfs-modal__premios { padding-left: 10px !important; }\n}\n\n\/* Reduce motion *\/\n@media (prefers-reduced-motion: reduce) {\n  .tfs-modal,\n  .tfs-modal__content,\n  .tfs-modal__close,\n  .tfs-modal__cta-btn {\n    transition: none !important;\n  }\n  .tfs-modal__content { transform: none !important; }\n}\n<\/style>\n\n<!-- =====================================================\n     HTML MODAL (PRO)\n     ===================================================== -->\n\n<div class=\"tfs-modal\" id=\"tfsArtistaModal\"\n     role=\"dialog\"\n     aria-modal=\"true\"\n     aria-labelledby=\"tfs-modal-nombre\"\n     aria-describedby=\"tfs-modal-bio tfs-modal-premios\"\n     aria-hidden=\"true\">\n  <div class=\"tfs-modal__backdrop\" data-close-modal><\/div>\n\n  <div class=\"tfs-modal__content\" role=\"document\" tabindex=\"-1\">\n    <button class=\"tfs-modal__close\" type=\"button\" data-close-modal aria-label=\"Cerrar\">\n      <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\">\n        <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"><\/line>\n        <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"><\/line>\n      <\/svg>\n    <\/button>\n\n    <div class=\"tfs-modal__image-wrap\" id=\"tfs-modal-image-wrap\">\n      <span class=\"tfs-modal__initial\" id=\"tfs-modal-initial\" aria-hidden=\"true\"><\/span>\n      <img src=\"\" alt=\"\" class=\"tfs-modal__image\" id=\"tfs-modal-imagen\" loading=\"lazy\" decoding=\"async\">\n    <\/div>\n\n    <div class=\"tfs-modal__info\">\n      <span class=\"tfs-modal__categoria\" id=\"tfs-modal-categoria\"><\/span>\n      <h3 class=\"tfs-modal__nombre\" id=\"tfs-modal-nombre\"><\/h3>\n      <p class=\"tfs-modal__bio\" id=\"tfs-modal-bio\"><\/p>\n      <ul class=\"tfs-modal__premios\" id=\"tfs-modal-premios\" aria-label=\"Reconocimientos\"><\/ul>\n      <div class=\"tfs-modal__cta\">\n        <a class=\"tfs-modal__cta-btn\" href=\"https:\/\/test.tablaoflamencolassetas.com\/horarios-y-precios\/\" aria-label=\"Reservar entradas para el Tablao Flamenco Las Setas en Sevilla\" data-cta=\"modal-reservar\">\n          Reservar Entradas\n        <\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function () {\n  'use strict';\n\n  \/\/ Evitar duplicados\n  if (window.__TFS_MODAL_INIT__) return;\n  window.__TFS_MODAL_INIT__ = true;\n\n  function closestMatch(el, selector) {\n    if (!el) return null;\n    if (el.closest) return el.closest(selector);\n    while (el && el.nodeType === 1) {\n      if (matches(el, selector)) return el;\n      el = el.parentNode;\n    }\n    return null;\n\n    function matches(node, sel) {\n      var p = node.matches || node.msMatchesSelector || node.webkitMatchesSelector;\n      return p ? p.call(node, sel) : false;\n    }\n  }\n\n  function getBaseUrlNoHash() {\n    try {\n      return window.location.origin + window.location.pathname;\n    } catch (e) {\n      return window.location.href.split('#')[0];\n    }\n  }\n\n  function parseArtistFromHash() {\n    var h = window.location.hash || '';\n    \/\/ Formato: #artista=el-yiyo\n    if (h.indexOf('#artista=') === 0) return decodeURIComponent(h.replace('#artista=', '').trim());\n    return '';\n  }\n\n  function mapJobTitle(categoria) {\n    var c = (categoria || '').toLowerCase();\n    if (c === 'baile') return 'Bailaor \/ Bailaora flamenca';\n    if (c === 'cante') return 'Cantaor \/ Cantaora flamenca';\n    if (c === 'guitarra') return 'Guitarrista flamenco';\n    if (c === 'percusi\u00f3n' || c === 'percusion') return 'Percusionista flamenco';\n    return 'Artista flamenco';\n  }\n\n  function init() {\n    var modal = document.getElementById('tfsArtistaModal');\n    if (!modal) return;\n\n    var modalContent = modal.querySelector('.tfs-modal__content');\n    var modalImagen = document.getElementById('tfs-modal-imagen');\n    var modalNombre = document.getElementById('tfs-modal-nombre');\n    var modalCategoria = document.getElementById('tfs-modal-categoria');\n    var modalBio = document.getElementById('tfs-modal-bio');\n    var modalPremios = document.getElementById('tfs-modal-premios');\n    var modalImageWrap = document.getElementById('tfs-modal-image-wrap');\n    var modalInitial = document.getElementById('tfs-modal-initial');\n\n    var closeButtons = modal.querySelectorAll('[data-close-modal]');\n    var lastFocusedElement = null;\n\n    \/\/ Scroll lock (incluye iOS) + ocultaci\u00f3n del fondo\n    var scrollY = 0;\n    var bodyPaddingRight = '';\n    var hiddenMap = [];\n    function lockScrollAndBackground() {\n      scrollY = window.pageYOffset || document.documentElement.scrollTop || 0;\n\n      \/\/ Compensar scrollbar (desktop)\n      var scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n      bodyPaddingRight = document.body.style.paddingRight || '';\n      if (scrollbarWidth > 0) document.body.style.paddingRight = scrollbarWidth + 'px';\n\n      \/\/ iOS-safe: body fixed\n      document.body.style.position = 'fixed';\n      document.body.style.top = (-scrollY) + 'px';\n      document.body.style.left = '0';\n      document.body.style.right = '0';\n      document.body.style.width = '100%';\n\n      \/* =====================================================\n         FIX: NO ocultar el modal de reservas (Turitop)\n         - Evita que quede aria-hidden y algunos widgets no inicialicen\n         - Detecta por IDs t\u00edpicos y\/o data-attributes\n         ===================================================== *\/\n      var bookingModal =\n        document.querySelector('[data-tfs-booking-modal]') ||\n        document.getElementById('tfs-artistas-booking-modal') ||\n        document.getElementById('tfs-booking-modal') ||\n        document.getElementById('tfs-m3-booking-modal') ||\n        document.getElementById('tfs-m1-booking-modal') ||\n        document.getElementById('tfs-m2-booking-modal');\n\n      \/\/ Ocultar resto del body a lectores (excepto modal)\n      hiddenMap = [];\n      var children = document.body.children;\n      for (var i = 0; i < children.length; i++) {\n        var node = children[i];\n        if (node === modal) continue;\n\n        \/\/ FIX: no ocultar el modal de reservas ni su contenedor directo\n        if (bookingModal && (node === bookingModal || node.contains(bookingModal))) continue;\n\n        var prev = node.getAttribute('aria-hidden');\n        hiddenMap.push([node, prev]);\n        node.setAttribute('aria-hidden', 'true');\n      }\n    }\n\n    function unlockScrollAndBackground() {\n      \/\/ Restaurar aria-hidden\n      for (var i = 0; i < hiddenMap.length; i++) {\n        var node = hiddenMap[i][0];\n        var prev = hiddenMap[i][1];\n        if (prev === null || prev === undefined) node.removeAttribute('aria-hidden');\n        else node.setAttribute('aria-hidden', prev);\n      }\n      hiddenMap = [];\n\n      \/\/ Restaurar scroll\n      document.body.style.position = '';\n      document.body.style.top = '';\n      document.body.style.left = '';\n      document.body.style.right = '';\n      document.body.style.width = '';\n      document.body.style.paddingRight = bodyPaddingRight;\n\n      window.scrollTo(0, scrollY);\n    }\n\n    \/\/ =====================================================\n    \/\/ DATOS DE ARTISTAS (tal cual los tuyos)\n    \/\/ =====================================================\n    var artistasData = {\n      'manuel-montes': { nombre:'Manuel Montes', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Manuel-Montes_000.jpg', bio:'Bailaor cordob\u00e9s. Entre 2019 y 2022 form\u00f3 parte del prestigioso Ballet Flamenco de Andaluc\u00eda.', premios:['Ballet Flamenco de Andaluc\u00eda (2019-2022)'] },\n      'el-yiyo': { nombre:'El Yiyo', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Yiyo_000.jpg', bio:'Nacido en Badalona en 1996. A los 7 a\u00f1os realiz\u00f3 su primera gira internacional como cabeza de cartel.', premios:['Debut Teatro Real de Madrid (2020)','Flamenco Real del Teatro Real (2024)'] },\n      'miguel-rubio': { nombre:'Miguel Rubio', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Miguel-Rubio_000.jpg', bio:'Bailaor sevillano que debut\u00f3 a los 5 a\u00f1os. Ha trabajado con Roc\u00edo Molina, Remedios Amaya y Pastora Galv\u00e1n.', premios:['Premio J\u00f3venes Flamencos - Bienal de Sevilla (2008)','XXII Bienal de Sevilla \"\u00a1Triana Viva!\"'] },\n      'juan-tomas': { nombre:'Juan Tom\u00e1s', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Juan-Tomas_000.jpg', bio:'Nacido en Trebujena (C\u00e1diz) en el a\u00f1o 2000. Desde 2022 forma parte del Ballet Flamenco de Andaluc\u00eda.', premios:['1\u00ba Premio Baile - Concurso Nacional C\u00f3rdoba (2022)','Premio \"Flamenco Puro\" Festival de Jerez'] },\n      'polito': { nombre:'Polito', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Polito_000.jpg', bio:'Bailaor y percusionista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'juan-jose-villar': { nombre:'Juan Jos\u00e9 Villar', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Juan-Jose-villar_000.jpg', bio:'Nacido en C\u00e1diz en 1996. Nieto del legendario cantaor Juanito Villar. Graduado del Conservatorio \"Antonio Ruiz Soler\" de Sevilla.', premios:['1\u00ba Premio Nacional Tablao Las Carboneras (2016)','1\u00ba Premio Pe\u00f1a Flamenca de Guillena'] },\n      'jose-maya': { nombre:'Jos\u00e9 Maya', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Jose-Maya_000.jpg', bio:'Nacido en Madrid en 1983. Inici\u00f3 su carrera a los 9 a\u00f1os junto a Antonio Canales. Desde 2007 es miembro del sexteto de Tomatito.', premios:['Premio Copa Pav\u00f3n (1998)','Premio Mejor Bailar\u00edn - Teatro Alb\u00e9niz Madrid (2000)'] },\n      'el-choro': { nombre:'El Choro', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Choro_000.jpg', bio:'Nacido en Huelva en 1985. Formado con Javier Latorre, Israel Galv\u00e1n y Antonio Canales.', premios:['Premio Artista Revelaci\u00f3n - Festival de Jerez (2016)','Alcachofa de Plata del Bar Juanito'] },\n      'el-farru': { nombre:'El Farru', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Farru_000.jpg', bio:'Nacido en Sevilla en 1988, hermano de Farruquito y nieto del legendario Farruco. Debut\u00f3 a los 2 a\u00f1os en Berl\u00edn.', premios:['City Center de Nueva York','Sadler\\'s Wells de Londres'] },\n      'pepe-torres': { nombre:'Pepe Torres', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Pepe-Torres_000.jpg', bio:'Nacido en Mor\u00f3n de la Frontera en 1978. Nieto del cantaor \"Joselero de Mor\u00f3n\". Bailaor del grupo Son de la Frontera.', premios:['\"As\u00ed Baila Mor\u00f3n\" - Bienal de Sevilla (2004)','Nominaci\u00f3n Grammy Latino con Son de la Frontera'] },\n      'juan-de-juan': { nombre:'Juan de Juan', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Juan-de-Juan_000.jpg', bio:'Nacido en Sevilla en 1979. A los 16 a\u00f1os se convirti\u00f3 en primer bailar\u00edn de Antonio Canales. En 2004 fund\u00f3 el Ballet Flamenco Juan de Juan.', premios:['City Center de Nueva York','Champs Elys\u00e9es de Par\u00eds'] },\n      'el-tete': { nombre:'El Tete', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/El-Tete_000.jpg', bio:'Nacido en Badalona en el a\u00f1o 2000. Hermano menor de El Yiyo. Su baile se caracteriza por la fuerza y elegancia.', premios:[] },\n\n      'belen-lopez': { nombre:'Bel\u00e9n L\u00f3pez', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Belen-Lopez_000.jpg', bio:'Nacida en Tarragona en 1986. Fue primera bailarina en la Arena di Verona bajo la direcci\u00f3n de Franco Zeffirelli (2000-2004).', premios:['Premio Nacional de Flamenco Mario Maya (2004)','Premio Desplante - Festival de Las Minas de La Uni\u00f3n (2016)'] },\n      'la-moneta': { nombre:'La Moneta', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/La-Moneta_000.jpg', bio:'Nacida en Granada en 1984. Formada con Mario Maya, Matilde Coral e Israel Galv\u00e1n.', premios:['Premio Desplante - Festival de Las Minas (2003)','Premio Flamenco Hoy Mejor Bailaora (2009)','Premio El Taranto Mejor Espect\u00e1culo (2011)'] },\n      'karime-amaya': { nombre:'Karime Amaya', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Karime-Amaya_000.jpg', bio:'Nacida en M\u00e9xico en 1985, sobrina-nieta de Carmen Amaya. Reside en Barcelona desde hace m\u00e1s de 15 a\u00f1os.', premios:['Premio Artista Revelaci\u00f3n - Festival de Jerez (2013)','Protagonista del documental \"Bajar\u00ed\" de Eva Vila'] },\n      'manuela-vargas': { nombre:'Manuela Vargas', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Manuela-Vargas_000.jpg', bio:'Hija de Isidro Vargas y sobrina de Angelita Vargas. A los 9 a\u00f1os viaj\u00f3 a Jap\u00f3n en un espect\u00e1culo flamenco infantil.', premios:['Bienal de Sevilla','Festival Internacional Mont-de-Marsan'] },\n      'paula-ortega': { nombre:'Paula Ortega', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Paula-Ortega_000.jpg', bio:'Bailaora del elenco del Tablao Flamenco Las Setas de Sevilla.', premios:[] },\n      'moises-navarro': { nombre:'Mois\u00e9s Navarro', categoria:'Baile', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Moises-Navarro_000.jpg', bio:'Nacido en M\u00e1laga en 1988. A los 16 debut\u00f3 con Mario Maya. Desde los 24 a\u00f1os forma parte de la compa\u00f1\u00eda de Eva La Yerbabuena.', premios:['Premio Mejor Bailar\u00edn - Conservatorios Andaluces','1\u00ba Premio Tablao Las Carboneras Madrid'] },\n\n      'la-tana': { nombre:'La Tana', categoria:'Cante', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/La-Tana_000.jpg', bio:'Nacida en Sevilla en 1973. Paco de Luc\u00eda la fich\u00f3 como voz protagonista del \u00e1lbum \"Cositas buenas\" (2004).', premios:['Voz principal disco \"Cositas buenas\" de Paco de Luc\u00eda (2004)','Disco \"T\u00fa ven a m\u00ed\" producido por Paco de Luc\u00eda'] },\n      'pechuguita': { nombre:'Pechuguita', categoria:'Cante', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Pechuguita_000.jpg', bio:'Nacido en San Juan de Aznalfarache en 1993. Hijo de \"El Pechuga\". Comenz\u00f3 a cantar profesionalmente a los 12 a\u00f1os.', premios:['Teatro Lope de Vega de Sevilla','Teatro de La Maestranza','Bienal de Flamenco de Sevilla'] },\n\n      'paco-iglesias': { nombre:'Paco Iglesias', categoria:'Guitarra', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Paco-Iglesias_000.jpg', bio:'Nacido en Sevilla en 1978. Sobrino nieto de Melchor de Marchena. En 2004 gir\u00f3 con Antonio Canales.', premios:['Bienal de J\u00f3venes (2004)','Espect\u00e1culo \"Iglesias\" - Bienal de Sevilla (2012)'] },\n      'marcos-de-silvia': { nombre:'Marcos de Silvia', categoria:'Guitarra', imagen:'https:\/\/test.tablaoflamencolassetas.com\/wp-content\/uploads\/2025\/12\/Marcos-de-Silvia_000.jpg', bio:'Guitarrista jerezano nacido en 2006. Becado en la Fundaci\u00f3n Cristina Heeren.', premios:['1\u00ba Premio Talento Flamenco Guitarra (2022)','Premio Revelaci\u00f3n - XXVI Festival de Jerez','1\u00ba Premio Guitarra - Fiesta de la Buler\u00eda (2022)'] },\n\n      'el-carpeta': { nombre:'El Carpeta', categoria:'Baile', imagen:'', bio:'Bailaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'lole-de-los-reyes': { nombre:'Lole de los Reyes', categoria:'Baile', imagen:'', bio:'Bailaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'agueda-savedra': { nombre:'\u00c1gueda Saavedra', categoria:'Baile', imagen:'', bio:'Bailaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'nazaret': { nombre:'Nazaret', categoria:'Baile', imagen:'', bio:'Bailaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'noemi-ferrer': { nombre:'Noem\u00ed Ferrer', categoria:'Baile', imagen:'', bio:'Bailaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'zaira': { nombre:'Zaira', categoria:'Baile', imagen:'', bio:'Bailaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'florencia': { nombre:'Florencia', categoria:'Baile', imagen:'', bio:'Bailaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'gema-moneo': { nombre:'Gema Moneo', categoria:'Baile', imagen:'', bio:'Bailaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'yaiza': { nombre:'Yaiza', categoria:'Baile', imagen:'', bio:'Bailaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'alba-heredia': { nombre:'Alba Heredia', categoria:'Baile', imagen:'', bio:'Bailaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n\n      'miguel-rosendo': { nombre:'Miguel Rosendo', categoria:'Cante', imagen:'', bio:'Cantaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'kini': { nombre:'Kini', categoria:'Cante', imagen:'', bio:'Cantaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'rubio-de-pruna': { nombre:'Rubio de Pruna', categoria:'Cante', imagen:'', bio:'Cantaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'manuel-de-la-nina': { nombre:'Manuel de la Nina', categoria:'Cante', imagen:'', bio:'Cantaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'lavi': { nombre:'Lavi', categoria:'Cante', imagen:'', bio:'Cantaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'ezequiel-montoya': { nombre:'Ezequiel Montoya', categoria:'Cante', imagen:'', bio:'Cantaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'ivan-carpio': { nombre:'Iv\u00e1n Carpio', categoria:'Cante', imagen:'', bio:'Cantaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'galli': { nombre:'Galli', categoria:'Cante', imagen:'', bio:'Cantaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'pepe-de-pura': { nombre:'Pepe de Pura', categoria:'Cante', imagen:'', bio:'Cantaor del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'reyes-martin': { nombre:'Reyes Mart\u00edn', categoria:'Cante', imagen:'', bio:'Cantaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'mai-fernandez': { nombre:'Mai Fern\u00e1ndez', categoria:'Cante', imagen:'', bio:'Cantaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'cristina-tovar': { nombre:'Cristina Tovar', categoria:'Cante', imagen:'', bio:'Cantaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'mara-rey': { nombre:'Mara Rey', categoria:'Cante', imagen:'', bio:'Cantaora del cuadro flamenco del Tablao Las Setas.', premios:[] },\n\n      'perla': { nombre:'Perla', categoria:'Guitarra', imagen:'', bio:'Guitarrista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'eugenio': { nombre:'Eugenio', categoria:'Guitarra', imagen:'', bio:'Guitarrista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'tudela': { nombre:'Tudela', categoria:'Guitarra', imagen:'', bio:'Guitarrista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'ramon-amador': { nombre:'Ram\u00f3n Amador', categoria:'Guitarra', imagen:'', bio:'Guitarrista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'luis-amador': { nombre:'Luis Amador', categoria:'Guitarra', imagen:'', bio:'Guitarrista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n\n      'lolo': { nombre:'Lolo', categoria:'Percusi\u00f3n', imagen:'', bio:'Percusionista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'tobalo': { nombre:'Tobalo', categoria:'Percusi\u00f3n', imagen:'', bio:'Percusionista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'paco-percusion': { nombre:'Paco', categoria:'Percusi\u00f3n', imagen:'', bio:'Percusionista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'mode': { nombre:'Mode', categoria:'Percusi\u00f3n', imagen:'', bio:'Percusionista del cuadro flamenco del Tablao Las Setas.', premios:[] },\n      'javi': { nombre:'Javi', categoria:'Percusi\u00f3n', imagen:'', bio:'Percusionista del cuadro flamenco del Tablao Las Setas.', premios:[] }\n    };\n\n    \/\/ =====================================================\n    \/\/ JSON-LD (ItemList + Person) - SEO\/IA\n    \/\/ =====================================================\n    (function injectSchema() {\n      if (document.getElementById('tfs-artistas-schema')) return;\n\n      var baseUrl = getBaseUrlNoHash();\n      var list = [];\n      var pos = 1;\n\n      for (var id in artistasData) {\n        if (!artistasData.hasOwnProperty(id)) continue;\n        var a = artistasData[id];\n        var person = {\n          \"@type\": \"Person\",\n          \"name\": a.nombre || \"Artista\",\n          \"jobTitle\": mapJobTitle(a.categoria),\n          \"worksFor\": {\n            \"@type\": \"Organization\",\n            \"name\": \"Tablao Flamenco Las Setas\"\n          },\n          \"url\": baseUrl + \"#artista=\" + encodeURIComponent(id)\n        };\n        if (a.imagen && a.imagen.trim()) person.image = a.imagen;\n\n        list.push({\n          \"@type\": \"ListItem\",\n          \"position\": pos++,\n          \"item\": person\n        });\n      }\n\n      var schema = {\n        \"@context\": \"https:\/\/schema.org\",\n        \"@type\": \"ItemList\",\n        \"name\": \"Artistas - Tablao Flamenco Las Setas\",\n        \"itemListElement\": list\n      };\n\n      var s = document.createElement('script');\n      s.type = 'application\/ld+json';\n      s.id = 'tfs-artistas-schema';\n      s.text = JSON.stringify(schema);\n      (document.head || document.body).appendChild(s);\n    })();\n\n    \/\/ =====================================================\n    \/\/ FUNCIONES MODAL\n    \/\/ =====================================================\n    var prevHash = '';\n\n    function setModalContent(data, artistId) {\n      var nombre = (data && data.nombre) ? data.nombre : 'Artista';\n      var categoria = (data && data.categoria) ? data.categoria : '';\n      var jobTitle = mapJobTitle(categoria);\n\n      modalNombre.textContent = nombre;\n      modalCategoria.textContent = categoria;\n\n      modalBio.textContent = (data && data.bio && data.bio.trim())\n        ? data.bio.trim()\n        : 'Informaci\u00f3n disponible pr\u00f3ximamente.';\n\n      \/\/ Imagen\n      modalImageWrap.classList.remove('is-placeholder');\n      modalInitial.textContent = '';\n\n      if (data && data.imagen && data.imagen.trim()) {\n        modalImagen.src = data.imagen;\n        modalImagen.alt = 'Foto de ' + nombre + ', ' + jobTitle + ' del Tablao Flamenco Las Setas en Sevilla';\n      } else {\n        modalImagen.src = '';\n        modalImagen.alt = '';\n        modalImageWrap.classList.add('is-placeholder');\n        modalInitial.textContent = (nombre || 'A').charAt(0).toUpperCase();\n      }\n\n      \/\/ Premios\n      modalPremios.innerHTML = '';\n      if (data && Array.isArray(data.premios) && data.premios.length) {\n        modalPremios.style.display = '';\n        for (var i = 0; i < data.premios.length && i < 5; i++) {\n          var li = document.createElement('li');\n          li.textContent = data.premios[i];\n          modalPremios.appendChild(li);\n        }\n      } else {\n        modalPremios.style.display = 'none';\n      }\n\n      \/\/ Deep-link (opcional)\n      if (artistId) {\n        try {\n          history.pushState({ tfsArtist: artistId }, '', '#artista=' + encodeURIComponent(artistId));\n        } catch (e) {}\n      }\n    }\n\n    function openModal(artistId, triggerEl) {\n      var data = artistasData[artistId];\n      if (!data) return;\n\n      lastFocusedElement = triggerEl || document.activeElement;\n      prevHash = window.location.hash || '';\n\n      setModalContent(data, artistId);\n\n      modal.classList.add('activo');\n      modal.setAttribute('aria-hidden', 'false');\n\n      lockScrollAndBackground();\n\n      \/\/ Focus al contenido (y luego al close si existe)\n      if (modalContent && typeof modalContent.focus === 'function') modalContent.focus();\n\n      var closeBtn = modal.querySelector('.tfs-modal__close');\n      if (closeBtn && typeof closeBtn.focus === 'function') closeBtn.focus();\n    }\n\n    function closeModal(restoreHash) {\n      modal.classList.remove('activo');\n      modal.setAttribute('aria-hidden', 'true');\n\n      unlockScrollAndBackground();\n\n      \/\/ Limpieza suave\n      modalImagen.src = '';\n      modalPremios.innerHTML = '';\n      modalInitial.textContent = '';\n      modalImageWrap.classList.remove('is-placeholder');\n\n      \/\/ Restaurar hash (opcional)\n      if (restoreHash) {\n        try { history.pushState({}, '', prevHash || getBaseUrlNoHash()); } catch (e) {}\n      }\n\n      if (lastFocusedElement && typeof lastFocusedElement.focus === 'function') {\n        lastFocusedElement.focus();\n      }\n    }\n\n    \/\/ =====================================================\n    \/\/ EVENTOS (delegaci\u00f3n)\n    \/\/ =====================================================\n\n    \/\/ Click abrir desde cualquier card del grid\n    document.addEventListener('click', function (e) {\n      var card = closestMatch(e.target, '.tfs-artista-card[data-artist-id]');\n      if (!card) return;\n      if (card.classList.contains('oculto')) return;\n\n      openModal(card.getAttribute('data-artist-id'), card);\n    });\n\n    \/\/ Enter \/ Space abrir (si el foco est\u00e1 en la card)\n    document.addEventListener('keydown', function (e) {\n      if (e.key !== 'Enter' && e.key !== ' ') return;\n      var card = closestMatch(document.activeElement, '.tfs-artista-card[data-artist-id]');\n      if (!card) return;\n      if (card.classList.contains('oculto')) return;\n\n      e.preventDefault();\n      openModal(card.getAttribute('data-artist-id'), card);\n    });\n\n    \/\/ Cerrar modal (backdrop y bot\u00f3n)\n    for (var i = 0; i < closeButtons.length; i++) {\n      closeButtons[i].addEventListener('click', function () {\n        closeModal(true);\n      });\n    }\n\n    \/\/ ESC para cerrar\n    document.addEventListener('keydown', function (e) {\n      if (e.key === 'Escape' && modal.classList.contains('activo')) {\n        closeModal(true);\n      }\n    });\n\n    \/\/ Focus trap (solo dentro del modal)\n    modal.addEventListener('keydown', function (e) {\n      if (e.key !== 'Tab' || !modal.classList.contains('activo')) return;\n\n      var focusables = modal.querySelectorAll('button, a[href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])');\n      if (!focusables.length) return;\n\n      var first = focusables[0];\n      var last = focusables[focusables.length - 1];\n\n      if (e.shiftKey && document.activeElement === first) {\n        e.preventDefault(); last.focus();\n      } else if (!e.shiftKey && document.activeElement === last) {\n        e.preventDefault(); first.focus();\n      }\n    });\n\n    \/\/ Back\/forward: si vuelves a un hash con artista, abre; si sales, cierra\n    window.addEventListener('popstate', function () {\n      var id = parseArtistFromHash();\n      if (id && artistasData[id]) {\n        openModal(id, null);\n      } else if (modal.classList.contains('activo')) {\n        closeModal(false);\n      }\n    });\n\n    \/\/ Abrir si entras con #artista=...\n    var initialId = parseArtistFromHash();\n    if (initialId && artistasData[initialId]) {\n      \/\/ peque\u00f1o timeout para evitar \u201csaltos\u201d de render en Elementor\n      setTimeout(function(){ openModal(initialId, null); }, 50);\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Saltar al elenco de artistas Tablao flamenco en Sevilla Artistas del Tablao Flamenco Las Setas en Sevilla Un cuadro flamenco [&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":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-3068","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/test.tablaoflamencolassetas.com\/en\/wp-json\/wp\/v2\/pages\/3068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.tablaoflamencolassetas.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/test.tablaoflamencolassetas.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/test.tablaoflamencolassetas.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/test.tablaoflamencolassetas.com\/en\/wp-json\/wp\/v2\/comments?post=3068"}],"version-history":[{"count":271,"href":"https:\/\/test.tablaoflamencolassetas.com\/en\/wp-json\/wp\/v2\/pages\/3068\/revisions"}],"predecessor-version":[{"id":5479,"href":"https:\/\/test.tablaoflamencolassetas.com\/en\/wp-json\/wp\/v2\/pages\/3068\/revisions\/5479"}],"wp:attachment":[{"href":"https:\/\/test.tablaoflamencolassetas.com\/en\/wp-json\/wp\/v2\/media?parent=3068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}