/**
 * CAPA DE UI COMPARTIDA DEL MÓDULO DE ESTADÍSTICAS
 * ------------------------------------------------
 * Estética: la del resto del portal (panel blanco redondeado sobre fondo gris,
 * rojo de marca, Syne para títulos) con la retícula editorial del módulo:
 * numeración de bloques, etiquetas en mono y flechas >>> en los destinos.
 *
 * La cargan todas las páginas mostrar_estadisticas*.php, después de stats.css:
 *
 *     incluircss("css/stats.css,css/stats-ui.css");
 *
 * REGLA 1: todos los selectores van prefijados con .stx- y anidados bajo .stx.
 * stats.css es una hoja heredada con selectores muy genéricos (.list, .item,
 * .title, .card2...) y esta capa no debe pisarla en las páginas sin migrar.
 *
 * REGLA 2: NADA de tamaños en rem/px fijos. Todo se deriva de --stx-s, la
 * unidad de escala fluida. Si se usan px fijos, en un monitor ancho el módulo
 * se ve diminuto. Excepciones: los filetes de 1px y los radios, que son
 * constantes visuales compartidas con el resto del portal.
 *
 * Los tokens de marca salen de css/constantes.css, con fallback por si la hoja
 * se carga de forma aislada.
 */

/* El stylesheet de escritorio fija body{min-width:1200px}. Se libera solo en
   las páginas ya migradas para que el módulo pueda ser realmente fluido. */
body.stx-page {
  min-width: 0;
}

/**
 * TOKENS
 * Van en :root y NO en .stx a propósito. Los modales de Bootstrap viven fuera
 * del <main class="stx">, así que si los tokens colgaran de .stx no los
 * heredarían: todos los calc(var(--stx-s)...) quedarían inválidos y el modal
 * se quedaría sin tamaños ni fondos. Solo se definen aquí; el uso siempre va
 * bajo un selector .stx-.
 */
:root {
  /* Mismas superficies que el resto del portal: panel claro sobre fondo gris */
  --stx-panel: var(--main-content-color, #f9f9f9);
  --stx-cell: var(--main-bg-color, #e3e3e3);
  --stx-white: #fff;
  --stx-ink: #050505;
  --stx-ink-soft: #666;
  --stx-accent: var(--componet-primary-color, #e32203);
  --stx-accent-dark: var(--componet-secondary-color, #a01819);
  --stx-line: rgba(5, 5, 5, 0.09);
  /* Filete visible: el borde que marca "esto se puede pinchar" */
  --stx-line-link: rgba(5, 5, 5, 0.18);

  --stx-font-display: "Syne", sans-serif;
  --stx-font-body: "DM Sans", Helvetica, Arial, sans-serif;
  /* Mono del sistema: cero peticiones de red y siempre disponible */
  --stx-font-mono: ui-monospace, "Cascadia Mono", "Segoe UI Mono", Consolas,
    "SF Mono", Menlo, monospace;

  /* Radios del portal: 20 para el panel, 16 para tarjeta, 100 para píldora */
  --stx-radio: 16px;
  --stx-radio-panel: 20px;
  --stx-pill: 100px;

  /**
   * UNIDAD DE ESCALA
   * ~18.5px a 1440px de ancho -> tope 26px en monitores muy anchos, con suelo
   * de ~17.6px en móvil (antes 16px: en pantallas <1024px el clamp se queda
   * pegado al suelo, así que ese suelo ES el tamaño real en todo el rango
   * móvil/tablet, no solo en el peor caso). Todo el dimensionado (tipografía,
   * padding, escudos) se deriva de aquí, así el módulo crece con la pantalla
   * en vez de encogerse. El suelo se mantiene por debajo del valor a 1440px
   * para no tocar el aspecto de escritorio.
   *
   * En PX, no en rem: css/bootstrap.min.css fija html{font-size:10px} sin
   * media query, sin overridarlo en ningún otro sitio del portal. Con rem
   * (asumiendo el 16px de un root normal) esta unidad se quedaba en el 62.5%
   * de los px de arriba -suelo real de 11px, tope de 16.5px-, mucho más
   * pequeña de lo que este mismo comentario decía. En px la unidad no
   * depende de qué valga el font-size del <html> en cada página.
   */
  --stx-s: clamp(17.6px, 11.2px + 0.5vw, 26.4px);
  --stx-pad: calc(var(--stx-s) * 0.9);
  --stx-gap: calc(var(--stx-s) * 0.55);
}

/**
 * AFORDANCIA: QUÉ SE PUEDE PINCHAR Y QUÉ NO
 * -----------------------------------------
 * El módulo mezcla en la misma columna bloques de dato y bloques de destino,
 * y antes ambos eran barras rojas o tarjetas grises indistinguibles. La regla,
 * aplicada en toda la hoja, es:
 *
 *   SUPERFICIE ROJA RELLENA .... destino pinchable (.stx-cta, chips de acción)
 *   SUPERFICIE NEGRA ........... estructura inerte (cabeceras de tabla, nº de bloque)
 *   SUPERFICIE GRIS PLANA ...... dato inerte (KPIs, barra meta, estado vacío)
 *   SUPERFICIE BLANCA + FILETE . destino pinchable en formato tarjeta/fila
 *
 * Además, TODO lo pinchable lleva las tres marcas de .stx-link:
 * cursor de mano, flecha >>> y un cambio de estado claro en hover/foco.
 */

.stx a,
.stx .stx-link {
  cursor: pointer;
}

/* La flecha es el distintivo del módulo: si hay >>>, se pincha */
.stx-flecha {
  flex: none;
  font-family: var(--stx-font-mono);
  letter-spacing: 0.02em;
}

/* El panel es el equivalente al .content-body del resto del portal */
.stx {
  display: flex;
  flex-direction: column;
  gap: var(--stx-gap);
  max-width: 2400px;
  margin: calc(var(--stx-s) * 1.1) auto;
  padding: var(--stx-pad);
  border-radius: var(--stx-radio-panel);
  background-color: var(--stx-panel);
  color: var(--stx-ink);
  font-family: var(--stx-font-body);
  font-size: var(--stx-s);
}

.stx *,
.stx *::before,
.stx *::after {
  box-sizing: border-box;
}

/* ===================================================== CABECERA EMBED == */

/**
 * Solo aparece cuando la página va embebida en el WebView de la app
 * (mostrar_estadisticas*.php?embed=1). includes/cabecera.php oculta ahí la
 * cabecera de navegación completa; esto la sustituye por dos selectores
 * encadenados -temporada y competición- que llevan siempre a la portada del
 * módulo. Vive fuera de <main class="stx">, por eso no va bajo ese selector
 * -los tokens cuelgan de :root justo por casos así- pero toma su mismo
 * fondo, radio y ancho máximo para leerse como la ceja de ese mismo panel,
 * no como una barra de navegación aparte. Fija arriba (sticky, no fixed:
 * así reserva su propio hueco y no hace falta compensar con padding en el
 * resto de la página) porque es la única forma de moverse en modo embed.
 * Ver includes/cabecera/embed_stats.php.
 */
.stx-embed-cabecera {
  /* Más baja que el resto del módulo: es una barra de navegación de paso, no
     una sección de contenido. Solo se recorta lo VERTICAL (relleno arriba/
     abajo, sombra) con --stx-es; el ancho de cada campo y el relleno
     horizontal del <select> se quedan en --stx-s de siempre, porque ahí vive
     el texto de temporada/competición -a veces largo- y encogerlo también
     es lo que lo dejaba truncado ("TEMPOF", "DIVISI...") en vez de más
     pequeño. */
  --stx-es: calc(var(--stx-s) * 0.7);
  position: sticky;
  top: 0;
  z-index: 200;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: calc(var(--stx-es) * 0.4) var(--stx-pad);
  max-width: 2400px;
  margin: 0 auto;
  padding: calc(var(--stx-es) * 0.45) var(--stx-pad);
  background-color: var(--stx-panel);
  border-bottom: 1px solid var(--stx-line);
  box-shadow: 0 calc(var(--stx-es) * 0.1) calc(var(--stx-es) * 0.3) rgba(5, 5, 5, 0.08);
  font-family: var(--stx-font-body);
}

.stx-embed-atras {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 1.8);
  height: calc(var(--stx-s) * 1.8);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  border: 1px solid transparent;
  color: var(--stx-ink-soft);
  cursor: pointer;
  transition: background-color 120ms ease, color 120ms ease, border-color 120ms ease;
  padding: 0;
  flex-shrink: 0;
}

.stx-embed-atras:hover,
.stx-embed-atras:active {
  background-color: var(--stx-accent);
  color: var(--stx-white);
}

.stx-embed-atras svg {
  display: block;
}

/* Cada selector (etiqueta + <select>) es su propio campo: con dos en la
   misma barra necesitan poder envolver de forma independiente en móvil. */
.stx-embed-campo {
  display: flex;
  align-items: center;
  gap: calc(var(--stx-es) * 0.4);
  /* Ancho a --stx-s, no --stx-es: es el sitio para el texto del <select>,
     no una medida "vertical" que deba encoger con el resto de la barra. */
  flex: 1 1 calc(var(--stx-s) * 9);
  min-width: 0;
}

.stx-embed-campo label {
  margin: 0;
  font-family: var(--stx-font-mono);
  font-size: max(11px, calc(var(--stx-es) * 0.62));
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
  white-space: nowrap;
}

/* Mismo pill gris que .stx-search input, para que se lea como parte de la
   misma familia de controles en vez de un widget aparte. La flecha nativa
   se sustituye por una propia -appearance:none la quita en todos los
   motores que nos importan (WebView Android incluido)- porque una de
   sistema desentona con el resto de iconografía, siempre dibujada a mano. */
.stx-embed-campo select {
  flex: 1 1 auto;
  min-width: 0;
  /* Vertical (--stx-es): la píldora queda más baja. Horizontal (--stx-s):
     el texto de la opción elegida necesita su sitio para no truncarse. */
  padding: calc(var(--stx-es) * 0.3) calc(var(--stx-s) * 1.6) calc(var(--stx-es) * 0.3) calc(var(--stx-s) * 0.8);
  border: 1px solid transparent;
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M5 7.5L10 12.5L15 7.5' stroke='%23666666' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right calc(var(--stx-s) * 0.55) center;
  background-size: calc(var(--stx-s) * 0.75);
  color: var(--stx-ink);
  font-family: var(--stx-font-body);
  font-weight: 600;
  /* Suelo de 16px: mismo motivo que .stx-search input, para que iOS no
     haga zoom al enfocar. Se mantiene aunque el resto de la cabecera encoja:
     es un mínimo de accesibilidad, no una preferencia de tamaño. */
  font-size: max(16px, calc(var(--stx-s) * 0.75));
  -webkit-appearance: none;
  appearance: none;
}

.stx-embed-campo select:focus {
  outline: none;
  border-color: var(--stx-accent);
  background-color: var(--stx-white);
}

.stx-embed-campo select option {
  color: var(--stx-ink);
}

/* ============================================================ BARRA META == */

.stx-meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: calc(var(--stx-s) * 0.25) var(--stx-pad);
  padding: calc(var(--stx-s) * 0.4) calc(var(--stx-s) * 1.1);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  color: var(--stx-ink-soft);
  font-family: var(--stx-font-mono);
  /* Suelo de 12px: por debajo de eso la etiqueta mono en mayúsculas deja de
     leerse en móvil, donde --stx-s se queda pegado a su valor mínimo. */
  font-size: max(12px, calc(var(--stx-s) * 0.66));
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.stx-meta-group {
  display: flex;
  flex-wrap: wrap;
  gap: calc(var(--stx-s) * 0.3) calc(var(--stx-s) * 0.9);
}

.stx-meta-id {
  color: var(--stx-accent);
  font-weight: 700;
}

/* =============================================================== TITULAR == */

.stx-hero {
  padding: calc(var(--stx-s) * 0.7) calc(var(--stx-s) * 0.4) calc(var(--stx-s) * 0.2);
  background: transparent !important;
  background-color: transparent !important;
  box-shadow: none !important;
}

.stx-title {
  margin: 0;
  font-family: var(--stx-font-display);
  /* Sigue siendo el ancla visual de la página, pero sin gritar.
     En px por el mismo motivo que --stx-s: con rem, el html{font-size:10px}
     de bootstrap.min.css lo dejaba en 18px/44px reales en vez de 28.8/70.4. */
  font-size: clamp(28.8px, 4.2vw, 70.4px);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.03em;
  text-transform: uppercase;
  overflow-wrap: break-word;
  text-wrap: balance;
  color: var(--stx-ink) !important;
}

/**
 * MARCADOR DE LA FICHA DE PARTIDO
 * El titular de mostrar_estadisticas_partido.php es el resultado: quien
 * ganó se pinta en rojo de marca, quien perdió se atenúa. Sin ganador
 * (empate) los dos se quedan en tinta neutra, como ahora.
 */
.stx-marcador-equipo {
  display: inline-block;
  transition: opacity 160ms ease, color 160ms ease;
}

.stx-marcador-equipo.es-gana {
  color: var(--stx-accent);
}

.stx-marcador-equipo.es-pierde {
  opacity: 0.4;
}

.stx-subtitle {
  margin: calc(var(--stx-s) * 0.5) 0 0;
  max-width: 80ch;
  font-family: var(--stx-font-body);
  font-size: calc(var(--stx-s) * 0.8);
  line-height: 1.55;
  color: var(--stx-ink-soft) !important;
}

.stx-subtitle strong {
  color: var(--stx-ink) !important;
  font-weight: 700;
}

/* Clave de lectura del módulo: enuncia la convención de la flecha */
.stx-hint {
  display: inline-flex;
  align-items: center;
  gap: 0.5em;
  margin: calc(var(--stx-s) * 0.6) 0 0;
  padding: calc(var(--stx-s) * 0.22) calc(var(--stx-s) * 0.8);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  font-family: var(--stx-font-mono);
  font-size: max(12px, calc(var(--stx-s) * 0.62));
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stx-hint b {
  color: var(--stx-accent);
}

/* ======================================================== BLOQUE DE SECCIÓN == */

/**
 * TARJETA POR BLOQUE
 * mostrar_estadisticas.php (portada de competición) encadena 5 secciones
 * numeradas (competición / fases / equipos / partidos / jugadores) que antes
 * eran contenido corrido sobre el mismo fondo de panel, separadas solo por un
 * filete: costaba ver dónde acababa un bloque y empezaba el siguiente. Cada
 * <section class="stx-bloque-seccion"> las convierte en su propia tarjeta
 * blanca con borde y sombra, para que el ojo agrupe de un vistazo qué
 * pertenece a cada bloque. Solo se usa en esa página; el resto del módulo no
 * la necesita porque encadena bloques de forma distinta.
 *
 * El padding es el MISMO --stx-pad en los cuatro lados: al repartir más aire
 * abajo que arriba (como salió en el primer intento) el bloque de la CTA se
 * veía con un socavón debajo del botón y ninguno encima del título.
 *
 * display:flex + --stx-gap (el mismo que ya separaba estas piezas cuando
 * colgaban directas de .stx) es a propósito: el contenido de cada bloque no
 * es una sola pieza, son 2 o 3 apiladas (KPIs, agenda, CTA en el 01; cabecera
 * y tabla en el resto) y sin esto se quedaban sin ningún hueco entre sí -el
 * gap de .stx ya no llega aquí dentro, porque ahora esas piezas cuelgan de la
 * tarjeta y no directamente de .stx-, pegadas unas a otras.
 */
.stx-bloque-seccion {
  display: flex;
  flex-direction: column;
  gap: var(--stx-gap);
  padding: var(--stx-pad);
  border-radius: var(--stx-radio-panel);
  background-color: var(--stx-white);
  border: 1px solid var(--stx-line);
  box-shadow: 0 calc(var(--stx-s) * 0.16) calc(var(--stx-s) * 0.45)
    rgba(5, 5, 5, 0.06);
}

/* El filete y el margen propios de .stx-section-head ya los aporta la
   tarjeta (borde de la tarjeta + el gap de arriba): dentro de un bloque
   serían un doble borde y un doble hueco con lo que viene debajo. */
.stx-bloque-seccion > .stx-section-head {
  margin: 0;
  padding: 0;
  border-top: 0;
}

/* ============================================================== SECCIONES == */

.stx-section-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: calc(var(--stx-s) * 0.3) calc(var(--stx-s) * 0.55);
  margin-top: calc(var(--stx-s) * 0.5);
  padding: calc(var(--stx-s) * 0.7) calc(var(--stx-s) * 0.4) calc(var(--stx-s) * 0.1);
  border-top: 1px solid var(--stx-line);
  /* Por si algo ancla a una sección: deja aire al saltar */
  scroll-margin-top: calc(var(--stx-s) * 0.5);
}

/* La primera sección va pegada al titular: ahí el filete sobra */
.stx-hero + .stx-section-head {
  margin-top: 0;
  border-top: 0;
}

/* Título y contador a la izquierda, buscador empujado a la derecha */
.stx-section-head > .stx-search {
  margin-left: auto;
}

.stx-section-title {
  margin: 0;
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.95);
  font-weight: 700;
  letter-spacing: -0.01em;
  text-transform: uppercase;
}

/* Marca roja de sección. Se oculta si el bloque ya va numerado, para no
   duplicar el acento en la misma línea. */
.stx-section-title::before {
  content: "";
  display: inline-block;
  width: 0.6em;
  height: 0.18em;
  margin-right: 0.45em;
  vertical-align: middle;
  border-radius: var(--stx-pill);
  background-color: var(--stx-accent);
}

.stx-section-num + .stx-section-title::before {
  display: none;
}

.stx-count {
  font-family: var(--stx-font-mono);
  font-size: max(12px, calc(var(--stx-s) * 0.7));
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--stx-accent);
  font-variant-numeric: tabular-nums;
}

/* Numeración de bloque: marca que cada sección es un detalle distinto
   (competición / torneo / equipo) y no un paso del mismo flujo.
   Va en negro, no en rojo: es un rótulo, no un destino. */
.stx-section-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: calc(var(--stx-s) * 1.9);
  padding: calc(var(--stx-s) * 0.12) calc(var(--stx-s) * 0.45);
  border-radius: var(--stx-pill);
  background-color: var(--stx-ink);
  color: var(--stx-white);
  font-family: var(--stx-font-mono);
  font-size: max(12px, calc(var(--stx-s) * 0.65));
  font-weight: 700;
  letter-spacing: 0.08em;
  font-variant-numeric: tabular-nums;
}

