/*!
 * Fitfox para WordPress — estilos públicos.
 *
 * Todo cuelga de .fitfox para no pisar el tema, y los reinicios de botones y
 * títulos llevan .fitfox.fitfox (más especificidad) porque muchos temas dan
 * estilo a `button` o a `.entry-content h3` y se colarían.
 *
 * Tokens (se pueden sobrescribir desde el tema):
 *   --ff-acento   color principal (el del shortcode o el de los ajustes)
 *   --ff-radio    redondeo
 *   --ff-texto, --ff-fondo, --ff-superficie, --ff-borde, --ff-tenue
 *
 * Responsive por el ANCHO DEL BLOQUE (atributo data-ancho = xs|s|m|l que pone
 * el JS con ResizeObserver), no por el de la ventana.
 */

.fitfox {
  --ff-acento: #e2632c;
  --ff-radio: 14px;
  --ff-texto: #1f2430;
  --ff-tenue: #6b7280;
  --ff-fondo: transparent;
  --ff-superficie: #ffffff;
  --ff-suave: #f5f6f8;
  --ff-borde: #e6e8ec;
  --ff-sombra: 0 1px 2px rgba(16, 24, 40, .05), 0 6px 20px -8px rgba(16, 24, 40, .12);
  --ff-sombra-alta: 0 2px 4px rgba(16, 24, 40, .06), 0 18px 40px -12px rgba(16, 24, 40, .25);
  --ff-acento-suave: color-mix(in srgb, var(--ff-acento) 12%, transparent);
  --ff-acento-medio: color-mix(in srgb, var(--ff-acento) 22%, transparent);
  --ff-acento-texto: #fff;
  --ff-ok: #15803d;
  --ff-aviso: #b45309;
  --ff-lleno: #b91c1c;
  --ff-e: 1;           /* escala de espaciado (densidad) */
  --ff-cols: 3;
  --ff-cols-t: 2;
  --ff-cols-m: 1;
  --ff-proporcion: 16/9;

  color: var(--ff-texto);
  background: var(--ff-fondo);
  font-size: 15px;
  line-height: 1.5;
  box-sizing: border-box;
  position: relative;
  margin: 0 0 calc(2em * var(--ff-e));
  -webkit-font-smoothing: antialiased;
}
.fitfox *, .fitfox *::before, .fitfox *::after { box-sizing: inherit; }
.fitfox--fuente-sistema { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; }
.fitfox--densidad-compacta { --ff-e: .72; font-size: 14px; }
.fitfox--densidad-amplia { --ff-e: 1.3; }

/* ── Tema oscuro (y «auto» según el dispositivo) ── */
.fitfox--tema-oscuro {
  --ff-texto: #eef0f4; --ff-tenue: #a2a9b6; --ff-superficie: #1b1f27; --ff-suave: #232833;
  --ff-borde: #2e3441; --ff-sombra: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px -10px rgba(0,0,0,.6);
  --ff-sombra-alta: 0 18px 40px -12px rgba(0,0,0,.7);
  --ff-acento-suave: color-mix(in srgb, var(--ff-acento) 22%, transparent);
  --ff-ok: #4ade80; --ff-aviso: #fbbf24; --ff-lleno: #f87171;
}
@media (prefers-color-scheme: dark) {
  .fitfox--tema-auto {
    --ff-texto: #eef0f4; --ff-tenue: #a2a9b6; --ff-superficie: #1b1f27; --ff-suave: #232833;
    --ff-borde: #2e3441; --ff-sombra: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px -10px rgba(0,0,0,.6);
    --ff-sombra-alta: 0 18px 40px -12px rgba(0,0,0,.7);
    --ff-acento-suave: color-mix(in srgb, var(--ff-acento) 22%, transparent);
    --ff-ok: #4ade80; --ff-aviso: #fbbf24; --ff-lleno: #f87171;
  }
}

/* ── Reinicios frente al tema ── */
.fitfox.fitfox button, .fitfox.fitfox .ff-enlace {
  appearance: none; -webkit-appearance: none; background: none; border: 0; margin: 0; padding: 0;
  font: inherit; color: inherit; text-transform: none; letter-spacing: normal; line-height: inherit;
  box-shadow: none; min-height: 0; min-width: 0; width: auto; height: auto; border-radius: 0; cursor: pointer; text-align: inherit;
}
.fitfox.fitfox h2, .fitfox.fitfox h3, .fitfox.fitfox h4 { margin: 0; padding: 0; border: 0; text-transform: none; letter-spacing: -.01em; color: inherit; font-family: inherit; }
.fitfox.fitfox ul, .fitfox.fitfox ol { margin: 0; padding: 0; list-style: none; }
.fitfox.fitfox p { margin: 0; }
.fitfox.fitfox a { text-decoration: none; box-shadow: none; }
.fitfox.fitfox img { max-width: 100%; height: auto; border: 0; box-shadow: none; margin: 0; }
.fitfox.fitfox table { border: 0; margin: 0; width: 100%; border-collapse: separate; border-spacing: 0; background: none; }
.fitfox.fitfox th, .fitfox.fitfox td { border: 0; background: none; padding: 0; }
.fitfox :focus-visible { outline: 2px solid var(--ff-acento); outline-offset: 2px; border-radius: 6px; }
.fitfox .ff-enlace { text-align: left; }
.fitfox .ff-enlace:hover { color: var(--ff-acento); }
.ff-sr { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* ── Cabecera del bloque ── */
.fitfox__cabecera { margin-bottom: calc(18px * var(--ff-e)); }
.fitfox.fitfox .fitfox__titulo { font-size: 1.6em; font-weight: 800; line-height: 1.2; }
.fitfox__subtitulo { color: var(--ff-tenue); margin-top: 6px !important; font-size: 1.02em; }
.fitfox__marca { margin-top: 12px !important; font-size: 11px; color: var(--ff-tenue); text-align: right; opacity: .7; }
.fitfox-aviso-admin { padding: 12px 16px; border: 1px dashed #d97706; background: #fffbeb; color: #92400e; border-radius: 8px; font-size: 14px; }
.fitfox-noscript { color: var(--ff-tenue); }

/* ── Esqueleto de carga ── */
.fitfox-esqueleto { display: grid; gap: 12px; grid-template-columns: repeat(3, 1fr); }
.fitfox-esqueleto span { height: 120px; border-radius: var(--ff-radio); background: linear-gradient(90deg, var(--ff-suave) 0%, var(--ff-borde) 50%, var(--ff-suave) 100%); background-size: 200% 100%; animation: ff-brillo 1.3s ease-in-out infinite; }
.fitfox-esqueleto--calendario { grid-template-columns: repeat(7, 1fr); }
.fitfox-esqueleto--calendario span { height: 70px; }
.fitfox-esqueleto--boton { display: block; }
.fitfox-esqueleto--boton span { display: block; width: 180px; height: 46px; border-radius: 999px; }
@keyframes ff-brillo { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } }
.fitfox--cargando .fitfox__cuerpo > :not(.fitfox-esqueleto) { opacity: .55; transition: opacity .2s; pointer-events: none; }
@media (prefers-reduced-motion: reduce) { .fitfox-esqueleto span { animation: none; } }

/* ── Estados (vacío, error) ── */
.ff-estado { padding: calc(36px * var(--ff-e)) 20px; text-align: center; color: var(--ff-tenue); border: 1px dashed var(--ff-borde); border-radius: var(--ff-radio); }
.ff-estado p { margin-bottom: 12px !important; }
.ff-estado p:last-child { margin-bottom: 0 !important; }
.ff-estado__icono { display: block; width: 40px; height: 40px; margin: 0 auto 10px; border-radius: 50%; background: var(--ff-acento-suave); position: relative; }
.ff-estado__icono::after { content: ""; position: absolute; inset: 12px 11px 11px; border: 2px solid var(--ff-acento); border-radius: 3px; border-top-width: 5px; }
.ff-estado--error { border-color: color-mix(in srgb, var(--ff-lleno) 40%, transparent); color: var(--ff-lleno); }

/* ═══════════ Botones ═══════════ */
.fitfox.fitfox .ff-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  min-height: 42px; padding: 0 20px; border-radius: min(var(--ff-radio), 12px);
  font-weight: 700; font-size: .95em; line-height: 1.1; white-space: nowrap; text-align: center;
  background: var(--ff-acento); color: var(--ff-acento-texto); border: 2px solid var(--ff-acento);
  transition: transform .15s ease, filter .15s ease, background .15s ease, color .15s ease; cursor: pointer;
}
.fitfox.fitfox .ff-btn:hover { filter: brightness(1.07); transform: translateY(-1px); color: var(--ff-acento-texto); }
.fitfox.fitfox .ff-btn:active { transform: translateY(0); }
.fitfox.fitfox .ff-btn--sec { background: transparent; color: var(--ff-acento); }
.fitfox.fitfox .ff-btn--sec:hover { background: var(--ff-acento-suave); color: var(--ff-acento); filter: none; }
.fitfox.fitfox .ff-btn--peq { min-height: 34px; padding: 0 14px; font-size: .86em; }
.fitfox.fitfox .ff-btn--pequeno { min-height: 36px; padding: 0 16px; font-size: .88em; }
.fitfox.fitfox .ff-btn--grande { min-height: 54px; padding: 0 30px; font-size: 1.08em; }
.fitfox.fitfox .ff-btn--bloque { display: flex; width: 100%; }
.fitfox.fitfox .ff-btn--off { background: var(--ff-suave); border-color: var(--ff-borde); color: var(--ff-tenue); cursor: default; transform: none; filter: none; white-space: normal; }
.fitfox--boton-borde .ff-btn:not(.ff-btn--off) { background: transparent !important; color: var(--ff-acento) !important; }
.fitfox--boton-borde .ff-btn:not(.ff-btn--off):hover { background: var(--ff-acento) !important; color: var(--ff-acento-texto) !important; }
.fitfox--boton-pastilla .ff-btn { border-radius: 999px !important; }
.fitfox--boton-texto .ff-btn:not(.ff-btn--off) { background: transparent !important; border-color: transparent !important; color: var(--ff-acento) !important; padding: 0 4px !important; min-height: 0 !important; text-decoration: underline; text-underline-offset: 3px; }
.fitfox--boton-texto .ff-btn:not(.ff-btn--off)::after { content: "→"; text-decoration: none; }
.ff-boton-suelto { display: flex; }
.ff-alinear-centro { justify-content: center; }
.ff-alinear-derecha { justify-content: flex-end; }