/* ==================================================== ENLACE DE SECCIÓN == */

/* Barra-enlace a ancho completo. Es el único destino de su bloque, así que
   ocupa toda la fila en vez de disfrazarse de tarjeta entre otras.
   Es el ÚNICO bloque rojo relleno de la página: ese rojo significa "aquí se
   pincha". Se refuerza con relieve inferior y con la flecha en píldora, para
   que no se confunda con la cabecera de la tabla de torneos. */
.stx-cta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--stx-pad);
  padding: calc(var(--stx-s) * 0.95) calc(var(--stx-s) * 1.3);
  border-radius: var(--stx-pill);
  background-color: var(--stx-accent);
  color: var(--stx-white);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 1.02);
  font-weight: 700;
  letter-spacing: 0.01em;
  text-transform: uppercase;
  text-decoration: none;
  /* Relieve: lo lee como botón incluso sin pasar el ratón (y en táctil) */
  box-shadow: 0 calc(var(--stx-s) * 0.22) 0 var(--stx-accent-dark);
  transition: background-color 160ms ease, transform 160ms ease,
    box-shadow 160ms ease;
}

.stx-cta:hover,
.stx-cta:focus-visible {
  background-color: var(--stx-accent-dark);
  color: var(--stx-white);
  text-decoration: none;
  /* Se hunde: el botón "responde" al puntero */
  transform: translateY(calc(var(--stx-s) * 0.14));
  box-shadow: 0 calc(var(--stx-s) * 0.08) 0 var(--stx-accent-dark);
}

.stx-cta-flecha {
  flex: none;
  padding: calc(var(--stx-s) * 0.2) calc(var(--stx-s) * 0.7);
  border-radius: var(--stx-pill);
  background-color: rgba(255, 255, 255, 0.2);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.8);
  color: var(--stx-white);
  transition: background-color 160ms ease;
}

.stx-cta:hover .stx-cta-flecha,
.stx-cta:focus-visible .stx-cta-flecha {
  background-color: rgba(255, 255, 255, 0.34);
}

/* ================================================================== KPIs == */

.stx-kpis {
  display: grid;
  /* auto-fit y no auto-fill: sin pistas vacías descolgadas a la derecha */
  grid-template-columns: repeat(auto-fit, minmax(calc(var(--stx-s) * 9), 1fr));
  gap: var(--stx-gap);
}

/* Bloque de DATO: gris plano, sin filete y sin hover. Es lo contrario de una
   tarjeta de equipo (blanca, con filete y con flecha), que sí se pincha. */
.stx-kpi {
  display: flex;
  flex-direction: column;
  gap: calc(var(--stx-s) * 0.3);
  padding: calc(var(--stx-s) * 0.95) var(--stx-pad);
  border-radius: var(--stx-radio);
  background-color: var(--stx-cell);
  cursor: default;
  /* Sin esto, la cifra grande (stx-kpi-value) fuerza su ancho mínimo de
     contenido y el grid de arriba -a 2 columnas fijas por debajo de 900px-
     se ensancha más allá del viewport en vez de dejar que la cifra encoja o
     salte de línea: eso es lo que se salía de la pantalla en móvil. */
  min-width: 0;
}

.stx-kpi-label {
  font-family: var(--stx-font-mono);
  font-size: max(12px, calc(var(--stx-s) * 0.63));
  font-weight: 600;
  letter-spacing: 0.13em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

/* Dato secundario bajo la cifra grande */
.stx-kpi-pie {
  margin-top: auto;
  padding-top: calc(var(--stx-s) * 0.4);
  font-family: var(--stx-font-mono);
  font-size: max(12px, calc(var(--stx-s) * 0.62));
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stx-kpi-pie b {
  color: var(--stx-accent);
  font-variant-numeric: tabular-nums;
}

/* Texto solo para lectores de pantalla: los botones de lupa son un icono */
.stx-sr {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.stx-kpi-value {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 2.4);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.03em;
  font-variant-numeric: tabular-nums;
}

.stx-kpi-value small {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.75);
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--stx-accent);
}

/* ============================================================== BUSCADOR == */

.stx-search {
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.45);
  flex: 0 1 calc(var(--stx-s) * 18);
}

.stx-search label {
  margin: 0;
  font-family: var(--stx-font-mono);
  font-size: max(12px, calc(var(--stx-s) * 0.63));
  font-weight: 700;
  letter-spacing: 0.13em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
  white-space: nowrap;
}

.stx-search input {
  flex: 1 1 auto;
  min-width: 0;
  padding: calc(var(--stx-s) * 0.35) calc(var(--stx-s) * 0.8);
  border: 1px solid transparent;
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  color: var(--stx-ink);
  font-family: var(--stx-font-body);
  /* Suelo de 16px: por debajo de eso Safari/iOS hace zoom automático al
     enfocar el campo, y en un buscador eso es lo primero que se toca. */
  font-size: max(16px, calc(var(--stx-s) * 0.75));
  -webkit-appearance: none;
  appearance: none;
}

.stx-search input::placeholder {
  color: var(--stx-ink-soft);
}

.stx-search input:focus {
  outline: none;
  border-color: var(--stx-accent);
  background-color: var(--stx-white);
}

/* =============================================================== EQUIPOS == */

.stx-equipos {
  display: grid;
  /* auto-fit: con pocos equipos las pistas vacías colapsan en vez de dejar
     una banda hueca a la derecha */
  grid-template-columns: repeat(auto-fit, minmax(calc(var(--stx-s) * 8), 1fr));
  gap: var(--stx-gap);
  margin: 0;
  padding: 0;
  list-style: none;
}

/* Tarjeta PINCHABLE: fondo blanco + filete + flecha permanente en la esquina.
   Las tres marcas están antes del hover, que en táctil no existe. */
.stx-equipo > a {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(var(--stx-s) * 0.5);
  height: 100%;
  padding: calc(var(--stx-s) * 0.85) calc(var(--stx-s) * 0.5)
    calc(var(--stx-s) * 0.7);
  border: 1px solid var(--stx-line-link);
  border-radius: var(--stx-radio);
  background-color: var(--stx-white);
  color: var(--stx-ink);
  text-align: center;
  text-decoration: none;
  /* El blanco apenas contrasta con el panel (#fff sobre #f9f9f9): la tarjeta
     se despega con una sombra suave en reposo, no solo al pasar el ratón. */
  box-shadow: 0 calc(var(--stx-s) * 0.1) calc(var(--stx-s) * 0.28)
    rgba(5, 5, 5, 0.07);
  transition: border-color 160ms ease, box-shadow 160ms ease,
    transform 160ms ease;
}

.stx-equipo > a::after {
  content: ">>>";
  position: absolute;
  top: calc(var(--stx-s) * 0.45);
  right: calc(var(--stx-s) * 0.5);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.55);
  font-weight: 700;
  letter-spacing: 0.02em;
  color: var(--stx-accent);
  opacity: 0.5;
  transition: opacity 160ms ease;
}

.stx-equipo > a:hover,
.stx-equipo > a:focus-visible {
  border-color: var(--stx-accent);
  color: var(--stx-accent);
  box-shadow: 0 calc(var(--stx-s) * 0.2) calc(var(--stx-s) * 0.5)
    rgba(5, 5, 5, 0.12);
  transform: translateY(calc(var(--stx-s) * -0.12));
  text-decoration: none;
  outline: none;
}

.stx-equipo > a:hover::after,
.stx-equipo > a:focus-visible::after {
  opacity: 1;
}

/* Escudo en disco, igual que en la cabecera y las tablas del portal.
   Sobre la tarjeta blanca el disco se pierde, así que va en gris para que la
   pieza siga leyéndose como escudo y no como imagen suelta. */
.stx-equipo-escudo {
  display: flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 3.9);
  height: calc(var(--stx-s) * 3.9);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
}

.stx-equipo-escudo img {
  max-width: 70%;
  max-height: 70%;
  object-fit: contain;
  /* Los escudos llegan con fondo blanco quemado; multiply los recorta */
  mix-blend-mode: multiply;
}

.stx-equipo-nombre {
  margin-top: auto;
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.74);
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  overflow-wrap: break-word;
}

/* ================================================================ BLOQUE == */

/* Tarjeta genérica: envuelve tablas, gráficas y listas sueltas */
.stx-bloque {
  border-radius: var(--stx-radio);
  background-color: var(--stx-cell);
  overflow: hidden;
  min-width: 0;
}

.stx-pad {
  padding: var(--stx-pad);
}

/* Rejilla de tarjetas, base de casi todo el dashboard */
.stx-rejilla {
  display: grid;
  gap: var(--stx-gap);
  /* Sin esto (el valor por defecto de grid es "stretch") una tarjeta con menos
     contenido que su vecina se estira hasta igualar su alto, dejando un hueco
     vacío al final en vez de quedarse en su tamaño natural. */
  align-items: start;
}

.stx-rejilla > * {
  border-radius: var(--stx-radio);
  background-color: var(--stx-cell);
  overflow: hidden;
}

.stx-rejilla--auto {
  grid-template-columns: repeat(auto-fit, minmax(calc(var(--stx-s) * 12), 1fr));
}

@media (min-width: 900px) {
  .stx-rejilla--resumen {
    grid-template-columns: repeat(4, 1fr);
  }
}

/* ================================================================ GRÁFICA == */

/* position:relative + alto fijo es lo que Chart.js necesita para dimensionarse.
   overflow:hidden como red de seguridad: si algún gráfico volviera a
   maintainAspectRatio:true, se recorta en vez de invadir la sección de abajo. */
.stx-chart {
  position: relative;
  width: 100%;
  height: calc(var(--stx-s) * 16);
  padding: calc(var(--stx-s) * 0.5);
  overflow: hidden;
}

.stx-chart--alto {
  height: calc(var(--stx-s) * 22);
}

.stx-chart--donut {
  height: calc(var(--stx-s) * 9);
}

.stx-chart canvas {
  max-width: 100%;
}

/* ============================================================== EXTREMOS == */

/* Tarjeta "más/menos tantos", "más/menos ensayos"... */
.stx-extremo {
  display: flex;
  flex-direction: column;
  gap: calc(var(--stx-s) * 0.4);
  padding: calc(var(--stx-s) * 0.75) var(--stx-pad);
}

.stx-extremo-label {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 600;
  letter-spacing: 0.13em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stx-extremo-cifra {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: calc(var(--stx-s) * 0.5);
}

.stx-extremo-valor {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 2.5);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.03em;
  color: var(--stx-accent);
  font-variant-numeric: tabular-nums;
}

.stx-extremo-escudo {
  width: calc(var(--stx-s) * 2.6);
  height: calc(var(--stx-s) * 2.6);
  padding: calc(var(--stx-s) * 0.25);
  border-radius: var(--stx-pill);
  background-color: var(--stx-white);
  object-fit: contain;
  mix-blend-mode: multiply;
  flex: none;
}

.stx-extremo-equipo {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.68);
  font-weight: 600;
  line-height: 1.3;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  overflow-wrap: break-word;
}

/* ================================================================= PODIO == */

.stx-podios {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(calc(var(--stx-s) * 14), 1fr));
  gap: var(--stx-gap);
}

.stx-podio {
  display: flex;
  flex-direction: column;
  border-radius: var(--stx-radio);
  background-color: var(--stx-cell);
  overflow: hidden;
}

.stx-podio-head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: calc(var(--stx-s) * 0.4);
  padding: calc(var(--stx-s) * 0.55) var(--stx-pad);
  border-bottom: 1px solid var(--stx-line);
  color: var(--stx-ink);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.72);
  font-weight: 700;
  letter-spacing: -0.01em;
  text-transform: uppercase;
}

.stx-podio-lupa {
  padding: 0;
  color: var(--stx-accent);
  background: none;
  border: 0;
  cursor: pointer;
  font-size: calc(var(--stx-s) * 0.85);
  line-height: 1;
}

.stx-podio-lupa:hover {
  color: var(--stx-accent-dark);
}

.stx-podio-top {
  display: flex;
  align-items: center;
  gap: var(--stx-pad);
  padding: calc(var(--stx-s) * 0.65) var(--stx-pad);
}

.stx-podio-foto {
  width: calc(var(--stx-s) * 3.2);
  height: calc(var(--stx-s) * 3.2);
  border-radius: var(--stx-pill);
  object-fit: cover;
  flex: none;
  background-color: var(--stx-white);
}

.stx-podio-valor {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 2.3);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.03em;
  color: var(--stx-accent);
  font-variant-numeric: tabular-nums;
}

.stx-podio-nombre {
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.3);
  margin-top: calc(var(--stx-s) * 0.25);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.66);
  font-weight: 600;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  overflow-wrap: anywhere;
}

.stx-podio-nombre img {
  width: calc(var(--stx-s) * 1.2);
  height: calc(var(--stx-s) * 1.2);
  object-fit: contain;
  mix-blend-mode: multiply;
  flex: none;
}

.stx-podio-resto {
  margin: 0;
  padding: 0;
  list-style: none;
}

.stx-podio-resto li {
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.4);
  padding: calc(var(--stx-s) * 0.35) var(--stx-pad);
  border-top: 1px solid var(--stx-line);
  font-family: var(--stx-font-body);
  font-size: calc(var(--stx-s) * 0.66);
}

.stx-podio-resto img {
  width: calc(var(--stx-s) * 1.6);
  height: calc(var(--stx-s) * 1.6);
  border-radius: var(--stx-pill);
  object-fit: cover;
  flex: none;
  background-color: var(--stx-white);
}

.stx-podio-resto .stx-escudo-mini {
  object-fit: contain;
  mix-blend-mode: multiply;
}

.stx-podio-resto span {
  flex: 1 1 auto;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.stx-podio-resto b {
  color: var(--stx-accent);
  font-variant-numeric: tabular-nums;
}

.stx-podio-vacio {
  padding: calc(var(--stx-s) * 0.9) var(--stx-pad);
  font-family: var(--stx-font-body);
  font-size: calc(var(--stx-s) * 0.72);
  color: var(--stx-ink-soft);
}

/* ================================================================ TABLAS == */

.stx-tabla-wrap {
  width: 100%;
  max-width: 100%;
  overflow-x: auto;
  border-radius: var(--stx-radio);
}

.stx-tabla-wrap .stx-tabla {
  width: auto;
  min-width: 100%;
}

.stx-tabla {
  width: 100%;
  border-collapse: collapse;
  font-family: var(--stx-font-body);
  font-size: calc(var(--stx-s) * 0.78);
}

/**
 * Cabecera NEGRA, no roja. Antes era una barra roja a ancho completo idéntica
 * a .stx-cta: dos piezas con el mismo aspecto y solo una pinchable. El negro
 * la devuelve a lo que es, un rótulo de columnas.
 */
.stx-tabla thead th {
  padding: calc(var(--stx-s) * 0.7) calc(var(--stx-s) * 0.65);
  background-color: var(--stx-ink);
  color: var(--stx-white);
  font-family: var(--stx-font-mono);
  font-size: max(12px, calc(var(--stx-s) * 0.64));
  font-weight: 700;
  letter-spacing: 0.11em;
  text-transform: uppercase;
  text-align: left;
  white-space: nowrap;
}

.stx-tabla tbody td {
  padding: calc(var(--stx-s) * 0.6) calc(var(--stx-s) * 0.65);
  vertical-align: middle;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.stx-tabla tbody tr:nth-child(odd) td {
  background-color: var(--stx-cell);
}

.stx-tabla tbody tr:nth-child(even) td {
  background-color: var(--stx-panel);
}

.stx-tabla .stx-num {
  text-align: right;
  font-family: var(--stx-font-mono);
}

.stx-tabla .stx-destacado {
  font-weight: 700;
  color: var(--stx-accent);
}

/* Celda de acción: el enlace explícito de cada fila, como chip perfilado para
   que se lea como botón y no como una columna más de texto rojo. */
.stx-tabla .stx-ver {
  display: inline-flex;
  align-items: center;
  gap: 0.5em;
  padding: 0.4em 1em;
  border: 1px solid var(--stx-accent);
  border-radius: var(--stx-pill);
  font-family: var(--stx-font-mono);
  font-size: 0.92em;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--stx-accent);
  white-space: nowrap;
  transition: background-color 140ms ease, color 140ms ease;
}

.stx-tabla a {
  color: inherit;
  text-decoration: none;
}

.stx-tabla a:hover {
  color: var(--stx-accent);
  text-decoration: underline;
}

/* Fila-destino: toda la fila es pinchable, no solo el nombre */
.stx-tabla tbody tr.stx-fila-link {
  cursor: pointer;
  transition: background-color 140ms ease;
}

.stx-tabla tbody tr.stx-fila-link:hover td,
.stx-tabla tbody tr.stx-fila-link:focus-within td {
  background-color: var(--stx-white);
}

/* Barra roja en el canto: confirma qué fila está activa */
.stx-tabla tbody tr.stx-fila-link:hover td:first-child,
.stx-tabla tbody tr.stx-fila-link:focus-within td:first-child {
  box-shadow: inset calc(var(--stx-s) * 0.2) 0 0 var(--stx-accent);
}

.stx-tabla tbody tr.stx-fila-link:hover .stx-ver,
.stx-tabla tbody tr.stx-fila-link:focus-within .stx-ver {
  background-color: var(--stx-accent);
  color: var(--stx-white);
}

/* El chip ya es la marca de acción: subrayarlo además lo ensucia */
.stx-tabla a.stx-accion:hover {
  text-decoration: none;
}

/**
 * ESCUDOS DE LOS PARTICIPANTES
 * Se pintan todos los equipos de la fase, sin recortar. Van sueltos y no
 * solapados a propósito: al mostrarlos todos, una fase larga salta de línea, y
 * con margen negativo la segunda línea arrancaría medio escudo desplazada.
 * No son enlaces: el destino de la fila ya es el torneo, y llenar la tabla de
 * destinos anidados rompería la convención de la flecha.
 */
.stx-escudos {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: calc(var(--stx-s) * 0.22);
}

.stx-escudo-pila {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 1.6);
  height: calc(var(--stx-s) * 1.6);
  border-radius: var(--stx-pill);
  background-color: var(--stx-white);
  box-shadow: 0 0 0 1px var(--stx-line-link);
  /* isolation corta el multiply del escudo contra la pila: sin esto, cada
     escudo se mezclaría con el que tiene debajo y la fila se ensucia. */
  isolation: isolate;
  transition: transform 140ms ease, box-shadow 140ms ease;
}

.stx-escudo-pila img {
  max-width: 72%;
  max-height: 72%;
  object-fit: contain;
  /* Los escudos llegan con fondo blanco quemado; multiply los recorta */
  mix-blend-mode: multiply;
}

/* Club sin escudo cargado: inicial en vez del hueco de una imagen rota */
.stx-escudo-pila b {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.72);
  font-weight: 700;
  color: var(--stx-ink-soft);
}

/* Se levanta el escudo apuntado para poder leer su tooltip sin ambigüedad */
.stx-escudo-pila:hover {
  z-index: 2;
  transform: translateY(calc(var(--stx-s) * -0.12));
  box-shadow: 0 0 0 1px var(--stx-accent);
}

/* ================================================================= LÍDER == */

/* Primer clasificado de una fase. Reutiliza el disco de la pila de escudos:
   las dos columnas de equipo de la tabla hablan el mismo idioma visual. */
.stx-lider {
  display: inline-flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.45);
  min-width: 0;
}

.stx-lider .stx-escudo-pila {
  flex: none;
}

.stx-lider-nombre {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.72);
  font-weight: 600;
  line-height: 1.25;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  overflow-wrap: anywhere;
}

/* Dice de qué va el dato: "42 pts" en una liga, "Campeón" en un cuadro */
.stx-lider-tag {
  flex: none;
  padding: 0.25em 0.7em;
  border-radius: var(--stx-pill);
  background-color: var(--stx-white);
  box-shadow: inset 0 0 0 1px var(--stx-line-link);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.6);
  font-weight: 700;
  letter-spacing: 0.04em;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* Todavía no hay primero: la final de un cuadro no se ha jugado, o la liga no
   trae clasificación. Va como etiqueta perfilada y no como hueco, para que se
   lea como un estado y no como un fallo de carga. Sin fondo: la fila alterna
   gris y blanco por debajo. */
.stx-no-aplica {
  display: inline-flex;
  align-items: center;
  padding: 0.25em 0.8em;
  border: 1px solid var(--stx-line-link);
  border-radius: var(--stx-pill);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.6);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stx-tabla-escudo {
  width: calc(var(--stx-s) * 1.8);
  height: calc(var(--stx-s) * 1.8);
  padding: 2px;
  border-radius: var(--stx-pill);
  background-color: var(--stx-white);
  object-fit: contain;
  mix-blend-mode: multiply;
  vertical-align: middle;
  margin-right: calc(var(--stx-s) * 0.35);
}

/* ============================================================== PARTIDOS == */

.stx-partido {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: calc(var(--stx-s) * 0.5);
  padding: calc(var(--stx-s) * 0.5) var(--stx-pad);
  font-family: var(--stx-font-body);
  font-size: calc(var(--stx-s) * 0.68);
}

.stx-partido + .stx-partido {
  border-top: 1px solid var(--stx-line);
}

.stx-partido-equipos {
  display: flex;
  flex-direction: column;
  gap: calc(var(--stx-s) * 0.15);
  min-width: 0;
}

.stx-partido-fecha {
  flex: none;
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  color: var(--stx-ink-soft);
}

.stx-partido-marcador {
  color: var(--stx-accent);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

/* =============================================================== PUESTOS == */

.stx-puesto {
  display: flex;
  align-items: center;
  gap: var(--stx-pad);
  padding: calc(var(--stx-s) * 0.45) var(--stx-pad);
}

.stx-puesto + .stx-puesto {
  border-top: 1px solid var(--stx-line);
}

.stx-puesto-pos {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 1.4);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.03em;
  color: var(--stx-accent);
  font-variant-numeric: tabular-nums;
  flex: none;
  min-width: calc(var(--stx-s) * 1.3);
  text-align: center;
}

.stx-puesto img {
  width: calc(var(--stx-s) * 2.2);
  height: calc(var(--stx-s) * 2.2);
  padding: 2px;
  border-radius: var(--stx-pill);
  background-color: var(--stx-white);
  object-fit: contain;
  mix-blend-mode: multiply;
  flex: none;
}

.stx-puesto-nombre {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.7);
  font-weight: 600;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  overflow-wrap: anywhere;
}

.stx-puesto a {
  color: inherit;
  text-decoration: none;
}

.stx-puesto a:hover {
  color: var(--stx-accent);
}

/* ================================================================ MODALES == */

/* Bootstrap 3 necesita .modal/.modal-dialog/.modal-content intactos;
   .stx-modal solo reviste el interior. */
.stx-modal {
  border: 0 !important;
  border-radius: var(--stx-radio-panel) !important;
  background-color: var(--stx-panel) !important;
  box-shadow: 0 12px 40px rgba(5, 5, 5, 0.18) !important;
  overflow: hidden;
  /* Fuera de .stx: hay que fijar aquí la base que allí se hereda */
  font-family: var(--stx-font-body);
  font-size: var(--stx-s);
  color: var(--stx-ink);
}

.stx-modal,
.stx-modal *,
.stx-modal *::before,
.stx-modal *::after {
  box-sizing: border-box;
}

/* Sin tope, una tabla ancha desborda el viewport y arrastra la página
   en horizontal (el diálogo llevaba width:fit-content suelto). */
.stx-modal-dialog {
  width: fit-content;
  max-width: 96vw;
}

.stx-modal .modal-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: calc(var(--stx-s) * 0.7) calc(var(--stx-s) * 1.1);
  border-bottom: 1px solid var(--stx-line);
  background-color: var(--stx-panel);
  color: var(--stx-ink);
}

.stx-modal .modal-header .title {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.9);
  font-weight: 700;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  color: var(--stx-ink);
}

.stx-modal .modal-header .close {
  color: var(--stx-ink);
  opacity: 1;
  text-shadow: none;
  font-size: calc(var(--stx-s) * 1.2);
}

.stx-modal .modal-header .close:hover {
  color: var(--stx-accent);
}

.stx-modal .modal-body {
  padding: var(--stx-pad);
  max-height: 78vh;
  overflow: auto;
}

/* stats.css se carga DESPUÉS que esta hoja, así que .card2 nos ganaría por
   orden. Con dos clases de especificidad neutralizamos los envoltorios
   heredados que aún quedan dentro de los modales. */
.stx-modal .card2 {
  padding: 0;
  background: none;
  box-shadow: none;
}

.stx-modal .title {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.8);
  font-weight: 700;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  color: var(--stx-ink);
}

/* Porcentaje bajo el conteo en la tabla de clasificación */
.stx-pct {
  font-family: var(--stx-font-mono);
  font-size: 0.85em;
  font-weight: 700;
  color: var(--stx-accent);
}

/* Racha: G / E / P de las últimas jornadas. Mismos colores y píldoras que
   la clasificación del portal (css/clasificacion.css). */
.stx-tabla .ganado,
.stx-tabla .perdido,
.stx-tabla .empatado,
.stx-tabla .sindatos {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.9em;
  height: 1.9em;
  margin-right: 3px;
  border-radius: var(--stx-pill);
  font-family: var(--stx-font-display);
  font-weight: 600;
  color: var(--stx-ink);
}

.stx-tabla .ganado {
  background-color: #3df59e;
}

.stx-tabla .empatado {
  background-color: #fea100;
}

.stx-tabla .perdido {
  background-color: #f53d3d;
}

.stx-tabla .sindatos {
  color: var(--stx-ink-soft);
  background-color: var(--stx-white);
}

.stx-modal .modal-footer {
  padding: calc(var(--stx-s) * 0.6) calc(var(--stx-s) * 1.1);
  border-top: 1px solid var(--stx-line);
}

.stx-modal .modal-footer .btn {
  padding: calc(var(--stx-s) * 0.45) calc(var(--stx-s) * 1.2);
  border: 0;
  border-radius: var(--stx-pill);
  background-color: var(--stx-accent);
  color: var(--stx-white);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.72);
  font-weight: 700;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}

.stx-modal .modal-footer .btn:hover {
  background-color: var(--stx-accent-dark);
}

/* ========================================================= ESTADO VACÍO == */

.stx-empty {
  padding: calc(var(--stx-s) * 1.6) var(--stx-pad);
  text-align: center;
  border-radius: var(--stx-radio);
  background-color: var(--stx-cell);
}

.stx-empty p {
  margin: 0;
  font-family: var(--stx-font-body);
  font-size: calc(var(--stx-s) * 0.78);
  color: var(--stx-ink-soft);
}

.stx-empty p::before {
  content: ">>> ";
  font-family: var(--stx-font-mono);
  color: var(--stx-accent);
}

.stx-empty[hidden] {
  display: none;
}

/* ========================================================= ACCESIBILIDAD == */

.stx a:focus-visible,
.stx input:focus-visible,
.stx button:focus-visible {
  outline: 2px solid var(--stx-accent);
  outline-offset: 2px;
}

@media (prefers-reduced-motion: reduce) {
  .stx *,
  .stx *::before,
  .stx *::after {
    transition-duration: 1ms !important;
  }
}