/* ── Chips, badges, puntos ── */
.ff-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.ff-chip { --ff-chip: var(--ff-acento-suave); --ff-chip-texto: var(--ff-acento); display: inline-flex; align-items: center; padding: 3px 10px; border-radius: 999px; font-size: .74em; font-weight: 700; letter-spacing: .02em; background: var(--ff-chip); color: var(--ff-chip-texto); }
.ff-badges { display: flex; flex-wrap: wrap; gap: 6px; }
.ff-badge { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border-radius: 6px; font-size: .74em; font-weight: 700; background: var(--ff-suave); color: var(--ff-tenue); white-space: nowrap; }
.ff-badge::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; opacity: .8; }
.ff-badge--tipo { background: var(--ff-acento-suave); color: var(--ff-acento); }
.ff-badge--tipo::before { display: none; }
.ff-badge--ok { color: var(--ff-ok); background: color-mix(in srgb, var(--ff-ok) 12%, transparent); }
.ff-badge--aviso { color: var(--ff-aviso); background: color-mix(in srgb, var(--ff-aviso) 13%, transparent); }
.ff-badge--lleno { color: var(--ff-lleno); background: color-mix(in srgb, var(--ff-lleno) 12%, transparent); }
.ff-badge--off { color: var(--ff-tenue); text-decoration: line-through; }
.ff-punto { display: inline-block; width: 9px; height: 9px; border-radius: 50%; flex: none; }

/* ── Filtros y buscador ── */
.ff-barra { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-bottom: calc(18px * var(--ff-e)); }
.ff-filtros { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none; padding: 2px; margin: 0 0 calc(16px * var(--ff-e)); -webkit-overflow-scrolling: touch; }
.ff-barra .ff-filtros { margin: 0; flex: 1 1 auto; }
.ff-filtros::-webkit-scrollbar { display: none; }
.fitfox.fitfox .ff-filtro { flex: 0 0 auto; display: inline-flex; align-items: center; gap: 7px; padding: 7px 14px; border-radius: 999px; border: 1px solid var(--ff-borde); background: var(--ff-superficie); font-size: .86em; font-weight: 600; white-space: nowrap; transition: all .15s; }
.fitfox.fitfox .ff-filtro:hover { border-color: var(--ff-acento); }
.fitfox.fitfox .ff-filtro.is-on { background: var(--ff-texto); color: var(--ff-superficie); border-color: var(--ff-texto); }
.ff-buscador { flex: 0 1 300px; position: relative; }
.ff-buscador input { width: 100%; height: 42px; padding: 0 14px 0 40px; border: 1px solid var(--ff-borde); border-radius: 999px; background: var(--ff-superficie); color: var(--ff-texto); font: inherit; font-size: .95em; outline: none; box-shadow: none; }
.ff-buscador input:focus { border-color: var(--ff-acento); box-shadow: 0 0 0 3px var(--ff-acento-suave); }
.ff-buscador::before { content: ""; position: absolute; left: 15px; top: 50%; width: 12px; height: 12px; margin-top: -8px; border: 2px solid var(--ff-tenue); border-radius: 50%; }
.ff-buscador::after { content: ""; position: absolute; left: 26px; top: 50%; width: 6px; height: 2px; margin-top: 4px; background: var(--ff-tenue); transform: rotate(45deg); }
.ff-leyenda { display: flex; flex-wrap: wrap; gap: 8px 16px; margin-top: calc(14px * var(--ff-e)); font-size: .84em; color: var(--ff-tenue); }
.ff-leyenda span { display: inline-flex; align-items: center; gap: 6px; }

/* ── Paginación y «ver más» ── */
.ff-mas { display: flex; justify-content: center; margin-top: calc(22px * var(--ff-e)); }
.ff-paginas { display: flex; justify-content: center; flex-wrap: wrap; gap: 6px; margin-top: calc(24px * var(--ff-e)); }
.fitfox.fitfox .ff-pag { min-width: 40px; height: 40px; padding: 0 8px; border-radius: 10px; border: 1px solid var(--ff-borde); background: var(--ff-superficie); font-weight: 700; text-align: center; }
.fitfox.fitfox .ff-pag:hover { border-color: var(--ff-acento); }
.fitfox.fitfox .ff-pag.is-on { background: var(--ff-acento); border-color: var(--ff-acento); color: var(--ff-acento-texto); }

/* ═══════════ CALENDARIOS ═══════════ */

/* Navegación */
.ff-nav { display: flex; align-items: center; gap: 8px; margin-bottom: calc(16px * var(--ff-e)); }
.ff-nav__titulo { flex: 1; font-size: 1.25em; font-weight: 800; letter-spacing: -.01em; order: -1; }
.fitfox.fitfox .ff-nav__btn { width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--ff-borde); background: var(--ff-superficie); font-size: 22px; line-height: 1; display: inline-flex; align-items: center; justify-content: center; text-align: center; }
.fitfox.fitfox .ff-nav__btn:hover { border-color: var(--ff-acento); color: var(--ff-acento); }
.fitfox.fitfox .ff-nav__hoy { height: 40px; padding: 0 16px; border-radius: 999px; border: 1px solid var(--ff-borde); background: var(--ff-superficie); font-weight: 700; font-size: .88em; }
.fitfox.fitfox .ff-nav__hoy:hover { border-color: var(--ff-acento); color: var(--ff-acento); }
.ff-nav__btn[data-ff-nav="-1"] { order: 0; }
.ff-nav__hoy { order: 1; }
.ff-nav__btn[data-ff-nav="1"] { order: 2; }