/* ============================================================ RESPONSIVE == */

/* -- Tablet: el buscador ya no cabe en la línea del título ---------------- */

@media (max-width: 900px) {
  .stx-section-head > .stx-search,
  .stx-section-head > .stx-controles {
    flex-basis: 100%;
    margin-left: 0;
  }

  .stx-kpis {
    grid-template-columns: repeat(2, 1fr);
  }
}

/**
 * TABLA APILABLE
 * Por debajo de 760px una tabla de 6 columnas solo se puede leer arrastrando
 * en horizontal. Con .stx-tabla--apilable cada fila pasa a ser una ficha y
 * cada celda muestra su rótulo desde data-label. Las páginas que no marcan la
 * tabla con esa clase conservan el scroll horizontal de .stx-tabla-wrap.
 */
@media (max-width: 760px) {
  /* Opción 1: Columna fija estrecha con elipsis */
  .stx-tabla-wrap tbody td:first-child,
  .stx-tabla-wrap thead tr:first-child th:first-child {
    max-width: calc(var(--stx-s) * 7.5);
    min-width: calc(var(--stx-s) * 6.5);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .stx-tabla-wrap tbody td:first-child a {
    display: block;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  /* Tabla más compacta para móviles */
  .stx-tabla {
    font-size: calc(var(--stx-s) * 0.7);
  }

  .stx-tabla tbody td,
  .stx-tabla thead th {
    padding: calc(var(--stx-s) * 0.35) calc(var(--stx-s) * 0.4);
  }

  .stx-tabla--ranking tbody td,
  .stx-tabla--ranking thead th {
    padding: calc(var(--stx-s) * 0.28) calc(var(--stx-s) * 0.3);
  }

  .stx-avatar,
  .stx-tabla-escudo {
    width: calc(var(--stx-s) * 1.3);
    height: calc(var(--stx-s) * 1.3);
    margin-right: calc(var(--stx-s) * 0.25);
  }
}

/* -- Móvil ---------------------------------------------------------------- */

@media (max-width: 640px) {
  .stx {
    margin: calc(var(--stx-s) * 0.5);
    padding: calc(var(--stx-s) * 0.6);
  }

  .stx-meta {
    border-radius: var(--stx-radio);
  }

  .stx-search {
    flex-basis: 100%;
    margin-left: 0;
  }

  .stx-equipos {
    grid-template-columns: repeat(auto-fit, minmax(calc(var(--stx-s) * 6.5), 1fr));
  }

  .stx-cta {
    border-radius: var(--stx-radio);
    padding: calc(var(--stx-s) * 0.8) calc(var(--stx-s) * 0.9);
    font-size: calc(var(--stx-s) * 0.9);
  }

  .stx-equipo > a::after {
    top: calc(var(--stx-s) * 0.3);
    right: calc(var(--stx-s) * 0.35);
  }

  /* Los dos campos de la cabecera embed (Temporada/Competición) caben uno
     junto al otro en la misma fila hasta bien entrado el rango móvil: con la
     label en mono ocupando su hueco fijo, al <select> le queda tan poco sitio
     que el nombre de la competición se corta a lo bruto ("DIVISIÓN DE HONOR
     FEMENINA..." -> "DIVISK"), porque un <select> nativo no hace ellipsis.
     Apilados, cada uno usa el ancho completo de la barra. */
  .stx-embed-campo {
    flex-basis: 100%;
  }
}

/* ========================================================== AVISO / NOTA == */

/**
 * Texto de contexto que matiza un dato: "esta tabla no es oficial", "este
 * torneo no publica marcadores". Gris plano y sin filete, porque es dato
 * inerte y no un destino (regla de afordancia de arriba).
 */
.stx-aviso {
  padding: calc(var(--stx-s) * 0.7) var(--stx-pad);
  border-radius: var(--stx-radio);
  background-color: var(--stx-cell);
  font-family: var(--stx-font-body);
  font-size: calc(var(--stx-s) * 0.72);
  line-height: 1.5;
  color: var(--stx-ink-soft);
}

.stx-aviso::before {
  content: "";
  display: inline-block;
  width: 0.55em;
  height: 0.55em;
  margin-right: 0.6em;
  vertical-align: baseline;
  border-radius: var(--stx-pill);
  background-color: var(--stx-accent);
}

/* Nota al pie de una tabla o gráfica: ya va dentro de una tarjeta gris, así
   que no necesita fondo propio. */
.stx-aviso--pie,
.stx-nota {
  padding: 0 var(--stx-pad) calc(var(--stx-s) * 0.7);
  margin: 0;
  background: none;
  font-family: var(--stx-font-mono);
  font-size: max(12px, calc(var(--stx-s) * 0.62));
  letter-spacing: 0.04em;
  line-height: 1.6;
  color: var(--stx-ink-soft);
}

.stx-nota b {
  color: var(--stx-accent);
  font-variant-numeric: tabular-nums;
}

/* ============================================================ CONMUTADOR == */

/* Los grupos van al final de la línea de sección, detrás del título */
.stx-controles {
  display: flex;
  flex-wrap: wrap;
  gap: calc(var(--stx-s) * 0.4);
  margin-left: auto;
}

/**
 * Control segmentado. No es rojo a propósito: el rojo relleno está reservado
 * a los destinos (.stx-cta). Esto no lleva a ninguna parte, solo cambia lo
 * que ya se está mirando, así que la opción activa se marca en negro.
 */
.stx-conmuta {
  display: inline-flex;
  flex-wrap: wrap;
  padding: calc(var(--stx-s) * 0.12);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
}

.stx-conmuta button {
  padding: calc(var(--stx-s) * 0.22) calc(var(--stx-s) * 0.8);
  border: 0;
  border-radius: var(--stx-pill);
  background: none;
  color: var(--stx-ink-soft);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  cursor: pointer;
  transition: background-color 140ms ease, color 140ms ease;
}

.stx-conmuta button:hover {
  color: var(--stx-ink);
}

.stx-conmuta button.is-activo {
  background-color: var(--stx-ink);
  color: var(--stx-white);
}

.stx-conmuta button:focus-visible {
  outline: 2px solid var(--stx-accent);
  outline-offset: 1px;
}

/* ================================================== NAVEGADOR DE JORNADAS == */

/**
 * Prev / select / next para viajar por el histórico de la clasificación.
 * Mismo pill que .stx-conmuta para no introducir un tercer lenguaje visual de
 * control en la misma cabecera de sección.
 */
.stx-jornada-nav {
  display: inline-flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.25);
  padding: calc(var(--stx-s) * 0.12);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
}

.stx-jornada-nav-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 1.7);
  height: calc(var(--stx-s) * 1.7);
  border: 0;
  border-radius: var(--stx-pill);
  background: none;
  color: var(--stx-ink);
  font-size: calc(var(--stx-s) * 0.55);
  cursor: pointer;
  transition: background-color 140ms ease, color 140ms ease;
}

.stx-jornada-nav-btn:hover:not(:disabled) {
  background-color: var(--stx-ink);
  color: var(--stx-white);
}

.stx-jornada-nav-btn:disabled {
  color: var(--stx-ink-soft);
  opacity: 0.35;
  cursor: default;
}

.stx-jornada-nav-btn:focus-visible {
  outline: 2px solid var(--stx-accent);
  outline-offset: 1px;
}

.stx-jornada-nav select {
  border: 0;
  border-radius: var(--stx-pill);
  padding: calc(var(--stx-s) * 0.22) calc(var(--stx-s) * 0.6);
  background: none;
  color: var(--stx-ink-soft);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 700;
  letter-spacing: 0.04em;
  cursor: pointer;
}

.stx-jornada-nav select:focus-visible {
  outline: 2px solid var(--stx-accent);
  outline-offset: 1px;
}

/* El aviso de "esto es historia" comparte el filete de .stx-aviso pero con el
   acento a la izquierda en vez del punto: aquí no hay nada raro que avisar,
   solo un recordatorio de dónde estás. */
.stx-aviso--historico {
  border-left: 3px solid var(--stx-accent);
}

.stx-aviso--historico::before {
  display: none;
}

.stx-aviso--historico b {
  color: var(--stx-ink);
}

/* ========================================================= CLASIFICACIÓN == */

/* Tabla muy ancha: se aprieta el interlineado para que quepan las 16 columnas
   sin que la fila se vuelva una franja. */
.stx-tabla--clasificacion tbody td {
  padding: calc(var(--stx-s) * 0.4) calc(var(--stx-s) * 0.45);
}

.stx-tabla--clasificacion thead th {
  padding: calc(var(--stx-s) * 0.55) calc(var(--stx-s) * 0.45);
}

.stx-tabla--clasificacion .stx-pos {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.95);
  font-weight: 800;
  color: var(--stx-ink);
}

/* Las tres primeras plazas se marcan solas: es lo que se busca al entrar */
.stx-tabla--clasificacion tbody tr:nth-child(-n + 3) .stx-pos {
  color: var(--stx-accent);
}

.stx-equipo-celda {
  min-width: calc(var(--stx-s) * 10);
  font-family: var(--stx-font-display);
  font-weight: 600;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  white-space: nowrap;
}

/* -- Subida y bajada de puesto ------------------------------------------- */

.stx-salto {
  padding-left: 0 !important;
  padding-right: 0 !important;
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.55);
  font-weight: 700;
  text-align: center;
  white-space: nowrap;
}

.stx-sube {
  color: #1b7f5f;
}

.stx-baja {
  color: var(--stx-accent);
}

/* -- Barra de diferencia -------------------------------------------------- */

/**
 * Eje central fijo y la barra creciendo a un lado u otro. Con la barra pegada
 * a un borde no se distingue "+3" de "-3" de un vistazo, que es justo lo que
 * esta columna tiene que resolver.
 */
/* La cifra se centra sobre el eje. Alineada a la derecha como el resto de
   columnas numéricas, el número quedaba en un sitio y su barra en otro. */
.stx-tabla--clasificacion .stx-col-dif {
  text-align: center;
}

.stx-dif {
  position: relative;
  display: block;
  min-width: calc(var(--stx-s) * 4);
  padding-bottom: calc(var(--stx-s) * 0.28);
}

.stx-dif b {
  font-family: var(--stx-font-mono);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

.stx-dif i {
  position: absolute;
  bottom: 0;
  left: 50%;
  height: calc(var(--stx-s) * 0.16);
  border-radius: var(--stx-pill);
  background-color: var(--stx-ink);
  transition: width 160ms ease;
}

/* Negativa: misma barra, hacia el otro lado del eje */
.stx-dif i.es-negativo {
  left: auto;
  right: 50%;
  background-color: var(--stx-accent);
}

/* -- Forma (últimos cinco) ------------------------------------------------ */

.stx-forma {
  white-space: nowrap;
}

.stx-forma span {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 1.05);
  height: calc(var(--stx-s) * 1.05);
  margin-right: calc(var(--stx-s) * 0.12);
  border-radius: var(--stx-pill);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.58);
  font-weight: 700;
  color: var(--stx-white);
  cursor: help;
}

.stx-forma-G {
  background-color: #1b7f5f;
}

.stx-forma-E {
  background-color: var(--stx-ink-soft);
}

.stx-forma-P {
  background-color: var(--stx-accent);
}

.stx-sindatos {
  color: var(--stx-ink-soft);
}

/**
 * Columna apagada. Ensayos, bonus y puntos son acumulados del torneo: al pasar
 * a la vista de casa o de fuera dejan de corresponder con el resto de la fila.
 * Se atenúan en vez de ocultarse para que la tabla no dé un salto de anchura.
 */
.stx .es-inactiva {
  opacity: 0.28;
}

/* ============================================ REJILLA DE DOS COLUMNAS == */

@media (min-width: 800px) {
  .stx-rejilla--dos {
    grid-template-columns: 1fr 1fr;
  }
}

/* ================================================= TARJETAS PINCHABLES == */

/**
 * Partidos y destacados enlazan a la ficha de estadísticas del partido
 * (mostrar_estadisticas_partido.php). Por la regla de afordancia, todo
 * destino en formato tarjeta va sobre blanco al activarse y lleva su flecha.
 */
a.stx-partido,
a.stx-extremo {
  color: inherit;
  text-decoration: none;
  transition: background-color 140ms ease;
}

a.stx-partido:hover,
a.stx-partido:focus-visible,
a.stx-extremo:hover,
a.stx-extremo:focus-visible {
  background-color: var(--stx-white);
  color: inherit;
  text-decoration: none;
}

a.stx-partido:focus-visible,
a.stx-extremo:focus-visible {
  outline: 2px solid var(--stx-accent);
  outline-offset: -2px;
}

.stx-partido .stx-flecha,
.stx-extremo .stx-flecha {
  color: var(--stx-accent);
  opacity: 0.45;
  transition: opacity 140ms ease;
}

a.stx-partido:hover .stx-flecha,
a.stx-partido:focus-visible .stx-flecha,
a.stx-extremo:hover .stx-flecha,
a.stx-extremo:focus-visible .stx-flecha {
  opacity: 1;
}

/* El equipo que ganó, en negrita: con dos marcadores del mismo peso hay que
   comparar cifras para saber quién se llevó el partido. */
.stx-partido-gana {
  font-weight: 700;
}

.stx-partido-fecha {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: calc(var(--stx-s) * 0.1);
  text-align: right;
}

.stx-partido-fecha small {
  font-size: 0.85em;
  opacity: 0.75;
}

.stx-extremo-unidad {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

/* La cabecera de "Próximos" / "Últimos" abre una tarjeta de la rejilla */
.stx-rejilla .stx-podio-head {
  border-bottom: 1px solid var(--stx-line);
}

/* ============================================================== RANKINGS == */

/**
 * Tablas de §05 Tantos y §06 Faltas. Cabecera de dos filas: arriba el grupo
 * (Temporales / Definitivas / Desglose por tipo) y abajo cada tipo concreto.
 * La agrupación no es decoración: el catálogo repite "Juego Sucio" como
 * expulsión temporal y como definitiva, y sin el grupo encima las dos
 * columnas se llamarían igual.
 */
.stx-tabla--ranking tbody td {
  padding: calc(var(--stx-s) * 0.4) calc(var(--stx-s) * 0.45);
}

.stx-tabla--ranking thead th {
  padding: calc(var(--stx-s) * 0.45) calc(var(--stx-s) * 0.45);
  vertical-align: bottom;
}

/**
 * Jugador/Equipo/Total llevan rowspan="2" (ocupan las dos filas de cabecera).
 * Heredar el vertical-align:bottom de la regla genérica -pensado para las
 * celdas de una sola fila, que se apoyan justo en el filete que separa fila 1
 * de fila 2- las hunde hasta el fondo de esa celda doble-alta, dejando un
 * hueco negro vacío encima de su texto del tamaño de la fila 1 entera.
 */
.stx-tabla--ranking thead th[rowspan] {
  vertical-align: middle;
}

/* Rótulo de grupo: centrado y con filete lateral para que se vea dónde
   empieza y acaba cada bloque de columnas */
.stx-tabla--ranking .stx-grupo {
  text-align: center;
  vertical-align: middle;
  border-left: 1px solid rgba(255, 255, 255, 0.25);
  font-size: calc(var(--stx-s) * 0.58);
  letter-spacing: 0.16em;
  color: var(--stx-white);
}

/* Nombres de tipo largos ("Falta Reiterada de Equipo"): se dejan en dos
   líneas en vez de estirar la tabla a lo ancho hasta lo ridículo */
.stx-tabla--ranking thead tr:last-child th {
  max-width: calc(var(--stx-s) * 6);
  white-space: normal;
  line-height: 1.2;
}

/* La columna de total manda sobre el desglose */
.stx-tabla--ranking .stx-col-total {
  border-left: 1px solid rgba(255, 255, 255, 0.25);
}

.stx-tabla--ranking tbody .stx-col-total {
  border-left: 1px solid var(--stx-line);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.95);
  font-weight: 800;
}

.stx-tabla--ranking .stx-subtotal {
  font-weight: 700;
}

.stx-tabla--ranking tbody .stx-subtotal {
  border-left: 1px solid var(--stx-line);
}

/**
 * Estas tablas son mayoría de ceros. En negro compiten con los datos que sí
 * importan, así que se apagan hasta casi desaparecer.
 *
 * Se apaga el color y NO la opacidad de la celda: con opacity el fondo de la
 * celda se transparentaba también y el zebrado salía a parches, más claro allí
 * donde había un cero.
 */
.stx-tabla--ranking .es-cero {
  color: rgba(5, 5, 5, 0.26);
}

.stx-jugador-celda {
  min-width: calc(var(--stx-s) * 11);
  font-family: var(--stx-font-display);
  font-weight: 600;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  white-space: nowrap;
}

.stx-avatar {
  width: calc(var(--stx-s) * 1.8);
  height: calc(var(--stx-s) * 1.8);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  object-fit: cover;
  vertical-align: middle;
  margin-right: calc(var(--stx-s) * 0.4);
}

/* -- Cabeceras ordenables ------------------------------------------------- */

.stx-tabla .es-ordenable {
  cursor: pointer;
  user-select: none;
  transition: color 120ms ease;
}

.stx-tabla .es-ordenable:hover {
  color: var(--stx-accent);
}

.stx-tabla .es-ordenable:focus-visible {
  outline: 2px solid var(--stx-accent);
  outline-offset: -2px;
}

/* Marca de ordenación. Se reserva el hueco con la flecha tenue para que la
   fila de cabecera no cambie de anchura al ordenar por otra columna. */
.stx-tabla .es-ordenable::after {
  content: " \2195";
  opacity: 0.3;
}

.stx-tabla .es-orden-asc::after {
  content: " \25B2";
  opacity: 1;
  color: var(--stx-accent);
}

.stx-tabla .es-orden-desc::after {
  content: " \25BC";
  opacity: 1;
  color: var(--stx-accent);
}

/* -- Sección con vistas conmutables --------------------------------------- */

/**
 * Las secciones de ranking (Tantos, Faltas) enseñan equipos O jugadores, nunca
 * los dos a la vez: apilados eran cuatro tablas seguidas de cientos de filas.
 * El <section> agrupa cabecera y paneles para que el conmutador solo actúe
 * sobre los suyos y no sobre los de la otra sección.
 */
.stx-seccion,
.stx-panel {
  display: flex;
  flex-direction: column;
  gap: var(--stx-gap);
  min-width: 0;
}

/* [hidden] por sí solo no gana a display:flex */
.stx-panel[hidden] {
  display: none;
}

/* -- Top cinco ------------------------------------------------------------ */

/**
 * El podio de la sección. Son destinos, así que llevan las tres marcas de la
 * regla de afordancia: superficie blanca, filete y flecha en reposo.
 */
/**
 * auto-fill y no auto-fit: cuando el podio tiene dos nombres -sucede en
 * disciplina, donde media liga no ve una tarjeta- auto-fit los estiraría a
 * media pantalla cada uno. Con auto-fill las pistas sobrantes quedan vacías y
 * la tarjeta conserva su tamaño.
 */
.stx-top {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(calc(var(--stx-s) * 9.5), 1fr));
  gap: var(--stx-gap);
  margin: 0;
  padding: 0;
  list-style: none;
}

/* Tablet: tres y dos. Con cuatro por fila el quinto se queda solo y parece un
   error de maquetación en vez del final del podio. */
@media (min-width: 620px) and (max-width: 999px) {
  .stx-top {
    grid-template-columns: repeat(3, 1fr);
  }
}

/* En escritorio el podio son cinco columnas exactas, ocupen o no las cinco */
@media (min-width: 1000px) {
  .stx-top {
    grid-template-columns: repeat(5, 1fr);
  }
}

.stx-top-item {
  display: flex;
}

.stx-top-card {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: calc(var(--stx-s) * 0.35);
  width: 100%;
  padding: calc(var(--stx-s) * 0.6) var(--stx-pad) calc(var(--stx-s) * 0.7);
  border: 1px solid var(--stx-line-link);
  border-radius: var(--stx-radio);
  background-color: var(--stx-white);
  color: var(--stx-ink);
  text-decoration: none;
  /* El blanco apenas contrasta con el panel: la tarjeta se despega en reposo */
  box-shadow: 0 calc(var(--stx-s) * 0.1) calc(var(--stx-s) * 0.28)
    rgba(5, 5, 5, 0.07);
  transition: border-color 160ms ease, box-shadow 160ms ease,
    transform 160ms ease;
}

.stx-top-card:hover,
.stx-top-card:focus-visible {
  border-color: var(--stx-accent);
  color: var(--stx-ink);
  text-decoration: none;
  transform: translateY(calc(var(--stx-s) * -0.12));
  box-shadow: 0 calc(var(--stx-s) * 0.2) calc(var(--stx-s) * 0.5)
    rgba(5, 5, 5, 0.12);
}

/* El primero se marca solo: es la respuesta a "¿quién va primero?" */
.stx-top-card.es-lider {
  border-color: var(--stx-accent);
}

.stx-top-cab {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: calc(var(--stx-s) * 0.4);
}

.stx-top-pos {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 1.5);
  height: calc(var(--stx-s) * 1.5);
  border-radius: var(--stx-pill);
  background-color: var(--stx-ink);
  color: var(--stx-white);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

.stx-top-card.es-lider .stx-top-pos {
  background-color: var(--stx-accent);
}

.stx-top .stx-flecha {
  font-size: calc(var(--stx-s) * 0.58);
  font-weight: 700;
  color: var(--stx-accent);
  opacity: 0.45;
  transition: opacity 160ms ease;
}

.stx-top-card:hover .stx-flecha,
.stx-top-card:focus-visible .stx-flecha {
  opacity: 1;
}

.stx-top-quien {
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.45);
  min-width: 0;
}

.stx-top-foto {
  width: calc(var(--stx-s) * 2.5);
  height: calc(var(--stx-s) * 2.5);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  object-fit: cover;
  flex: none;
}

/* Un escudo no se recorta como una foto de carnet */
.stx-top-foto.es-escudo {
  padding: calc(var(--stx-s) * 0.15);
  background-color: var(--stx-cell);
  object-fit: contain;
  mix-blend-mode: multiply;
}

/* Jugador sin foto: inicial en vez del hueco de una imagen rota */
.stx-top-foto.es-vacia {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 1.05);
  font-weight: 700;
  color: var(--stx-ink-soft);
}

.stx-top-nombre {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.72);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  overflow-wrap: anywhere;
}

.stx-top-equipo {
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.3);
  min-width: 0;
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.58);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stx-top-equipo img {
  width: calc(var(--stx-s) * 1.2);
  height: calc(var(--stx-s) * 1.2);
  object-fit: contain;
  mix-blend-mode: multiply;
  flex: none;
}

.stx-top-equipo span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* margin-top:auto alinea las cifras de las cinco tarjetas aunque un nombre
   ocupe dos líneas y otro una */
.stx-top-cifra {
  display: flex;
  align-items: baseline;
  gap: calc(var(--stx-s) * 0.3);
  margin-top: auto;
  padding-top: calc(var(--stx-s) * 0.2);
}

.stx-top-cifra b {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 1.9);
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.03em;
  color: var(--stx-accent);
  font-variant-numeric: tabular-nums;
}

.stx-top-cifra span {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.6);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

/* Distancia con el líder: la barra es lo que dice si el primero se ha
   escapado o si los cinco están pegados. */
.stx-top-barra {
  height: calc(var(--stx-s) * 0.18);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  overflow: hidden;
}

.stx-top-barra i {
  display: block;
  height: 100%;
  border-radius: var(--stx-pill);
  background-color: var(--stx-ink);
}

.stx-top-card.es-lider .stx-top-barra i {
  background-color: var(--stx-accent);
}

.stx-top-desglose {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.58);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
  /* Reserva el renglón: sin esto las tarjetas sin desglose son más bajas */
  min-height: 1.2em;
}

/* -- Tabla con scroll propio ---------------------------------------------- */

/**
 * La tabla completa va detrás del podio y no puede empujar la página: se le
 * acota la altura y la cabecera se queda fija al desplazarse. El tope está en
 * unas doce filas, suficiente para ver que hay más y para comparar sin salir
 * de la sección.
 */
.stx-tabla-wrap--scroll {
  max-height: calc(var(--stx-s) * 24);
  width: 100%;
  max-width: 100%;
  overflow-x: auto;
  overflow-y: auto;
  /* Al llegar al final no se arrastra la página de detrás */
  overscroll-behavior: contain;
}

/**
 * .stx-tabla fija width:100%: con el layout automático de tablas eso es solo
 * una PETICIÓN, no una orden -el navegador puede negarse y encajar las
 * columnas igualmente si el contenido no obliga a más- así que con muchas
 * columnas de desglose el resultado no era desbordar y poder arrastrar, sino
 * apretar cada columna hasta casi desaparecer para que todo cupiera en el
 * ancho de pantalla. min-width:max-content fuerza a la tabla a medir lo que
 * su contenido pide de verdad, para que overflow-x:auto tenga margen
 * de sobra que ofrecer y el scroll aparezca siempre que hace falta.
 */
.stx-tabla-wrap--scroll .stx-tabla {
  width: auto;
  min-width: 100%;
}

.stx-tabla-wrap--scroll thead th {
  position: sticky;
  z-index: 2;
}

.stx-tabla-wrap--scroll thead tr:first-child th {
  top: 0;
}

/**
 * La segunda fila de la cabecera se apoya justo debajo de la primera. Su
 * altura depende de la fuente y de la escala fluida, así que la mide el JS y
 * la deja en --stx-th1; el valor de reserva vale para el primer pintado.
 */
.stx-tabla-wrap--scroll thead tr:nth-child(2) th {
  top: var(--stx-th1, calc(var(--stx-s) * 1.7));
}

/**
 * La columna del nombre se queda anclada al desplazar en horizontal.
 */
.stx-tabla-wrap tbody td:first-child {
  position: sticky;
  left: 0;
  z-index: 1;
  box-shadow: 1px 0 0 var(--stx-line);
}

.stx-tabla-wrap tbody tr:nth-child(odd) td:first-child {
  background-color: var(--stx-cell);
}
.stx-tabla-wrap tbody tr:nth-child(even) td:first-child {
  background-color: var(--stx-panel);
}

/* Solo la de la primera fila: en la segunda, el th inicial ya es una columna
   del desglose y anclarla dejaría un número flotando sobre los nombres. */
.stx-tabla-wrap thead tr:first-child th:first-child {
  position: sticky;
  left: 0;
  z-index: 3;
}

/**
 * Cabecera de grupo (torneo/fase) del listado completo de partidos: una
 * fila propia a todo lo ancho, sin la raya de anclaje ni el cebrado de las
 * filas normales para que se lea como un separador y no como una fila de
 * datos más.
 *
 * El sticky va en el propio <td> (con colspan) y no en un <div> interno: los
 * navegadores tratan a las celdas de tabla como un caso especial y las dejan
 * fijas recorriendo TODA la tabla/tbody, no solo su propia fila; un <div>
 * normal dentro de la celda no tiene ese privilegio y solo puede quedarse
 * fijo dentro de los límites de su contenedor inmediato (la celda, que mide
 * justo una fila), así que nunca llega a "viajar" y no se ve fijo.
 *
 * Lo que SÍ hay que anular es el anclaje HORIZONTAL que hereda de la regla
 * genérica de primera columna (.stx-tabla-wrap--scroll tbody td:first-child):
 * combinar sticky en los dos ejes (left Y top) con colspan es justo lo que
 * rompía el pintado (contenido cortado, fila superpuesta con la siguiente).
 * Con left:auto la celda solo se fija en vertical, que es lo único que tiene
 * sentido en una fila que ya ocupa el ancho entero.
 *
 * Se queda fija al desplazar, justo debajo de la cabecera de columnas: en
 * una tabla de cientos de partidos es la única forma de saber en qué
 * torneo estás sin volver a subir. El alto de la cabecera de columnas se
 * mide por JS (estadisticas_listado_partidos.js) porque depende de la
 * escala fluida del módulo; la variable cae a un valor razonable si el JS
 * no ha corrido todavía (primer pintado).
 *
 * z-index por encima de la columna anclada de las filas normales (1, arriba)
 * y por debajo de la cabecera de columnas (bump a 3 aquí porque la genérica
 * vale 2): así el orden de pintado no depende del orden en el DOM cuando
 * una fila normal cruza la banda fija al desplazar.
 */
.stx-tabla-wrap--scroll .stx-tabla--partidos thead th {
  z-index: 3;
}

.stx-tabla--partidos tbody tr.stx-listado-grupo td {
  position: sticky;
  top: var(--stx-listado-th0, calc(var(--stx-s) * 2.3));
  left: auto;
  z-index: 2;
  box-shadow: none;
  background-color: var(--stx-panel);
  font-weight: 700;
}

.stx-tabla--partidos tr.stx-listado-grupo .stx-count {
  margin-left: calc(var(--stx-s) * 0.5);
}

/* La cabecera de bloque aloja además el contador y el buscador */
.stx-bloque > .stx-podio-head {
  gap: calc(var(--stx-s) * 0.6);
}

.stx-bloque > .stx-podio-head .stx-search {
  margin-left: auto;
  flex: 0 1 calc(var(--stx-s) * 14);
}

.stx-bloque > .stx-podio-head .stx-search label {
  color: inherit;
}

/* El campo va sobre la cabecera del bloque, que ya es gris: sin fondo propio
   el recuadro desaparece y solo se ve el texto de ayuda flotando. */
.stx-bloque > .stx-podio-head .stx-search input {
  border-color: var(--stx-line-link);
  background-color: var(--stx-white);
}

.stx-bloque > .stx-podio-head .stx-count {
  margin-right: auto;
}

/* ==========================================================================
   DASHBOARD DE EQUIPO
   --------------------------------------------------------------------------
   Todo lo que sigue lo usa solo mostrar_estadisticas_equipo_v2.php, y va
   prefijado .stxeq- para distinguirlo de la capa compartida .stx-.

   Los colores de resultado son los mismos que los de la pildora de forma de la
   clasificacion (.stx-forma-G/E/P): verde ganado, gris empatado, rojo perdido.
   Repetirlos aqui y no reutilizar aquella clase es deliberado: alli son
   pildoras de 1em y aqui son barras y bloques.
   ========================================================================== */