/* Mes */
.ff-mes { --ff-dias: 7; border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); overflow: hidden; background: var(--ff-superficie); }
.ff-mes__fila--cab { display: grid; grid-template-columns: repeat(var(--ff-dias), minmax(0, 1fr)); background: var(--ff-suave); border-bottom: 1px solid var(--ff-borde); }
.ff-mes__cab { padding: 10px 8px; font-size: .74em; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: var(--ff-tenue); }
.ff-mes__cuerpo { display: grid; grid-template-columns: repeat(var(--ff-dias), minmax(0, 1fr)); }
.ff-mes__dia { min-height: 118px; padding: 6px; border-right: 1px solid var(--ff-borde); border-bottom: 1px solid var(--ff-borde); display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.ff-mes__dia:nth-child(7n) { border-right: 0; }
.ff-mes__dia.is-fuera { background: var(--ff-suave); }
.ff-mes__dia.is-fuera .ff-mes__num { opacity: .4; }
.ff-mes__num { font-size: .82em; font-weight: 700; width: 26px; height: 26px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; margin-bottom: 2px; }
.ff-mes__dia.is-hoy .ff-mes__num { background: var(--ff-acento); color: var(--ff-acento-texto); }
.fitfox.fitfox .ff-pastilla { --ff-ev: var(--ff-acento); --ff-ev-texto: var(--ff-acento-texto); display: block; width: 100%; padding: 3px 7px; border-radius: 6px; font-size: .76em; line-height: 1.35; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; background: color-mix(in srgb, var(--ff-ev) 15%, var(--ff-superficie)); color: var(--ff-texto); border-left: 3px solid var(--ff-ev); text-align: left; }
.fitfox.fitfox .ff-pastilla:hover { background: var(--ff-ev); color: var(--ff-ev-texto); }
.ff-pastilla b { font-weight: 800; }
.fitfox--estilo-color .ff-pastilla { background: var(--ff-ev) !important; color: var(--ff-ev-texto) !important; }
.ff-pastilla.is-cancelada, .ff-bloque.is-cancelada, .ff-celda.is-cancelada { opacity: .5; text-decoration: line-through; }
.fitfox.fitfox .ff-mes__mas { font-size: .74em; font-weight: 700; color: var(--ff-acento); padding: 1px 6px; text-align: left; }
.ff-mes--desplazable { overflow-x: auto; }
.ff-mes--desplazable .ff-mes__fila--cab, .ff-mes--desplazable .ff-mes__cuerpo { min-width: 720px; }

/* Panel: mes compacto + día */
.ff-panel { display: grid; grid-template-columns: minmax(260px, 340px) 1fr; gap: calc(24px * var(--ff-e)); align-items: start; }
.ff-panel--apilado, .fitfox[data-ancho="xs"] .ff-panel, .fitfox[data-ancho="s"] .ff-panel { grid-template-columns: 1fr; }
.ff-mini { background: var(--ff-superficie); border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); padding: 14px; }
.ff-mini__rejilla { display: grid; grid-template-columns: repeat(var(--ff-dias, 7), 1fr); gap: 2px; }
.ff-mini__cab { text-align: center; font-size: .7em; font-weight: 800; color: var(--ff-tenue); text-transform: uppercase; padding: 4px 0; }
.fitfox.fitfox .ff-mini__dia { aspect-ratio: 1; border-radius: 10px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; font-size: .9em; font-weight: 600; position: relative; text-align: center; }
.fitfox.fitfox .ff-mini__dia:hover { background: var(--ff-suave); }
.ff-mini__dia.is-fuera { opacity: .35; }
.ff-mini__dia.is-hoy span { color: var(--ff-acento); font-weight: 800; }
.fitfox.fitfox .ff-mini__dia.is-on { background: var(--ff-acento); color: var(--ff-acento-texto); }
.fitfox.fitfox .ff-mini__dia.is-on span { color: inherit; }
.ff-mini__puntos { display: flex; gap: 2px; height: 5px; }
.ff-mini__puntos b { width: 5px; height: 5px; border-radius: 50%; }
.ff-mini__dia.is-on .ff-mini__puntos b { background: currentColor !important; }
.ff-panel__titulo { font-size: 1.08em !important; font-weight: 800 !important; margin: 0 0 12px !important; }
.ff-tira + .ff-panel__titulo { margin-top: 14px !important; }

/* Lista de sesiones (fila) */
.ff-lista { display: flex; flex-direction: column; gap: calc(10px * var(--ff-e)); }
.ff-sesion { --ff-ev: var(--ff-acento); display: grid; grid-template-columns: 64px 1fr auto; gap: 14px; align-items: center; padding: calc(14px * var(--ff-e)) 16px; background: var(--ff-superficie); border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); position: relative; overflow: hidden; }
.ff-sesion::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--ff-ev); }
.fitfox--estilo-tarjeta .ff-sesion { border-color: transparent; box-shadow: var(--ff-sombra); }
.fitfox--estilo-minimo .ff-sesion { border: 0; border-bottom: 1px solid var(--ff-borde); border-radius: 0; background: none; padding-left: 14px; }
.fitfox--estilo-color .ff-sesion { background: color-mix(in srgb, var(--ff-ev) 10%, var(--ff-superficie)); border-color: transparent; }
.ff-sesion__hora { display: flex; flex-direction: column; line-height: 1.15; }
.ff-sesion__hora strong { font-size: 1.15em; font-weight: 800; font-variant-numeric: tabular-nums; }
.ff-sesion__hora span { font-size: .8em; color: var(--ff-tenue); font-variant-numeric: tabular-nums; }
.ff-sesion__cuerpo { min-width: 0; }
.ff-sesion__fecha { font-size: .78em; font-weight: 700; color: var(--ff-acento); text-transform: uppercase; letter-spacing: .04em; }
.fitfox.fitfox .ff-sesion__titulo { font-size: 1.02em; font-weight: 800; line-height: 1.3; }
.ff-sesion__desc { color: var(--ff-tenue); font-size: .88em; margin-top: 4px !important; }
.ff-sesion__lado { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; }
.ff-sesion.is-cancelada .ff-sesion__titulo, .ff-sesion.is-cancelada .ff-sesion__hora { text-decoration: line-through; opacity: .55; }
.ff-sesion.is-pasada { opacity: .55; }
.ff-meta { display: flex; flex-wrap: wrap; gap: 4px 14px; color: var(--ff-tenue); font-size: .85em; margin-top: 3px; }
.ff-meta span { display: inline-flex; align-items: center; gap: 5px; }
.ff-meta__lugar::before, .ff-i-lugar::before { content: ""; width: 10px; height: 10px; border: 2px solid currentColor; border-radius: 50% 50% 50% 0; transform: rotate(-45deg); flex: none; }
.ff-meta__profe::before { content: ""; width: 10px; height: 10px; border-radius: 50%; border: 2px solid currentColor; flex: none; }
.ff-meta__precio { font-weight: 700; color: var(--ff-texto); }
.fitfox[data-ancho="xs"] .ff-sesion { grid-template-columns: 54px 1fr; }
.fitfox[data-ancho="xs"] .ff-sesion__lado { grid-column: 1 / -1; flex-direction: row; justify-content: space-between; align-items: center; }
.fitfox[data-ancho="xs"] .ff-sesion__lado:empty { display: none; }

/* Tira de días (agenda, semana en el móvil) */
.ff-tira { display: flex; gap: 8px; overflow-x: auto; scroll-snap-type: x proximity; padding: 4px 2px 10px; margin-bottom: 4px; scrollbar-width: thin; -webkit-overflow-scrolling: touch; }
.fitfox.fitfox .ff-tira__dia { flex: 0 0 auto; width: 60px; padding: 8px 0 10px; border-radius: 14px; border: 1px solid var(--ff-borde); background: var(--ff-superficie); display: flex; flex-direction: column; align-items: center; gap: 1px; scroll-snap-align: start; text-align: center; position: relative; transition: all .15s; }
.ff-tira__dia small { font-size: .62em; font-weight: 800; text-transform: uppercase; color: var(--ff-acento); letter-spacing: .05em; min-height: 1.1em; }
.ff-tira__dia span { font-size: .72em; font-weight: 700; text-transform: uppercase; color: var(--ff-tenue); }
.ff-tira__dia b { font-size: 1.3em; font-weight: 800; line-height: 1.2; }
.ff-tira__dia i { width: 5px; height: 5px; border-radius: 50%; background: transparent; margin-top: 2px; }
.ff-tira__dia.tiene i { background: var(--ff-acento); }
.ff-tira__dia.vacio { opacity: .55; }
.fitfox.fitfox .ff-tira__dia:hover { border-color: var(--ff-acento); }
.fitfox.fitfox .ff-tira__dia.is-on { background: var(--ff-acento); border-color: var(--ff-acento); color: var(--ff-acento-texto); opacity: 1; box-shadow: 0 8px 18px -8px var(--ff-acento); }
.ff-tira__dia.is-on span, .ff-tira__dia.is-on small { color: inherit; opacity: .85; }
.ff-tira__dia.is-on i { background: currentColor; }
.ff-tira--semana { justify-content: space-between; gap: 4px; overflow: visible; }
.fitfox.fitfox .ff-tira--semana .ff-tira__dia { flex: 1 1 0; width: auto; min-width: 0; padding: 8px 0; border-radius: 12px; }