:root {
  --stxeq-gana: #1b7f5f;
  --stxeq-empata: #666;
  --stxeq-pierde: var(--stx-accent, #e32203);

  /* Rampa de la anotacion: del rojo de marca al negro, para que los cuatro
     segmentos de la barra se distingan sin salirse de la paleta del portal. */
  --stxeq-ensayo: var(--stx-accent, #e32203);
  --stxeq-conversion: #f2795a;
  --stxeq-golpe: var(--stx-ink, #050505);
  --stxeq-drop: rgba(5, 5, 5, 0.35);
}

/* ================================================================== HERO == */

.stxeq-hero {
  display: flex;
  align-items: center;
  gap: var(--stx-pad);
}

.stxeq-hero-escudo {
  flex: none;
  width: calc(var(--stx-s) * 4.2);
  height: calc(var(--stx-s) * 4.2);
  object-fit: contain;
}

/* ============================================================== ALCANCE == */

/**
 * El conmutador torneo / competicion navega de verdad (cambia el conjunto de
 * partidos y por tanto todas las consultas), asi que son enlaces y no botones.
 * Se pintan igual que los botones del conmutador para que se lean como un solo
 * control.
 */
.stx-conmuta a {
  display: inline-flex;
  align-items: center;
  padding: calc(var(--stx-s) * 0.22) calc(var(--stx-s) * 0.8);
  border-radius: var(--stx-pill);
  color: var(--stx-ink-soft);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  text-decoration: none;
  transition: background-color 140ms ease, color 140ms ease;
}

.stx-conmuta a:hover {
  color: var(--stx-ink);
}

.stx-conmuta a.is-activo {
  background-color: var(--stx-ink);
  color: var(--stx-white);
}

.stxeq-alcance {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: calc(var(--stx-s) * 0.5) var(--stx-pad);
}

.stxeq-alcance-pie {
  flex: 1 1 calc(var(--stx-s) * 16);
  padding: 0;
}

/**
 * "Elegir fases": mismo <details> nativo que el resto del portal, para poder
 * concatenar cualquier subconjunto de fases sin JS. El <summary> se pinta
 * como una pill más de .stx-conmuta para que las tres opciones se lean como
 * un único control; el panel de checkboxes cuelga en absoluto para no
 * empujar el resto de la fila cuando se abre.
 */
.stxeq-seleccion {
  position: relative;
}

.stxeq-seleccion > summary {
  display: inline-flex;
  align-items: center;
  padding: calc(var(--stx-s) * 0.22) calc(var(--stx-s) * 0.8);
  border-radius: var(--stx-pill);
  color: var(--stx-ink-soft);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  list-style: none;
  cursor: pointer;
  transition: background-color 140ms ease, color 140ms ease;
}

.stxeq-seleccion > summary::-webkit-details-marker {
  display: none;
}

.stxeq-seleccion > summary:hover {
  color: var(--stx-ink);
}

.stxeq-seleccion.is-activo > summary,
.stxeq-seleccion[open] > summary {
  background-color: var(--stx-ink);
  color: var(--stx-white);
}

.stxeq-seleccion-form {
  position: absolute;
  z-index: 5;
  top: calc(100% + calc(var(--stx-s) * 0.3));
  left: 0;
  min-width: calc(var(--stx-s) * 14);
  padding: calc(var(--stx-s) * 0.6);
  border-radius: var(--stx-radio);
  background-color: var(--stx-white);
  box-shadow: 0 calc(var(--stx-s) * 0.5) calc(var(--stx-s) * 1.2) rgba(5, 5, 5, 0.18);
}

.stxeq-seleccion-lista {
  margin: 0 0 calc(var(--stx-s) * 0.5);
  padding: 0;
  list-style: none;
  max-height: calc(var(--stx-s) * 12);
  overflow-y: auto;
}

.stxeq-seleccion-lista li + li {
  margin-top: calc(var(--stx-s) * 0.15);
}

.stxeq-seleccion-lista label {
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.4);
  font-family: var(--stx-font-body);
  font-size: calc(var(--stx-s) * 0.78);
  white-space: nowrap;
  cursor: pointer;
}

/**
 * Negro, no rojo: el rojo relleno está reservado a los destinos (.stx-cta,
 * ver comentario de .stx-conmuta más arriba). Este botón no lleva a ningún
 * sitio nuevo, solo aplica el cambio de alcance ya elegido con las casillas.
 *
 * Selector calificado con .stx-conmuta a propósito: el botón vive dentro de
 * ese contenedor (details > form > button), así que sin este empujón de
 * especificidad la regla ".stx-conmuta button" (una clase + una etiqueta)
 * le gana a ".stxeq-seleccion-aplicar" sola (una clase) pese a ir después
 * en el fichero, y lo deja con background:none y texto gris — el botón
 * "invisible" sobre fondo blanco.
 */
.stx-conmuta .stxeq-seleccion-aplicar {
  width: 100%;
  margin-top: calc(var(--stx-s) * 0.2);
  padding: calc(var(--stx-s) * 0.35) calc(var(--stx-s) * 0.8);
  border: 0;
  border-radius: var(--stx-pill);
  background-color: var(--stx-ink);
  color: var(--stx-white);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.65);
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  cursor: pointer;
}

.stx-conmuta .stxeq-seleccion-aplicar:hover {
  opacity: 0.85;
}

/* ============================================================ ANOTACION == */

.stxeq-anot + .stxeq-anot {
  margin-top: var(--stx-pad);
}

.stxeq-anot-cab {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--stx-gap);
  margin-bottom: calc(var(--stx-s) * 0.4);
}

.stxeq-anot-titulo {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.65);
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stxeq-anot-total {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 1.1);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}

.stxeq-anot-total b {
  color: var(--stx-accent);
}

/* Barra apilada: cada segmento lleva su porcentaje dentro cuando cabe */
.stxeq-barra {
  display: flex;
  height: calc(var(--stx-s) * 1.7);
  border-radius: var(--stx-pill);
  overflow: hidden;
  background-color: rgba(5, 5, 5, 0.08);
}

.stxeq-seg {
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 2px;
  cursor: help;
  transition: filter 140ms ease;
}

.stxeq-seg:hover {
  filter: brightness(1.15);
}

.stxeq-seg b {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.6);
  font-weight: 700;
  color: var(--stx-white);
}

.stxeq-seg.es-ensayo { background-color: var(--stxeq-ensayo); }
.stxeq-seg.es-conversion { background-color: var(--stxeq-conversion); }
.stxeq-seg.es-golpe { background-color: var(--stxeq-golpe); }
.stxeq-seg.es-drop { background-color: var(--stxeq-drop); }

.stxeq-leyenda {
  display: flex;
  flex-wrap: wrap;
  gap: calc(var(--stx-s) * 0.3) var(--stx-pad);
  margin: calc(var(--stx-s) * 0.45) 0 0;
  padding: 0;
  list-style: none;
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.65);
  color: var(--stx-ink-soft);
}

.stxeq-leyenda b {
  color: var(--stx-ink);
  font-variant-numeric: tabular-nums;
}

.stxeq-leyenda small {
  font-size: calc(var(--stx-s) * 0.58);
}

.stxeq-leyenda i {
  display: inline-block;
  width: 0.75em;
  height: 0.75em;
  margin-right: 0.35em;
  border-radius: 2px;
  vertical-align: baseline;
}

.stxeq-leyenda i.es-ensayo { background-color: var(--stxeq-ensayo); }
.stxeq-leyenda i.es-conversion { background-color: var(--stxeq-conversion); }
.stxeq-leyenda i.es-golpe { background-color: var(--stxeq-golpe); }
.stxeq-leyenda i.es-drop { background-color: var(--stxeq-drop); }

/* ======================================================= PRIMER PUNTO == */

.stxeq-tercios {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: calc(var(--stx-s) * 0.4);
  margin-top: calc(var(--stx-s) * 0.6);
}

.stxeq-tercio {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(var(--stx-s) * 0.15);
  padding: calc(var(--stx-s) * 0.7) calc(var(--stx-s) * 0.3);
  border-radius: var(--stx-radio);
  background-color: var(--stx-white);
  /* El filete de color identifica el resultado sin depender solo del texto */
  border-top: 3px solid var(--stx-line);
  /* Mismo motivo que .stx-kpi: sin esto la cifra grande empuja el grid de 3
     columnas fijas más allá del viewport en móvil. */
  min-width: 0;
}

.stxeq-tercio-valor {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 2);
  font-weight: 800;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

.stxeq-tercio-label {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.6);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stxeq-tercio-pct {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.65);
  font-weight: 700;
}

.stxeq-tercio.stxeq-res-G { border-top-color: var(--stxeq-gana); }
.stxeq-tercio.stxeq-res-E { border-top-color: var(--stxeq-empata); }
.stxeq-tercio.stxeq-res-P { border-top-color: var(--stxeq-pierde); }

.stxeq-tercio.stxeq-res-G .stxeq-tercio-pct { color: var(--stxeq-gana); }
.stxeq-tercio.stxeq-res-E .stxeq-tercio-pct { color: var(--stxeq-empata); }
.stxeq-tercio.stxeq-res-P .stxeq-tercio-pct { color: var(--stxeq-pierde); }

/* ======================================================= CASA Y FUERA == */

.stxeq-tabla-ambito tbody td:first-child {
  font-family: var(--stx-font-body);
  color: var(--stx-ink-soft);
}

.stxeq-tabla-ambito .stx-destacado {
  font-size: calc(var(--stx-s) * 0.85);
}

/* ============================================================== FRANJA == */

/**
 * Un partido por barra, hacia arriba las victorias y hacia abajo las derrotas.
 * Es la unica forma de ver una racha sin leer veintipico marcadores. El eje
 * del cero va en el centro exacto de cada celda.
 */
.stxeq-franja {
  display: flex;
  align-items: stretch;
  gap: 2px;
  margin-top: calc(var(--stx-s) * 0.6);
  padding-bottom: calc(var(--stx-s) * 0.2);
  overflow-x: auto;
}

.stxeq-franja-item {
  position: relative;
  flex: 1 0 calc(var(--stx-s) * 1.1);
  height: calc(var(--stx-s) * 7);
  border-radius: 3px;
  text-decoration: none;
  background: linear-gradient(to bottom,
    transparent calc(50% - 1px), var(--stx-line-link) calc(50% - 1px),
    var(--stx-line-link) calc(50% + 1px), transparent calc(50% + 1px));
}

.stxeq-franja-item:hover {
  background-color: rgba(5, 5, 5, 0.05);
}

.stxeq-franja-barra {
  position: absolute;
  left: 15%;
  right: 15%;
  border-radius: 2px;
}

/* Ganado: crece hacia arriba desde el eje. Perdido: hacia abajo. */
.stxeq-res-G .stxeq-franja-barra {
  bottom: 50%;
  background-color: var(--stxeq-gana);
}

.stxeq-res-P .stxeq-franja-barra {
  top: 50%;
  background-color: var(--stxeq-pierde);
}

/* El empate no tiene margen: una marca fina sobre el propio eje */
.stxeq-res-E .stxeq-franja-barra {
  top: calc(50% - 2px);
  height: 4px !important;
  background-color: var(--stxeq-empata);
}

.stxeq-franja-margen {
  position: absolute;
  left: 0;
  right: 0;
  text-align: center;
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.52);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  opacity: 0;
  transition: opacity 140ms ease;
}

.stxeq-res-G .stxeq-franja-margen { top: calc(var(--stx-s) * 0.1); color: var(--stxeq-gana); }
.stxeq-res-P .stxeq-franja-margen { bottom: calc(var(--stx-s) * 0.1); color: var(--stxeq-pierde); }
.stxeq-res-E .stxeq-franja-margen { bottom: calc(var(--stx-s) * 0.1); color: var(--stxeq-empata); }

.stxeq-franja-item:hover .stxeq-franja-margen,
.stxeq-franja-item:focus-visible .stxeq-franja-margen {
  opacity: 1;
}

/* ============================================================= PARTIDO == */

/**
 * Fila de un partido: rival a la izquierda, marcador a la derecha, los dos en
 * la misma línea. stx-partido-equipos (compartida con la página de torneo) es
 * flex-column porque allí apila local y visitante; aquí el rival y el
 * marcador van dentro de ESTA fila y no como hijos sueltos de aquella, o el
 * column los apilaría uno debajo del otro.
 */
.stxeq-partido-linea {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--stx-gap);
  min-width: 0;
}

/* Sin esto, un bloque que nunca crece deja que "space-between" reparta el
   hueco sobrante a ambos lados de la fecha en vez de pegarla al borde. */
.stx-partido-equipos {
  flex: 1 1 auto;
}

.stxeq-rival {
  display: flex;
  align-items: center;
  flex: 1 1 auto;
  min-width: 0;
  gap: calc(var(--stx-s) * 0.3);
}

.stxeq-marcador {
  flex: none;
}

/* "vs" / "en" delante del rival: dice si se juega en casa sin gastar columna */
.stxeq-rival em {
  font-style: normal;
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.58);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stxeq-marcador {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.75);
  font-variant-numeric: tabular-nums;
  color: var(--stx-ink-soft);
}

.stxeq-marcador b {
  font-size: calc(var(--stx-s) * 0.9);
  color: var(--stx-ink);
}

.stxeq-marcador.stxeq-res-G b:first-child,
.stxeq-marcador.stxeq-res-P b:last-child {
  color: var(--stx-accent);
}

/* =============================================================== CAMPO == */

/**
 * XV tipo. Cada puesto va colocado en porcentajes sobre el campo, con el pack
 * a la izquierda y la linea de tres cuartos abriendose a la derecha. En
 * pantallas estrechas el posicionamiento absoluto es ilegible y se cae a una
 * rejilla ordenada por dorsal (ver el media query del final).
 */
.stxeq-campo {
  position: relative;
  margin-top: calc(var(--stx-s) * 0.6);
  aspect-ratio: 16 / 9;
  min-height: calc(var(--stx-s) * 13);
  border-radius: var(--stx-radio);
  border: 1px solid rgba(27, 127, 95, 0.3);
  background-color: #eef1ee;
  /* Lineas de 22 y de medio campo, con el mismo verde apagado */
  background-image: linear-gradient(to right,
      transparent calc(22% - 1px), rgba(27, 127, 95, 0.25) calc(22% - 1px),
      rgba(27, 127, 95, 0.25) calc(22% + 1px), transparent calc(22% + 1px)),
    linear-gradient(to right,
      transparent calc(50% - 1px), rgba(27, 127, 95, 0.35) calc(50% - 1px),
      rgba(27, 127, 95, 0.35) calc(50% + 1px), transparent calc(50% + 1px)),
    linear-gradient(to right,
      transparent calc(78% - 1px), rgba(27, 127, 95, 0.25) calc(78% - 1px),
      rgba(27, 127, 95, 0.25) calc(78% + 1px), transparent calc(78% + 1px));
}

.stxeq-puesto {
  position: absolute;
  transform: translate(-50%, -50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  width: calc(var(--stx-s) * 4.5);
  padding: calc(var(--stx-s) * 0.18);
  border-radius: calc(var(--stx-radio) * 0.6);
  background-color: var(--stx-white);
  box-shadow: 0 1px 3px rgba(5, 5, 5, 0.14);
  text-align: center;
}

.stxeq-puesto.es-vacio {
  opacity: 0.45;
}

.stxeq-puesto-dorsal {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 1.15);
  height: calc(var(--stx-s) * 1.15);
  border-radius: var(--stx-pill);
  background-color: var(--stx-ink);
  color: var(--stx-white);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 700;
}