/* Semana por horas */
.ff-sem { --ff-dias: 7; border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); overflow: hidden; background: var(--ff-superficie); }
.ff-sem__cabecera { display: grid; grid-template-columns: 56px repeat(var(--ff-dias), minmax(0, 1fr)); border-bottom: 1px solid var(--ff-borde); background: var(--ff-suave); }
.ff-sem__cab { padding: 10px 6px; text-align: center; display: flex; flex-direction: column; align-items: center; }
.ff-sem__cab span { font-size: .72em; font-weight: 800; text-transform: uppercase; color: var(--ff-tenue); letter-spacing: .06em; }
.ff-sem__cab b { font-size: 1.2em; font-weight: 800; width: 34px; height: 34px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; }
.ff-sem__cab.is-hoy b { background: var(--ff-acento); color: var(--ff-acento-texto); }
.ff-sem__cuerpo { display: grid; grid-template-columns: 56px repeat(var(--ff-dias), minmax(0, 1fr)); position: relative; }
.ff-sem__horas { position: relative; grid-column: 1; }
.ff-sem__hora { position: absolute; left: 0; right: 0; height: 0; }
.ff-sem__hora span { position: absolute; right: 8px; top: 2px; font-size: .7em; color: var(--ff-tenue); font-variant-numeric: tabular-nums; }
.ff-sem__hora::after { content: ""; position: absolute; left: 56px; width: 100vw; max-width: 2000px; border-top: 1px dashed var(--ff-borde); }
.ff-sem__cuerpo { overflow: hidden; }
.ff-sem__col { position: relative; border-left: 1px solid var(--ff-borde); }
.ff-sem__col.is-hoy { background: var(--ff-acento-suave); }
.fitfox.fitfox .ff-bloque { --ff-ev: var(--ff-acento); --ff-ev-texto: #fff; position: absolute; padding: 5px 7px; border-radius: 8px; background: color-mix(in srgb, var(--ff-ev) 16%, var(--ff-superficie)); border-left: 3px solid var(--ff-ev); color: var(--ff-texto); font-size: .76em; line-height: 1.25; overflow: hidden; display: flex; flex-direction: column; gap: 1px; text-align: left; z-index: 1; transition: box-shadow .15s, transform .15s; }
.fitfox.fitfox .ff-bloque:hover { z-index: 2; box-shadow: var(--ff-sombra-alta); transform: scale(1.02); }
.ff-bloque b { font-weight: 800; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ff-bloque span { opacity: .8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fitfox--estilo-color .ff-bloque { background: var(--ff-ev) !important; color: var(--ff-ev-texto) !important; }
.ff-bloque.is-completo::after { content: ""; position: absolute; right: 5px; top: 6px; width: 7px; height: 7px; border-radius: 50%; background: var(--ff-lleno); }
.ff-sem--desplazable { overflow-x: auto; }
.ff-sem--desplazable .ff-sem__cabecera, .ff-sem--desplazable .ff-sem__cuerpo { min-width: 760px; }

/* Horario semanal (tabla) */
.ff-horario-envoltura { overflow-x: auto; border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); background: var(--ff-superficie); }
.fitfox.fitfox .ff-horario { table-layout: fixed; min-width: 640px; }
.fitfox.fitfox .ff-horario thead th { padding: 12px 8px; background: var(--ff-suave); border-bottom: 1px solid var(--ff-borde); text-align: center; font-weight: 800; }
.ff-horario thead th span { display: block; font-size: .82em; text-transform: uppercase; letter-spacing: .05em; }
.ff-horario thead th small { display: block; font-size: .74em; color: var(--ff-tenue); font-weight: 600; }
.ff-horario thead th.is-hoy { color: var(--ff-acento); }
.fitfox.fitfox .ff-horario .ff-horario__esquina { width: 70px; }
.fitfox.fitfox .ff-horario__hora { width: 70px; padding: 10px 8px; font-weight: 800; font-size: .88em; color: var(--ff-tenue); text-align: center; vertical-align: top; font-variant-numeric: tabular-nums; border-top: 1px solid var(--ff-borde); }
.fitfox.fitfox .ff-horario td { padding: 5px; vertical-align: top; border-top: 1px solid var(--ff-borde); border-left: 1px solid var(--ff-borde); }
.fitfox.fitfox .ff-horario td.is-hoy { background: var(--ff-acento-suave); }
.fitfox.fitfox .ff-celda { --ff-ev: var(--ff-acento); display: flex; flex-direction: column; width: 100%; padding: 7px 9px; margin-bottom: 4px; border-radius: 9px; background: color-mix(in srgb, var(--ff-ev) 15%, var(--ff-superficie)); border-left: 3px solid var(--ff-ev); font-size: .8em; line-height: 1.3; text-align: left; transition: transform .15s; }
.fitfox.fitfox .ff-celda:hover { transform: translateY(-1px); box-shadow: var(--ff-sombra); }
.ff-celda b { font-weight: 800; font-size: 1.05em; }
.ff-celda span { color: var(--ff-tenue); }
.ff-celda .ff-celda__plazas { font-weight: 700; color: var(--ff-texto); }
.ff-celda.is-completo .ff-celda__plazas { color: var(--ff-lleno); }
.fitfox--estilo-color .ff-celda { background: var(--ff-ev) !important; color: var(--ff-ev-texto) !important; }
.fitfox--estilo-color .ff-celda span { color: inherit; opacity: .85; }

/* Próximas sesiones (agrupadas) */
.ff-proximas { display: flex; flex-direction: column; gap: calc(22px * var(--ff-e)); }
.fitfox.fitfox .ff-grupo__fecha { display: flex; align-items: center; gap: 12px; font-size: 1.02em; font-weight: 800; margin-bottom: 12px; }
.ff-grupo__fecha em { font-style: normal; font-size: .72em; text-transform: uppercase; letter-spacing: .06em; padding: 2px 8px; border-radius: 6px; background: var(--ff-acento); color: var(--ff-acento-texto); margin-left: 6px; vertical-align: middle; }
.ff-calendarito { display: inline-flex; flex-direction: column; align-items: center; justify-content: center; width: 48px; height: 52px; border-radius: 12px; background: var(--ff-superficie); border: 1px solid var(--ff-borde); overflow: hidden; flex: none; box-shadow: var(--ff-sombra); }
.ff-calendarito small { width: 100%; text-align: center; font-size: .62em; font-weight: 800; text-transform: uppercase; padding: 2px 0; background: var(--ff-acento); color: var(--ff-acento-texto); letter-spacing: .06em; }
.ff-calendarito b { font-size: 1.3em; font-weight: 800; line-height: 1.5; }

/* Línea de tiempo */
.ff-linea { position: relative; display: flex; flex-direction: column; gap: calc(18px * var(--ff-e)); }
.ff-linea::before { content: ""; position: absolute; left: 24px; top: 8px; bottom: 8px; width: 2px; background: linear-gradient(var(--ff-acento), var(--ff-borde)); }
.ff-linea__item { --ff-ev: var(--ff-acento); display: grid; grid-template-columns: 48px 1fr; gap: 18px; position: relative; }
.ff-linea__marca { position: relative; z-index: 1; }
.ff-linea__marca .ff-calendarito small { background: var(--ff-ev); }
.ff-linea__tarjeta { background: var(--ff-superficie); border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); padding: calc(16px * var(--ff-e)) 18px; display: flex; flex-direction: column; gap: 6px; border-top: 3px solid var(--ff-ev); }
.fitfox--estilo-tarjeta .ff-linea__tarjeta { box-shadow: var(--ff-sombra); border-color: transparent; border-top-color: var(--ff-ev); }
.ff-linea__cuando { font-size: .8em; font-weight: 700; color: var(--ff-tenue); text-transform: uppercase; letter-spacing: .04em; }
.ff-linea__pie { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; margin-top: 4px; }
.ff-linea__pie:empty { display: none; }
.fitfox[data-ancho="l"] .ff-linea::before { left: 50%; margin-left: -1px; }
.fitfox[data-ancho="l"] .ff-linea__item { grid-template-columns: 1fr 48px 1fr; }
.fitfox[data-ancho="l"] .ff-linea__marca { grid-column: 2; }
.fitfox[data-ancho="l"] .ff-linea__tarjeta { grid-column: 3; grid-row: 1; }
.fitfox[data-ancho="l"] .ff-linea__item.is-par .ff-linea__tarjeta { grid-column: 1; text-align: right; align-items: flex-end; }
.fitfox[data-ancho="l"] .ff-linea__item.is-par .ff-meta, .fitfox[data-ancho="l"] .ff-linea__item.is-par .ff-chips { justify-content: flex-end; }
.ff-linea__item.is-cancelada .ff-linea__tarjeta { opacity: .55; }

/* Hoy (widget) */
.ff-hoy { background: var(--ff-superficie); border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); overflow: hidden; }
.fitfox--estilo-tarjeta .ff-hoy { box-shadow: var(--ff-sombra); border-color: transparent; }
.ff-hoy__cab { display: flex; align-items: baseline; gap: 10px; padding: 14px 18px; background: var(--ff-acento); color: var(--ff-acento-texto); }
.ff-hoy__etiqueta { font-size: 1.3em; font-weight: 800; }
.ff-hoy__fecha { font-size: .85em; opacity: .85; }
.ff-hoy__lista li { --ff-ev: var(--ff-acento); display: flex; align-items: center; gap: 12px; padding: 11px 18px; border-bottom: 1px solid var(--ff-borde); }
.ff-hoy__lista li:last-child { border-bottom: 0; }
.ff-hoy__lista li.is-cancelada { opacity: .5; text-decoration: line-through; }
.ff-hoy__hora { font-weight: 800; font-variant-numeric: tabular-nums; min-width: 48px; padding-left: 10px; border-left: 3px solid var(--ff-ev); }
.ff-hoy__nombre { flex: 1; font-weight: 700; min-width: 0; display: flex; flex-direction: column; }
.ff-hoy__nombre small { font-weight: 500; color: var(--ff-tenue); font-size: .82em; }
.ff-hoy__vacio { padding: 18px; color: var(--ff-tenue); }