.stxeq-puesto-nombre {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.58);
  font-weight: 700;
  line-height: 1.15;
  /* Los nombres largos se parten en dos lineas y ahi se cortan: la ficha
     completa esta en la tabla de abajo. */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.stxeq-puesto-veces,
.stxeq-puesto-pos {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.5);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stxeq-puesto-pos {
  color: var(--stx-accent);
  font-weight: 700;
}

/* ============================================================ PLANTILLA == */

.stxeq-kpis--cuatro {
  grid-template-columns: repeat(auto-fit, minmax(calc(var(--stx-s) * 10), 1fr));
}

/* Categoria de la ficha (A / B / C / F), sin ficha se muestra como C. */
.stxeq-categoria {
  display: inline-block;
  padding: 0 calc(var(--stx-s) * 0.3);
  border-radius: var(--stx-pill);
  background-color: var(--stx-line);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.55);
  font-weight: 700;
  color: var(--stx-ink-soft);
}

/* Porcentaje de minutos: barra de fondo dentro de la propia celda */
.stxeq-pct {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
  min-width: calc(var(--stx-s) * 3);
  padding: 0 calc(var(--stx-s) * 0.2);
}

.stxeq-pct i {
  position: absolute;
  left: 0;
  top: 10%;
  bottom: 10%;
  border-radius: 2px;
  background-color: rgba(227, 34, 3, 0.18);
}

.stxeq-pct b {
  position: relative;
  font-variant-numeric: tabular-nums;
}

/* ==================================================== LISTAS CON BARRA == */

/**
 * Fila de ranking con barra proporcional: la usan los anotadores, los
 * sancionados y los motivos de cambio. Es una sola pieza porque las tres
 * responden a lo mismo: un nombre, una magnitud y su peso relativo.
 */
.stxeq-anotador {
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.4);
  padding: calc(var(--stx-s) * 0.35) 0;
  color: inherit;
  text-decoration: none;
  transition: background-color 140ms ease;
}

.stxeq-anotador + .stxeq-anotador {
  border-top: 1px solid var(--stx-line);
}

a.stxeq-anotador:hover,
a.stxeq-anotador:focus-visible {
  background-color: var(--stx-cell);
}

a.stxeq-anotador:hover .stxeq-anotador-nombre,
a.stxeq-anotador:focus-visible .stxeq-anotador-nombre {
  color: var(--stx-accent);
}

.stxeq-anotador-pos {
  flex: none;
  width: calc(var(--stx-s) * 1.1);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.65);
  font-weight: 700;
  color: var(--stx-ink-soft);
  text-align: right;
}

.stxeq-anotador-nombre {
  flex: 1 1 calc(var(--stx-s) * 8);
  min-width: 0;
  display: flex;
  flex-direction: column;
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.72);
  font-weight: 600;
  line-height: 1.2;
}

.stxeq-anotador-nombre small {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.55);
  font-weight: 400;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stxeq-motivo {
  flex-direction: row;
  align-items: center;
}

.stxeq-anotador-barra {
  flex: 1 1 calc(var(--stx-s) * 5);
  height: calc(var(--stx-s) * 0.45);
  border-radius: var(--stx-pill);
  background-color: rgba(5, 5, 5, 0.07);
  overflow: hidden;
}

.stxeq-anotador-barra i {
  display: block;
  height: 100%;
  border-radius: var(--stx-pill);
  background-color: var(--stx-accent);
}

.stxeq-anotador-barra.es-sancion i {
  background-color: var(--stx-ink);
}

.stxeq-anotador-valor {
  flex: none;
  min-width: calc(var(--stx-s) * 1.8);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 1);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  text-align: right;
}

/* ==================================================== ENSAYOS / DORSAL == */

.stxeq-dorsales {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(calc(var(--stx-s) * 7), 1fr));
  gap: calc(var(--stx-s) * 0.15) var(--stx-pad);
  margin-top: var(--stx-pad);
}

.stxeq-dorsal {
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.3);
  cursor: help;
}

.stxeq-dorsal.es-cero {
  opacity: 0.4;
}

.stxeq-dorsal-num {
  flex: none;
  width: calc(var(--stx-s) * 1.2);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.6);
  font-weight: 700;
  color: var(--stx-ink-soft);
  text-align: right;
}

.stxeq-dorsal-barra {
  flex: 1 1 auto;
  height: calc(var(--stx-s) * 0.4);
  border-radius: var(--stx-pill);
  background-color: rgba(5, 5, 5, 0.07);
  overflow: hidden;
}

.stxeq-dorsal-barra i {
  display: block;
  height: 100%;
  border-radius: var(--stx-pill);
  background-color: var(--stx-accent);
}

.stxeq-dorsal-valor {
  flex: none;
  min-width: calc(var(--stx-s) * 1.1);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

.stxeq-campo-wrap {
  width: 100%;
  max-width: 100%;
  overflow-x: auto;
  overscroll-behavior: contain;
}

@media (max-width: 860px) {
  /* En pantallas móviles, mantenemos el posicionamiento por coordenadas
     tácticas del campo de rugby y activamos el scroll horizontal estableciendo
     un ancho mínimo suficiente para evitar solapamientos. */
  .stxeq-campo {
    min-width: 860px;
  }

  .stxeq-hero-escudo {
    width: calc(var(--stx-s) * 3);
    height: calc(var(--stx-s) * 3);
  }
}

/* ======================================================= CUADRO (§02) == */

/**
 * Lo que sustituye a la clasificación cuando el torneo es a eliminatoria
 * directa. El campeón es el único destino con superficie blanca + filete +
 * flecha (regla de afordancia); el resto son datos, no destinos.
 */
.stx-campeon {
  position: relative;
  display: flex;
  align-items: center;
  gap: var(--stx-pad);
  padding: calc(var(--stx-s) * 0.9) calc(var(--stx-s) * 1.2);
  border: 1px solid var(--stx-line-link);
  border-radius: var(--stx-radio);
  background-color: var(--stx-white);
  color: var(--stx-ink);
  text-decoration: none;
  box-shadow: 0 calc(var(--stx-s) * 0.1) calc(var(--stx-s) * 0.28) rgba(5, 5, 5, 0.07);
  transition: border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease;
}

.stx-campeon:hover,
.stx-campeon:focus-visible {
  border-color: var(--stx-accent);
  color: var(--stx-ink);
  text-decoration: none;
  transform: translateY(calc(var(--stx-s) * -0.1));
  box-shadow: 0 calc(var(--stx-s) * 0.2) calc(var(--stx-s) * 0.5) rgba(5, 5, 5, 0.12);
}

.stx-campeon:hover .stx-flecha,
.stx-campeon:focus-visible .stx-flecha {
  opacity: 1;
}

.stx-campeon .stx-flecha {
  margin-left: auto;
  color: var(--stx-accent);
  opacity: 0.5;
  transition: opacity 160ms ease;
}

.stx-campeon-escudo {
  width: calc(var(--stx-s) * 4.2);
  height: calc(var(--stx-s) * 4.2);
  padding: calc(var(--stx-s) * 0.3);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  object-fit: contain;
  mix-blend-mode: multiply;
  flex: none;
}

.stx-campeon-info {
  display: flex;
  flex-direction: column;
  gap: calc(var(--stx-s) * 0.15);
  min-width: 0;
}

.stx-campeon-tag {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--stx-accent);
}

.stx-campeon-nombre {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 1.5);
  font-weight: 800;
  letter-spacing: -0.02em;
  text-transform: uppercase;
  line-height: 1.05;
  overflow-wrap: anywhere;
}

/* Marcador y ronda: propios de la tarjeta de ganador de la ficha de
   partido (mostrar_estadisticas_partido.php §01), reutilizando el mismo
   .stx-campeon que pinta el cuadro eliminatorio del torneo. */
.stx-campeon-marcador {
  margin-top: calc(var(--stx-s) * 0.15);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.85);
  font-weight: 700;
  color: var(--stx-ink);
  font-variant-numeric: tabular-nums;
}

.stx-campeon-marcador small {
  margin-left: 0.5em;
  padding: 0.15em 0.6em;
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  font-size: 0.75em;
  font-weight: 700;
  color: var(--stx-accent);
}

.stx-campeon-ronda {
  display: block;
  margin-top: calc(var(--stx-s) * 0.2);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.6);
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

/* -- Progreso por equipo --------------------------------------------------- */

/**
 * Una fila por equipo (16 en un cuadro grande) se comía la pantalla. En
 * rejilla de tarjetas compactas, el mismo cuadro de 8 equipos pasa de ocho
 * filas a dos.
 */
.stx-cuadro-progreso {
  display: grid;
  /* Un poco más ancho que una tarjeta de escudo+nombre normal: aquí además
     hay que dejar sitio a estados largos como "Eliminado en cuartos de final". */
  grid-template-columns: repeat(auto-fill, minmax(calc(var(--stx-s) * 10), 1fr));
  gap: calc(var(--stx-s) * 0.5);
  margin: 0;
  padding: var(--stx-pad);
  list-style: none;
}

.stx-cuadro-chip > a {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: calc(var(--stx-s) * 0.3);
  height: 100%;
  padding: calc(var(--stx-s) * 0.6) calc(var(--stx-s) * 0.45) calc(var(--stx-s) * 0.5);
  border: 1px solid var(--stx-line-link);
  border-radius: var(--stx-radio);
  background-color: var(--stx-white);
  color: var(--stx-ink);
  text-align: center;
  text-decoration: none;
  transition: border-color 140ms ease, transform 140ms ease;
}

.stx-cuadro-chip > a:hover,
.stx-cuadro-chip > a:focus-visible {
  border-color: var(--stx-accent);
  color: var(--stx-ink);
  text-decoration: none;
  transform: translateY(calc(var(--stx-s) * -0.1));
  outline: none;
}

.stx-cuadro-chip-escudo {
  width: calc(var(--stx-s) * 2.1);
  height: calc(var(--stx-s) * 2.1);
  padding: 3px;
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  object-fit: contain;
  mix-blend-mode: multiply;
}

.stx-cuadro-chip-nombre {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.62);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  overflow-wrap: anywhere;
}

/* margin-top:auto para que la etiqueta quede a ras de suelo aunque el nombre
   de al lado ocupe una línea más. .stx-lider-tag trae white-space:nowrap de
   fábrica (pensado para una celda de tabla ancha): en una tarjeta angosta,
   "Eliminado en cuartos de final" se saldría del borde en vez de partirse. */
.stx-cuadro-chip .stx-lider-tag {
  max-width: 100%;
  margin-top: auto;
  overflow-wrap: anywhere;
  white-space: normal;
  text-align: center;
  font-size: calc(var(--stx-s) * 0.54);
  line-height: 1.3;
}

/* -- Rondas ----------------------------------------------------------------- */

/**
 * Todas las rondas comparten una sola tarjeta (regla de afordancia: esto es
 * dato, no una lista de destinos, así que no hace falta repetir el envoltorio
 * de bloque por ronda). Los partidos van en rejilla y no apilados: con dos o
 * cuatro por ronda, uno debajo de otro era la mitad de la altura desperdiciada
 * en aire.
 */
.stx-cuadro-ronda-titulo {
  padding: calc(var(--stx-s) * 0.55) var(--stx-pad) calc(var(--stx-s) * 0.1);
  border-top: 1px solid var(--stx-line);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.68);
  font-weight: 700;
  letter-spacing: -0.01em;
  text-transform: uppercase;
}

.stx-cuadro-partidos {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(calc(var(--stx-s) * 13), 1fr));
  gap: 0 calc(var(--stx-s) * 0.6);
  padding: calc(var(--stx-s) * 0.15) var(--stx-pad) calc(var(--stx-s) * 0.4);
}

/* Cada partido pasa a tarjeta con filete propio: el divisor de "fila debajo de
   fila" de .stx-partido no significa nada entre columnas de una rejilla. */
.stx-cuadro-partidos .stx-partido,
.stx-cuadro-partidos .stx-partido + .stx-partido {
  border: 1px solid var(--stx-line);
  border-radius: var(--stx-radio);
}

/* -- Partido de 3º y 4º puesto --------------------------------------------- */

/* Comparte jornada con la final en el cuadro, así que se marca aparte dentro
   de la misma tarjeta en vez de abrir una sección nueva. */
.stx-cuadro-subtitulo {
  padding: calc(var(--stx-s) * 0.3) var(--stx-pad) calc(var(--stx-s) * 0.1);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.58);
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

/* ==========================================================================
   DASHBOARD DE JUGADOR
   --------------------------------------------------------------------------
   Todo lo que sigue lo usa solo mostrar_estadisticas_jugador.php, prefijado
   .stxjg-. El resto de la página (KPIs, barra de anotación, listas con barra,
   tablas de ranking) reutiliza tal cual la capa compartida y las piezas de
   equipo (.stxeq-barra, .stxeq-anotador, .stx-top...): son la misma cosa
   vista desde una persona en vez de desde un club.
   ========================================================================== */

/* -- Foto de carnet: sustituye al escudo en el hero -------------------------- */

.stxjg-hero-foto {
  flex: none;
  width: calc(var(--stx-s) * 4.2);
  height: calc(var(--stx-s) * 4.2);
  border-radius: var(--stx-pill);
  object-fit: cover;
  background-color: var(--stx-cell);
}

/* Sin foto: inicial grande en vez del hueco de una imagen rota */
.stxjg-hero-inicial {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 4.2);
  height: calc(var(--stx-s) * 4.2);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 1.7);
  font-weight: 800;
  color: var(--stx-ink-soft);
}

/* -- Ficha de equipo/torneo bajo el titular ---------------------------------- */

.stxjg-hero-equipo {
  display: inline-flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.35);
  margin-top: calc(var(--stx-s) * 0.35);
  font-family: var(--stx-font-display);
  font-weight: 600;
  color: inherit;
  text-decoration: none;
}

.stxjg-hero-equipo:hover,
.stxjg-hero-equipo:focus-visible {
  color: var(--stx-accent);
  text-decoration: none;
}

.stxjg-hero-equipo img {
  width: calc(var(--stx-s) * 1.3);
  height: calc(var(--stx-s) * 1.3);
  object-fit: contain;
  mix-blend-mode: multiply;
}

/* -- Insignias de rol en el partido a partido -------------------------------- */

.stxjg-rol {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  padding: 0.2em 0.75em;
  border-radius: var(--stx-pill);
  font-family: var(--stx-font-mono);
  font-size: 0.86em;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  white-space: nowrap;
}

.stxjg-rol.es-titular {
  background-color: rgba(27, 127, 95, 0.14);
  color: #1b7f5f;
}

.stxjg-rol.es-suplente {
  background-color: rgba(5, 5, 5, 0.07);
  color: var(--stx-ink-soft);
}

.stxjg-rol b {
  font-weight: 700;
}

/* "C" de capitán, pegada al dorsal o al rol */
.stxjg-capitan {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.5em;
  height: 1.5em;
  margin-left: 0.35em;
  border-radius: var(--stx-pill);
  background-color: var(--stx-ink);
  color: var(--stx-white);
  font-family: var(--stx-font-mono);
  font-size: 0.65em;
  font-weight: 700;
}

/* -- "Tú" dentro de un ranking (§06/§07) -------------------------------------- */