/* ═══════════ CATÁLOGOS ═══════════ */

/* Rejilla de tarjetas: columnas según el ancho del bloque */
.ff-rejilla { display: grid; gap: calc(22px * var(--ff-e)); grid-template-columns: repeat(var(--ff-cols), minmax(0, 1fr)); }
.fitfox[data-ancho="m"] .ff-rejilla { grid-template-columns: repeat(min(var(--ff-cols), 3), minmax(0, 1fr)); }
.fitfox[data-ancho="s"] .ff-rejilla { grid-template-columns: repeat(var(--ff-cols-t), minmax(0, 1fr)); }
.fitfox[data-ancho="xs"] .ff-rejilla { grid-template-columns: repeat(var(--ff-cols-m), minmax(0, 1fr)); gap: 16px; }

.ff-tarjeta { display: flex; flex-direction: column; background: var(--ff-superficie); border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); overflow: hidden; transition: transform .2s ease, box-shadow .2s ease; position: relative; }
.fitfox--estilo-tarjeta .ff-tarjeta { border-color: transparent; box-shadow: var(--ff-sombra); }
.fitfox--estilo-tarjeta .ff-tarjeta:hover { transform: translateY(-3px); box-shadow: var(--ff-sombra-alta); }
.fitfox--estilo-minimo .ff-tarjeta { border: 0; background: none; border-radius: 0; }
.fitfox--estilo-minimo .ff-tarjeta__cuerpo, .fitfox--estilo-minimo .ff-tarjeta__pie { padding-left: 0; padding-right: 0; }
.fitfox--estilo-color .ff-tarjeta { background: var(--ff-acento-suave); border-color: transparent; }
.ff-tarjeta__media { aspect-ratio: var(--ff-proporcion); overflow: hidden; background: var(--ff-suave); }
.ff-tarjeta__media img { width: 100%; height: 100% !important; object-fit: cover; display: block; transition: transform .5s ease; }
.ff-tarjeta:hover .ff-tarjeta__media img { transform: scale(1.04); }
.ff-tarjeta__media--sin, .ff-fila__media--sin { --ff-media: var(--ff-acento); --ff-media-texto: #fff; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, var(--ff-media), color-mix(in srgb, var(--ff-media) 60%, #000)); color: var(--ff-media-texto); }
.ff-tarjeta__media--sin span, .ff-fila__media--sin span { font-size: 3em; font-weight: 800; opacity: .9; }
.ff-tarjeta__banda { --ff-banda: var(--ff-acento); height: 6px; background: linear-gradient(90deg, var(--ff-acento), var(--ff-banda)); }
.ff-tarjeta__cuerpo { padding: calc(18px * var(--ff-e)) 20px 8px; display: flex; flex-direction: column; gap: calc(10px * var(--ff-e)); flex: 1; }
.fitfox.fitfox .ff-tarjeta__titulo { font-size: 1.18em; font-weight: 800; line-height: 1.25; }
.ff-tarjeta__texto { color: var(--ff-tenue); font-size: .92em; }
.ff-tarjeta__pie { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 20px calc(18px * var(--ff-e)); flex-wrap: wrap; }
.ff-tarjeta__pie:empty { display: none; }
.ff-tarjeta--bonos .ff-tarjeta__cuerpo, .ff-tarjeta--entradas .ff-tarjeta__cuerpo { padding-top: calc(22px * var(--ff-e)); }

/* Datos de actividad (fechas, horario…) */
.ff-datos-lista { display: flex; flex-direction: column; gap: 4px; font-size: .88em; color: var(--ff-tenue); }
.ff-datos-lista li { display: flex; align-items: flex-start; gap: 8px; }
.ff-datos-lista li::before { content: ""; flex: none; width: 14px; height: 14px; margin-top: 3px; background: currentColor; opacity: .75; -webkit-mask: var(--ff-icono) center / contain no-repeat; mask: var(--ff-icono) center / contain no-repeat; }
.ff-i-fecha { --ff-icono: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7 2v2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-2V2h-2v2H9V2H7zm-2 8h14v10H5V10z'/%3E%3C/svg%3E"); }
.ff-i-hora { --ff-icono: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm1 5v5.4l4 2.4-1 1.7-5-3V7h2z'/%3E%3C/svg%3E"); }
.ff-i-lugar { --ff-icono: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 2a7 7 0 0 0-7 7c0 5 7 13 7 13s7-8 7-13a7 7 0 0 0-7-7zm0 9.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5z'/%3E%3C/svg%3E"); }
.ff-i-edad { --ff-icono: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 12a5 5 0 1 0 0-10 5 5 0 0 0 0 10zm0 2c-4 0-8 2-8 5v3h16v-3c0-3-4-5-8-5z'/%3E%3C/svg%3E"); }
.ff-datos-lista .ff-i-lugar::before { border: 0; border-radius: 0; transform: none; width: 14px; height: 14px; }

/* Precio */
.ff-precio { display: flex; flex-wrap: wrap; align-items: baseline; gap: 2px 6px; line-height: 1.1; }
.ff-precio__desde { font-size: .78em; color: var(--ff-tenue); font-weight: 600; }
.ff-precio__importe { font-size: 1.35em; font-weight: 800; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.ff-precio__forma { font-size: .8em; color: var(--ff-tenue); font-weight: 600; }
.ff-precio__forma::before { content: "/ "; }
.ff-precio__iva { width: 100%; font-size: .7em; color: var(--ff-tenue); }
.ff-precio--grande .ff-precio__importe { font-size: 2.2em; }

/* Incluye / variantes */
.ff-incluye { display: flex; flex-direction: column; gap: 7px; font-size: .9em; }
.ff-incluye li { display: flex; gap: 9px; align-items: flex-start; }
.ff-incluye li::before { content: ""; flex: none; width: 18px; height: 18px; margin-top: 1px; border-radius: 50%; background: var(--ff-acento-suave) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center / 10px no-repeat; box-shadow: inset 0 0 0 20px var(--ff-acento-suave); }
.ff-variantes { display: flex; flex-direction: column; gap: 4px; font-size: .88em; border-top: 1px dashed var(--ff-borde); padding-top: 10px !important; }
.ff-variantes li { display: flex; justify-content: space-between; gap: 10px; }
.ff-variantes span { color: var(--ff-tenue); }
.ff-variantes__mas { color: var(--ff-tenue); font-size: .9em; }

/* Lista con imagen (filas) */
.ff-filas { display: flex; flex-direction: column; gap: calc(16px * var(--ff-e)); }
.ff-fila { display: grid; grid-template-columns: 220px minmax(0, 1fr) auto; gap: 22px; align-items: center; background: var(--ff-superficie); border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); padding: 14px; transition: box-shadow .2s; }
.fitfox--estilo-tarjeta .ff-fila { border-color: transparent; box-shadow: var(--ff-sombra); }
.fitfox--estilo-tarjeta .ff-fila:hover { box-shadow: var(--ff-sombra-alta); }
.fitfox--estilo-minimo .ff-fila { border: 0; border-bottom: 1px solid var(--ff-borde); border-radius: 0; background: none; padding: 16px 0; }
.ff-fila--bonos, .ff-fila--entradas { grid-template-columns: 56px 1fr auto; }
.ff-fila__media { width: 100%; aspect-ratio: 4/3; border-radius: calc(var(--ff-radio) - 4px); overflow: hidden; background: var(--ff-suave); align-self: start; min-width: 0; }
.ff-fila__media img { width: 100%; height: 100% !important; object-fit: cover; display: block; }
.ff-fila__icono { width: 56px; height: 56px; border-radius: 16px; background: var(--ff-acento-suave); color: var(--ff-acento); display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 1.4em; align-self: start; }
.ff-fila__cuerpo { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.ff-fila__lado { display: flex; flex-direction: column; align-items: flex-end; gap: 10px; min-width: 150px; }
.ff-fila__lado .ff-variantes { width: 100%; }
.fitfox[data-ancho="s"] .ff-fila { grid-template-columns: 170px minmax(0, 1fr); }
.fitfox[data-ancho="s"] .ff-fila--bonos, .fitfox[data-ancho="s"] .ff-fila--entradas { grid-template-columns: 56px 1fr; }
.fitfox[data-ancho="s"] .ff-fila__lado, .fitfox[data-ancho="xs"] .ff-fila__lado { grid-column: 1 / -1; flex-direction: row; justify-content: space-between; align-items: center; min-width: 0; flex-wrap: wrap; }
.fitfox[data-ancho="xs"] .ff-fila { grid-template-columns: 1fr; }
.fitfox[data-ancho="xs"] .ff-fila__media { aspect-ratio: 16/9; }
.fitfox[data-ancho="xs"] .ff-fila--bonos, .fitfox[data-ancho="xs"] .ff-fila--entradas { grid-template-columns: 44px 1fr; }
.fitfox[data-ancho="xs"] .ff-fila__icono { width: 44px; height: 44px; }

/* Mosaico */
.ff-mosaico { display: grid; gap: calc(14px * var(--ff-e)); grid-template-columns: repeat(var(--ff-cols), minmax(0, 1fr)); grid-auto-rows: 240px; }
.ff-mosaico__item { --ff-media: var(--ff-acento); position: relative; border-radius: var(--ff-radio); overflow: hidden; background: linear-gradient(135deg, var(--ff-media), color-mix(in srgb, var(--ff-media) 55%, #000)); color: #fff; }
.ff-mosaico__item.is-grande { grid-column: span 2; grid-row: span 2; }
.ff-mosaico__item img { position: absolute; inset: 0; width: 100%; height: 100% !important; object-fit: cover; transition: transform .6s ease; }
.ff-mosaico__item:hover img { transform: scale(1.05); }
.ff-mosaico__velo { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(0,0,0,0) 30%, rgba(0,0,0,.78) 100%); }
.ff-mosaico__texto { position: absolute; left: 0; right: 0; bottom: 0; padding: 18px; display: flex; flex-direction: column; gap: 8px; }
.ff-mosaico__item .ff-tarjeta__titulo { font-size: 1.2em !important; color: #fff; }
.ff-mosaico__item.is-grande .ff-tarjeta__titulo { font-size: 1.7em !important; }
.ff-mosaico__item .ff-enlace:hover { color: #fff; text-decoration: underline; }
.ff-mosaico__cuando { font-size: .85em; opacity: .9; }
.ff-mosaico__pie { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
.ff-mosaico__item .ff-precio__desde, .ff-mosaico__item .ff-precio__forma { color: rgba(255,255,255,.8); }
.ff-mosaico__item .ff-chip { background: rgba(255,255,255,.2); color: #fff; backdrop-filter: blur(4px); }
.fitfox[data-ancho="m"] .ff-mosaico, .fitfox[data-ancho="s"] .ff-mosaico { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.fitfox[data-ancho="xs"] .ff-mosaico { grid-template-columns: 1fr; grid-auto-rows: 220px; }
.fitfox[data-ancho="xs"] .ff-mosaico__item.is-grande { grid-column: auto; grid-row: span 1; }

/* Carrusel */
.ff-carrusel { position: relative; }
.ff-carrusel__pista { display: grid; grid-auto-flow: column; grid-auto-columns: calc((100% - (var(--ff-cols) - 1) * 18px) / var(--ff-cols)); gap: 18px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; padding: 6px 2px 18px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.ff-carrusel__pista::-webkit-scrollbar { display: none; }
.ff-carrusel__pista > * { scroll-snap-align: start; }
.fitfox[data-ancho="m"] .ff-carrusel__pista { grid-auto-columns: calc((100% - 2 * 18px) / 3); }
.fitfox[data-ancho="s"] .ff-carrusel__pista { grid-auto-columns: calc((100% - 18px) / 2.2); }
.fitfox[data-ancho="xs"] .ff-carrusel__pista { grid-auto-columns: 82%; }
.fitfox.fitfox .ff-carrusel__flecha { position: absolute; top: 40%; z-index: 3; width: 44px; height: 44px; border-radius: 50%; background: var(--ff-superficie); box-shadow: var(--ff-sombra-alta); font-size: 24px; line-height: 1; display: flex; align-items: center; justify-content: center; text-align: center; transition: transform .15s; }
.fitfox.fitfox .ff-carrusel__flecha:hover { transform: scale(1.08); color: var(--ff-acento); }
.ff-carrusel__flecha--izq { left: -14px; }
.ff-carrusel__flecha--der { right: -14px; }
.fitfox[data-ancho="xs"] .ff-carrusel__flecha { display: none; }

/* Carta (compacta) */
.ff-carta { display: flex; flex-direction: column; }
.ff-carta__item { display: flex; align-items: baseline; gap: 10px; padding: calc(11px * var(--ff-e)) 0; border-bottom: 1px solid var(--ff-borde); }
.ff-carta__item:last-child { border-bottom: 0; }
.ff-carta__nombre { font-weight: 700; display: flex; flex-direction: column; min-width: 0; }
.ff-carta__nombre small { font-weight: 500; color: var(--ff-tenue); font-size: .82em; }
.ff-carta__puntos { flex: 1; border-bottom: 2px dotted var(--ff-borde); transform: translateY(-4px); min-width: 20px; }
.ff-carta__precio { font-weight: 800; white-space: nowrap; color: var(--ff-acento); font-variant-numeric: tabular-nums; }

/* Destacada (banner) */
.ff-destacada { --ff-media: var(--ff-acento); position: relative; border-radius: var(--ff-radio); overflow: hidden; min-height: 380px; display: flex; align-items: flex-end; color: #fff; background: linear-gradient(135deg, var(--ff-media), color-mix(in srgb, var(--ff-media) 45%, #000)); }
.ff-destacada__img { position: absolute; inset: 0; width: 100%; height: 100% !important; object-fit: cover; }
.ff-destacada__velo { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(0,0,0,.78) 0%, rgba(0,0,0,.35) 55%, rgba(0,0,0,0) 100%); }
.ff-destacada--sin .ff-destacada__velo { background: radial-gradient(circle at 85% 20%, rgba(255,255,255,.18), transparent 50%); }
.ff-destacada__texto { position: relative; padding: calc(40px * var(--ff-e)) calc(44px * var(--ff-e)); max-width: 640px; display: flex; flex-direction: column; gap: 12px; }
.ff-destacada .ff-tarjeta__titulo { font-size: 2.3em !important; line-height: 1.1 !important; color: #fff; }
.ff-destacada .ff-tarjeta__texto, .ff-destacada .ff-datos-lista { color: rgba(255,255,255,.88); font-size: 1em; }
.ff-destacada .ff-enlace:hover { color: #fff; }
.ff-destacada__pie { display: flex; align-items: center; gap: 22px; flex-wrap: wrap; margin-top: 6px; }
.ff-destacada .ff-precio__desde, .ff-destacada .ff-precio__forma { color: rgba(255,255,255,.8); }
.ff-destacada .ff-chip { background: rgba(255,255,255,.2); color: #fff; }
.ff-destacada .ff-badge { background: rgba(255,255,255,.18); color: #fff; }
.fitfox[data-ancho="xs"] .ff-destacada { min-height: 320px; }
.fitfox[data-ancho="xs"] .ff-destacada__texto { padding: 24px 20px; }
.fitfox[data-ancho="xs"] .ff-destacada .ff-tarjeta__titulo { font-size: 1.7em !important; }
.fitfox[data-ancho="xs"] .ff-destacada__velo { background: linear-gradient(180deg, rgba(0,0,0,.1) 0%, rgba(0,0,0,.8) 70%); }

/* Tabla de precios */
.ff-precios { --ff-n: 3; display: grid; grid-template-columns: repeat(var(--ff-n), minmax(0, 1fr)); gap: calc(20px * var(--ff-e)); align-items: stretch; }
.fitfox[data-ancho="s"] .ff-precios { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.fitfox[data-ancho="xs"] .ff-precios { grid-template-columns: 1fr; }
.ff-plan { position: relative; display: flex; flex-direction: column; gap: 16px; padding: calc(28px * var(--ff-e)) 24px; background: var(--ff-superficie); border: 1px solid var(--ff-borde); border-radius: calc(var(--ff-radio) + 4px); }
.fitfox--estilo-tarjeta .ff-plan { box-shadow: var(--ff-sombra); border-color: transparent; }
.ff-plan.is-destacado { border: 2px solid var(--ff-acento); box-shadow: 0 24px 50px -20px color-mix(in srgb, var(--ff-acento) 55%, transparent); }
.fitfox[data-ancho="l"] .ff-plan.is-destacado, .fitfox[data-ancho="m"] .ff-plan.is-destacado { transform: translateY(-10px); }
.fitfox--estilo-color .ff-plan.is-destacado { background: var(--ff-acento); color: var(--ff-acento-texto); }
.fitfox--estilo-color .ff-plan.is-destacado .ff-precio__desde, .fitfox--estilo-color .ff-plan.is-destacado .ff-precio__forma, .fitfox--estilo-color .ff-plan.is-destacado .ff-tarjeta__texto { color: inherit; opacity: .85; }
.ff-plan__cinta { position: absolute; top: -13px; left: 50%; transform: translateX(-50%); padding: 4px 14px; border-radius: 999px; background: var(--ff-acento); color: var(--ff-acento-texto); font-size: .72em; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; white-space: nowrap; }
.fitfox--estilo-color .ff-plan.is-destacado .ff-plan__cinta { background: var(--ff-texto); color: var(--ff-superficie); }
.ff-plan .ff-tarjeta__titulo { font-size: 1.1em !important; text-transform: uppercase; letter-spacing: .04em !important; color: var(--ff-tenue); }
.ff-plan.is-destacado .ff-tarjeta__titulo { color: var(--ff-acento); }
.fitfox--estilo-color .ff-plan.is-destacado .ff-tarjeta__titulo { color: inherit; }
.ff-plan__otros { display: flex; flex-direction: column; gap: 3px; font-size: .85em; color: var(--ff-tenue); margin-top: -8px !important; }
.ff-plan__otros b { color: var(--ff-texto); }
.ff-plan .ff-incluye { flex: 1; padding-top: 14px !important; border-top: 1px solid var(--ff-borde); }
.ff-plan__pie { margin-top: auto; }

/* Comparativa */
.ff-tabla-envoltura { overflow-x: auto; border: 1px solid var(--ff-borde); border-radius: var(--ff-radio); background: var(--ff-superficie); }
.fitfox.fitfox .ff-comparativa { min-width: 560px; }
.fitfox.fitfox .ff-comparativa th, .fitfox.fitfox .ff-comparativa td { padding: 13px 16px; border-bottom: 1px solid var(--ff-borde); text-align: center; vertical-align: middle; }
.fitfox.fitfox .ff-comparativa tbody th { text-align: left; font-weight: 600; color: var(--ff-tenue); position: sticky; left: 0; background: var(--ff-superficie); z-index: 1; }
.fitfox.fitfox .ff-comparativa thead th { font-weight: 800; background: var(--ff-suave); }
.fitfox.fitfox .ff-comparativa .is-destacado { background: var(--ff-acento-suave); }
.ff-comparativa thead .ff-tarjeta__titulo { font-size: 1em; }
.ff-comparativa .ff-precio { justify-content: center; }
.ff-comparativa .ff-precio__importe { font-size: 1.15em; }
.fitfox.fitfox .ff-comparativa tr:last-child th, .fitfox.fitfox .ff-comparativa tr:last-child td { border-bottom: 0; }
.ff-si { display: inline-flex; width: 24px; height: 24px; border-radius: 50%; align-items: center; justify-content: center; background: color-mix(in srgb, var(--ff-ok) 14%, transparent); color: var(--ff-ok); font-weight: 900; font-size: .85em; }
.ff-no { color: var(--ff-tenue); opacity: .6; }

/* Ticket */
/* Un ticket necesita ancho: como mucho 2 por fila, y 1 en cuanto el bloque se estrecha. */
.fitfox .ff-rejilla.ff-rejilla--tickets { grid-template-columns: repeat(min(var(--ff-cols), 2), minmax(0, 1fr)); }
.fitfox[data-ancho="m"] .ff-rejilla.ff-rejilla--tickets, .fitfox[data-ancho="s"] .ff-rejilla.ff-rejilla--tickets, .fitfox[data-ancho="xs"] .ff-rejilla.ff-rejilla--tickets { grid-template-columns: 1fr; }
.ff-ticket { display: grid; grid-template-columns: minmax(0, 1fr) minmax(150px, 30%); position: relative; filter: drop-shadow(0 8px 16px rgba(16,24,40,.12)); }
.ff-ticket__principal, .ff-ticket__matriz { background: var(--ff-superficie); padding: calc(22px * var(--ff-e)) 22px; }
.ff-ticket__principal { border-radius: var(--ff-radio) 0 0 var(--ff-radio); display: flex; flex-direction: column; gap: 10px; position: relative; overflow: hidden;
  -webkit-mask: radial-gradient(circle 12px at 100% 0, transparent 98%, #000) top right / 100% 51% no-repeat, radial-gradient(circle 12px at 100% 100%, transparent 98%, #000) bottom right / 100% 51% no-repeat;
  mask: radial-gradient(circle 12px at 100% 0, transparent 98%, #000) top right / 100% 51% no-repeat, radial-gradient(circle 12px at 100% 100%, transparent 98%, #000) bottom right / 100% 51% no-repeat; }
.ff-ticket__principal::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 6px; background: var(--ff-acento); }
.ff-ticket__matriz { border-radius: 0 var(--ff-radio) var(--ff-radio) 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 14px; text-align: center; border-left: 2px dashed var(--ff-borde); background: var(--ff-acento-suave);
  -webkit-mask: radial-gradient(circle 12px at 0 0, transparent 98%, #000) top left / 100% 51% no-repeat, radial-gradient(circle 12px at 0 100%, transparent 98%, #000) bottom left / 100% 51% no-repeat;
  mask: radial-gradient(circle 12px at 0 0, transparent 98%, #000) top left / 100% 51% no-repeat, radial-gradient(circle 12px at 0 100%, transparent 98%, #000) bottom left / 100% 51% no-repeat; }
.ff-ticket .ff-precio { justify-content: center; }
.ff-ticket__marca { width: 34px; height: 24px; border-radius: 5px; background: var(--ff-acento-suave); position: relative; }
.ff-ticket__marca::after { content: ""; position: absolute; inset: 7px 10px; border: 2px solid var(--ff-acento); border-radius: 2px; }
.fitfox[data-ancho="xs"] .ff-ticket { grid-template-columns: 1fr; }
.fitfox[data-ancho="xs"] .ff-ticket__principal { border-radius: var(--ff-radio) var(--ff-radio) 0 0; -webkit-mask: none; mask: none; }
.fitfox[data-ancho="xs"] .ff-ticket__matriz { border-radius: 0 0 var(--ff-radio) var(--ff-radio); border-left: 0; border-top: 2px dashed var(--ff-borde); flex-direction: row; justify-content: space-between; -webkit-mask: none; mask: none; }

/* Ficha */
.ff-ficha__media { border-radius: var(--ff-radio); overflow: hidden; height: clamp(200px, 38vw, 440px); margin-bottom: calc(26px * var(--ff-e)); }
.ff-ficha__media img { width: 100%; height: 100% !important; object-fit: cover; display: block; }
.ff-ficha__rejilla { display: grid; grid-template-columns: 1fr 320px; gap: calc(36px * var(--ff-e)); align-items: start; }
.fitfox[data-ancho="xs"] .ff-ficha__rejilla, .fitfox[data-ancho="s"] .ff-ficha__rejilla { grid-template-columns: 1fr; }
.ff-ficha__principal { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.fitfox.fitfox .ff-ficha__titulo { font-size: 2em; font-weight: 800; line-height: 1.15; }
.ff-ficha__texto { line-height: 1.65; }
.ff-ficha__texto p, .ff-detalle__texto p { margin-bottom: .8em !important; }
.fitfox.fitfox .ff-ficha__texto ul, .fitfox.fitfox .ff-detalle__texto ul { list-style: disc; padding-left: 1.3em; margin-bottom: .8em; }
.fitfox.fitfox .ff-ficha__texto ol, .fitfox.fitfox .ff-detalle__texto ol { list-style: decimal; padding-left: 1.3em; margin-bottom: .8em; }
.ff-ficha__texto a, .ff-detalle__texto a { color: var(--ff-acento); text-decoration: underline; }
.ff-ficha__lateral { position: sticky; top: 24px; }
.ff-ficha__caja { background: var(--ff-superficie); border: 1px solid var(--ff-borde); border-radius: calc(var(--ff-radio) + 2px); padding: 24px; display: flex; flex-direction: column; gap: 18px; box-shadow: var(--ff-sombra); }
.fitfox[data-ancho="xs"] .ff-ficha__lateral, .fitfox[data-ancho="s"] .ff-ficha__lateral { position: static; order: -1; }
.fitfox.fitfox .ff-subtitulo { font-size: 1.05em; font-weight: 800; margin-top: 10px; }
.ff-sesiones-ficha { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 8px; }
.ff-sesiones-ficha li { padding: 10px 12px; border-radius: 10px; background: var(--ff-suave); display: flex; flex-direction: column; font-size: .9em; }
.ff-sesiones-ficha span { font-weight: 700; }
.ff-sesiones-ficha b { font-variant-numeric: tabular-nums; font-weight: 600; color: var(--ff-tenue); }
.ff-sesiones-ficha small { color: var(--ff-tenue); }
.ff-nota { font-size: .85em; color: var(--ff-tenue); }
.fitfox.fitfox .ff-tarifas td { padding: 9px 0; border-bottom: 1px solid var(--ff-borde); }
.fitfox.fitfox .ff-tarifas td:last-child { text-align: right; font-weight: 800; white-space: nowrap; }
.ff-tarifas tr.is-completo td:first-child { opacity: .55; }

/* ═══════════ Ventana de detalle ═══════════ */
.ff-modal { position: fixed; inset: 0; z-index: 999999; display: flex; align-items: center; justify-content: center; padding: 20px; margin: 0; }
.ff-modal__fondo { position: absolute; inset: 0; background: rgba(10, 14, 22, .55); backdrop-filter: blur(3px); opacity: 0; transition: opacity .2s; }
.ff-modal__caja { position: relative; width: 100%; max-width: 560px; max-height: calc(100vh - 40px); overflow: auto; background: var(--ff-superficie); color: var(--ff-texto); border-radius: calc(var(--ff-radio) + 4px); box-shadow: 0 30px 80px -20px rgba(0,0,0,.5); padding: 28px 28px 24px; transform: translateY(14px) scale(.98); opacity: 0; transition: transform .22s ease, opacity .22s ease; outline: none; }
.ff-modal--abierto .ff-modal__fondo { opacity: 1; }
.ff-modal--abierto .ff-modal__caja { transform: none; opacity: 1; }
.fitfox.fitfox .ff-modal__cerrar { position: absolute; top: 14px; right: 14px; width: 36px; height: 36px; border-radius: 50%; background: var(--ff-suave); font-size: 22px; line-height: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
.fitfox.fitfox .ff-modal__cerrar:hover { background: var(--ff-borde); }
.fitfox.fitfox .ff-modal__titulo { font-size: 1.45em; font-weight: 800; line-height: 1.2; padding-right: 40px; margin-bottom: 14px; }
.ff-modal__cuerpo { display: flex; flex-direction: column; gap: 14px; }
.ff-modal__pie { margin-top: 20px; position: sticky; bottom: -24px; padding: 14px 0 4px; background: linear-gradient(transparent, var(--ff-superficie) 30%); }
.ff-modal__pie:empty { display: none; }
.ff-detalle { --ff-ev: var(--ff-acento); display: flex; flex-direction: column; gap: 14px; }
.ff-detalle__banda { height: 4px; border-radius: 4px; background: var(--ff-ev); width: 60px; }
.ff-detalle__img { border-radius: var(--ff-radio); aspect-ratio: 16/9; object-fit: cover; width: 100%; }
.ff-detalle__texto { color: var(--ff-texto); line-height: 1.6; font-size: .95em; }
.ff-detalle__plazas:empty, .ff-detalle__precio:empty { display: none; }
.ff-datos { display: grid; grid-template-columns: auto 1fr; gap: 8px 16px; margin: 0; font-size: .93em; }
.ff-datos dt { color: var(--ff-tenue); font-weight: 600; margin: 0; }
.ff-datos dd { margin: 0; }
.ff-datos dt.ff-sr + dd { grid-column: 1 / -1; font-size: 1.05em; }
@media (max-width: 560px) {
  .ff-modal { align-items: flex-end; padding: 0; }
  .ff-modal__caja { max-height: 92vh; border-radius: calc(var(--ff-radio) + 4px) calc(var(--ff-radio) + 4px) 0 0; transform: translateY(40px); padding: 24px 20px 20px; }
  .ff-modal__pie { bottom: -20px; }
}

/* Barra lateral estrecha: tamaños de texto un poco menores */
.fitfox[data-ancho="xs"] .ff-nav__titulo { font-size: 1.08em; }
.fitfox[data-ancho="xs"] .fitfox__titulo { font-size: 1.35em; }
@media print {
  .ff-nav, .ff-filtros, .ff-btn, .ff-mas, .ff-paginas, .ff-carrusel__flecha { display: none !important; }
}