/**
 * Cuando el jugador de la ficha no llega al top 5, su tarjeta se añade igual
 * que las demás pero marcada aparte: mismo tratamiento que .es-lider (borde y
 * pastilla de posición en rojo de marca) para que se distinga sin necesidad
 * de leer el texto de la pastilla ("TÚ" en vez de un número).
 */
.stx-top-card.es-tu {
  border-color: var(--stx-accent);
}

.stx-top-card.es-tu .stx-top-pos {
  background-color: var(--stx-accent);
}

/* -- Cronología de un solo lado ----------------------------------------------- */

/* La del equipo compara favor/contra; aquí solo hay un dato y la leyenda de
   dos colores sobraría, así que la barra va en una sola tinta. */
.stxjg-cronologia-nota {
  display: flex;
  flex-wrap: wrap;
  gap: calc(var(--stx-s) * 0.3) var(--stx-pad);
  margin-top: calc(var(--stx-s) * 0.5);
}

/* ==========================================================================
   DASHBOARD DE COMPETICIÓN
   --------------------------------------------------------------------------
   Todo lo que sigue lo usa solo mostrar_estadisticas_competicion.php,
   prefijado .stxcp-. El resto de la página (KPIs, mapa, rankings, agenda,
   rejilla de equipos) reutiliza tal cual la capa compartida .stx- y, para el
   podio de anotadores/sancionados, las piezas de equipo (.stx-top).
   ========================================================================== */

/* -- Tarjeta de fase (§02) ---------------------------------------------------- */

/**
 * Una tarjeta por torneo/grupo de la competición. Sigue la regla de
 * afordancia del módulo (superficie blanca + filete + flecha, igual que
 * .stx-equipo): es un destino a la ficha de esa fase.
 */
.stxcp-fase {
  display: flex;
  flex-direction: column;
  gap: calc(var(--stx-s) * 0.4);
  height: 100%;
  padding: calc(var(--stx-s) * 0.75) var(--stx-pad);
  border: 1px solid var(--stx-line-link);
  border-radius: var(--stx-radio);
  background-color: var(--stx-white);
  color: var(--stx-ink);
  text-decoration: none;
  box-shadow: 0 calc(var(--stx-s) * 0.1) calc(var(--stx-s) * 0.28) rgba(5, 5, 5, 0.07);
  transition: border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease;
}

.stxcp-fase:hover,
.stxcp-fase:focus-visible {
  border-color: var(--stx-accent);
  color: var(--stx-ink);
  text-decoration: none;
  outline: none;
  transform: translateY(calc(var(--stx-s) * -0.12));
  box-shadow: 0 calc(var(--stx-s) * 0.2) calc(var(--stx-s) * 0.5) rgba(5, 5, 5, 0.12);
}

.stxcp-fase:hover .stx-flecha,
.stxcp-fase:focus-visible .stx-flecha {
  opacity: 1;
}

.stxcp-fase-cab {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.stxcp-fase .stx-flecha {
  color: var(--stx-accent);
  opacity: 0.5;
  transition: opacity 160ms ease;
}

/* Liga / Cuadro: dice de qué formato es la fase antes de leer nada más */
.stxcp-fase-tipo {
  display: inline-flex;
  padding: 0.2em 0.75em;
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.56);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stxcp-fase-nombre {
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.78);
  font-weight: 700;
  line-height: 1.25;
  letter-spacing: -0.01em;
  text-transform: uppercase;
  overflow-wrap: anywhere;
}

/* Barra de % disputado, mismo lenguaje visual que .stx-top-barra */
.stxcp-fase-barra {
  height: calc(var(--stx-s) * 0.2);
  border-radius: var(--stx-pill);
  background-color: var(--stx-cell);
  overflow: hidden;
}

.stxcp-fase-barra i {
  display: block;
  height: 100%;
  border-radius: var(--stx-pill);
  background-color: var(--stx-accent);
}

.stxcp-fase-progreso {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: calc(var(--stx-s) * 0.4);
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.58);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

.stxcp-fase-progreso b {
  color: var(--stx-accent);
  font-variant-numeric: tabular-nums;
}

/* Chip de líder/campeón + recuento de equipos, empujados al fondo de la
   tarjeta aunque el nombre de la fase ocupe una línea de más */
.stxcp-fase-pie {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: calc(var(--stx-s) * 0.4);
  margin-top: auto;
  padding-top: calc(var(--stx-s) * 0.3);
  border-top: 1px solid var(--stx-line);
}

.stxcp-fase-equipos {
  flex: none;
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.58);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
  white-space: nowrap;
}

/* ==========================================================================
   TIMELINE DEL PARTIDO (mostrar_estadisticas_partido.php §02)
   Banda cronologica dibujada en canvas propio: local arriba del eje,
   visitante abajo. El tooltip es un <span> hermano posicionado sobre el
   canvas, para no tener que repintarlo en cada mousemove.
   ========================================================================== */

.stxp-timeline-wrap {
  position: relative;
  width: 100%;
}

.stxp-timeline-wrap canvas {
  display: block;
  width: 100%;
  /* El alto real lo fija el JS en pixeles (escalado por devicePixelRatio):
     aqui solo se reserva sitio para que no salte el layout al montarse. */
  height: 140px;
}

.stxp-timeline-tip {
  position: absolute;
  top: 0;
  /* El JS pone left en el pixel del evento; el translate lo centra sobre el. */
  transform: translateX(-50%);
  z-index: 2;
  max-width: min(280px, 90%);
  padding: 0.45em 0.7em;
  border-radius: 10px;
  background: var(--stx-ink);
  color: var(--stx-white);
  font-family: var(--stx-font-body);
  /* En px, no rem: ver nota de --stx-s sobre html{font-size:10px} */
  font-size: 12.5px;
  line-height: 1.35;
  text-align: center;
  pointer-events: none;
  box-shadow: 0 6px 18px rgba(5, 5, 5, 0.22);
}

.stxp-timeline-tip[hidden] {
  display: none;
}

/* ==========================================================================
   CARA A CARA (H2H)
   Bloque compartido por la ficha de partido y la de equipo: barra apilada de
   balance + cifras + lista de enfrentamientos.
   ========================================================================== */

.stxh2h-barra {
  position: relative;
  width: 100%;
  /* Una sola fila apilada: no necesita mas alto que la barra y su leyenda. */
  height: 88px;
  padding: var(--stx-gap) var(--stx-pad);
}

/* Con nombres de club largos la leyenda se parte en dos o tres lineas y, con
   el alto fijo de escritorio, Chart.js la recortaba por abajo. */
@media (max-width: 700px) {
  .stxh2h-barra {
    height: 132px;
  }
}

@media (max-width: 420px) {
  .stxh2h-barra {
    height: 152px;
  }
}

.stxh2h-barra canvas {
  display: block;
  width: 100%;
  height: 100%;
}

/* Competicion arriba y fase debajo, dentro de la misma celda: la fase sola no
   dice de que torneo es, y las dos en linea no caben en movil. */
.stxh2h-comp {
  display: flex;
  flex-direction: column;
  gap: 0.1em;
  min-width: 0;
}

.stxh2h-comp small {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.55);
  letter-spacing: 0.04em;
  color: var(--stx-ink-soft);
}

/* Mismo tono apagado que el "vs"/"en" del listado de la ficha de equipo. */
.stxh2h-donde {
  font-family: var(--stx-font-mono);
  font-size: calc(var(--stx-s) * 0.58);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--stx-ink-soft);
}

/* ============================================ BOTÓN FLOTANTE: COMPARADOR == */

/**
 * Fijo en la esquina en todas las páginas del módulo (stxBotonComparador(),
 * includes/utilidades_estadisticas_v2.php): abre comparador.php en un modal
 * sin salir de la ficha que se está mirando. Mismo aspecto que .stx-cta
 * (rojo de marca, relieve inferior) para que se lea como el mismo tipo de
 * acción en todo el sitio.
 */
.stx-cmp-flotante {
  position: fixed;
  right: var(--stx-gap);
  bottom: var(--stx-gap);
  z-index: 500;
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.35);
  padding: calc(var(--stx-s) * 0.55) calc(var(--stx-s) * 0.85);
  border: none;
  border-radius: var(--stx-pill);
  background-color: var(--stx-accent);
  color: var(--stx-white);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.72);
  font-weight: 700;
  letter-spacing: 0.01em;
  text-transform: uppercase;
  cursor: pointer;
  box-shadow: 0 calc(var(--stx-s) * 0.18) 0 var(--stx-accent-dark),
    0 calc(var(--stx-s) * 0.3) calc(var(--stx-s) * 0.6) rgba(5, 5, 5, 0.25);
  transition: background-color 160ms ease, transform 160ms ease,
    box-shadow 160ms ease;
}

.stx-cmp-flotante:hover,
.stx-cmp-flotante:focus-visible {
  background-color: var(--stx-accent-dark);
  color: var(--stx-white);
  transform: translateY(calc(var(--stx-s) * 0.1));
  box-shadow: 0 calc(var(--stx-s) * 0.08) 0 var(--stx-accent-dark);
}

.stx-cmp-flotante-icono {
  font-size: calc(var(--stx-s) * 0.95);
  line-height: 1;
}

/* En móvil estrecho, el icono solo: el texto sobraría junto al resto de la UI fija */
@media (max-width: 480px) {
  .stx-cmp-flotante-texto {
    display: none;
  }

  .stx-cmp-flotante {
    padding: calc(var(--stx-s) * 0.55);
  }
}

body.stx-cmp-flotante-bloqueado {
  overflow: hidden;
}

.stx-cmp-flotante-modal {
  position: fixed;
  inset: 0;
  z-index: 900;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: calc(var(--stx-s) * 0.8);
}

.stx-cmp-flotante-modal[hidden] {
  display: none;
}

.stx-cmp-flotante-fondo {
  position: absolute;
  inset: 0;
  background-color: rgba(5, 5, 5, 0.6);
}

.stx-cmp-flotante-caja {
  position: relative;
  width: min(1200px, 100%);
  height: min(860px, 100%);
  background-color: var(--stx-panel);
  border-radius: var(--stx-radio-panel);
  overflow: hidden;
  box-shadow: 0 calc(var(--stx-s) * 0.6) calc(var(--stx-s) * 1.4) rgba(5, 5, 5, 0.4);
}

.stx-cmp-flotante-caja iframe {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
}

.stx-cmp-flotante-cerrar {
  position: absolute;
  top: calc(var(--stx-s) * 0.4);
  right: calc(var(--stx-s) * 0.4);
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 1.6);
  height: calc(var(--stx-s) * 1.6);
  border: none;
  border-radius: 50%;
  background-color: var(--stx-ink);
  color: var(--stx-white);
  font-size: calc(var(--stx-s) * 1.1);
  line-height: 1;
  cursor: pointer;
}

.stx-cmp-flotante-cerrar:hover,
.stx-cmp-flotante-cerrar:focus-visible {
  background-color: var(--stx-accent);
}

/* ================================================= BOTÓN FLOTANTE: GUÍA == */

/**
 * Guía de mostrar_estadisticas.php (js/estadisticas_portada_tour.js, driver.js
 * por CDN). Mismo tamaño y esquina fija que .stx-cmp-flotante pero en negro
 * de tinta, no en rojo de marca: el rojo del módulo significa "acción sobre
 * los datos" (comparar, ir al dashboard) y esto es solo orientación.
 * Por eso cuelga a la IZQUIERDA: a la derecha ya vive el comparador.
 */
.stx-tour-flotante {
  position: fixed;
  left: var(--stx-gap);
  bottom: var(--stx-gap);
  z-index: 500;
  display: flex;
  align-items: center;
  gap: calc(var(--stx-s) * 0.35);
  padding: calc(var(--stx-s) * 0.55) calc(var(--stx-s) * 0.85);
  border: none;
  border-radius: var(--stx-pill);
  background-color: var(--stx-ink);
  color: var(--stx-white);
  font-family: var(--stx-font-display);
  font-size: calc(var(--stx-s) * 0.72);
  font-weight: 700;
  letter-spacing: 0.01em;
  text-transform: uppercase;
  cursor: pointer;
  box-shadow: 0 calc(var(--stx-s) * 0.3) calc(var(--stx-s) * 0.6) rgba(5, 5, 5, 0.25);
  transition: background-color 160ms ease, transform 160ms ease;
}

.stx-tour-flotante:hover,
.stx-tour-flotante:focus-visible {
  background-color: var(--stx-accent);
  color: var(--stx-white);
  transform: translateY(calc(var(--stx-s) * 0.1));
}

.stx-tour-flotante-icono {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 1.3em;
  height: 1.3em;
  border-radius: 50%;
  border: 1.5px solid currentColor;
  font-size: calc(var(--stx-s) * 0.7);
  line-height: 1;
}

@media (max-width: 480px) {
  .stx-tour-flotante-texto {
    display: none;
  }

  .stx-tour-flotante {
    padding: calc(var(--stx-s) * 0.55);
  }
}

/* Repinta del popover de driver.js con la tipografía y el acento del
   módulo, para que no se note que es una librería externa. Solo las piezas
   de texto/color: la estructura (flechas, posicionamiento) se deja tal cual
   la resuelve la librería, que ya la testea contra los bordes de pantalla. */
.driver-popover {
  border-radius: calc(var(--stx-radio-panel) * 0.5);
  font-family: var(--stx-font-body);
}

.driver-popover-title {
  font-family: var(--stx-font-display);
  text-transform: uppercase;
  letter-spacing: -0.01em;
}

.driver-popover-progress-text {
  font-family: var(--stx-font-mono);
}

.driver-popover-footer button {
  border-radius: var(--stx-pill);
  text-shadow: none;
}

.driver-popover-next-btn,
.driver-popover-next-btn:hover {
  background-color: var(--stx-accent);
  border-color: var(--stx-accent);
  color: var(--stx-white);
}

/* Botón de atrás flotante (WebView embed) */
.stx-atras-flotante {
  position: fixed;
  left: var(--stx-gap);
  bottom: var(--stx-gap);
  z-index: 500;
  display: flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--stx-s) * 2.4);
  height: calc(var(--stx-s) * 2.4);
  border: none;
  border-radius: var(--stx-pill);
  background-color: var(--stx-accent);
  color: var(--stx-white);
  box-shadow: 0 calc(var(--stx-s) * 0.3) calc(var(--stx-s) * 0.6) rgba(5, 5, 5, 0.25);
  cursor: pointer;
  transition: background-color 160ms ease, transform 160ms ease;
  padding: 0;
}

.stx-atras-flotante:hover,
.stx-atras-flotante:active {
  background-color: var(--stx-accent-dark);
  transform: scale(1.05);
}

.stx-atras-flotante svg {
  display: block;
}

/* Desplazar el botón de guía flotante hacia la derecha para que no se solape
   con el botón de atrás flotante en modo embed */
body:has(.stx-atras-flotante) .stx-tour-flotante {
  left: calc(var(--stx-gap) + var(--stx-s) * 2.8);
}

@media (max-width: 480px) {
  .stx-atras-flotante {
    width: calc(var(--stx-s) * 2.0);
    height: calc(var(--stx-s) * 2.0);
  }

  body:has(.stx-atras-flotante) .stx-tour-flotante {
    left: calc(var(--stx-gap) + var(--stx-s) * 2.4);
  }
}

