/* Identidad Guarino: Poppins, verde institucional, dorado. Frontend público. */

/**
 * Paleta, tipografía, radios y espaciados centralizados en custom
 * properties. Antes estos valores estaban repetidos como literales (hex,
 * px) en cada regla — extraerlos acá hace que un cambio de marca futuro
 * sea editar un solo lugar, y que los componentes de abajo se lean como
 * "qué son" (--gsr-color-texto-suave) en vez de "qué valor tienen" (#6b6b66).
 */
:root {
	--gsr-color-verde: #1f3d2b;
	/**
	 * FIX 2.3.1: #2e5941 → #2f5233 — medido en vivo sobre
	 * grupoguarino.com.ar/mercados/ (pedido explícito: "debe seguir la
	 * lógica de colores como esta sección"), color exacto del botón/pestaña
	 * activa de esa página (rgb(47,82,51)). Prácticamente el mismo verde
	 * que ya tenía esta variable — se ajusta al valor exacto de la
	 * referencia en vez de agregar un token nuevo, porque el rol es el
	 * mismo (fondo de elemento primario/activo) y ya se usa en 10 reglas
	 * de este archivo.
	 */
	--gsr-color-verde-medio: #2f5233;
	/**
	 * FIX 2.3.1: nuevo — texto de una pestaña/botón INACTIVO sobre fondo
	 * blanco (rgb(74,124,89) medido en /mercados/). Ninguno de los verdes
	 * existentes cubría este rol: --gsr-color-verde es más oscuro (pensado
	 * para texto sobre blanco en párrafos/links), --gsr-color-verde-medio
	 * ahora es el activo/relleno.
	 */
	--gsr-color-verde-suave: #4a7c59;
	--gsr-color-verde-claro: #eaf0eb;
	--gsr-color-dorado: #c9a227;
	/**
	 * FIX 2.4.9.0: pedido explícito — botón "Ver transmisión" en rojo
	 * "para mostrar en vía YouTube" (mismo rol de color que el botón rojo
	 * de "Ver en YouTube"/reproducir que usa esa plataforma). #cc0000 en
	 * vez del #ff0000 exacto de YouTube: con texto blanco encima, #cc0000
	 * da un contraste de ~5.9:1 (pasa WCAG AA para texto normal, mínimo
	 * 4.5:1); #ff0000 puro da ~4:1, insuficiente. Hover más oscuro
	 * (#a30000) para que el cambio de estado sea perceptible sin perder
	 * el mismo contraste con el texto blanco.
	 */
	--gsr-color-youtube: #cc0000;
	--gsr-color-youtube-hover: #a30000;
	--gsr-color-texto: #1a1a18;
	--gsr-color-texto-suave: #6b6b66;
	--gsr-color-texto-tenue: #999;
	--gsr-color-borde: #e2e2df;
	--gsr-color-borde-input: #c9c9c4;
	--gsr-color-borde-suave: #eee;
	--gsr-color-badge-hoy-texto: #4a3a0d;
	--gsr-color-badge-reprogramado-bg: #faeeda;
	--gsr-color-badge-reprogramado-texto: #854f0b;
	--gsr-color-badge-cancelado-bg: #f1efe8;
	--gsr-color-badge-cancelado-texto: #444441;
	--gsr-color-tag-resultado-texto: #412402;
	--gsr-color-fondo: #fff;
	/* FIX 2.0.5: --gsr-color-azul-fecha/--gsr-color-cantidad-numero (2.0.4,
	   fila de la cartelera) se sacaron de acá — la cartelera volvió a la
	   tarjeta de 2.0.1, que no las usa. */

	/**
	 * FIX 2.4.1: pila de fallback alineada a la del plugin de Precios
	 * (assets/frontend.css de guarino-precios-hacienda: 'Poppins',
	 * system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif).
	 * Poppins sigue siendo la fuente real (idéntica en ambos plugins) — esto
	 * solo agrega más pisos de red por si Poppins no carga: "system-ui" antes
	 * de "-apple-system" (cubre más navegadores modernos) y "Roboto, Arial"
	 * como fallback adicional en Android/Windows. Aditivo, no cambia cómo se
	 * ve el sitio hoy.
	 */
	--gsr-font-family: 'Poppins', system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif;

	--gsr-radius-card: 12px;
	--gsr-radius-fila: 8px;
	--gsr-radius-control: 6px;
	/**
	 * FIX 2.4.4: 4px → 8px — pedido explícito de igualar estilos con el
	 * plugin de Precios: sus botones (.rmag-btn-hist, .rmag-btn-jpg,
	 * frontend.css) usan border-radius:8px, ya coincide con
	 * --gsr-radius-card de acá arriba.
	 */
	--gsr-radius-btn: 8px;
	--gsr-radius-badge: 10px;

	--gsr-spacing-xs: 4px;
	--gsr-spacing-sm: 8px;
	--gsr-spacing-md: 12px;
	--gsr-spacing-lg: 16px;
	--gsr-spacing-xl: 24px;

	/**
	 * FIX 1.2.8 — ancho de la página de detalle, ahora en una sola
	 * variable. `remate-detalle.php` (el template de la ficha individual)
	 * es la única vista del plugin que NO se inserta dentro del contenido
	 * de una Página normal vía shortcode — usa get_header()/get_footer()
	 * pero arma su propio <article>, así que no hereda el ancho de
	 * columna real del tema (que puede variar según el tema — con sidebar,
	 * a pantalla completa, con Fusion Builder si el tema es Avada, etc.).
	 * Antes ese ancho estaba fijo en 760px "a mano" adentro de la regla
	 * .gsr-detalle, sin forma de ajustarlo sin buscar en todo el CSS. Si
	 * en el sitio real la columna de contenido del tema es más angosta o
	 * más ancha que este valor por defecto, alcanza con sobreescribir esta
	 * única variable (por ejemplo desde el CSS adicional del Personalizador
	 * de WordPress) en vez de tocar el plugin.
	 */
	/**
	 * FIX 2.0.2: 100% en vez de 860px, para que el bloque "hero" nuevo
	 * (cantidad de cabezas + consignataria) tuviera lugar de sobra.
	 * FIX 2.0.6: vuelve a 860px — pedido explícito de volver la ficha de
	 * resultado al diseño de 2.0.1. El bloque "hero" que motivó el 100%
	 * se sacó (ver remate-detalle.php, duplicaba datos que ya se
	 * mostraban en la sección Resultado), así que ya no hace falta el
	 * ancho completo — 860px vuelve a ser una columna de lectura cómoda,
	 * consistente con el resto del sitio.
	 *
	 * FIX 2.3.0: vuelve a 100% — pedido explícito, esta vez con
	 * referencias concretas del sector (PDFs de entresurcosycorralesya.com):
	 * "que funcione y se vea en todo el ancho del sitio". El sitio real
	 * (grupoguarino.com.ar) ya corre en modo "wrapper-full-width" del tema
	 * WoodMart — confirmado inspeccionando las clases del <body> en vivo
	 * — así que el ancho angosto de 860px que agregaba el plugin encima
	 * era una restricción propia del plugin, no algo heredado del tema.
	 * Esta es la MISMA variable que ya se usó para esto en 2.0.2/2.0.6 —
	 * cambia de valor otra vez en vez de agregar una nueva, por el mismo
	 * motivo que entonces: sigue habiendo una sola fuente de verdad para
	 * el ancho de las vistas propias del plugin (ficha de detalle,
	 * archive de /remates/, búsqueda avanzada — ver dónde se usa esta
	 * variable más abajo).
	 *
	 * FIX 2.4.4: pasa a 900px — pedido explícito, con dos URLs reales del
	 * plugin de Precios como referencia obligatoria ("anchos... deben ser
	 * iguales"): `.rmag-wrap` (guarino-precios-hacienda/assets/frontend.css)
	 * usa `max-width: 900px; margin: 0 auto`, la misma regla en las 5
	 * secciones de Precios (Precios MAG, Exportación, Invernada & Cría,
	 * Granos, Históricos). Esto REVIERTE el 100% de 2.3.0 (columna de
	 * lectura angosta y centrada en vez de ancho completo) — se documenta
	 * explícitamente porque 2.3.0 también fue un pedido explícito, con sus
	 * propias referencias del sector; si el resultado no es el esperado,
	 * es la primera variable a revisar. El wrapper `wd-content-area` de
	 * WoodMart (FIX 2.4.0) no se toca — sigue dando el ancho completo del
	 * sitio; 900px ahora limita y centra el contenido DENTRO de ese
	 * wrapper, igual que hace `.rmag-wrap` dentro del mismo tema.
	 *
	 * FIX 2.5.0.1: pasa de 900px a 1140px — pedido explícito: "darle a
	 * todas las vistas [de detalle] y a las vistas de cartelera el mismo
	 * ancho utilizado para contener [el contenido] en este ejemplo:
	 * https://www.grupoguarino.com.ar/mercados/ [...] esto ayudaría al
	 * ancho". Sigue siendo la MISMA variable única (ver arriba) — al
	 * confirmarse en este mismo archivo que `.gsr-cartelera-hub` comparte
	 * clase con `.gsr-detalle` (ver `Shortcodes::render_hub()`,
	 * `<div class="gsr-detalle gsr-cartelera-hub entry-content">`), un
	 * solo cambio acá alcanza para las 4 superficies pedidas: la ficha de
	 * detalle (remate-detalle.php), el archivo /remates/ (.gsr-archive,
	 * ya comparte esta variable desde 2.2.1), TODO el hub de /cartelera/
	 * (proximos/resultados/consignatarias/cabañas) y el aviso legal
	 * (.gsr-aviso-legal, ya la usa desde 2.4.6.8).
	 *
	 * Nota de transparencia: esta sesión no tuvo acceso a un navegador
	 * (Claude in Chrome no está conectado) para medir en vivo el ancho
	 * real de `/mercados/`, a diferencia de mediciones anteriores de este
	 * mismo archivo (ver FIX 2.3.1 más abajo, colores medidos en vivo).
	 * `/mercados/` es una Página propia armada con el constructor del
	 * tema (no una vista del plugin) — 1140px es el ancho "boxeado"
	 * estándar de Elementor (el constructor de páginas más común en
	 * WordPress, y consistente con que `/mercados/` no sea una vista
	 * nativa de WoodMart) para su contenedor de contenido, y un salto
	 * razonable respecto a los 900px anteriores sin llegar al 100% ya
	 * descartado en 2.4.4. Si al revisar el sitio en vivo esta columna no
	 * coincide pixel a pixel con `/mercados/`, es la primera y única
	 * variable a ajustar — no requiere tocar ningún otro archivo.
	 */
	--gsr-detalle-max-width: 1140px;
}

/**
 * FIX 1.2.8 — box-sizing explícito, acotado a los componentes del
 * plugin (nunca un reset global "*", que sería invasivo con el resto del
 * tema). Sin esto, un ancho heredado del contenedor del tema sumado al
 * padding/border propio de una tarjeta o fila puede desbordar el ancho
 * disponible en vez de descontarlo — un caso clásico de un plugin que
 * "no respeta" el layout heredado por un detalle de cálculo de caja, no
 * por el diseño en sí.
 */
.gsr-cartelera,
.gsr-cartelera *,
.gsr-detalle,
.gsr-detalle *,
.gsr-listado-agrupado,
.gsr-listado-agrupado *,
.gsr-busqueda,
.gsr-busqueda * {
	box-sizing: border-box;
}

.gsr-cartelera,
.gsr-detalle {
	font-family: var(--gsr-font-family);
}

/**
 * Transiciones y estados de foco, acotados a nuestros propios
 * componentes interactivos (tarjetas, botones, filas de listado, links
 * de título). Mejora de UX pedida explícitamente en 1.2.8: hover/foco
 * más notorio y prolijo, sin animaciones bruscas ni afectar nada fuera
 * del módulo de remates. Respeta prefers-reduced-motion.
 */
.gsr-listado-fila,
.gsr-card-cta,
.gsr-btn,
.gsr-busqueda-filtros button,
.gsr-listado-titulo a,
.gsr-listado-ver,
.gsr-fila-remate,
.gsr-fila-tipo a,
.gsr-fila-ver {
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease, opacity 0.15s ease;
}

@media (prefers-reduced-motion: reduce) {
	.gsr-listado-fila,
	.gsr-card-cta,
	.gsr-btn,
	.gsr-busqueda-filtros button,
	.gsr-listado-titulo a,
	.gsr-listado-ver,
	.gsr-fila-remate,
	.gsr-fila-tipo a,
	.gsr-fila-ver {
		transition: none;
	}
}

.gsr-cartelera a:focus-visible,
.gsr-detalle a:focus-visible,
.gsr-listado-agrupado a:focus-visible,
.gsr-busqueda a:focus-visible,
.gsr-busqueda button:focus-visible {
	outline: 2px solid var(--gsr-color-dorado);
	outline-offset: 2px;
}

/* ---------- Estados, tags y utilidades compartidas (cartelera/detalle) ---------- */

/**
 * FIX 2.0.7: la tarjeta de grilla de la cartelera (.gsr-grid,
 * .gsr-remate-card y toda su familia — .gsr-card-header/-fecha/-dia/-mes/
 * -header-badges/-cantidad-badge/-title/-consignataria/-ubicacion/-modo/
 * -detalle/-meta/-destacado-badge/-transmision-icono) se elimina de acá:
 * cartelera-tarjetas.php pasa a la fila de 4 columnas (modalidad |
 * información | logo | cantidad/estado), ver .gsr-fila-remate-* más
 * abajo, y ningún template sigue usando esas clases (verificado por
 * grep antes de borrarlas). .gsr-card-kicker (remate-detalle.php) y
 * .gsr-card-cta (consignatarias-listado.php) SÍ se mantienen — las sigue
 * usando otro template.
 *
 * Lo que queda acá es lo que sigue siendo compartido entre varios
 * templates: badges de estado, tags de "Destacado"/"Resultado
 * disponible", y el logo chico inline de consignataria (usado por
 * listado-agrupado.php, consignataria-detalle.php y
 * busqueda-resultados.php).
 */
.gsr-badge {
	font-size: 10px;
	font-weight: 600;
	padding: 3px 10px;
	border-radius: var(--gsr-radius-badge);
	text-transform: uppercase;
	background: var(--gsr-color-verde-claro);
	color: var(--gsr-color-verde);
	white-space: nowrap;
}

.gsr-badge-hoy { background: var(--gsr-color-dorado); color: var(--gsr-color-badge-hoy-texto); }
.gsr-badge-reprogramado { background: var(--gsr-color-badge-reprogramado-bg); color: var(--gsr-color-badge-reprogramado-texto); }
.gsr-badge-cancelado,
.gsr-badge-suspendido { background: var(--gsr-color-badge-cancelado-bg); color: var(--gsr-color-badge-cancelado-texto); }
/* FIX 2.0.1: "Vigente" y "Próximo" no tienen regla propia a propósito —
   caen en el estilo base de .gsr-badge (verde claro/verde), el mismo
   tratamiento "positivo/normal" que ya usa "Finalizado". Solo los estados
   que necesitan llamar la atención (Hoy, Reprogramado, Cancelado/
   Suspendido) tienen su propio color. */

/* Logo de la consignataria (1.2.9), badge chico junto al nombre — en
   listado-agrupado.php, consignataria-detalle.php, busqueda-resultados.php
   y en el propio bloque de resultado (ahí con su propio tamaño más
   grande, ver .gsr-resultado-logo). La cartelera y "Resultados" del hub
   (cartelera-tarjetas.php / resultados-listado.php) usan su propio
   selector de logo — ver .gsr-fila-logo img más abajo. */
/**
 * FIX 2.4.9.5: pedido explícito — "todos los logos, tanto de cabañas como
 * de consignatarias, deben estar sobre fondo blanco según la medida del
 * PNG o JPG, formato cuadrado y fondo blanco, para unificar el estilo y
 * diseño en todas las vistas". Se agrega fondo blanco + borde suave +
 * padding chico, mismo criterio (background/border/border-radius) que ya
 * usan .gsr-consignataria-card-logo/.gsr-consignataria-logo/
 * .gsr-cabana-card-logo/.gsr-cabana-logo desde 2.4.0 — acá escalado a un
 * badge de 20px (padding de 1px en vez de 8-10px, y radio de 3px fijo en
 * vez de var(--gsr-radius-control)=6px, que a esta escala se vería
 * desproporcionado). object-fit:contain ya garantizaba que el logo nunca
 * se deformara; lo que faltaba era el fondo blanco parejo cuando el PNG
 * tiene transparencia o el JPG no es cuadrado.
 */
.gsr-logo-consignataria {
	width: 20px;
	height: 20px;
	object-fit: contain;
	flex-shrink: 0;
	vertical-align: middle;
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-suave);
	border-radius: 3px;
	padding: 1px;
}

/* FIX 1.3.5: el logo se mudó de .gsr-listado-titulo a
   .gsr-listado-consignataria junto con el nombre (ver nota más abajo) —
   selector actualizado para que el ajuste de margen siga aplicando. */
.gsr-listado-consignataria .gsr-logo-consignataria {
	width: 16px;
	height: 16px;
	padding: 1px;
}

.gsr-tag-resultado {
	display: inline-block;
	font-size: 10px;
	font-weight: 600;
	text-transform: uppercase;
	background: var(--gsr-color-dorado);
	color: var(--gsr-color-tag-resultado-texto);
	padding: 2px 8px;
	border-radius: var(--gsr-radius-badge);
	white-space: nowrap;
}

/* FIX 1.3.3: marca de "Destacado" en el listado — con borde en vez de
   relleno sólido, para no confundirse con ".gsr-tag-resultado" (mismo
   dorado, pero relleno) cuando las dos aparecen juntas en la misma fila. */
.gsr-tag-destacado {
	display: inline-block;
	font-size: 10px;
	font-weight: 600;
	text-transform: uppercase;
	background: transparent;
	border: 1px solid var(--gsr-color-dorado);
	color: var(--gsr-color-dorado);
	padding: 1px 7px;
	border-radius: var(--gsr-radius-badge);
	white-space: nowrap;
}

.gsr-listado-fila--destacado {
	border-color: var(--gsr-color-dorado);
}

.gsr-card-cta {
	/* Usado hoy por consignatarias-listado.php — la cartelera ya no usa
	   esta clase (ver FIX 2.0.7 arriba). margin-top: auto empuja el botón
	   al fondo de su contenedor flex-column. */
	margin-top: auto;
	align-self: flex-start;
	font-size: 12px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	/* FIX 1.3.5: colores de marca con !important — ver docblock de
	   TemplateLoader::register() para el detalle completo del diagnóstico
	   de especificidad frente al CSS del tema. */
	color: var(--gsr-color-fondo) !important;
	background: var(--gsr-color-verde) !important;
	padding: var(--gsr-spacing-md) 18px;
	border-radius: var(--gsr-radius-btn);
	text-decoration: none;
	line-height: 1;
}

.gsr-card-cta:hover,
.gsr-card-cta:focus-visible {
	background: var(--gsr-color-verde-medio) !important;
	color: var(--gsr-color-fondo) !important;
}

.gsr-vacio {
	font-size: 14px;
	color: var(--gsr-color-texto-suave);
}

/* ---------- Página de detalle ---------- */

.gsr-detalle {
	max-width: var(--gsr-detalle-max-width);
	margin-inline: auto;
	padding: var(--gsr-spacing-xl) var(--gsr-spacing-lg);
	/* FIX 2.4.4: pedido explícito de igualar estilos con Precios —
	   .rmag-wrap (frontend.css) fija line-height:1.5 en todo el bloque;
	   acá no había ningún valor propio, heredaba el del tema. */
	line-height: 1.5;
}

@media (max-width: 480px) {
	.gsr-detalle {
		padding: var(--gsr-spacing-lg) var(--gsr-spacing-md);
	}
}

/**
 * FIX 2.4.6.2: 120px → 140px — pedido explícito de nuevo sobre
 * /remates/7772/. .gsr-remate-detalle es una segunda clase propia de
 * remate-detalle.php (post_class(), ver el template) — se pisa SOLO el
 * padding-top de esa página, sin tocar .gsr-detalle en general (lo
 * comparte consignataria-detalle.php, ya validada con su propio margen,
 * que no se debe alterar de rebote).
 */
.gsr-remate-detalle {
	padding-top: 140px;
}

@media (max-width: 480px) {
	.gsr-remate-detalle {
		padding-top: 140px;
	}
}

/**
 * FIX 2.4.4: borde inferior en el encabezado — pedido explícito de
 * igualar jerarquía visual con Precios: .rmag-head (frontend.css) separa
 * el bloque de título del resto con `border-bottom: 3px solid
 * var(--rmag-primario); padding-bottom: 14px; margin-bottom: 20px`. Acá
 * el <header> no tenía ningún borde propio — el título y el resto del
 * contenido no se distinguían como bloques separados.
 */
.gsr-detalle-header {
	border-bottom: 3px solid var(--gsr-color-verde-medio);
	padding-bottom: 14px;
	margin-bottom: 20px;
}

/**
 * FIX 2.4.4: fila logo + breadcrumb/kicker/título — ver docblock en
 * remate-detalle.php. Layout liviano, sin borde propio (el borde de
 * separación ya lo pone .gsr-detalle-header, que envuelve esta fila y
 * también las tarjetas de resumen de más abajo).
 *
 * FIX 2.4.7.6: pedido explícito — "el título debe aparecer debajo de
 * los logos con un margen superior de 20px". Pasa de fila (logos a la
 * izquierda, texto a la derecha) a columna (logos arriba, texto abajo)
 * — ya no hace falta el override a columna que tenía en mobile, ver esa
 * nota más abajo.
 */
.gsr-detalle-header-logo-row {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	margin-bottom: var(--gsr-spacing-md);
}

/**
 * FIX 2.4.7.6: nuevo — la fila horizontal de logos en sí (antes esta
 * fila y el <div> de texto eran hijos directos de
 * .gsr-detalle-header-logo-row, mezclados con align-items:center; ahora
 * que ese contenedor es columna, los logos necesitan su propio wrapper
 * en fila para seguir viéndose uno al lado del otro).
 */
.gsr-detalle-header-logos {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--gsr-spacing-lg);
}

/**
 * FIX 2.4.7.6: nuevo — bloque de texto (breadcrumb/kicker/título), ahora
 * debajo de los logos. margin-top: 20px es el valor pedido explícito
 * ("con un margen superior de 20px"), en píxeles fijos en vez de una
 * variable --gsr-spacing-* porque ninguna coincide con ese valor exacto
 * (--gsr-spacing-lg es 16px, --gsr-spacing-xl es 24px).
 */
.gsr-detalle-header-texto {
	margin-top: 20px;
}

/**
 * FIX 2.4.6.4: se había agregado acá el estilo del link "volver" que
 * vivía en remate-detalle.php, consignataria-detalle-contenido.php,
 * remates-archive.php y remates-tabs.php.
 *
 * FIX 2.4.6.8: pedido explícito — ese link se sacó de las 4 plantillas
 * ("esa función no ayuda"), así que esta regla queda sin ningún
 * `.gsr-volver-nav` en el HTML para aplicarse — se borra en vez de
 * dejarla como CSS muerto.
 */

.gsr-detalle-breadcrumb {
	font-size: 12px;
	text-transform: uppercase;
	letter-spacing: 0.5px;
	margin: 0 0 var(--gsr-spacing-sm);
}

.gsr-detalle-breadcrumb a {
	color: var(--gsr-color-verde);
	text-decoration: none;
}

/**
 * FIX 2.4.7.6: +10% de tamaño — pedido explícito ("título del remate un
 * 10% más grande"). Base anterior: 26px.
 */
.gsr-detalle-title {
	font-size: 28.6px;
	font-weight: 600;
	margin: 0 0 var(--gsr-spacing-sm);
	color: var(--gsr-color-texto);
}

/**
 * FIX 2.5.0.6: pedido explícito — "el título de remate no se visualiza
 * cuando se habilita la función del multihorario [...] ambas líneas deben
 * verse como los demás título, como el título del remate [...] mejorar el
 * espacio interlínea, achicarlo un 20% entre ambas líneas". Con horarios
 * múltiples activos, el <h1>.gsr-detalle-title pasa a contener un renglón
 * por horario en vez de texto plano (ver remate-detalle.php) — cada
 * renglón (.gsr-detalle-title-horarios-item) NO redefine tamaño/peso de
 * fuente, los hereda tal cual del <h1> padre (28.6px/600, igual que
 * cualquier otro título de esta página), solo se le da color a la hora
 * (verde, mismo criterio que .gsr-fila-horarios-hora/.gsr-stat-card-
 * horarios-hora en el resto del plugin) y se ajusta el interlineado.
 * Nota de transparencia: la base de referencia para el "-20% de
 * interlineado" es 1.3 (line-height que tenían los renglones de horarios
 * en las listas equivalentes de esta misma página y de la cartelera antes
 * de esta versión) — 1.3 × 0.8 = 1.04.
 */
.gsr-detalle-title-horarios {
	display: flex;
	flex-direction: column;
	gap: 2px;
}

.gsr-detalle-title-horarios-item {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	column-gap: 8px;
	line-height: 1.04;
}

.gsr-detalle-title-horarios-hora {
	color: var(--gsr-color-verde);
}

.gsr-detalle-title-horarios-item-titulo {
	color: inherit;
}

/**
 * FIX 2.4.9.8: pedido explícito — línea de descripción corta y opcional
 * debajo del título, mismo criterio visual que .gsr-fila-descripcion-corta
 * (FIX 2.4.9.9: renombrada, ver más abajo) en los listados (itálica, menos
 * peso que el título).
 */
.gsr-detalle-descripcion {
	margin: calc(-1 * var(--gsr-spacing-sm) + 4px) 0 var(--gsr-spacing-sm);
	font-size: 15px;
	font-style: italic;
	font-weight: 400;
	color: var(--gsr-color-texto-tenue, #5a6b5c);
	line-height: 1.35;
}

/* FIX 2.0.6 (histórico): .gsr-detalle-hero (bloque "Cantidad de cabezas" +
   "Consignataria Responsable" con logo que había agregado 2.0.2) se
   eliminó por duplicar datos que la sección "Resultado del remate" ya
   mostraba más abajo. Esas clases (.gsr-card-cantidad-destacada/
   .gsr-card-consignataria-bloque) ya no existen.

   FIX 2.4.3: el resumen de Cabezas/Fecha/Consignataria arriba del todo
   volvió — pedido explícito — pero sin repetir el error de 2.0.2: reusa
   .gsr-stat-cards/.gsr-stat-card (mismo componente que ya usa esta misma
   página en la sección Resultado, y consignataria-detalle.php), sin logo
   y sin la tipografía grande del hero viejo. Ver .gsr-detalle-resumen
   más abajo y el docblock en remate-detalle.php. */

.gsr-detalle-meta {
	font-size: 13px;
	color: var(--gsr-color-texto-tenue);
	margin: 0 0 var(--gsr-spacing-lg);
}

/* FIX 2.4.3: el resumen reusa .gsr-stat-cards tal cual — este selector
   solo achica el margen inferior respecto del uso "normal" de
   .gsr-stat-cards (que ya viene con margin-bottom), porque acá abajo
   sigue la línea secundaria (.gsr-detalle-meta) y no queremos doble
   espacio entre ambas. */
.gsr-detalle-resumen {
	margin-bottom: var(--gsr-spacing-sm);
}

/**
 * FIX 2.4.6.3: pedido explícito — "cambiar o hacer un juego de colores de
 * fondos verde y contraste similar a precios-mag" sobre las 4 tarjetas de
 * resumen (Cabezas/Fecha/Ubicación/Consignataria) de /remates/7772/.
 * Medido en vivo en guarino-precios-hacienda-ref/assets/frontend.css: el
 * tratamiento "verde de fondo + contraste" más fuerte de esa página no es
 * .rmag-stat (fondo gris-verdoso pálido, ya era básicamente lo que .gsr-
 * stat-card tenía) sino .rmag-hero-card — degradé
 * var(--rmag-primario)→var(--rmag-secundario) con texto blanco, que ahí
 * se usa para los datos más importantes (índices INMAG/IGMAG). Se
 * traslada ese mismo criterio acá (degradé var(--gsr-color-verde)→
 * var(--gsr-color-verde-suave), texto blanco) con un borde izquierdo
 * dorado (mismo rol de acento/contraste que .rmag-h3 le da a
 * var(--rmag-acento) en la referencia). Escenario acotado a
 * .gsr-detalle-resumen (la fila de arriba de remate-detalle.php) con un
 * selector de dos clases — no se toca .gsr-stat-card en general, que
 * sigue verde-claro/verde-oscuro en consignataria-detalle.php y en la
 * sección Resultado de esta misma página, ninguna de las dos mencionada
 * en el pedido.
 */
.gsr-detalle-resumen .gsr-stat-card {
	background: linear-gradient(160deg, var(--gsr-color-verde) 0%, var(--gsr-color-verde-suave) 100%) !important;
	border: none;
	border-left: 4px solid var(--gsr-color-dorado);
	box-shadow: 0 4px 14px rgba(31, 61, 43, 0.18);
}

.gsr-detalle-resumen .gsr-stat-card-num,
.gsr-detalle-resumen .gsr-stat-card-num--texto {
	color: #fff !important;
}

.gsr-detalle-resumen .gsr-stat-card-lbl {
	color: rgba(255, 255, 255, 0.82) !important;
}

.gsr-detalle-resumen .gsr-stat-card-hora {
	color: rgba(255, 255, 255, 0.92);
}

/**
 * FIX 2.5.1.0 — bug real, reportado explícitamente ("−49 vs. anunciados
 * que esté en color blanco, no hay contraste"). Causa raíz: la tarjeta
 * "Informados" (agregada en 2.5.0.9) vive dentro de .gsr-detalle-resumen,
 * el mismo fondo verde degradado que ya fuerza texto blanco en
 * .gsr-stat-card-num/-lbl/-hora (ver las reglas de arriba) — pero
 * .gsr-stat-card-diferencia (clase nueva de 2.5.0.9, el renglón "+15/−3
 * vs. anunciados") no tenía su propia regla acá, así que le quedaba el
 * color por defecto de .gsr-stat-card-diferencia (gris oscuro, pensado
 * para fondo blanco) sobre ese mismo fondo verde — prácticamente
 * invisible. Mismo tratamiento que .gsr-stat-card-hora, línea de arriba.
 */
.gsr-detalle-resumen .gsr-stat-card-diferencia {
	color: rgba(255, 255, 255, 0.92);
}

/**
 * FIX 2.2.1: /remates/ (archive automático del CPT, ver
 * remates-archive.php) — mismo ancho de columna de lectura que la ficha
 * de detalle (.gsr-detalle), para que las dos vistas propias del plugin
 * se sientan parte del mismo sistema visual en vez de que una respete el
 * ancho del tema y la otra no.
 */
.gsr-archive {
	max-width: var(--gsr-detalle-max-width);
	margin-inline: auto;
	padding: var(--gsr-spacing-xl) var(--gsr-spacing-lg);
	font-family: var(--gsr-font-family);
	/* FIX 2.4.4: mismo criterio que .gsr-detalle — ver docblock ahí. */
	line-height: 1.5;
}

@media (max-width: 480px) {
	.gsr-archive {
		padding: var(--gsr-spacing-lg) var(--gsr-spacing-md);
	}
}

/**
 * FIX 2.4.6.3: 120px → 160px — pedido explícito de nuevo sobre /remates/.
 * Segunda clase propia de remates-archive.php, mismo criterio que
 * .gsr-remate-detalle (una clase de margen dedicada por página en vez de
 * tocar el padding-top base del componente compartido).
 */
.gsr-remates-archive {
	padding-top: 160px;
}

@media (max-width: 480px) {
	.gsr-remates-archive {
		padding-top: 160px;
	}
}

/* FIX 2.4.4: mismo criterio que .gsr-detalle-header — ver docblock ahí. */
.gsr-archive-header {
	margin: 0 0 20px;
	padding-bottom: 14px;
	border-bottom: 3px solid var(--gsr-color-verde-medio);
}

.gsr-archive-title {
	font-size: 26px;
	font-weight: 600;
	margin: 0 0 var(--gsr-spacing-sm);
	color: var(--gsr-color-texto);
}

.gsr-archive-subtitulo {
	font-size: 14px;
	color: var(--gsr-color-texto-suave);
	margin: 0;
}

/**
 * FIX 2.2.1: aviso de "módulo desactivado" — visible solo para
 * administradores (ver Frontend\Shortcodes::aviso_modulo_inactivo()), con
 * tratamiento visual de advertencia para que no se confunda con contenido
 * normal de la cartelera.
 */
.gsr-aviso-admin {
	font-size: 13px;
	color: var(--gsr-color-badge-reprogramado-texto);
	background: var(--gsr-color-badge-reprogramado-bg);
	border: 1px solid var(--gsr-color-dorado);
	border-radius: var(--gsr-radius-control);
	padding: var(--gsr-spacing-sm) var(--gsr-spacing-md);
	margin: 0 0 var(--gsr-spacing-md);
}

/**
 * FIX 2.3.0 — "Ranking" público (ver ranking-listado.php). Dos bloques
 * lado a lado en desktop (consignatarias / cabañas), apilados en mobile
 * — mismo criterio de grid responsive que ya usa .gsr-analisis-grid en
 * el admin, adaptado a los tokens del frontend público.
 */
.gsr-ranking-periodo {
	display: flex;
	flex-wrap: wrap;
	gap: var(--gsr-spacing-xs);
	margin: 0 0 var(--gsr-spacing-lg);
}

.gsr-ranking-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
	gap: var(--gsr-spacing-xl);
}

.gsr-ranking-bloque {
	min-width: 0;
}

.gsr-ranking-titulo {
	font-size: 18px;
	font-weight: 600;
	color: var(--gsr-color-texto);
	margin: 0 0 var(--gsr-spacing-md);
}

.gsr-ranking-tabla-wrap {
	overflow-x: auto;
	border: 1px solid var(--gsr-color-borde);
	border-radius: var(--gsr-radius-fila);
}

.gsr-ranking-tabla {
	width: 100%;
	border-collapse: collapse;
	font-size: 14px;
}

.gsr-ranking-tabla th,
.gsr-ranking-tabla td {
	padding: var(--gsr-spacing-sm) var(--gsr-spacing-md);
	text-align: left;
	border-bottom: 1px solid var(--gsr-color-borde-suave);
	white-space: nowrap;
}

.gsr-ranking-tabla thead th {
	font-size: 12px;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	color: var(--gsr-color-texto-suave);
	background: var(--gsr-color-verde-claro);
}

.gsr-ranking-tabla tbody tr:last-child td {
	border-bottom: none;
}

.gsr-ranking-th-pos {
	width: 36px;
	text-align: center;
}

.gsr-ranking-th-num {
	text-align: right;
}

.gsr-ranking-cabezas {
	font-weight: 700;
	color: var(--gsr-color-verde);
}

.gsr-ranking-nombre {
	display: flex;
	align-items: center;
	gap: 8px;
	white-space: normal;
}

.gsr-ranking-nota {
	font-size: 12px;
	color: var(--gsr-color-texto-tenue);
	margin: var(--gsr-spacing-lg) 0 0;
}

@media (max-width: 767px) {
	.gsr-ranking-tabla th,
	.gsr-ranking-tabla td {
		padding: var(--gsr-spacing-xs) var(--gsr-spacing-sm);
		font-size: 13px;
	}
}

/**
 * FIX 2.4.7.2 — "Dashboard de Análisis" público
 * (`[guarino_remates_dashboard]`, ver Shortcodes::render_dashboard() y
 * Public/Templates/dashboard-analisis.php). Mismos tokens que el resto de
 * la cartelera pública (.gsr-detalle como wrapper — mismo ancho/tipografía
 * que el hub y el Ranking). Las tarjetas de KPI reusan el mismo criterio
 * visual que .gsr-stat-card (borde izquierdo de acento, número grande);
 * las barras horizontales replican, en CSS público, el mismo patrón 100%
 * CSS (sin JS ni librería de gráficos) que ya usa
 * Modules\Analisis\AnalisisModule::render() en el admin para "Evolución
 * mensual" — track gris + fill de color proporcional al máximo de la
 * serie, ancho mínimo de 2% para que un valor bajo pero distinto de cero
 * siga siendo visible.
 */
.gsr-dashboard-titulo {
	font-size: 20px;
	font-weight: 600;
	color: var(--gsr-color-texto);
	margin: 0 0 var(--gsr-spacing-lg);
}

.gsr-dashboard-kpis {
	display: flex;
	flex-wrap: wrap;
	gap: var(--gsr-spacing-md);
	margin-bottom: var(--gsr-spacing-xl);
}

.gsr-dashboard-kpi-card {
	flex: 1;
	min-width: 160px;
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde);
	border-left: 4px solid var(--gsr-color-verde-medio);
	border-radius: var(--gsr-radius-fila);
	padding: var(--gsr-spacing-md) var(--gsr-spacing-lg);
}

.gsr-dashboard-kpi-num {
	display: block;
	font-size: 26px;
	font-weight: 700;
	line-height: 1;
	color: var(--gsr-color-texto);
}

.gsr-dashboard-kpi-lbl {
	display: block;
	margin-top: 6px;
	font-size: 13px;
	color: var(--gsr-color-texto-suave);
}

.gsr-dashboard-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
	gap: var(--gsr-spacing-xl);
}

.gsr-dashboard-bloque {
	min-width: 0;
}

.gsr-dashboard-bloque-titulo {
	font-size: 16px;
	font-weight: 600;
	color: var(--gsr-color-texto);
	margin: 0 0 var(--gsr-spacing-md);
}

.gsr-dashboard-barra-fila {
	display: flex;
	align-items: center;
	gap: var(--gsr-spacing-sm);
	margin: 6px 0;
}

.gsr-dashboard-barra-etq {
	width: 40%;
	max-width: 160px;
	font-size: 12px;
	color: var(--gsr-color-texto-suave);
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

.gsr-dashboard-barra-track {
	flex: 1;
	background: var(--gsr-color-verde-claro);
	border-radius: 3px;
	overflow: hidden;
}

.gsr-dashboard-barra-fill {
	display: block;
	height: 16px;
	background: var(--gsr-color-verde-medio);
}

.gsr-dashboard-barra-val {
	width: 70px;
	flex-shrink: 0;
	text-align: right;
	font-size: 12px;
	font-weight: 600;
	color: var(--gsr-color-texto);
}

.gsr-dashboard-nota {
	font-size: 12px;
	color: var(--gsr-color-texto-tenue);
	margin: var(--gsr-spacing-lg) 0 0;
}

/* Mismo criterio responsive que .gsr-ranking-*: en pantallas angostas la
   etiqueta de cada barra pasa a ancho fijo chico para no empujar la barra
   y el valor fuera de la pantalla. */
@media (max-width: 480px) {
	.gsr-dashboard-barra-etq {
		width: 30%;
		max-width: 110px;
	}
	.gsr-dashboard-kpi-card {
		min-width: 130px;
	}
}

/**
 * FIX 2.0.2: flyer del remate — imagen grande, ancho completo del bloque de
 * detalle (que ahora a su vez ocupa el ancho completo de la página, ver
 * --gsr-detalle-max-width más arriba). Mismo radio/borde que el adjunto de
 * Resultado (.gsr-resultado-adjunto-imagen) para que se sienta parte del
 * mismo sistema visual.
 */
/**
 * FIX 2.4.8.3: pedido explícito — "con un margen de 20px superior y luego
 * un margen de 20px inferior para no superponerse con ningún otro
 * elemento". Antes solo tenía margen inferior (var(--gsr-spacing-xl),
 * 24px) y ninguno superior — acá se pasa a los 20px fijos pedidos en las
 * 2 puntas, mismo criterio ya usado en el plugin para pedidos de margen
 * en píxeles exactos (ver FIX 2.4.7.1 más abajo, .gsr-ver-cartelera-nav).
 */
/**
 * FIX 2.4.9.4: pedido explícito — "centrado con márgenes de 10px superior
 * y 10px inferior, sobre un marco de fondo verde claro, para diferenciar
 * esta opción de flyer de promoción". Margen pasa de 20px (fijo, 2.4.8.3)
 * a 10px arriba/abajo; se agrega el fondo verde claro
 * (var(--gsr-color-verde-claro), mismo tono ya usado en el resto del
 * plugin — ver .gsr-fila-remate--destacado-fondo, 2.4.9.3) con padding
 * propio para que se note como "marco" y no solo como fondo pegado al
 * borde del contenido; text-align:center centra tanto la imagen (o el
 * botón "Ver / descargar flyer" cuando no es imagen) como cualquier
 * contenido futuro de este bloque.
 */
.gsr-detalle-flyer {
	margin: 10px 0;
	padding: var(--gsr-spacing-md);
	background: var(--gsr-color-verde-claro);
	border-radius: var(--gsr-radius-fila);
	text-align: center;
}

.gsr-detalle-flyer-imagen {
	display: inline-block;
	max-width: 100%;
	height: auto;
	border-radius: var(--gsr-radius-fila);
	border: 1px solid var(--gsr-color-borde);
	vertical-align: top;
}

/**
 * FIX 2.4.9.4: el flyer-imagen ahora vive adentro de un <a
 * class="gsr-adjunto-modal"> (mismo popup que ya usa el adjunto de
 * Resultado, ver public-resultado-modal.js) — sin este reset, el link
 * heredaba el subrayado/color azul por defecto de un <a> alrededor de una
 * imagen, que no correspondía visualmente acá. Selector por contexto
 * (.gsr-detalle-flyer a.gsr-adjunto-modal), no :has(), a propósito — este
 * plugin apunta a Chrome/Safari/Opera/Firefox por igual (ver
 * public-resultado-modal.js) y :has() todavía no tiene el mismo soporte
 * parejo en versiones más viejas de Firefox.
 */
.gsr-detalle-flyer a.gsr-adjunto-modal {
	display: inline-block;
	text-decoration: none;
}

.gsr-detalle-acciones {
	display: flex;
	gap: var(--gsr-spacing-sm);
	flex-wrap: wrap;
	margin-bottom: var(--gsr-spacing-xl);
}

.gsr-btn {
	display: inline-block;
	font-size: 13px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	padding: var(--gsr-spacing-md) 20px;
	border-radius: var(--gsr-radius-btn);
	text-decoration: none;
	background: var(--gsr-color-verde-claro);
	color: var(--gsr-color-verde);
	border: 1px solid var(--gsr-color-verde);
}

.gsr-btn-primary {
	background: var(--gsr-color-verde);
	color: var(--gsr-color-fondo);
	border-color: var(--gsr-color-verde);
}

/**
 * FIX 2.4.7.8: pedido explícito — "arreglar el over [hover] cuando se le
 * pasa el mouse por arriba [al botón 'VER CARTELERA DE REMATES'], a color
 * naranja o marrón claro para el contraste. arreglar el IU en todos los
 * botones que haga falta". El hover anterior (opacity: 0.9) no cambiaba de
 * color — solo atenuaba un poco el mismo verde, sin el contraste pedido.
 *
 * Se reemplaza por un cambio de color real a --gsr-color-dorado (#c9a227,
 * el "marrón claro"/dorado de la identidad de marca — ver el comentario de
 * arriba del todo de este archivo, "verde institucional, dorado" — no se
 * introduce un color nuevo), con --gsr-color-badge-hoy-texto (#4a3a0d) como
 * texto: es el mismo par fondo/texto que ya usa .gsr-badge-hoy en esta
 * misma hoja de estilos para "texto oscuro sobre dorado", así que el
 * contraste ya está validado en otro lugar del plugin, no es una
 * combinación nueva sin probar.
 *
 * Esta regla vive en .gsr-btn (el componente base que reusan TODOS los
 * botones del plugin: "Ver cartelera de remates", "Ver transmisión",
 * "Descargar catálogo", "Ver resultado", "Ver/descargar resultado", "Ver
 * video del remate", "Ver/descargar flyer", WhatsApp y Copiar link — ver
 * Shortcodes::compartir_bloque()) y en .gsr-btn-primary (el modificador que
 * usan "Ver transmisión" y "Ver cartelera de remates"), así que el mismo
 * arreglo de contraste llega a todos sin tocar cada botón por separado.
 * Los demás componentes de botón del plugin (.gsr-fila-ver,
 * .gsr-listado-ver, .gsr-tab, .gsr-btn-buscador-*) ya tienen su propio
 * hover con cambio de color/contraste (no opacity), se dejan sin tocar.
 */
.gsr-btn:hover,
.gsr-btn:focus-visible,
.gsr-btn-primary:hover,
.gsr-btn-primary:focus-visible {
	background: var(--gsr-color-dorado);
	border-color: var(--gsr-color-dorado);
	color: var(--gsr-color-badge-hoy-texto);
}

.gsr-detalle-bloque {
	margin-bottom: var(--gsr-spacing-xl);
	padding-bottom: var(--gsr-spacing-xl);
	border-bottom: 1px solid var(--gsr-color-borde-suave);
}

/**
 * FIX 2.5.0.7: pedido explícito — "este bloque: 'Resultados del remate'
 * debe tener 30 px de margen superior". Modificador propio (no se toca
 * .gsr-detalle-bloque en general, que reusan otras secciones de esta misma
 * página con su propio espaciado) — remate-detalle.php ya le pone la
 * clase .gsr-detalle-resultado a la <section id="resultado"> de esta
 * sección específica.
 */
.gsr-detalle-resultado {
	margin-top: 30px;
}

/**
 * FIX 2.4.9.0: pedido explícito — "Ver transmisión" ancho completo, en
 * rojo. margin-bottom explícito porque este párrafo puede vivir fuera de
 * la sección "Información del remate" (ver docblock en remate-detalle.php)
 * y no puede depender de heredar el espaciado de esa sección.
 *
 * FIX 2.4.9.1: pedido explícito — el bloque se reubicó debajo de las
 * tarjetas del encabezado (Fecha/Cabezas/Ubicación/Consignataria) y el
 * margen pasa de 20px a 10px arriba y abajo.
 */
.gsr-detalle-transmision {
	margin: 10px 0;
}

.gsr-btn-transmision {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	width: 100%;
	box-sizing: border-box;
	background: var(--gsr-color-youtube);
	color: #fff;
	border-color: var(--gsr-color-youtube);
}

.gsr-btn-transmision .dashicons {
	font-size: 16px;
	width: 16px;
	height: 16px;
}

/**
 * Especificidad igual a la regla genérica .gsr-btn:hover (una sola
 * clase) — al venir DESPUÉS en la hoja de estilos, esta gana el empate
 * y el hover queda en rojo más oscuro en vez del dorado genérico.
 */
.gsr-btn-transmision:hover,
.gsr-btn-transmision:focus-visible {
	background: var(--gsr-color-youtube-hover);
	border-color: var(--gsr-color-youtube-hover);
	color: #fff;
}

/**
 * FIX 2.5.0.7: pedido explícito — botón "Ver planilla a continuación" "de
 * otro color" que "Ver resultado" (.gsr-btn liso, verde institucional) y
 * "al lado" de ese botón — ver remate-detalle.php. Se usa
 * --gsr-color-dorado con --gsr-color-badge-hoy-texto como texto: el mismo
 * par fondo/texto que .gsr-btn:hover ya usa en toda la hoja de estilos
 * (ver más arriba), así que el contraste ya está validado, no es una
 * combinación nueva sin probar — y de paso queda visualmente distinguible
 * del verde de "Ver resultado" sin agregar un color nuevo al plugin.
 * margin-left solo entra en juego cuando este botón se muestra al lado de
 * otro (el caso "al lado de 'Ver resultado'" del pedido); si aparece solo
 * (remate sin adjunto, solo planilla), el margen extra a la izquierda no
 * se nota porque no hay nada a su izquierda.
 */
.gsr-btn-planilla {
	background: var(--gsr-color-dorado);
	color: var(--gsr-color-badge-hoy-texto);
	border-color: var(--gsr-color-dorado);
	margin-left: 8px;
}

.gsr-btn-planilla:hover,
.gsr-btn-planilla:focus-visible {
	background: var(--gsr-color-verde);
	border-color: var(--gsr-color-verde);
	color: var(--gsr-color-fondo);
}

/**
 * FIX 2.5.0.3: pedido explícito — "Descargar catálogo" con el mismo
 * tratamiento que "Ver transmisión" (.gsr-btn-transmision, arriba) pero
 * sin el rojo. Se repite el mismo layout (flex centrado, ícono + texto,
 * ancho completo, mismo padding/box-sizing que .gsr-btn) sin tocar
 * background/color/border — al no sobreescribirlos, hereda el verde
 * institucional de .gsr-btn (y su mismo hover dorado, ver
 * .gsr-btn:hover más arriba) en vez de un color nuevo sin usar en el
 * resto del plugin.
 */
.gsr-btn-catalogo {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	width: 100%;
	box-sizing: border-box;
}

.gsr-btn-catalogo .dashicons {
	font-size: 16px;
	width: 16px;
	height: 16px;
}

/* FIX 2.0.3: paginación "Ver más" al pie del bloque Finalizados de la
   ficha de consignataria — reusa .gsr-btn, solo centra y separa. */
.gsr-consignataria-ver-mas {
	text-align: center;
	margin: var(--gsr-spacing-md) 0 0;
}

/**
 * FIX 2.4.4: rediseñado para igualar el título de sección de Precios
 * (.rmag-h3, frontend.css: 17px/600, borde izquierdo de acento, sin
 * mayúsculas, color primario) — antes era 15px todo en mayúsculas, sin
 * borde, un tratamiento visual bastante distinto para el mismo rol
 * ("título de sección dentro de la ficha").
 */
.gsr-detalle-bloque h2 {
	font-size: 17px;
	font-weight: 600;
	color: var(--gsr-color-verde-medio);
	margin: 0 0 var(--gsr-spacing-md);
	padding-left: 10px;
	border-left: 4px solid var(--gsr-color-dorado);
}

/**
 * FIX 2.4.6.6: subcategoría "Remates reprogramados" dentro de "Próximos
 * Remates" (ver consignataria-detalle-contenido.php) — mismo criterio de
 * borde de acento que .gsr-detalle-bloque h2, pero más chico y sin
 * separar en su propia sección (.gsr-detalle-bloque), para que se lea
 * claramente como una subdivisión de la sección de arriba, no como una
 * sección nueva.
 */
.gsr-detalle-subbloque-titulo {
	font-size: 14px;
	font-weight: 600;
	color: var(--gsr-color-verde-medio);
	margin: var(--gsr-spacing-lg) 0 var(--gsr-spacing-sm);
	padding-left: 8px;
	border-left: 3px solid var(--gsr-color-dorado);
}

/**
 * FIX 2.4.7.5: acá vivía .gsr-detalle-consignataria-responsable — línea
 * "Consignataria responsable: [nombre]" como <p> propio, entre el
 * título "Información del remate" y la tabla. FIX 2.4.7.6: se le sacó
 * el acento propio (borde dorado + verde) y se le copió la tipografía
 * de .gsr-detalle-tabla td, pero seguía siendo un <p> aparte, fuera de
 * la tabla. FIX 2.4.7.7: pedido explícito — "que tenga el mismo estilo
 * de 'Raza predominante / Cabaña / Transmisión'". Pasa a ser una fila
 * real de esa misma tabla (mismo <th>/<td> que las demás, ver
 * remate-detalle.php) — ya no hace falta esta clase, se borra en vez de
 * dejarla como CSS muerto.
 */

.gsr-detalle-tabla {
	width: 100%;
	font-size: 14px;
	border-collapse: collapse;
}

.gsr-detalle-tabla th {
	text-align: left;
	color: var(--gsr-color-texto-suave);
	font-weight: 400;
	padding: 6px var(--gsr-spacing-md) 6px 0;
	width: 40%;
}

.gsr-detalle-tabla td {
	padding: 6px 0;
	font-weight: 600;
}

/**
 * FIX 2.4.7.8: leyenda "Ver planilla a continuación" — pedido explícito, en
 * la fila "Resultado" de .gsr-detalle-tabla (remate-detalle.php), junto o en
 * vez del botón "Ver resultado". Se le baja el peso (400, no 600) y el color
 * a --gsr-color-texto-suave respecto al td que la contiene, para que se lea
 * como una aclaración/nota y no como un dato en sí (mismo rol tipográfico
 * que .gsr-detalle-tabla th, que ya usa ese mismo color/peso para las
 * etiquetas).
 */
.gsr-resultado-planilla-leyenda {
	font-weight: 400;
	color: var(--gsr-color-texto-suave);
	font-size: 13px;
}

/**
 * FIX 2.4.9.9: pedido explícito — la ficha de remate de cabaña (Toros/
 * Vientres/Otros/Total a remate) "se tiene que ver separado y destacados
 * debajo de 'Flete... GRATIS A TODO EL PAÍS' de ese bloque". Antes (2.4.9.8)
 * eran filas <tr> comunes de .gsr-detalle-tabla, iguales a las demás; ahora
 * llevan una fila de título propia (.gsr-fila-ficha-destacada-titulo) y
 * fondo distintivo (.gsr-fila-ficha-destacada, mismo verde claro que
 * .gsr-badge/.gsr-fila-tags de otras partes del plugin) para que se lean
 * como un bloque agrupado y destacado dentro de la misma tabla, no como
 * filas sueltas más.
 */
.gsr-fila-ficha-destacada-titulo th {
	padding-top: 14px;
	padding-bottom: 4px;
	color: var(--gsr-color-verde);
	font-weight: 700;
	font-size: 12px;
	text-transform: uppercase;
	letter-spacing: 0.03em;
	border-top: 1px solid var(--gsr-color-borde-suave);
}

.gsr-fila-ficha-destacada th,
.gsr-fila-ficha-destacada td {
	background: var(--gsr-color-verde-claro);
}

.gsr-fila-ficha-destacada th {
	padding-left: var(--gsr-spacing-md);
}

.gsr-fila-ficha-destacada td {
	padding-right: var(--gsr-spacing-md);
}

.gsr-fila-ficha-destacada--ultima th,
.gsr-fila-ficha-destacada--ultima td {
	padding-bottom: 10px;
}

@media (max-width: 420px) {
	.gsr-detalle-tabla th,
	.gsr-detalle-tabla td {
		display: block;
		width: 100%;
		padding: 4px 0;
	}
	.gsr-detalle-tabla th {
		padding-bottom: 0;
	}
	.gsr-detalle-tabla tr {
		display: block;
		margin-bottom: var(--gsr-spacing-sm);
	}
}

/* ---------- Resultado del remate (1.2.9) ---------- */

/**
 * FIX 2.4.6.1: .gsr-resultado-logo (el logo de consignataria DENTRO de la
 * sección Resultado) se sacó — pedido explícito ("ya está arriba"), el
 * logo del encabezado del artículo (.gsr-consignataria-logo, FIX 2.4.4)
 * ya lo cubre siempre.
 *
 * FIX 2.4.6.3: .gsr-resultado-cabecera y .gsr-resultado-datos (dt/dd) se
 * sacan por completo — el bloque "Martillero" + "Plazo de pago" que
 * daban estilo ya no existe en remate-detalle.php (ver el FIX 2.4.6.3 ahí:
 * los dos datos se consolidaron en la tabla "Información del remate",
 * junto con las nuevas filas "Informe" y "Observaciones"). Documentado
 * acá, mismo criterio que la nota de arriba, por si algún día se
 * reintroduce esta cabecera puntual.
 */

.gsr-resultado-tabla-wrap {
	overflow-x: auto;
	margin-bottom: var(--gsr-spacing-lg);
}

table.gsr-resultado-tabla {
	width: 100%;
	min-width: 620px;
	border-collapse: collapse;
	font-size: 13px;
}

table.gsr-resultado-tabla th,
table.gsr-resultado-tabla td {
	padding: 9px 12px;
	text-align: right;
	border-bottom: 1px solid var(--gsr-color-borde-suave);
	white-space: nowrap;
}

table.gsr-resultado-tabla th:first-child,
table.gsr-resultado-tabla td:first-child {
	text-align: left;
	white-space: normal;
}

/**
 * FIX 2.4.4: encabezado con fondo de color sólido — pedido explícito de
 * igualar estilos con Precios: .rmag-table thead th (frontend.css) usa
 * background:var(--rmag-fondo-head) (=primario) + color blanco. Antes
 * era texto gris chico sobre fondo transparente, un tratamiento mucho
 * más liviano para el mismo rol de "encabezado de tabla de datos".
 */
table.gsr-resultado-tabla thead th {
	background: var(--gsr-color-verde-medio);
	color: var(--gsr-color-fondo);
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.4px;
	font-weight: 600;
	border-bottom: none;
	white-space: nowrap;
}

table.gsr-resultado-tabla thead th:first-child {
	text-align: left;
}

/* FIX 2.4.4: zebra striping — mismo criterio que .rmag-table tbody
   tr:nth-child(even) td en Precios. */
table.gsr-resultado-tabla tbody tr:nth-child(even):not(.gsr-resultado-grupo-header):not(.gsr-resultado-subtotal) td {
	background: var(--gsr-color-verde-claro);
}

/**
 * FIX 2.4.4: barra de color sólido para la fila de grupo — pedido
 * explícito de igualar estilos con Precios: .rmag-table tr.rmag-grupo td
 * usa background:var(--rmag-secundario) + color blanco (una barra de
 * color llena, no un verde clarito con texto oscuro).
 */
.gsr-resultado-grupo-header th {
	background: var(--gsr-color-verde-suave);
	color: var(--gsr-color-fondo);
	text-transform: uppercase;
	font-size: 11px;
	letter-spacing: 0.4px;
	text-align: left;
}

.gsr-resultado-subtotal td {
	font-weight: 600;
	border-bottom: 2px solid var(--gsr-color-borde);
}

/* 2.9.7.2 — jerarquía visual de resultado: Cabaña > Grupo > Categoría. */
table.gsr-resultado-tabla--jerarquica tbody tr.gsr-resultado-cabana-header th {
	padding: 12px 14px;
	background: var(--gsr-color-verde-medio);
	color: var(--gsr-color-fondo);
	font-size: 13px;
	font-weight: 700;
	letter-spacing: 0;
	text-transform: none;
	text-align: left;
	border-top: 10px solid var(--gsr-color-fondo);
}
table.gsr-resultado-tabla--jerarquica tbody tr.gsr-resultado-cabana-header:first-child th {
	border-top-width: 0;
}
table.gsr-resultado-tabla--jerarquica .gsr-resultado-cabana-header th span,
table.gsr-resultado-tabla--jerarquica .gsr-resultado-grupo-header th span {
	display: inline-block;
	margin-right: 7px;
	font-size: 10px;
	font-weight: 600;
	letter-spacing: .5px;
	text-transform: uppercase;
	opacity: .8;
}
table.gsr-resultado-tabla--jerarquica tbody tr.gsr-resultado-grupo-header th {
	padding: 8px 14px;
	background: var(--gsr-color-verde-suave);
	color: var(--gsr-color-fondo);
	text-align: left;
	font-size: 12px;
	font-weight: 700;
	text-transform: none;
	letter-spacing: 0;
}
table.gsr-resultado-tabla--jerarquica tr.gsr-resultado-categoria-row td:first-child {
	padding-left: 22px;
	font-weight: 600;
}
table.gsr-resultado-tabla--jerarquica tr.gsr-resultado-total-general td {
	background: var(--gsr-color-verde-claro);
	font-weight: 700;
}

.gsr-resultado-video {
	position: relative;
	width: 100%;
	padding-top: 56.25%; /* 16:9 */
	margin-bottom: var(--gsr-spacing-lg);
}

.gsr-resultado-video iframe,
.gsr-resultado-video embed,
.gsr-resultado-video object {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

/* Si wp_oembed_get() no resuelve (proveedor no soportado) el bloque cae a
   un botón simple en vez de al wrapper 16:9 — sin el padding-top fijo, que
   solo tiene sentido cuando adentro hay un iframe. */
.gsr-resultado-video:has(> .gsr-btn) {
	padding-top: 0;
}

/**
 * FIX 2.5.0.7: pedido explícito — "la imagen o JPG adjunto deben verse
 * centrados y con fondo verde claro como se presenta en la misma sección
 * 'el afiche o flyers del remate'". Mismo tratamiento exacto que
 * .gsr-detalle-flyer (2.4.9.4: margen 10px arriba/abajo, padding propio,
 * fondo var(--gsr-color-verde-claro), radio de borde, texto centrado) —
 * .gsr-resultado-adjunto es el <p> que ya envuelve tanto la imagen
 * embebida (gsr-resultado-adjunto-imagen) como, cuando el adjunto no es
 * imagen, el botón "Ver / descargar resultado" (mismo caso que contempla
 * .gsr-detalle-flyer para su propio botón "Ver / descargar flyer"), así
 * que centrar y poner fondo acá cubre los dos casos con una sola regla.
 */
.gsr-resultado-adjunto {
	margin: 10px 0;
	padding: var(--gsr-spacing-md);
	background: var(--gsr-color-verde-claro);
	border-radius: var(--gsr-radius-fila);
	text-align: center;
}

.gsr-resultado-adjunto-imagen {
	display: inline-block;
	max-width: 100%;
	height: auto;
	border-radius: var(--gsr-radius-fila);
	border: 1px solid var(--gsr-color-borde);
	vertical-align: top;
}

/* Mismo reset que .gsr-detalle-flyer a.gsr-adjunto-modal (2.4.9.4) — sin
   esto, el <a class="gsr-adjunto-modal"> que envuelve la imagen hereda el
   subrayado/azul por defecto de un link, que no corresponde acá. */
.gsr-resultado-adjunto a.gsr-adjunto-modal {
	display: inline-block;
	text-decoration: none;
}

.gsr-resultado-acciones {
	display: flex;
	gap: var(--gsr-spacing-sm);
	flex-wrap: wrap;
	margin-top: var(--gsr-spacing-md);
}

/**
 * FIX 2.4.6.8: pedido explícito — "la funcionalidad COMPARTIR debe ser
 * igual a la del plug in de precio del mag, y centrado como figura en ese
 * modulo". Verificado en vivo (grupoguarino.com.ar/precios-porcinos/): el
 * bloque de compartir de Precios son dos acciones centradas, lado a lado
 * ("↗ WhatsApp" + "🔗 Copiar link"), no un solo botón a la izquierda con
 * Web Share API — ver remate-detalle.php y public-resultado.js.
 * .gsr-compartir es un modificador de .gsr-resultado-acciones (no la
 * reemplaza: sigue siendo flex/gap/wrap) que solo agrega el centrado.
 */
.gsr-compartir {
	justify-content: center;
}

.gsr-btn-compartir-wa,
.gsr-btn-compartir-link {
	cursor: pointer;
	font-family: inherit;
}

/* ---------- Listado agrupado por fecha ---------- */

.gsr-listado-agrupado,
.gsr-busqueda {
	font-family: var(--gsr-font-family);
}

.gsr-listado-fecha-header {
	font-size: 13px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	color: var(--gsr-color-verde);
	margin: var(--gsr-spacing-xl) 0 var(--gsr-spacing-sm);
}

.gsr-listado-fecha-header:first-child {
	margin-top: 0;
}

.gsr-listado {
	display: flex;
	flex-direction: column;
	gap: var(--gsr-spacing-sm);
}

.gsr-listado-fila {
	display: flex;
	align-items: center;
	gap: var(--gsr-spacing-md);
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde);
	border-radius: var(--gsr-radius-fila);
	padding: var(--gsr-spacing-sm) var(--gsr-spacing-md);
}

/* Misma elevación sutil que las tarjetas de la cartelera, para que las
   dos vistas se sientan parte del mismo sistema. */
.gsr-listado-fila:hover,
.gsr-listado-fila:focus-within {
	border-color: var(--gsr-color-verde-medio);
	box-shadow: 0 2px 10px rgba(31, 61, 43, 0.08);
}

.gsr-listado-hora {
	font-size: 13px;
	font-weight: 600;
	color: var(--gsr-color-verde);
	min-width: 48px;
}

/* FIX 1.3.2: jerarquía visual — ícono de transmisión primero en la fila
   (como en la imagen de referencia del pedido) y badge de cantidad
   siempre visible antes del botón "Ver" (con "A.C." si no se cargó). */
.gsr-listado-transmision-icono {
	color: var(--gsr-color-verde-medio);
	font-size: 18px;
	width: 18px;
	height: 18px;
	flex-shrink: 0;
}

/**
 * FIX 2.4.8.3: wrapper de listado-agrupado.php cuando un remate tiene 2 o 3
 * modalidades tildadas — ver docblock del foreach en listado-agrupado.php.
 * Gap propio, más chico que el de .gsr-listado-fila (pensado para separar
 * ítems grandes de la fila, no íconos de 18px entre sí), y flex-shrink:0
 * para que el wrapper completo se comporte como un solo ítem de la fila.
 */
.gsr-listado-transmision-iconos {
	display: flex;
	align-items: center;
	gap: 4px;
	flex-shrink: 0;
}

.gsr-listado-cantidad-badge {
	font-size: 12px;
	font-weight: 600;
	color: var(--gsr-color-verde);
	white-space: nowrap;
	flex-shrink: 0;
}

/**
 * FIX 2.0.7: .gsr-resultados-fecha se elimina de acá — era exclusiva de
 * la fila vieja de resultados-listado.php ("Resultados" del hub), que
 * pasó a la fila de 4 columnas (.gsr-fila-remate-*, ver más arriba) y ya
 * no usa .gsr-listado-fila. .gsr-tag-pendiente sigue viva: la sigue
 * usando tanto resultados-listado.php (nueva fila) como este mismo
 * bloque (.gsr-listado-titulo .gsr-tag-pendiente, más abajo).
 */
.gsr-tag-pendiente {
	display: inline-block;
	font-size: 10px;
	font-weight: 600;
	text-transform: uppercase;
	background: var(--gsr-color-borde-suave);
	border: 1px solid var(--gsr-color-borde);
	color: var(--gsr-color-texto-suave);
	padding: 1px 7px;
	border-radius: var(--gsr-radius-badge);
	white-space: nowrap;
}

.gsr-listado-titulo .gsr-tag-pendiente {
	margin-left: 6px;
	vertical-align: middle;
}

.gsr-listado-info {
	flex: 1;
	min-width: 0;
}

/* FIX 1.3.5: Consignataria ("Socio") arriba del título — antes vivía
   mezclada dentro de .gsr-listado-meta junto con raza/cabaña/ubicación/
   transmisión, sin destacarse del resto. Usada por listado-agrupado.php
   y busqueda-resultados.php (cartelera-tarjetas.php/resultados-listado.php
   ya no reusan esta clase — ver FIX 2.0.7 más arriba). */
.gsr-listado-consignataria {
	margin: 0;
	font-size: 12px;
	font-weight: 700;
	color: var(--gsr-color-verde);
	display: flex;
	align-items: center;
	gap: 6px;
}

.gsr-listado-titulo {
	margin: 0;
	font-size: 14px;
	font-weight: 600;
}

.gsr-listado-titulo .gsr-tag-resultado,
.gsr-listado-titulo .gsr-tag-destacado {
	margin-left: 6px;
	vertical-align: middle;
}

.gsr-listado-titulo a {
	color: var(--gsr-color-texto);
	text-decoration: none;
}

.gsr-listado-titulo a:hover {
	text-decoration: underline;
}

.gsr-listado-meta {
	margin: 2px 0 0;
	font-size: 12px;
	color: var(--gsr-color-texto-suave);
}

.gsr-listado-ver {
	font-size: 12px;
	font-weight: 600;
	text-transform: uppercase;
	color: var(--gsr-color-verde);
	text-decoration: none;
	white-space: nowrap;
}

.gsr-listado-ver:hover {
	text-decoration: underline;
}

/**
 * FIX 2.4.8.3: wrapper de "Ver" + "Ver afiche promocional"/"Ver informe de
 * previa" (cuando corresponde) en listado-agrupado.php — columna propia
 * para que los 2 links queden en una sola línea vertical, sin desarmar el
 * resto de .gsr-listado-fila (fila compacta, compartida por varias
 * vistas). .gsr-listado-ver--previa reusa la tipografía de
 * .gsr-listado-ver (12px, uppercase) con un tono más suave para no
 * competir visualmente con "Ver", que sigue siendo la acción principal.
 */
.gsr-listado-acciones {
	display: flex;
	flex-direction: column;
	align-items: flex-end;
	gap: 4px;
}

.gsr-listado-ver--previa {
	color: var(--gsr-color-texto-suave);
}

.gsr-listado-ver--previa:hover {
	color: var(--gsr-color-verde);
}

@media (max-width: 480px) {
	.gsr-listado-fila {
		flex-wrap: wrap;
	}
}

/* ---------- Búsqueda avanzada ---------- */

.gsr-busqueda-form {
	display: flex;
	flex-direction: column;
	gap: var(--gsr-spacing-md);
	margin-bottom: var(--gsr-spacing-lg);
}

.gsr-busqueda-form input[type="search"] {
	padding: 10px var(--gsr-spacing-md);
	border: 1px solid var(--gsr-color-borde-input);
	border-radius: var(--gsr-radius-control);
	font-size: 14px;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.gsr-busqueda-form input[type="search"]:focus,
.gsr-busqueda-filtros input:focus,
.gsr-busqueda-filtros select:focus {
	border-color: var(--gsr-color-verde-medio);
	box-shadow: 0 0 0 3px var(--gsr-color-verde-claro);
	outline: none;
}

.gsr-busqueda-filtros {
	display: flex;
	flex-wrap: wrap;
	gap: var(--gsr-spacing-md);
	align-items: flex-end;
}

.gsr-busqueda-filtros label {
	display: flex;
	flex-direction: column;
	gap: var(--gsr-spacing-xs);
	font-size: 12px;
	color: var(--gsr-color-texto-suave);
}

/* FIX 1.3.2: filtro de Transmisión pasa de <select> a checkboxes (se
   puede tildar más de uno) — necesita su propio layout, no el de
   ".gsr-busqueda-filtros label" (columna, pensado para un input debajo de
   una etiqueta), sino una fila de checkboxes cortos. */
.gsr-busqueda-transmision {
	display: flex;
	flex-direction: column;
	gap: var(--gsr-spacing-xs);
	font-size: 12px;
	color: var(--gsr-color-texto-suave);
}

.gsr-busqueda-transmision > label {
	flex-direction: row;
	align-items: center;
	gap: 4px;
	font-size: 13px;
	color: var(--gsr-color-texto);
}

.gsr-busqueda-filtros input,
.gsr-busqueda-filtros select {
	padding: var(--gsr-spacing-sm);
	border: 1px solid var(--gsr-color-borde-input);
	border-radius: var(--gsr-radius-control);
	font-size: 13px;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.gsr-busqueda-filtros button {
	background: var(--gsr-color-verde);
	color: var(--gsr-color-fondo);
	border: none;
	border-radius: var(--gsr-radius-btn);
	padding: 10px 18px;
	font-size: 13px;
	font-weight: 600;
	text-transform: uppercase;
	cursor: pointer;
}

.gsr-busqueda-filtros button:hover,
.gsr-busqueda-filtros button:focus-visible {
	background: var(--gsr-color-verde-medio);
}

.gsr-busqueda-contador {
	font-size: 13px;
	color: var(--gsr-color-texto-suave);
	margin: 0 0 var(--gsr-spacing-md);
}

/**
 * Breakpoint tablet (~768px), nuevo en 1.2.0. Hasta ahora el form de
 * búsqueda solo tenía ajustes para mobile chico (480px/420px en otras
 * secciones) — en tablet los filtros en fila quedaban apretados contra el
 * botón. Se pasa a 2 columnas fijas en vez de "flex-wrap libre" para que
 * el layout sea predecible en ese rango de ancho.
 */
@media (max-width: 768px) {
	.gsr-busqueda-filtros {
		display: grid;
		grid-template-columns: 1fr 1fr;
		align-items: stretch;
	}

	.gsr-busqueda-filtros label {
		width: 100%;
	}

	.gsr-busqueda-filtros button {
		grid-column: 1 / -1;
	}
}

.gsr-busqueda-check {
	flex-direction: row !important;
	align-items: center;
	gap: 4px !important;
	font-size: 13px !important;
	color: var(--gsr-color-texto) !important;
}

/* ==========================================================================
   1.3.4 — Hub de navegación (pestañas server-side)
   Reusa .gsr-tab / .gsr-tab.is-active en 3 contextos: el hub
   (remates-tabs.php), las pestañas Destacadas/Todas de Consignatarias, y
   las pestañas Información/Resultados del detalle de un remate.
   ========================================================================== */

/**
 * FIX 2.3.1: pestañas rediseñadas como píldoras independientes (antes:
 * estilo "carpeta" pegado a una línea inferior compartida) — pedido
 * explícito de seguir "la lógica de colores" de
 * grupoguarino.com.ar/mercados/, que usa exactamente este patrón (fila
 * de botones redondeados, activo relleno, inactivos con borde fino).
 * Mismo componente (.gsr-tabs/.gsr-tab), usado tanto en el hub de
 * navegación (remates-tabs.php) como en el selector de período del
 * Ranking (ranking-listado.php, agregado en 2.3.0).
 */
/**
 * FIX 2.4.6.5: 140px de margen superior arriba de las pestañas del hub —
 * en esa versión vivía en .gsr-cartelera-titulo (el título "Cartelera de
 * Remates Ganaderos [año]" que se mostraba ahí).
 *
 * FIX 2.4.6.7: pedido explícito — se saca ese título de /cartelera/
 * (.gsr-cartelera-titulo queda sin uso, se borra). El margen se muda acá,
 * al wrapper .gsr-cartelera-hub en sí — mismo criterio ya usado en
 * .gsr-remate-detalle/.gsr-remates-archive (padding-top dedicado en la
 * clase del wrapper de la página, no en un elemento de texto puntual que
 * ahora ya no existe).
 *
 * FIX 2.4.6.8: pedido explícito — bajar el margen a 70px en
 * /cartelera/?gsr_vista=proximos. Nota de transparencia de esa versión:
 * .gsr-cartelera-hub es el wrapper de TODO el hub de pestañas
 * (Shortcodes::render_hub()) y no distingue entre vistas — Próximos,
 * Resultados y Consignatarias comparten la misma clase, así que el valor
 * aplicaba a las tres, no solo a "proximos".
 *
 * FIX 2.4.6.9: pedido explícito — "estandarizar los márgenes superiores"
 * en las 4 URLs de /cartelera/ (sin vista, proximos, resultados,
 * consignatarias) a 50px. Esto confirma que el criterio de 2.4.6.8 (un
 * único valor para las 3 vistas del hub, vía esta misma clase compartida)
 * era el que se buscaba — acá directamente se pide el mismo margen para
 * las 4, así que sigue sin hacer falta una clase modificadora por vista.
 *
 * FIX 2.4.7.0: pedido explícito — bajar el margen a 40px en
 * "https://www.grupoguarino.com.ar/cartelera (todas sus vistas)". Mismo
 * criterio que 2.4.6.9: un único valor vía esta misma clase compartida
 * cubre las 4 URLs (sin vista, proximos, resultados, consignatarias).
 *
 * FIX 2.4.7.1: pedido explícito — baja a 20px, mismo criterio (las 4
 * URLs comparten esta clase).
 */
.gsr-cartelera-hub {
	padding-top: 20px;
}

@media (max-width: 480px) {
	.gsr-cartelera-hub {
		padding-top: 20px;
	}
}

/**
 * FIX 2.4.7.1: pedido explícito — el botón "Ver cartelera de remates"
 * siempre debe tener 20px de margen inferior y 20px de margen superior,
 * dondequiera que se lo use (remate-detalle.php, remates-archive.php,
 * Shortcodes::render_hub()). Clase propia, sin padding lateral, para no
 * interferir con el ancho ya definido por el wrapper de cada página
 * (.gsr-detalle/.gsr-archive/.gsr-cartelera-hub/.gsr-remates-archive).
 *
 * FIX 2.4.7.2: pedido explícito — "siempre tiene que aparecer y estar
 * centrado". El botón es un <a class="gsr-btn"> (inline-block, ver
 * .gsr-btn más arriba), así que centrarlo es responsabilidad del
 * contenedor: text-align:center acá, mismo criterio ya usado para
 * centrar .gsr-btn en .gsr-consignataria-ver-mas.
 */
.gsr-ver-cartelera-nav {
	margin: 20px 0;
	text-align: center;
}

/**
 * FIX 2.4.6.5: banners de auspicio (BannerRepository::render_seccion()).
 * Feature nueva — no existe en el plugin de Precios de referencia (se buscó
 * "banner|auspicio|sponsor|patrocin" en todo guarino-precios-hacienda-ref
 * y no hay coincidencias), así que este componente se diseñó desde cero
 * siguiendo la especificación literal del pedido: la imagen "nunca se
 * recorta ni se deforma" (siempre completa, dentro del ancho normal de la
 * sección) y respeta el ancho/margen ya definido por .gsr-detalle/
 * .gsr-archive/.gsr-cartelera-hub — no agrega padding lateral propio.
 *
 * Banner de auspicio: ancho completo, se apilan verticalmente si hay más
 * de uno activo en la sección.
 * Logo de auspiciante: fila horizontal, hasta 4 por línea (según ancho
 * disponible), alineados a la izquierda si es uno solo.
 */
/**
 * FIX 2.4.6.6: pedido explícito — "siempre con 30px de margen tanto
 * superior como inferior para no superponerse a ningún bloque o diseño",
 * ahora que un banner puede aparecer en 2 lugares distintos de la página
 * (debajo del header o arriba del pre-footer, ver BannerRepository::
 * UBICACION_HEADER/UBICACION_PRE_FOOTER) — antes solo tenía margen
 * inferior porque solo podía aparecer arriba de una sección.
 */
.gsr-banners {
	display: flex;
	flex-direction: column;
	gap: var(--gsr-spacing-md);
	margin: 30px 0;
}

.gsr-banners-item-ancho {
	display: block;
}

.gsr-banners-item-ancho img {
	display: block;
	width: 100%;
	height: auto;
	border-radius: var(--gsr-radius-card);
}

.gsr-banners-logos {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--gsr-spacing-lg);
}

.gsr-banners-item-logo {
	display: inline-flex;
}

.gsr-banners-item-logo img {
	display: block;
	width: auto;
	height: auto;
	max-width: 200px;
	max-height: 100px;
	object-fit: contain;
}

/**
 * FIX 2.4.6.6: aviso legal centrado — pedido explícito, "como está en el
 * plug in de precios mag" (ver Shortcodes::aviso_legal_remates() para la
 * nota de que el texto exacto no está en la copia local de referencia;
 * este estilo toma como base .rmag-nota-precios, la nota chica/itálica
 * más parecida que sí existe ahí).
 *
 * FIX 2.4.6.7: pedido explícito — el texto pasa de centrado a
 * justificado ("justificado y a la izquierda": text-align:justify ya
 * deja la última línea, la que no llega a completar el ancho, alineada a
 * la izquierda por comportamiento normal de CSS — no hace falta una
 * regla aparte para eso). El bloque en sí sigue centrado en la página
 * (margin:auto + max-width, sin cambios), solo cambia la alineación del
 * texto ADENTRO del bloque.
 *
 * FIX 2.4.6.8: pedido explícito — "justificarlo al ancho de las tablas
 * del plug in". El max-width pasa de 720px (valor arbitrario) a
 * var(--gsr-detalle-max-width), la misma variable que define el ancho de
 * .gsr-detalle/.gsr-archive (y, adentro de esos wrappers, el ancho real
 * de .gsr-detalle-tabla, que es width:100% de ese contenedor) — así el
 * aviso queda exactamente tan ancho como las tablas del plugin, no un
 * valor propio desalineado. (FIX 2.5.0.1: la variable en sí pasa de
 * 900px a 1140px — ver docblock completo donde se define, arriba en este
 * mismo archivo.)
 */
.gsr-aviso-legal {
	max-width: var(--gsr-detalle-max-width);
	margin: 30px auto 0;
	padding-top: var(--gsr-spacing-md);
	border-top: 1px solid var(--gsr-color-borde-suave);
	text-align: justify;
	font-size: 12px;
	font-style: italic;
	line-height: 1.5;
	color: var(--gsr-color-texto-suave);
}

.gsr-tabs {
	display: flex;
	flex-wrap: wrap;
	gap: var(--gsr-spacing-sm);
	margin-bottom: var(--gsr-spacing-lg);
}

.gsr-tab {
	display: inline-flex;
	align-items: center;
	min-height: 40px;
	padding: var(--gsr-spacing-sm) var(--gsr-spacing-lg);
	font-size: 13px;
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	text-decoration: none;
	color: var(--gsr-color-verde-suave);
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde);
	border-radius: 9px;
	transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}

/* FIX 1.3.5: !important — mismo motivo que .gsr-card-cta más arriba, es
   la pestaña activa (el segundo elemento de marca más visible del
   frontend), y varios temas traen su propio ".is-active" genérico con
   igual especificidad. */
.gsr-tab.is-active {
	background: var(--gsr-color-verde-medio) !important;
	color: var(--gsr-color-fondo) !important;
	border-color: var(--gsr-color-verde-medio) !important;
}

.gsr-tab:hover,
.gsr-tab:focus-visible {
	background: var(--gsr-color-verde-claro);
	color: var(--gsr-color-verde-medio);
}

.gsr-tab.is-active:hover,
.gsr-tab.is-active:focus-visible {
	background: var(--gsr-color-verde);
	color: var(--gsr-color-fondo);
}

/* Kicker "tipo de remate" — arriba del título, en cartelera y en el
   detalle (mismo criterio visual que un eyebrow/overline tipográfico). */
/**
 * FIX 2.4.4: color y letter-spacing alineados a .rmag-kicker de Precios
 * (frontend.css: 12px/600, letter-spacing 1.5px, color secundario —
 * --rmag-secundario, el mismo verde que --gsr-color-verde-suave desde
 * 2.3.1). Antes usaba dorado — en Precios el dorado (acento) es solo
 * para la fecha/hero, no para el kicker de categoría.
 */
/**
 * FIX 2.4.7.7: pedido explícito — el kicker (tipo de remate) pasa de ser
 * su propio <p> (línea aparte, debajo del breadcrumb "Remate") a vivir
 * como <span> DENTRO del mismo <p class="gsr-detalle-breadcrumb">
 * ("Remate: REMATE ESPECIAL" en una sola línea) — ver remate-detalle.php.
 * `margin-bottom` no tiene efecto en un elemento inline, así que se saca
 * (quedaba como CSS muerto); el resto de la tipografía (tamaño, peso,
 * mayúsculas, letter-spacing, color) no cambia.
 */
.gsr-card-kicker {
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 1.5px;
	color: var(--gsr-color-verde-suave);
}

.gsr-detalle-kicker {
	font-size: 12px;
}

/* ==========================================================================
   1.3.4 — Tarjetas de resumen (stat cards)
   Reusadas en remate-detalle.php (resumen del resultado) y
   consignataria-detalle.php (próximos/resultados).
   ========================================================================== */

.gsr-stat-cards {
	display: flex;
	flex-wrap: wrap;
	gap: var(--gsr-spacing-md);
	margin-bottom: var(--gsr-spacing-lg);
}

.gsr-stat-card {
	flex: 1 1 140px;
	display: flex;
	flex-direction: column;
	gap: 2px;
	padding: var(--gsr-spacing-md) var(--gsr-spacing-lg);
	/* FIX 2.4.6: !important — pedido explícito ("que sean verdes") sobre
	   /remates/7772/, mismo criterio que .gsr-card-cta (FIX 1.3.5): el
	   componente ya era verde/verde-claro, pero se blinda con !important
	   para que ningún selector del tema con más especificidad pueda
	   pisarlo, igual que ya se hace en otros componentes de marca. */
	background: var(--gsr-color-verde-claro) !important;
	border-radius: var(--gsr-radius-card);
	border: 1px solid var(--gsr-color-borde);
}

.gsr-stat-card-num {
	font-size: 22px;
	font-weight: 700;
	color: var(--gsr-color-verde) !important;
	line-height: 1.2;
}

/**
 * FIX 2.4.9.2: pedido explícito — "cuando ponemos '(anunciadas)' este
 * texto al menos en un 20% más chico". 17px sobre los 22px de
 * .gsr-stat-card-num es ~23% más chico (cumple el mínimo pedido). Peso
 * normal (no 700) para que se note como una aclaración secundaria, no
 * como parte del número principal — mismo color heredado (verde), sin
 * tocarlo.
 */
.gsr-stat-card-num-sufijo {
	font-size: 17px;
	font-weight: 400;
}

/**
 * FIX 2.4.6.1: tercer renglón de la tarjeta "Fecha" — la hora, como un
 * solo texto ("14:00 h.") en un único span (ya no número grande + label
 * chica en dos estilos distintos, como en 2.4.6) — pedido explícito de
 * "misma tipografía y tamaño" entre el valor y la unidad.
 */
.gsr-stat-card-hora {
	font-size: 13px;
	font-weight: 600;
	color: var(--gsr-color-texto-suave);
	margin-top: 2px;
}

/**
 * FIX 2.5.0.9: tercer renglón de la tarjeta "Informados" — la diferencia
 * contra lo anunciado (ej. "+15 vs. anunciados"). Mismo tamaño/peso que
 * .gsr-stat-card-hora (tercer renglón ya existente, en la tarjeta de
 * Fecha) por consistencia visual entre tarjetas, como clase propia (no se
 * reusa .gsr-stat-card-hora tal cual) para que el nombre no confunda a
 * futuro sobre qué dato muestra cada una.
 */
.gsr-stat-card-diferencia {
	font-size: 13px;
	font-weight: 600;
	color: var(--gsr-color-texto-suave);
	margin-top: 2px;
}

/*
 * FIX 2.5.0.6: .gsr-stat-card-horarios-lista (y sus sub-clases
 * .gsr-stat-card-horarios-hora/-item-titulo) quedaron sin uso — el
 * desglose de horarios dentro de la tarjeta de Fecha se sacó (pedido
 * explícito: "sacar 11:00 HS.Haciendas Generales... solo dejar 11 y
 * 14:30 h"), esa información ahora vive en el <h1> del título (ver
 * .gsr-detalle-title-horarios más arriba). Se eliminan las reglas —
 * mismo criterio de "no dejar CSS muerto" de siempre.
 */

/**
 * FIX 2.4.3: variante para cuando el valor de la tarjeta es un nombre
 * (ej. la consignataria en el resumen de arriba de remate-detalle.php) en
 * vez de un número corto — 22px/700 se ve desproporcionado y puede
 * quebrar mal en tarjetas de 140px con un nombre largo. Mismo color y
 * mismo componente, tipografía más chica y sin forzar una sola línea.
 */
.gsr-stat-card-num--texto {
	font-size: 15px;
	font-weight: 600;
	line-height: 1.3;
}

.gsr-stat-card-lbl {
	font-size: 11px;
	text-transform: uppercase;
	letter-spacing: 0.3px;
	color: var(--gsr-color-texto-suave);
}

/* ==========================================================================
   2.4.9.3 — Shortcode [analisis_general_remates]
   Pedido explícito: "shortcode para poder elegir rango de fechas,
   consignatarias, provincia, cabezas, razas, cabañas... y tener una opcion
   nueva de analisis y vista simple en front". Reusa .gsr-busqueda y
   .gsr-stat-cards/.gsr-listado-fila tal cual (mismos componentes que
   busqueda-resultados.php y remate-detalle.php) — acá solo lo específico
   de este template: el aviso de "hay más remates" y las dos tablitas de
   top 5.
   ========================================================================== */

.gsr-analisis-general-aviso {
	margin: 0 0 var(--gsr-spacing-md);
	padding: var(--gsr-spacing-sm) var(--gsr-spacing-md);
	background: var(--gsr-color-fondo-suave, #f5f5f5);
	border-left: 3px solid var(--gsr-color-verde);
	font-size: 13px;
	color: var(--gsr-color-texto-suave);
}

.gsr-analisis-general-tops {
	display: flex;
	flex-wrap: wrap;
	gap: var(--gsr-spacing-lg);
	margin-bottom: var(--gsr-spacing-lg);
}

.gsr-analisis-general-top {
	flex: 1 1 260px;
	border-collapse: collapse;
}

.gsr-analisis-general-top caption {
	text-align: left;
	font-size: 13px;
	font-weight: 700;
	color: var(--gsr-color-verde);
	margin-bottom: var(--gsr-spacing-sm);
}

.gsr-analisis-general-top td {
	padding: 6px 8px;
	border-bottom: 1px solid var(--gsr-color-borde);
	font-size: 14px;
}

.gsr-analisis-general-top td:last-child {
	text-align: right;
	font-weight: 600;
	color: var(--gsr-color-verde);
	white-space: nowrap;
}

/* ==========================================================================
   1.3.4 — Procedencia / confianza del resultado
   ========================================================================== */

.gsr-resultado-procedencia {
	margin-top: var(--gsr-spacing-lg);
	padding-top: var(--gsr-spacing-md);
	border-top: 1px dashed var(--gsr-color-borde);
	font-size: 12px;
	line-height: 1.6;
	color: var(--gsr-color-texto-suave);
}

.gsr-resultado-parcial {
	color: var(--gsr-color-badge-reprogramado-texto);
	font-weight: 600;
}

/* FIX 1.3.5: la sección "1.3.4 — Calendario mensual + agenda" (clases
   .gsr-calendario-*) se borró entera junto con el shortcode, el método
   Shortcodes::render_calendario() y su template — pedido explícito del
   usuario de sacar el formato calendario del frontend. */

/* ==========================================================================
   1.3.4 — Consignatarias (directorio + buscador progresivo + ficha)
   ========================================================================== */

.gsr-consignatarias-buscador {
	position: relative;
	margin-bottom: var(--gsr-spacing-lg);
}

/**
 * FIX 2.4.6.9: pedido explícito — botones "Buscar"/"Limpiar" al lado del
 * input (ver consignatarias-listado.php y public-autocomplete.js). Fila
 * flex nueva que agrupa input + los 2 botones; el input se queda con el
 * mismo max-width:420px de siempre (gana min-width:0 para poder
 * angostarse en la fila flex sin desbordar en pantallas chicas), los
 * botones nunca se achican (flex-shrink:0 en .gsr-btn-buscador-accion).
 */
.gsr-consignatarias-buscador-fila {
	display: flex;
	align-items: stretch;
	gap: var(--gsr-spacing-sm);
	flex-wrap: wrap;
}

.gsr-consignatarias-buscador input[type="search"] {
	width: 100%;
	max-width: 420px;
	min-width: 0;
	flex: 1 1 240px;
	padding: 10px var(--gsr-spacing-md);
	border: 1px solid var(--gsr-color-borde-input);
	border-radius: var(--gsr-radius-control);
	font-size: 14px;
}

.gsr-consignatarias-buscador input[type="search"]:focus-visible {
	border-color: var(--gsr-color-verde-medio);
	box-shadow: 0 0 0 3px var(--gsr-color-verde-claro);
	outline: none;
}

.gsr-btn-buscador-accion {
	flex-shrink: 0;
	cursor: pointer;
	font-family: inherit;
}

.gsr-btn-buscador-limpiar {
	background: transparent;
	color: var(--gsr-color-texto-suave);
	border: 1px solid var(--gsr-color-borde-input);
}

.gsr-btn-buscador-limpiar:hover,
.gsr-btn-buscador-limpiar:focus-visible {
	color: var(--gsr-color-texto);
	border-color: var(--gsr-color-borde);
}

.gsr-consignatarias-sugerencias {
	position: absolute;
	z-index: 20;
	top: calc(100% + 4px);
	left: 0;
	width: 100%;
	max-width: 420px;
	max-height: 320px;
	overflow-y: auto;
	list-style: none;
	margin: 0;
	padding: 4px;
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-input);
	border-radius: var(--gsr-radius-control);
	box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
}

.gsr-consignatarias-sugerencias li {
	border-radius: var(--gsr-radius-control);
}

.gsr-consignatarias-sugerencias a {
	display: block;
	padding: var(--gsr-spacing-sm) var(--gsr-spacing-md);
	font-size: 13px;
	color: var(--gsr-color-texto);
	text-decoration: none;
	border-radius: var(--gsr-radius-control);
}

.gsr-consignatarias-sugerencias li.is-activo a,
.gsr-consignatarias-sugerencias a:hover,
.gsr-consignatarias-sugerencias a:focus-visible {
	background: var(--gsr-color-verde-claro);
}

.gsr-consignatarias-sugerencia-loc {
	color: var(--gsr-color-texto-tenue);
	font-size: 12px;
}

/**
 * FIX 2.4.8.3: pedido explícito, punto 7 — menú de paginación (30 por
 * página) para consignatarias y cabañas, ver
 * Shortcodes::render_paginacion(). Una sola clase compartida por las 2
 * vistas — mismo criterio que .gsr-consignatarias-buscador/.gsr-cabanas-
 * buscador, que también comparten estructura entre sí.
 */
.gsr-paginacion {
	display: flex;
	align-items: center;
	justify-content: center;
	flex-wrap: wrap;
	gap: var(--gsr-spacing-sm);
	margin-top: var(--gsr-spacing-xl);
	padding-top: var(--gsr-spacing-lg);
	border-top: 1px solid var(--gsr-color-borde);
}

.gsr-paginacion-link {
	display: inline-block;
	padding: 6px 12px;
	font-size: 13px;
	font-weight: 600;
	color: var(--gsr-color-verde);
	text-decoration: none;
	border: 1px solid var(--gsr-color-verde);
	border-radius: var(--gsr-radius-btn);
	white-space: nowrap;
}

.gsr-paginacion-link:hover,
.gsr-paginacion-link:focus-visible {
	background: var(--gsr-color-verde);
	color: #fff;
}

.gsr-paginacion-link--deshabilitado {
	color: var(--gsr-color-texto-tenue);
	border-color: var(--gsr-color-borde);
	cursor: default;
}

.gsr-paginacion-link--deshabilitado:hover,
.gsr-paginacion-link--deshabilitado:focus-visible {
	background: transparent;
	color: var(--gsr-color-texto-tenue);
}

.gsr-paginacion-info {
	font-size: 13px;
	font-weight: 600;
	color: var(--gsr-color-texto-suave);
	white-space: nowrap;
	padding: 0 var(--gsr-spacing-sm);
}

@media (max-width: 480px) {
	.gsr-paginacion {
		gap: var(--gsr-spacing-xs);
	}

	.gsr-paginacion-link,
	.gsr-paginacion-info {
		font-size: 12px;
		padding: 5px 8px;
	}
}

.gsr-consignatarias-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: var(--gsr-spacing-lg);
}

/**
 * FIX 2.4.9.5: se había agregado acá un encabezado que separaba
 * visualmente el bucket "Sin especificar" (consignatarias/cabañas sin
 * ningún remate asociado) del resto del listado.
 *
 * FIX 2.4.9.6: pedido explícito — se elimina esa categoría/encabezado
 * visual por completo ("eliminar el sin especificar, no es necesario...
 * sin titulo"). El orden en sí (esas entidades al final, alfabético
 * descendente) sigue igual — ver
 * Shortcodes::ordenar_directorio_por_actividad() — solo se saca la
 * clase .gsr-listado-categoria-titulo, que quedó sin ningún llamador en
 * consignatarias-listado.php ni cabanas-listado.php.
 */

.gsr-consignataria-card {
	display: flex;
	flex-direction: column;
	gap: 4px;
	padding: var(--gsr-spacing-lg);
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde);
	border-radius: var(--gsr-radius-card);
}

/**
 * FIX 2.4.0: pedido explícito ("el logo debe estar sobre color blanco, y
 * más grande") — antes el logo se mostraba sobre un fondo verde claro
 * (pensado originalmente para que un logo sin fondo propio no quedara
 * "flotando" sobre blanco, pero muchos logos reales ya vienen recortados
 * para verse sobre blanco, y el tinte verde los deslucía) y a 64×64px.
 * Ahora: fondo blanco explícito + un borde fino propio (para que el
 * recuadro del logo se siga distinguiendo de la tarjeta, que también es
 * blanca) + tamaño +50% (64px → 96px).
 */
/* FIX 2.4.6.1: 96px → 128px — pedido explícito ("Logo más grande") sobre
   el listado de consignatarias. */
.gsr-consignataria-card-logo {
	width: 128px;
	height: 128px;
	object-fit: contain;
	border-radius: var(--gsr-radius-control);
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-suave);
	padding: 8px;
	margin-bottom: var(--gsr-spacing-sm);
}

.gsr-consignataria-card-logo--placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--gsr-color-verde);
	font-size: 40px;
}

/**
 * FIX 2.4.0: +14% (15px → 17px) y peso 600 — pedido explícito ("mejorar
 * el tamaño y jerarquía de la información"); a la par del logo más
 * grande, el nombre quedaba desproporcionadamente chico como para ser el
 * dato principal de la tarjeta.
 *
 * FIX 2.4.6.9: pedido explícito — 20px de margen superior (separa el
 * nombre del logo/placeholder de arriba, antes pegados con margin:0).
 *
 * FIX 2.4.7.0: pedido explícito — "mejorar el interespaciado" de la card
 * ("10px de margen" entre nombre / línea de próximos remates / línea de
 * resultados publicados). Se agrega 10px de margen INFERIOR acá (antes
 * 0, dependía solo del gap:4px de .gsr-consignataria-card) — mismo
 * criterio explícito de "10px" que se aplica ahora también a
 * .gsr-consignataria-card-loc/-metricas más abajo, para que las 3 líneas
 * de la card queden separadas de forma pareja.
 */
.gsr-consignataria-card-nombre {
	margin: 20px 0 10px;
	font-size: 17px;
	font-weight: 600;
}

.gsr-consignataria-card-nombre a {
	color: var(--gsr-color-texto);
	text-decoration: none;
}

.gsr-consignataria-card-nombre a:hover,
.gsr-consignataria-card-nombre a:focus-visible {
	color: var(--gsr-color-verde);
}

/**
 * FIX 2.4.6.6: pedido explícito — "Capital Federal" (la localidad) pasa a
 * negrita, con el mismo margen que ya tenía "1 resultado publicado"
 * (.gsr-consignataria-card-metricas--resultado, ver más abajo:
 * spacing-sm + 10px) en vez del margin:0 que tenía antes.
 *
 * FIX 2.4.7.0: pedido explícito — "unificar criterios, lectura y color"
 * de esta card. Hasta acá la localidad, "X próximos remates" y "Y
 * resultados publicados" tenían 3 tratamientos distintos (peso 700/700/
 * 700 pero 3 colores distintos: texto-tenue/texto-suave/texto, y 3
 * anchos de margen calculados con calc()). Se unifican las 3 líneas al
 * mismo color (texto-suave, el tono "meta" que ya usaba la línea del
 * medio), mismo peso (600 — se baja un escalón de 700: con las 3 líneas
 * iguales, un peso tan fuerte en las tres competía visualmente con el
 * nombre, que es el dato principal) y el mismo margen de 10px pedido
 * explícito (antes calc(spacing-sm + 10px) = 18px, un valor mayor al
 * pedido literal). Nota de transparencia: esto es una decisión de
 * criterio de diseño (unificar = misma jerarquía visual en las 3 líneas,
 * en vez de mantener una escalonada); si la intención era otra
 * (mantener alguna línea destacada, por ejemplo "resultados publicados"
 * como dato más fuerte), avisame y lo ajusto en la próxima entrega.
 */
.gsr-consignataria-card-loc,
.gsr-consignataria-card-metricas {
	margin: 0 0 10px;
	font-size: 12px;
	font-weight: 600;
	color: var(--gsr-color-texto-suave);
}

/**
 * FIX 2.4.6.3/2.4.6.6: esta modificadora daba a "Y resultados publicados"
 * un tratamiento distinto (negrita + color más oscuro + margen propio).
 *
 * FIX 2.4.7.0: pedido explícito de unificar color/criterio — ver docblock
 * de .gsr-consignataria-card-loc/-metricas más arriba. Esta línea ya
 * comparte esa misma regla (trae ambas clases en el HTML, ver
 * consignatarias-listado.php); esta modificadora queda sin overrides
 * propios — se documenta en vez de borrar el selector del HTML, por si
 * en el futuro se pide volver a diferenciarla.
 */

/* FIX 2.4.4: padding-bottom + borde, mismo criterio que .gsr-detalle-header
   y .gsr-archive-header — ver docblock en .gsr-detalle-header. */
.gsr-consignataria-header {
	display: flex;
	align-items: center;
	gap: var(--gsr-spacing-lg);
	margin-bottom: 20px;
	padding-bottom: 14px;
	border-bottom: 3px solid var(--gsr-color-verde-medio);
}

/* FIX 2.4.0: mismo criterio que .gsr-consignataria-card-logo — fondo
   blanco (antes verde claro) + borde propio, y más grande (88px → 112px,
   pedido explícito: "el logo debe estar sobre color blanco y más
   grande"). Es el logo de cabecera de la ficha pública de consignataria
   (consignataria-detalle.php), el elemento visual más grande de esa
   página — tiene sentido que sea el más prominente.
 *
 * FIX 2.4.5: 112px → 144px — pedido explícito ("Logo más grande") sobre
 * esta misma página. Esta clase también viste el logo de cabecera de
 * remate-detalle.php desde 2.4.4 (mismo criterio: "un solo tamaño
 * 'grande' para el logo de consignataria en todo el plugin"), así que
 * el aumento se propaga ahí también a propósito — es consistente con el
 * pedido de esta versión de unificar estilos en todo el plugin. */
.gsr-consignataria-logo {
	width: 144px;
	height: 144px;
	object-fit: contain;
	border-radius: var(--gsr-radius-control);
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-suave);
	padding: 10px;
	flex-shrink: 0;
}

.gsr-consignataria-logo--placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--gsr-color-verde);
	font-size: 44px;
}

/* FIX 2.4.5: la tabla de Contacto (Sitio web/Teléfono/Email) se movió de
 * su propia sección más abajo a JUSTO DEBAJO del logo, dentro de
 * .gsr-consignataria-header — pedido explícito. Achicada respecto de
 * .gsr-detalle-tabla a secas porque ahora convive con el título y la
 * ubicación en la misma columna, con menos aire alrededor; separada de
 * esas líneas con un margen superior propio. */
.gsr-consignataria-contacto {
	margin-top: var(--gsr-spacing-sm);
	max-width: 320px;
	font-size: 13px;
}

.gsr-consignataria-contacto td {
	padding: 4px 0;
}

@media (max-width: 480px) {
	.gsr-consignatarias-grid {
		grid-template-columns: 1fr;
	}

	.gsr-consignataria-header {
		flex-direction: column;
		align-items: flex-start;
	}
}

/* ==========================================================================
   FIX 2.4.7.3 — Cabañas y estancias (directorio + buscador progresivo + ficha)
   Pedido explícito: "armar un listado de cabañas y estancias [...] look and
   feel igual y con el mismo funcionamiento que tiene el de consignatarias".
   Bloque calcado 1:1 del de "1.3.4 — Consignatarias" de acá arriba —
   mismos valores de spacing/radius/color, mismo layout de grilla/tarjeta/
   buscador/ficha, con el sufijo -cabana(s) en vez de -consignataria(s). No
   se reutilizan las clases -consignataria(s) directamente porque el
   listado de cabañas es un directorio propio, con sus propias tarjetas en
   el DOM al mismo tiempo que las de consignatarias pueden estar en otra
   pestaña — mantenerlas separadas evita que un ajuste futuro pedido para
   uno de los dos directorios termine afectando al otro sin querer.
   ========================================================================== */

.gsr-cabanas-buscador {
	position: relative;
	margin-bottom: var(--gsr-spacing-lg);
}

.gsr-cabanas-buscador-fila {
	display: flex;
	align-items: stretch;
	gap: var(--gsr-spacing-sm);
	flex-wrap: wrap;
}

.gsr-cabanas-buscador input[type="search"] {
	width: 100%;
	max-width: 420px;
	min-width: 0;
	flex: 1 1 240px;
	padding: 10px var(--gsr-spacing-md);
	border: 1px solid var(--gsr-color-borde-input);
	border-radius: var(--gsr-radius-control);
	font-size: 14px;
}

.gsr-cabanas-buscador input[type="search"]:focus-visible {
	border-color: var(--gsr-color-verde-medio);
	box-shadow: 0 0 0 3px var(--gsr-color-verde-claro);
	outline: none;
}

.gsr-cabanas-sugerencias {
	position: absolute;
	z-index: 20;
	top: calc(100% + 4px);
	left: 0;
	width: 100%;
	max-width: 420px;
	max-height: 320px;
	overflow-y: auto;
	list-style: none;
	margin: 0;
	padding: 4px;
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-input);
	border-radius: var(--gsr-radius-control);
	box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
}

.gsr-cabanas-sugerencias li {
	border-radius: var(--gsr-radius-control);
}

.gsr-cabanas-sugerencias a {
	display: block;
	padding: var(--gsr-spacing-sm) var(--gsr-spacing-md);
	font-size: 13px;
	color: var(--gsr-color-texto);
	text-decoration: none;
	border-radius: var(--gsr-radius-control);
}

.gsr-cabanas-sugerencias li.is-activo a,
.gsr-cabanas-sugerencias a:hover,
.gsr-cabanas-sugerencias a:focus-visible {
	background: var(--gsr-color-verde-claro);
}

.gsr-cabanas-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: var(--gsr-spacing-lg);
}

.gsr-cabana-card {
	display: flex;
	flex-direction: column;
	gap: 4px;
	padding: var(--gsr-spacing-lg);
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde);
	border-radius: var(--gsr-radius-card);
}

.gsr-cabana-card-logo {
	width: 128px;
	height: 128px;
	object-fit: contain;
	border-radius: var(--gsr-radius-control);
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-suave);
	padding: 8px;
	margin-bottom: var(--gsr-spacing-sm);
}

.gsr-cabana-card-logo--placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--gsr-color-verde);
	font-size: 40px;
}

.gsr-cabana-card-nombre {
	margin: 20px 0 10px;
	font-size: 17px;
	font-weight: 600;
}

.gsr-cabana-card-nombre a {
	color: var(--gsr-color-texto);
	text-decoration: none;
}

.gsr-cabana-card-nombre a:hover,
.gsr-cabana-card-nombre a:focus-visible {
	color: var(--gsr-color-verde);
}

.gsr-cabana-card-loc,
.gsr-cabana-card-metricas {
	margin: 0 0 10px;
	font-size: 12px;
	font-weight: 600;
	color: var(--gsr-color-texto-suave);
}

.gsr-cabana-header {
	display: flex;
	align-items: center;
	gap: var(--gsr-spacing-lg);
	margin-bottom: 20px;
	padding-bottom: 14px;
	border-bottom: 3px solid var(--gsr-color-verde-medio);
}

.gsr-cabana-logo {
	width: 144px;
	height: 144px;
	object-fit: contain;
	border-radius: var(--gsr-radius-control);
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-suave);
	padding: 10px;
	flex-shrink: 0;
}

.gsr-cabana-logo--placeholder {
	display: flex;
	align-items: center;
	justify-content: center;
	color: var(--gsr-color-verde);
	font-size: 44px;
}

@media (max-width: 480px) {
	.gsr-cabanas-grid {
		grid-template-columns: 1fr;
	}

	.gsr-cabana-header {
		flex-direction: column;
		align-items: flex-start;
	}
}

/* ==========================================================================
   FIX 2.0.7 — Fila de remate (cartelera "Próximos remates" y "Resultados")
   Pedido explícito: reorganizar la cartelera/listado de remates con una
   fila horizontal de 4 sectores (modalidad | información | logo de la
   consignataria | cantidad/estado), agrupada por día, siguiendo una
   especificación de proporciones/jerarquía/responsive tomada como
   referencia ESTRUCTURAL de un sitio externo del sector — NO se copia su
   identidad visual: acá se siguen usando los mismos --gsr-color-*,
   --gsr-font-family y --gsr-spacing-* ya definidos en :root, no colores
   ni tipografías nuevas.

   Clases nuevas y propias (.gsr-fila-remate-*, .gsr-fila-dia-header),
   completamente separadas de .gsr-listado-fila/.gsr-remate-card — esas
   dos siguen intactas y las sigue usando listado-agrupado.php,
   consignataria-detalle.php y busqueda-resultados.php sin ningún cambio.

   Estructura con CSS Grid + grid-template-areas (no posiciones
   absolutas): el orden de columnas se resuelve por breakpoint
   reasignando las áreas, no moviendo el HTML.

   FIX 2.0.8 — pedido explícito de ajustes sobre esta misma fila:
   - la fecha ahora incluye la hora en la misma línea;
   - el link ya no muestra el título del remate — muestra el "tipo de
     remate" (.gsr-fila-tipo, renombrada desde .gsr-fila-titulo), el
     href sigue siendo el permalink del remate;
   - la ubicación pasa a su propia línea destacada (.gsr-fila-ubicacion,
     nueva), 5% más grande que el tamaño que tenía .gsr-fila-titulo;
   - la consignataria pasa a su propia línea en negrita
     (.gsr-fila-consignataria, nueva);
   - la raza se muestra con el label "Raza:" adelante (ver template);
   - la cantidad ("1.300 cab.") sube 10% de tamaño — para que no se
     superponga con el logo, la columna del logo se angosta un poco y el
     logo se alinea a la izquierda de su columna (antes centrado);
   - se agrega .gsr-fila-ver ("Ver resultados", solo en
     resultados-listado.php);
   - mobile: refuerzo de word-break/overflow-wrap en los textos para que
     nombres largos no desborden ni se superpongan en pantallas chicas.

   FIX 2.0.9 — pedido explícito de ajustes sobre esta misma fila:
   - el link ya no muestra SOLO el tipo de remate — muestra tipo de
     remate + título juntos (ver template), cuando hay las dos cosas;
   - se agrega una línea de texto visible con la modalidad del remate
     (streaming/a campo/etc. — antes solo estaba como ícono con
     tooltip), reusando .gsr-fila-descripcion, sin clase nueva;
   - "Resultado disponible"/"Ver más detalles" dejan de ser un tag
     estático en .gsr-fila-tags: pasan a ser un link real en
     .gsr-fila-cantidad que funciona como botón (.gsr-fila-ver ahora
     tiene fondo/borde/padding en vez de ser solo texto subrayado), con
     una variante .gsr-fila-ver--disponible (dorado) cuando el resultado
     ya está publicado — mismo criterio de color que .gsr-tag-resultado.
     Se agrega también a cartelera-tarjetas.php (antes solo estaba en
     resultados-listado.php).
   - .gsr-fila-ver pasa de white-space:nowrap a permitir wrap
     (word-break/normal) — el texto del botón ("Resultado disponible")
     es más largo que "Ver resultados" y la columna de cantidad es
     angosta (104–116px); con nowrap se salía de la columna.
   ========================================================================== */

.gsr-fila-lista {
	display: flex;
	flex-direction: column;
}

.gsr-fila-dia-header {
	font-family: var(--gsr-font-family);
	font-size: clamp(1.1rem, 1.6vw, 1.35rem);
	font-weight: 700;
	color: var(--gsr-color-texto);
	margin: var(--gsr-spacing-xl) 0 var(--gsr-spacing-sm);
	padding-bottom: var(--gsr-spacing-sm);
	border-bottom: 2px solid var(--gsr-color-borde);
}

.gsr-fila-dia-header:first-child {
	margin-top: 0;
}

/**
 * FIX 2.4.7.4: pedido explícito — "correr el bloque de logos 50px a la
 * izquierda para que nada se pise con nada". Causa raíz del bug
 * reportado ("cuando se suben 2 cabañas o más, se pisan con el dato de
 * cabezas"): desde 2.4.7.3 la columna "logo" puede tener que mostrar el
 * logo de la consignataria MÁS uno por cada cabaña del remate (antes,
 * como máximo, 2 logos en total) — con 3 o más logos angostados por
 * flexbox en los mismos 150px de ancho máximo de siempre, terminaban
 * desbordando hacia la derecha, pisando visualmente la columna de
 * cantidad de cabezas de al lado. La columna "logo" pasa de
 * minmax(90px, 150px) a minmax(90px, 200px) — los 50px de más se los
 * cede la columna "info" (1fr, flexible), así que el bloque de logos
 * gana ancho corriéndose hacia la izquierda, sin invadir la columna fija
 * de cantidad a su derecha.
 *
 * FIX 2.4.7.5: pedido explícito — "quiero que la parte central de los
 * logos se corra 40px más a la izquierda, para darle lugar a los logos
 * a que se agranden un 10%". Mismo mecanismo que 2.4.7.4 (ensanchar el
 * máximo de la columna "logo" corriendo su borde izquierdo, sin tocar
 * el borde derecho contra la columna fija "cantidad"): minmax(90px,
 * 200px) → minmax(90px, 240px), los 40px de más se los vuelve a ceder
 * la columna "info". Validado que ninguna columna se superpone: "info"
 * sigue siendo flexible (1fr) y solo cede ancho máximo cuando sobra
 * espacio de sobra; "cantidad" (116px) no cambia, así que el logo nunca
 * puede invadirla.
 *
 * FIX 2.4.9.4: pedido explícito — "necesito que esto quede más grande,
 * más visible pero que no rompa nada y no superponga ninguna
 * información" (con captura de referencia del listado). Mismo mecanismo
 * de siempre: minmax(90px, 240px) → minmax(90px, 360px), cediendo otra
 * vez desde "info" (1fr), nunca desde "cantidad" (116px, sin cambios).
 * 360px de tope alcanza con margen para el logo más grande posible en
 * este breakpoint (.gsr-fila-logo-consignataria--grande, 344px con el
 * aumento de esta misma versión — ver más abajo) sin que se recorte.
 */
/**
 * FIX 2.5.0.3: pedido explícito — "el bloque [cabezas/badge/'Ver más
 * detalles'] tiene que tener 20px de margen derecho para no estar jugado
 * al borde del ancho... esto debe aplicar a todas estas vistas". El
 * padding horizontal de la fila era simétrico (var(--gsr-spacing-sm),
 * 8px, a los dos lados) — se separa en left/right explícitos, sumando
 * 20px SOLO al lado derecho (8px + 20px = 28px), sin tocar el izquierdo.
 * Esta regla la comparten cartelera-tarjetas.php y resultados-listado.php
 * (mismo .gsr-fila-remate, ver docblock de arriba), así que el cambio ya
 * cubre "todas estas vistas" sin duplicar CSS.
 */
.gsr-fila-remate {
	display: grid;
	grid-template-areas: "modo info logo cantidad";
	grid-template-columns: 44px minmax(220px, 1fr) minmax(90px, 360px) 116px;
	column-gap: var(--gsr-spacing-lg);
	align-items: center;
	min-height: 6rem;
	padding: var(--gsr-spacing-md) calc(var(--gsr-spacing-sm) + 20px) var(--gsr-spacing-md) var(--gsr-spacing-sm);
	border-bottom: 1px solid var(--gsr-color-borde-suave);
}

.gsr-fila-lista > .gsr-fila-remate:last-child {
	border-bottom: none;
}

.gsr-fila-remate:hover,
.gsr-fila-remate:focus-within {
	background: var(--gsr-color-verde-claro);
}

.gsr-fila-remate--destacado {
	border-left: 3px solid var(--gsr-color-dorado);
	padding-left: calc(var(--gsr-spacing-sm) - 3px);
}

/**
 * FIX 2.4.9.3: pedido explícito — "1- ponerlo arriba destacado y por
 * orden (si hay mas de que 2) darle fondo de color claro; 2- opción de
 * destacar solo por color de fondo dentro del listado de la cartelera,
 * para distinguirse del resto". Fondo claro compartido por los dos modos
 * (modo 'arriba' cuando hay más de 2 destacados, modo 'fondo' siempre) —
 * ver cartelera-tarjetas.php para el criterio de cuándo se aplica esta
 * clase. Mismo tono "verde claro" que ya usa el resto del plugin como
 * fondo de acento (.gsr-stat-card, hover de .gsr-fila-remate).
 */
.gsr-fila-remate--destacado-fondo {
	background: var(--gsr-color-verde-claro);
}

/**
 * FIX 2.4.9.8: pedido explícito — "cuando dos o más listados de remate
 * son destacados, separar con al menos 5px entre remate y remate en el
 * listado de cartelera". Hasta acá, dos filas --destacado-fondo
 * consecutivas solo tenían el borde de 1px de .gsr-fila-remate entre
 * medio (sin margen), así que el fondo claro de ambas quedaba pegado,
 * casi fusionado visualmente. El selector de hermano adyacente (+) hace
 * que este margen SOLO aparezca cuando la fila anterior también es
 * --destacado-fondo — no cambia el espaciado del resto del listado.
 */
.gsr-fila-remate--destacado-fondo + .gsr-fila-remate--destacado-fondo {
	margin-top: 5px;
}

/* Columna 1: modalidad / iconos — uno o varios, apilados */
.gsr-fila-modo {
	grid-area: modo;
	min-width: 0;
	height: 100%;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: var(--gsr-spacing-xs);
}

.gsr-fila-modo .dashicons {
	font-size: 20px;
	width: 20px;
	height: 20px;
	color: var(--gsr-color-verde-medio);
}

/* Columna 2: información principal. Orden de líneas (FIX 2.0.8):
   1) fecha + hora; 2) tipo de remate (link al detalle, NO el título del
   remate); 3) ubicación, destacada; 4) consignataria, en negrita;
   5) raza/cabaña, con label "Raza:"; 6) tags de estado. */
.gsr-fila-info {
	grid-area: info;
	min-width: 0;
	display: flex;
	flex-direction: column;
	gap: 2px;
}

/**
 * FIX 2.4.7.5: +10% de tamaño — pedido explícito ("agrandar
 * '11/08/2026 · 14:00 HS.' este texto también un 10% para su mejor
 * visibilización"). Base anterior: clamp(0.72rem, 0.85vw, 0.82rem).
 */
.gsr-fila-fecha {
	font-size: clamp(0.79rem, 0.94vw, 0.9rem);
	font-weight: 700;
	color: var(--gsr-color-verde-medio);
	text-transform: uppercase;
	letter-spacing: 0.3px;
}

/**
 * FIX 2.5.0.1: horarios múltiples opcionales dentro de una misma fecha —
 * ver docblock completo en cartelera-tarjetas.php (bloque
 * $horarios_data).
 *
 * FIX 2.5.0.6: pedido explícito — "no mostrar el título general en el
 * front end, no mostrarlo en la lista de remates de la cartelera, solo
 * mostrar ambos horarios con su respectiva descripción y título [...]
 * ambas líneas deben verse como los demás título, como el título del
 * remate [...] achicarlo un 20% [el interlineado] entre ambas líneas".
 * Hasta 2.5.0.3 esta lista convivía debajo de un .gsr-fila-tipo con el
 * título general/nativo (ambos del mismo tamaño clamp(0.92rem, 1.1vw,
 * 1.05rem)); ahora que esa fila de título se saca por completo (ver
 * cartelera-tarjetas.php), cada renglón de esta lista pasa a ser el
 * título de la fila y toma exactamente el mismo tamaño/peso que
 * .gsr-fila-tipo tenía (clamp(1.05rem, 1.3vw, 1.22rem)/700, ver más abajo
 * en este archivo) — y el interlineado entre renglones baja un 20%
 * respecto del 1.3 anterior (1.3 × 0.8 = 1.04).
 */
/**
 * FIX 2.5.0.7: pedido explícito, sobre esta misma lista en vivo — "achicar
 * el interlineado un 50%" en el primer renglón y "dejar 10 px de margen
 * inferior de este texto" en el segundo (el último). Nota de
 * transparencia: "interlineado" acá se interpreta como el espacio vertical
 * ENTRE los dos renglones de horario apilados — controlado por `gap` en
 * este componente (cada renglón ya usa line-height:1.04, prácticamente el
 * mínimo de una sola línea de texto; bajarlo un 50% adicional —a ~0.52—
 * cortaría ascendentes/descendentes de la tipografía y rompería la
 * legibilidad, que ningún pedido anterior de este plugin sacrificó). Se
 * reduce `gap` 3px → 1.5px (50% exacto del valor vigente desde 2.5.0.6) y
 * se agrega el margen inferior de 10px pedido, para separar el bloque de
 * horarios de lo que venga después en la tarjeta.
 */
.gsr-fila-horarios-lista {
	margin: 4px 0 10px;
	padding: 0;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 1.5px;
}

.gsr-fila-horarios-lista a {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	column-gap: 8px;
	text-decoration: none;
	line-height: 1.04;
}

.gsr-fila-horarios-lista a:hover .gsr-fila-horarios-item-titulo,
.gsr-fila-horarios-lista a:focus-visible .gsr-fila-horarios-item-titulo {
	text-decoration: underline;
}

.gsr-fila-horarios-hora {
	font-size: clamp(1.05rem, 1.3vw, 1.22rem);
	font-weight: 700;
	color: var(--gsr-color-verde);
	white-space: nowrap;
}

.gsr-fila-horarios-item-titulo {
	font-size: clamp(1.05rem, 1.3vw, 1.22rem);
	font-weight: 700;
	color: var(--gsr-color-texto);
	overflow-wrap: break-word;
	word-break: break-word;
}

/**
 * FIX 2.0.8: renombrada desde .gsr-fila-titulo — ya no muestra el título
 * del remate, muestra el "tipo de remate" (ej. "Haciendas Generales").
 * Sigue siendo el link al permalink del remate.
 *
 * FIX 2.3.1: pasa a ser el texto más grande de la columna de información
 * — pedido explícito ("no hay jerarquía visual en los textos") tras
 * revisar el código: .gsr-fila-ubicacion (más abajo) tenía un tamaño
 * clamp mayor que este, invirtiendo la jerarquía real (el tipo/título
 * clickeable de la fila terminaba viéndose más chico que la ubicación).
 * Antes: clamp(0.95rem, 1.1vw, 1.05rem).
 */
.gsr-fila-tipo {
	margin: 0;
	font-size: clamp(1.05rem, 1.3vw, 1.22rem);
	font-weight: 700;
	line-height: 1.25;
	overflow-wrap: break-word;
	word-break: break-word;
}

.gsr-fila-tipo a {
	color: var(--gsr-color-texto);
	text-decoration: none;
}

.gsr-fila-tipo a:hover,
.gsr-fila-tipo a:focus-visible {
	color: var(--gsr-color-verde);
	text-decoration: underline;
}

/**
 * FIX 2.4.9.8: pedido explícito — línea de descripción corta y opcional
 * debajo del título del remate ("ej: 55 toros PP/PC y 350 vientres PP,
 * PC, MAS y generales"). Va entre el título (.gsr-fila-tipo, el elemento
 * más grande) y la ubicación — menos peso que el título, algo más
 * discreta que la ubicación (itálica) para no competir con ninguna de
 * las dos.
 *
 * FIX 2.4.9.9: se renombra de .gsr-fila-descripcion a
 * .gsr-fila-descripcion-corta — pedido explícito de auditoría interna al
 * tocar este bloque para 2.4.9.9: esta clase colisionaba de nombre con
 * OTRA .gsr-fila-descripcion ya existente desde antes de 2.4.9.8 (la de
 * Modalidad/Raza en cartelera-tarjetas.php y resultados-listado.php, ver
 * más abajo), que por ir después en este archivo terminaba pisando el
 * font-size/margin de esta regla en la cascada (mismo selector, misma
 * especificidad, gana el último). No se veía como un bug grave porque
 * los valores eran parecidos, pero no era el tamaño/margen realmente
 * pedido en 2.4.9.8 para esta línea puntual — se corrige separándola en
 * su propia clase, sin tocar la clase preexistente (que sigue igual para
 * Modalidad/Raza).
 */
.gsr-fila-descripcion-corta {
	margin: 2px 0 0;
	font-size: clamp(0.82rem, 0.95vw, 0.9rem);
	font-weight: 400;
	font-style: italic;
	color: var(--gsr-color-texto-suave, #5a6b5c);
	line-height: 1.3;
	overflow-wrap: break-word;
	word-break: break-word;
}

/**
 * FIX 2.4.9.9: pedido explícito — resumen Toros/Vientres/Otros debajo del
 * título en el listado de cartelera, "10% más chico que el título pero
 * acompañando la información". El título (.gsr-fila-tipo) usa
 * clamp(1.05rem, 1.3vw, 1.22rem) — acá se aplica el mismo clamp escalado
 * al 90% (0.945rem/1.17vw/1.098rem, redondeado a 1.1rem el techo).
 */
.gsr-fila-ficha-cabana-resumen {
	margin: 2px 0 0;
	font-size: clamp(0.945rem, 1.17vw, 1.1rem);
	font-weight: 600;
	color: var(--gsr-color-texto);
	line-height: 1.3;
	overflow-wrap: break-word;
	word-break: break-word;
}

/**
 * FIX 2.0.8: ubicación destacada — pedido explícito ("5% más grande").
 * FIX 2.3.1: se achica un escalón por debajo de .gsr-fila-tipo (que pasa
 * a ser el elemento más grande, ver arriba) — quedaba más grande que el
 * título/tipo de la fila, invirtiendo la jerarquía visual real.
 */
.gsr-fila-ubicacion {
	margin: 0;
	font-size: clamp(0.85rem, 1vw, 0.95rem);
	font-weight: 700;
	color: var(--gsr-color-texto);
	line-height: 1.25;
	overflow-wrap: break-word;
	word-break: break-word;
}

/**
 * FIX 2.4.9.1: pedido explícito — nuevo campo "Lugar" (ej: "Sociedad
 * Rural de Cañuelas"), distinto de la Localidad/Provincia. Se muestra
 * debajo de .gsr-fila-ubicacion en el listado, con menos peso visual que
 * ella (no-bold, tamaño más chico, color secundario) — es un dato
 * complementario del "dónde", no reemplaza la jerarquía ya establecida
 * de ubicación > lugar.
 */
.gsr-fila-lugar {
	margin: 2px 0 0;
	font-size: 0.8rem;
	font-weight: 400;
	color: var(--gsr-color-texto-suave);
	line-height: 1.25;
	overflow-wrap: break-word;
	word-break: break-word;
}

/**
 * FIX 2.0.8: consignataria en negrita, línea propia — pedido explícito.
 * FIX 2.3.1: margin-top separa visualmente este grupo "secundario"
 * (consignataria/cabaña/modalidad/raza) del grupo "primario" de arriba
 * (fecha/tipo/ubicación) — antes las dos agrupaciones estaban pegadas
 * con el mismo gap de 2px que separa cualquier línea entre sí, sin
 * ninguna jerarquía visual entre "de qué remate se trata" y "quién lo
 * organiza".
 */
.gsr-fila-consignataria {
	margin: var(--gsr-spacing-xs) 0 0;
	font-size: 0.85rem;
	font-weight: 700;
	color: var(--gsr-color-verde);
	line-height: 1.3;
	overflow-wrap: break-word;
	word-break: break-word;
}

/* FIX 2.2.0: cabaña con logo y nombre, línea propia — pedido explícito
   ("cabaña, si la hubiese, con logo y nombre"), mismo criterio visual que
   .gsr-fila-consignataria de arriba (antes el nombre iba mezclado con la
   raza en .gsr-fila-descripcion, sin logo, aunque el logo ya se podía
   cargar desde Remates → Cabañas desde 1.2.9). */
.gsr-fila-cabana {
	margin: 0;
	display: flex;
	align-items: center;
	gap: 6px;
	font-size: 0.85rem;
	font-weight: 600;
	color: var(--gsr-color-texto);
	line-height: 1.3;
	overflow-wrap: break-word;
	word-break: break-word;
}

/* FIX 2.4.7.3: se había agregado acá ".gsr-fila-cabana + .gsr-fila-cabana"
   (aire entre varias líneas ".gsr-fila-cabana" seguidas, una por cada
   cabaña del remate). FIX 2.4.7.5: pedido explícito — esas líneas
   repetidas se colapsan en una sola ("Cabaña: X" / "Cabañas: X y Y" /
   "Cabañas: X, Y y Z", ver cartelera-tarjetas.php/resultados-listado.php
   y RemateResolver::unir_nombres_con_y()), así que ya nunca hay dos
   ".gsr-fila-cabana" seguidas en el mismo remate — se borra la regla,
   CSS muerto por el mismo motivo que otras notas de "se borra en vez de
   dejarla" en este archivo. */

/* FIX 2.4.7.3: pedido explícito — "agrandar un poco el preview del
   logo" de cabaña en el listado. Antes 20x20px (igual que el logo chico
   de consignataria, .gsr-logo-consignataria, sin cambios). */
/* FIX 2.4.9.5: mismo criterio de fondo blanco + borde que
   .gsr-logo-consignataria de arriba — ver ese docblock. */
.gsr-fila-cabana-logo {
	width: 26px;
	height: 26px;
	object-fit: contain;
	flex-shrink: 0;
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-suave);
	border-radius: 3px;
	padding: 1px;
}

/* FIX 2.4.8.8: "Tipo de remate" había pasado a su propia línea (antes iba
   pegado al título dentro del link, "Tipo - Título") — línea propia debajo
   de la ubicación, arriba de "Consignataria:", compartiendo estilo con
   .gsr-fila-descripcion.
   FIX 2.4.8.9: pedido explícito — esa línea se saca del todo del listado
   (duplicaba el título muy seguido). Se borra el selector
   .gsr-fila-tipo-remate por quedar sin uso en las plantillas (mismo
   criterio de "no dejar CSS/variables muertas" que el resto del plugin);
   el tipo de remate sigue viéndose solo en remate-detalle.php.
   FIX 2.4.9.9: esta clase queda exclusivamente para Modalidad/Raza (las
   dos líneas que ya la usaban) — la línea de "Descripción corta" que
   también la usaba desde 2.4.9.8 pasa a .gsr-fila-descripcion-corta, ver
   más arriba en este archivo (corrección de colisión de nombres). */
.gsr-fila-descripcion {
	margin: 0;
	font-size: 0.85rem;
	color: var(--gsr-color-texto-suave);
	line-height: 1.3;
	overflow-wrap: break-word;
	word-break: break-word;
}

.gsr-fila-tags {
	margin: 2px 0 0;
	display: flex;
	flex-wrap: wrap;
	gap: var(--gsr-spacing-xs);
}

/* Columna 3: logo de la consignataria — proporcionado, sin deformarse
   (object-fit: contain, sin upscale del contenedor). FIX 2.0.8: alineado
   a la izquierda de su columna (antes centrado) para dejarle más lugar
   a la cantidad, que ahora es un 10% más grande. */
/**
 * FIX 2.4.6.8: pedido explícito — cuando el remate tiene cabaña
 * participante con logo cargado, ese logo se agrega ACÁ, al lado del de
 * la consignataria (antes solo aparecía chico, inline junto al nombre de
 * la cabaña en la columna de info — ver .gsr-fila-cabana-logo, sin
 * cambios). `gap` es lo único nuevo en esta regla: con un solo logo (caso
 * más común, sin cabaña o sin logo de cabaña) no cambia nada; con dos,
 * evita que queden pegados uno contra el otro. Ambas imágenes siguen
 * usando el mismo tamaño máximo (.gsr-fila-logo img, más abajo) — con dos
 * presentes, flexbox las achica en partes iguales para entrar en el
 * ancho disponible de la columna (sin este comportamiento habría que fijar
 * un ancho distinto para el caso de dos logos, pero el achique automático
 * ya da un resultado prolijo sin esa complejidad extra).
 */
/**
 * FIX 2.4.7.4: flex-wrap:wrap agregado — mismo bug de fondo que la nota
 * de arriba (.gsr-fila-remate). Con 3 o más logos (consignataria + 2 o
 * más cabañas) ya no alcanza con ensanchar la columna; a partir de acá
 * los logos que no entran en la primera línea pasan a una segunda línea
 * DENTRO de esta misma columna (la fila crece en alto, que ya es
 * automático en un grid) en vez de desbordar hacia la columna de
 * cantidad. row-gap evita que esa segunda línea quede pegada a la
 * primera.
 */
.gsr-fila-logo {
	grid-area: logo;
	height: 100%;
	min-width: 0;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: flex-start;
	gap: var(--gsr-spacing-xs);
	row-gap: var(--gsr-spacing-xs);
	padding: var(--gsr-spacing-xs) var(--gsr-spacing-sm) var(--gsr-spacing-xs) 0;
}

/**
 * FIX 2.4.7.5: pedido explícito — "separar con una línea los logos,
 * entre consignatarias y cabañas (línea a utilizar mismo criterio que
 * tiene el plugin y módulo)". Mismo criterio de "línea divisoria sutil"
 * que ya usa el plugin en varios lugares (--gsr-color-borde-suave, 1px
 * — ver .gsr-fila-remate border-bottom, .gsr-detalle-bloque
 * border-bottom, .gsr-detalle-tabla th border-bottom), acá aplicado
 * como borde vertical en vez de horizontal porque separa dos grupos en
 * una misma fila, no dos filas. `align-self: stretch` (en vez del
 * `center` heredado del contenedor) hace que la línea ocupe todo el
 * alto disponible de su línea de flex, en vez de quedar como un punto
 * chico centrado. Se agrega en el HTML (cartelera-tarjetas.php/
 * resultados-listado.php) solo cuando hay logo/nombre de consignataria
 * Y al menos una cabaña con logo — nunca queda una línea suelta sin
 * nada de un lado.
 *
 * FIX 2.4.9.6: pedido explícito — "separar con 15 px los logos entre
 * los que son consignatarias de las cabañas para que se note la
 * diferencia" (pedido junto con la unificación de tamaños del punto
 * anterior — ver .gsr-fila-logo-cabana — que hacía más necesario un
 * separador claro entre los 2 grupos, ya que dejaron de distinguirse
 * por tamaño). El contenedor .gsr-fila-logo ya pone `gap:
 * var(--gsr-spacing-xs)` (4px) a cada lado de este divisor de ancho 0
 * (4px + 0 + 4px = 8px de separación total antes de este fix). Se
 * agrega `margin: 0 3.5px` para sumar 7px más (3.5px de cada lado) y
 * llegar a los 15px totales pedidos entre el último logo de
 * consignataria y el primer logo de cabaña (4 + 3.5 + 0 + 3.5 + 4 =
 * 15px).
 */
.gsr-fila-logo-divisor {
	align-self: stretch;
	width: 0;
	min-height: 28px;
	margin: 0 3.5px;
	border-left: 1px solid var(--gsr-color-borde-suave);
	flex-shrink: 0;
}

/**
 * FIX 2.4.7.4: `width:100%` se saca a favor de `flex: 0 1 auto` — con
 * `width:100%` cada logo pedía el 100% del ancho de la columna como
 * base, así que al agregar flex-wrap (ver .gsr-fila-logo más arriba)
 * CUALQUIER cantidad de logos pasaba a apilarse uno por línea, incluso
 * el caso normal de 2 (consignataria + 1 cabaña), que hasta ahora
 * convivían bien lado a lado, angostados por flexbox. Con `flex: 0 1
 * auto` cada logo pide su tamaño natural (limitado por max-width/
 * max-height) y el wrap solo entra en juego cuando de verdad no entran
 * más en la línea — 2 logos se siguen viendo lado a lado como siempre;
 * a partir del 3ro, recién ahí pasan a una segunda línea.
 *
 * FIX 2.4.7.5: +10% de tamaño — pedido explícito ("para darle lugar a
 * los logos a que se agranden un 10%"), posible gracias a los 40px que
 * ganó la columna arriba (.gsr-fila-remate). Base anterior: max-width
 * 130px, max-height 48px.
 *
 * FIX 2.4.9.4: pedido explícito — "más grande, más visible" (con
 * captura de referencia del listado), "que no rompa nada y no
 * superponga ninguna información". +20% sobre la base anterior
 * (143px/53px → 172px/64px), posible gracias al ancho ganado por la
 * columna "logo" de .gsr-fila-remate (ver docblock ahí, minmax subió a
 * 360px). Mismo +20% se aplicaba de forma pareja a .gsr-fila-logo-cabana
 * y --grande, más abajo (cabaña un poco más grande que consignataria
 * sola; "grande" siempre el doble de esta base) — la relación de
 * tamaño diferenciado con la cabaña se retira en 2.4.9.6, ver ese
 * docblock en .gsr-fila-logo-cabana más abajo.
 *
 * FIX 2.4.9.5: pedido explícito — "todos los logos... deben estar sobre
 * fondo blanco según la medida del PNG o JPG, formato cuadrado y fondo
 * blanco, para unificar el estilo y diseño en todas las vistas, cartelera
 * o detalle". Hasta acá esta clase usaba max-width/max-height asimétricos
 * (172px/64px) — eso solo TOPEA el tamaño manteniendo la proporción
 * original del archivo, nunca fuerza un cuadrado (un logo horizontal
 * ancho se veía ancho, uno vertical se veía angosto, sin fondo propio
 * cuando el PNG tenía transparencia). Se pasa al mismo criterio que ya
 * usan .gsr-consignataria-card-logo/.gsr-consignataria-logo/
 * .gsr-cabana-card-logo/.gsr-cabana-logo desde 2.4.0: width/height fijos
 * e iguales (caja cuadrada real) + object-fit:contain (el logo se
 * recuadra ADENTRO sin recortarse ni deformarse) + fondo blanco + borde
 * suave, mismos tokens (--gsr-color-fondo/--gsr-color-borde-suave/
 * --gsr-radius-control) que esas 4 clases — "unificar el estilo" tal
 * cual pide el punto 1. Se interpreta "según la medida del PNG o JPG"
 * como que la CAJA se arma en base a cada tamaño de breakpoint (no un
 * único tamaño fijo para todo el sitio, ya establecido en 2.4.7.5/
 * 2.4.9.4 con 4 escalones responsive) y el archivo se ajusta DENTRO de
 * esa caja sin deformarse — la lectura alternativa ("cada logo mide lo
 * que mide su archivo real, sin tope") no es viable: dejaría logos de
 * tamaños dispares en la misma fila, exactamente lo contrario de
 * "unificar el estilo". El lado de la caja nueva es el max-height
 * anterior de cada variante/breakpoint (el alto ya era la dimensión que
 * más limitaba antes) — ver la nota de transparencia completa en
 * CHANGELOG.md.
 */
.gsr-fila-logo img {
	flex: 0 0 auto;
	width: 64px;
	height: 64px;
	object-fit: contain;
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-suave);
	border-radius: var(--gsr-radius-control);
	padding: 4px;
}

/**
 * FIX 2.4.7.3 a 2.4.9.5: esta clase agrandaba el logo de cabaña por
 * encima del tamaño base de consignataria (77px vs 64px en desktop, con
 * la misma proporción en cada breakpoint) — clase propia para no afectar
 * a ".gsr-fila-logo img" en general.
 *
 * FIX 2.4.9.6: pedido explícito — "ajustar y unificar el tamaño de los
 * logos, tanto el de las consignatarias y de las cabañas debe tener el
 * mismo tamaño, unificarlo en las vistas de cartelera y detalle". Se
 * iguala width/height a los mismos valores que la regla base
 * ".gsr-fila-logo img" en los 4 breakpoints (acá y en los @media más
 * abajo) — ya no hay ninguna diferencia de tamaño entre el logo de
 * consignataria y el de cabaña en cartelera/listado. En la vista de
 * detalle (remate-detalle.php) ya estaban unificados desde 2.4.7.5 —
 * ambos usan la misma clase .gsr-consignataria-logo (144px) sin
 * distinción — se confirma acá por transparencia, no hizo falta ningún
 * cambio ahí.
 */
.gsr-fila-logo img.gsr-fila-logo-cabana {
	width: 64px;
	height: 64px;
}

/**
 * FIX 2.4.9.2: pedido explícito — "cuando no hay logo de cabaña, poner el
 * logo de la consignataria más grande, al menos al doble (200% más),
 * solo para cuando no hay una cabaña y cuando hay una sola consignataria
 * responsable". Se interpreta "al doble (200% más)" como sinónimo de "el
 * doble del tamaño" (x2) — la aclaración entre paréntesis es la forma
 * coloquial de decir lo mismo, no una instrucción de triplicar.
 *
 * FIX 2.4.9.4: base de ".gsr-fila-logo img" pasó de 143px/53px a
 * 172px/64px (ver docblock ahí) — el doble pasa de 286px/106px a
 * 344px/128px.
 *
 * FIX 2.4.9.5: caja cuadrada + fondo blanco, mismo criterio que la regla
 * base de arriba — ver ese docblock completo. El doble de la nueva base
 * (64px) es 128px.
 *
 * FIX 2.4.9.7: pedido explícito — "cuando solo aparece un logo, ese logo
 * de cabaña, este debe ser grande y con el mismo criterio y tamaño que
 * el de las consignatario". Hasta acá esta clase solo se aplicaba al
 * logo de consignataria, y solo en el caso puntual de "sin cabaña + una
 * sola consignataria" (2.4.9.2). Se renombra de
 * .gsr-fila-logo-consignataria--grande a .gsr-fila-logo-grande (sin
 * "consignataria" en el nombre) porque ahora se aplica de forma
 * simétrica a CUALQUIER logo — de consignataria o de cabaña — que sea
 * el único logo real mostrado en toda la fila, sin importar el tipo. La
 * condición nueva (calculada en PHP, ver cartelera-tarjetas.php/
 * resultados-listado.php) es "exactamente 1 logo en total entre
 * consignatarias y cabañas", más simple y más general que las 3
 * condiciones puntuales que tenía antes — ese caso viejo queda incluido
 * automáticamente (1 consignataria con logo, sin cabaña, es un caso
 * particular de "1 logo en total").
 */
.gsr-fila-logo img.gsr-fila-logo-grande {
	width: 128px;
	height: 128px;
	padding: 8px;
}

/**
 * FIX 2.4.9.7: pedido explícito — "cuando hay dos o mas logos de
 * cabañas, ajustar segun criterio responsive... cuando hay dos o mas
 * logo de consignatarias, tambien achicar con el mismo criterio".
 * Modificador simétrico (mismo achique para ambos tipos, ahora que
 * comparten el mismo tamaño base desde 2.4.9.6) que se aplica a CADA
 * logo de un grupo (consignatarias o cabañas) cuando ese grupo tiene 2 o
 * más logos reales — evita que 2 o más logos del mismo tipo se vean
 * apretados o fuercen demasiadas líneas de wrap dentro de la columna. Un
 * logo del otro tipo que sea el único de su grupo NO se ve afectado por
 * este modificador (sigue en tamaño base) — el achique es por grupo, no
 * por fila completa.
 */
/**
 * FIX 2.5.0.3: pedido explícito — "cuando hay 2 o más logos compartiendo
 * un remate, agrandar un 25% más de tamaño, siempre manteniendo la
 * lógica de no superponer nada". Base anterior 48px → 48 × 1.25 = 60px
 * (padding 3px → 4px, misma proporción). El contenedor .gsr-fila-logo ya
 * envuelve con flex-wrap (ver más abajo) así que el aumento no fuerza
 * superposición — como mucho agrega una línea de wrap más si hace falta,
 * mismo comportamiento que ya tenía este modificador antes del aumento.
 *
 * FIX 2.5.0.4: pedido explícito — "cuando aparecen mas de 1 logo en las
 * vistas de cartelera aumentar un 20% el tamaño de los logos a como se
 * muestran hoy, nunca tiene que romper el diseño actual y no deben
 * superponerse bloques ni romper el responsive". +20% ADICIONAL sobre el
 * tamaño de 2.5.0.3 (no desde la base pre-2.5.0.3): 60px × 1.2 = 72px
 * (padding 4px × 1.2 = 4.8px, redondeado a 5px, misma proporción). Mismo
 * contenedor flex-wrap de siempre — el aumento solo puede sumar una
 * línea de wrap más, nunca superposición.
 */
.gsr-fila-logo img.gsr-fila-logo-multiple {
	width: 72px;
	height: 72px;
	padding: 5px;
}

/**
 * FIX 2.0.8: sin logo, solo texto con el nombre de la consignataria —
 * alineado igual que el logo (a la izquierda de su columna).
 *
 * FIX 2.4.9.7: pedido explícito, punto 4 — "cuando hay consignataria o
 * cabaña que no tiene logo asignado, en su lugar debe aparecer el texto
 * del nombre... siempre dentro de los limites del tamaño del logo (si
 * lo hubiera)". Se redibuja por completo: pasa de ser texto suelto sin
 * límites a una CAJA del mismo tamaño y mismo tratamiento visual
 * (fondo/borde/radio) que tendría el logo en su lugar — mismo criterio
 * de "caja cuadrada" que ya usan .gsr-fila-logo img y
 * .gsr-fila-logo-cabana desde 2.4.9.5/2.4.9.6. El texto se centra
 * adentro (vertical y horizontal) sobre una caja de alto/ancho fijos con
 * `overflow: hidden` — un nombre largo se corta antes de desbordar la
 * caja, nunca la agranda ni invade el logo/nombre de al lado: "siempre
 * dentro de los límites" tal cual pide el punto 4. Tiene también las 2
 * variantes .gsr-fila-logo-multiple/.gsr-fila-logo-grande (mismos
 * modificadores que ya usan los <img>, ver más abajo) para que un
 * nombre sin logo que conviva con 2+ del mismo tipo, o que sea el único
 * elemento de toda la fila, ocupe exactamente el mismo tamaño de caja
 * que le tocaría a un logo real en esa misma situación.
 */
.gsr-fila-logo-nombre {
	display: flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	flex-shrink: 0;
	width: 64px;
	height: 64px;
	padding: 4px;
	font-size: 0.68rem;
	font-weight: 600;
	line-height: 1.15;
	color: var(--gsr-color-texto-suave);
	text-align: center;
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde-suave);
	border-radius: var(--gsr-radius-control);
	overflow: hidden;
	word-break: break-word;
}

/* FIX 2.5.0.3: mismo +25% que la imagen de arriba — la caja de texto
   (nombre sin logo) tiene que ocupar el mismo tamaño que le tocaría a un
   logo real en la misma situación (criterio ya establecido en 2.4.9.7).
   FIX 2.5.0.4: mismo +20% adicional que la imagen de arriba — base
   anterior 60px/4px/0.725rem, ver docblock completo junto a
   .gsr-fila-logo img.gsr-fila-logo-multiple (desktop). */
.gsr-fila-logo-nombre.gsr-fila-logo-multiple {
	width: 72px;
	height: 72px;
	padding: 5px;
	font-size: 0.87rem;
}

.gsr-fila-logo-nombre.gsr-fila-logo-grande {
	width: 128px;
	height: 128px;
	padding: 8px;
	font-size: 0.85rem;
}

/* Columna 4: cantidad de cabezas o estado — columna fija, no se mueve
   según el ancho del logo. */
.gsr-fila-cantidad {
	grid-area: cantidad;
	min-width: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	/* FIX 2.0.9: 2px -> 4px — con el botón .gsr-fila-ver ahora sumado acá
	   (antes tenía como máximo número + badge de estado), un poco más de
	   aire evita que se vea apretado contra el badge de estado. */
	gap: var(--gsr-spacing-xs);
	text-align: center;
}

/* FIX 2.0.8: +10% de tamaño — pedido explícito ("1.300 cab." más
   grande). Base anterior: clamp(1.05rem, 1.4vw, 1.3rem). */
.gsr-fila-cantidad-numero {
	font-size: clamp(1.15rem, 1.55vw, 1.43rem);
	font-weight: 700;
	color: var(--gsr-color-verde);
	white-space: nowrap;
}

/* FIX 2.0.9: "Ver resultados" pasa de link de texto a botón real —
   pedido explícito ("esto debe funcionar como botón"). Ahora se usa en
   las dos vistas (cartelera-tarjetas.php y resultados-listado.php) con
   dos estados: por defecto ("Ver más detalles", borde/texto verde) y
   --disponible ("Resultado disponible", dorado — mismo criterio de
   color que .gsr-tag-resultado). white-space pasa a normal/break-word
   (antes nowrap) porque "Resultado disponible" es más largo que "Ver
   resultados" y la columna de cantidad es angosta (104–116px); con
   nowrap el texto se salía de la columna. */
.gsr-fila-ver {
	display: inline-block;
	max-width: 100%;
	box-sizing: border-box;
	margin-top: 4px;
	padding: 5px 10px;
	font-size: 0.72rem;
	font-weight: 600;
	line-height: 1.25;
	color: var(--gsr-color-verde);
	background: transparent;
	border: 1px solid var(--gsr-color-verde);
	border-radius: var(--gsr-radius-btn);
	text-decoration: none;
	text-align: center;
	white-space: normal;
	word-break: break-word;
}

.gsr-fila-ver:hover,
.gsr-fila-ver:focus-visible {
	background: var(--gsr-color-verde);
	color: #fff;
}

.gsr-fila-ver--disponible {
	color: var(--gsr-color-tag-resultado-texto);
	background: var(--gsr-color-dorado);
	border-color: var(--gsr-color-dorado);
}

.gsr-fila-ver--disponible:hover,
.gsr-fila-ver--disponible:focus-visible {
	background: var(--gsr-color-tag-resultado-texto);
	border-color: var(--gsr-color-tag-resultado-texto);
	color: #fff;
}

/**
 * FIX 2.4.8.3: pedido explícito, punto 4 — botón "VER AFICHE PROMOCIONAL" /
 * "VER INFORME DE PREVIA" en las 3 vistas de listado, ver
 * RemateResolver::boton_previa(). Variante propia (no reusa
 * .gsr-fila-ver--disponible, que es dorada y ya significa "hay resultado
 * publicado" — usar el mismo color para esto confundiría dos estados
 * distintos): fondo neutro claro, mismo verde de borde/texto que el botón
 * por defecto, con text-transform:uppercase explícito para que el texto
 * salga tal cual lo pidió el usuario ("VER AFICHE PROMOCIONAL"), aunque el
 * string en PHP esté en minúsculas (por convención de i18n del plugin).
 */
.gsr-fila-ver--previa {
	text-transform: uppercase;
	letter-spacing: 0.2px;
	background: var(--gsr-color-fondo);
}

.gsr-fila-ver--previa:hover,
.gsr-fila-ver--previa:focus-visible {
	background: var(--gsr-color-verde);
	color: #fff;
}

/**
 * FIX 2.4.9.0: pedido explícito — botón "Ver transmisión" en el listado
 * de cartelera (cartelera-tarjetas.php y resultados-listado.php), debajo
 * de "Ver más detalles"/"Resultado disponible", en rojo estilo YouTube —
 * mismo color y mismo criterio de hover que .gsr-btn-transmision (ver
 * más arriba), variante propia de .gsr-fila-ver en vez de reusar
 * --disponible (dorado, ya significa "hay resultado publicado") o
 * --previa (neutro).
 */
.gsr-fila-ver--transmision {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 4px;
	color: #fff;
	background: var(--gsr-color-youtube);
	border-color: var(--gsr-color-youtube);
}

.gsr-fila-ver--transmision .dashicons {
	font-size: 13px;
	width: 13px;
	height: 13px;
}

.gsr-fila-ver--transmision:hover,
.gsr-fila-ver--transmision:focus-visible {
	background: var(--gsr-color-youtube-hover);
	border-color: var(--gsr-color-youtube-hover);
	color: #fff;
}

/**
 * FIX 2.4.9.1: pedido explícito — "que solo esté activo el día del
 * remate". Cuando no es el día del remate, el botón se muestra como
 * <span> (no <a>, sin href — no navega a ningún lado) con la misma forma
 * pero en gris apagado, para que se note que existe transmisión cargada
 * sin sugerir que ya se puede ver. cursor:not-allowed + title (ver
 * markup) explican por qué está así.
 */
.gsr-fila-ver--transmision-inactiva {
	background: #f0f0f1;
	border-color: #dcdcde;
	color: var(--gsr-color-texto-tenue);
	cursor: not-allowed;
}

.gsr-fila-ver--transmision-inactiva .dashicons {
	color: var(--gsr-color-texto-tenue);
}

/* Tablet: 768–1199px — 3 columnas, el logo pasa a una segunda línea
   dentro de la misma fila (misma celda de ancho que la información). */
@media (max-width: 1199px) and (min-width: 768px) {
	.gsr-fila-remate {
		grid-template-areas:
			"modo info cantidad"
			"modo logo cantidad";
		grid-template-columns: 40px minmax(0, 1fr) 104px;
		row-gap: var(--gsr-spacing-xs);
	}

	.gsr-fila-logo {
		padding-left: 0;
	}

	/* FIX 2.4.7.5: +10%, mismo criterio que desktop — base anterior
	   110px/38px.
	   FIX 2.4.9.4: +20%, mismo pedido que desktop ("más grande, más
	   visible") — base anterior 121px/42px. Sin cambio de columna acá:
	   en este breakpoint el logo comparte la columna flexible "info"
	   (ver grid-template-columns arriba), no hay un ancho fijo que
	   ensanchar.
	   FIX 2.4.9.5: caja cuadrada + fondo blanco — mismo criterio que la
	   regla base (desktop) de .gsr-fila-logo img, ver ese docblock. El
	   lado nuevo es el max-height anterior de este breakpoint (50px). */
	.gsr-fila-logo img {
		width: 50px;
		height: 50px;
		padding: 3px;
	}

	/* FIX 2.4.9.6: unificado con la regla base de este breakpoint
	   (.gsr-fila-logo img, arriba) — ver docblock completo junto a la
	   regla base (desktop) de .gsr-fila-logo-cabana. */
	.gsr-fila-logo img.gsr-fila-logo-cabana {
		width: 50px;
		height: 50px;
	}

	/* FIX 2.4.9.2: el doble de la base — ver docblock completo junto a
	   la regla base (desktop) de .gsr-fila-logo-grande.
	   FIX 2.4.9.4: el doble de la nueva base (145px/50px) — antes
	   242px/84px.
	   FIX 2.4.9.5: caja cuadrada — el doble de la nueva base (50px) es
	   100px.
	   FIX 2.4.9.7: renombrada de -consignataria--grande a -grande (ver
	   docblock desktop). */
	.gsr-fila-logo img.gsr-fila-logo-grande {
		width: 100px;
		height: 100px;
		padding: 6px;
	}

	/* FIX 2.4.9.7: logos que achican cuando hay 2+ del mismo tipo
	   (consignatarias o cabañas) en la fila — ver docblock desktop.
	   FIX 2.5.0.3: +25% — base anterior 38px, ver docblock desktop.
	   FIX 2.5.0.4: +20% adicional — base anterior 48px/3px, ver docblock
	   completo junto a la regla base (desktop). 48 × 1.2 = 57.6 ≈ 58px. */
	.gsr-fila-logo img.gsr-fila-logo-multiple {
		width: 58px;
		height: 58px;
		padding: 4px;
	}

	/* FIX 2.4.9.7: caja de texto (nombre sin logo) — mismo criterio de
	   tamaño que la imagen, ver docblock desktop. */
	.gsr-fila-logo-nombre {
		width: 50px;
		height: 50px;
		padding: 3px;
		font-size: 0.6rem;
	}

	/* FIX 2.5.0.3: +25% — base anterior 38px/0.52rem, ver docblock desktop.
	   FIX 2.5.0.4: +20% adicional — base anterior 48px/3px/0.65rem, ver
	   docblock completo junto a la regla base (desktop). */
	.gsr-fila-logo-nombre.gsr-fila-logo-multiple {
		width: 58px;
		height: 58px;
		padding: 4px;
		font-size: 0.78rem;
	}

	.gsr-fila-logo-nombre.gsr-fila-logo-grande {
		width: 100px;
		height: 100px;
		padding: 6px;
		font-size: 0.78rem;
	}
}

/* Mobile: menos de 768px — bloque vertical, información (fecha → tipo →
   ubicación → consignataria → raza → tags) primero, después modalidad,
   logo y cantidad. Sin posiciones absolutas, sin superponer elementos.
   FIX 2.0.8: refuerzo de espaciado/word-break — pedido explícito de
   revisar renglones y espacios en iPhone y pantallas verticales. */
@media (max-width: 767px) {
	.gsr-fila-remate {
		grid-template-areas:
			"info"
			"modo"
			"logo"
			"cantidad";
		grid-template-columns: minmax(0, 1fr);
		row-gap: var(--gsr-spacing-sm);
		/* FIX 2.5.0.3: mismo +20px de margen derecho que la regla base
		   (desktop) — este breakpoint pisa el padding entero, así que hay
		   que repetir el ajuste acá para que también aplique en mobile. */
		padding: var(--gsr-spacing-md) calc(var(--gsr-spacing-sm) + 20px) var(--gsr-spacing-md) var(--gsr-spacing-sm);
		min-height: 0;
	}

	.gsr-fila-info {
		gap: 4px;
	}

	.gsr-fila-modo {
		flex-direction: row;
		justify-content: flex-start;
		height: auto;
		gap: var(--gsr-spacing-md);
	}

	.gsr-fila-logo {
		justify-content: flex-start;
		padding: 0;
	}

	/* FIX 2.4.7.5: +10% — base anterior 140px/48px.
	   FIX 2.4.9.4: +20% — base anterior 154px/53px.
	   FIX 2.4.9.5: caja cuadrada + fondo blanco — lado nuevo 64px
	   (max-height anterior de este breakpoint), mismo criterio que
	   desktop. */
	.gsr-fila-logo img {
		width: 64px;
		height: 64px;
		padding: 4px;
	}

	/* FIX 2.4.9.6: unificado con la regla base de este breakpoint — ver
	   docblock completo junto a la regla base (desktop) de
	   .gsr-fila-logo-cabana. */
	.gsr-fila-logo img.gsr-fila-logo-cabana {
		width: 64px;
		height: 64px;
	}

	/* FIX 2.4.9.2: el doble de la base — ver docblock completo junto a
	   la regla base (desktop) de .gsr-fila-logo-grande.
	   FIX 2.4.9.4: el doble de la nueva base (185px/64px) — antes
	   308px/106px.
	   FIX 2.4.9.5: caja cuadrada — el doble de la nueva base (64px) es
	   128px.
	   FIX 2.4.9.7: renombrada de -consignataria--grande a -grande (ver
	   docblock desktop). */
	.gsr-fila-logo img.gsr-fila-logo-grande {
		width: 128px;
		height: 128px;
		padding: 8px;
	}

	/* FIX 2.4.9.7: logos que achican cuando hay 2+ del mismo tipo
	   (consignatarias o cabañas) en la fila — ver docblock desktop.
	   FIX 2.5.0.3: +25% — base anterior 48px, ver docblock desktop.
	   FIX 2.5.0.4: +20% adicional — base anterior 60px/4px, ver docblock
	   completo junto a la regla base (desktop). */
	.gsr-fila-logo img.gsr-fila-logo-multiple {
		width: 72px;
		height: 72px;
		padding: 5px;
	}

	/* FIX 2.4.9.7: caja de texto (nombre sin logo) — mismo criterio de
	   tamaño que la imagen, ver docblock desktop. */
	.gsr-fila-logo-nombre {
		width: 64px;
		height: 64px;
		padding: 4px;
		font-size: 0.68rem;
	}

	/* FIX 2.5.0.3: +25% — base anterior 48px/0.58rem, ver docblock desktop.
	   FIX 2.5.0.4: +20% adicional — base anterior 60px/4px/0.725rem, ver
	   docblock completo junto a la regla base (desktop). */
	.gsr-fila-logo-nombre.gsr-fila-logo-multiple {
		width: 72px;
		height: 72px;
		padding: 5px;
		font-size: 0.87rem;
	}

	.gsr-fila-logo-nombre.gsr-fila-logo-grande {
		width: 128px;
		height: 128px;
		padding: 8px;
		font-size: 0.85rem;
	}

	.gsr-fila-cantidad {
		align-items: flex-start;
		text-align: left;
		gap: 4px;
	}
}

@media (max-width: 400px) {
	/**
	 * FIX 2.4.7.5: +10% — base anterior 110px/40px.
	 * FIX 2.4.9.4: pedido explícito de "más grande, más visible", pero
	 * acá con un aumento más conservador (+10%, no +20% como el resto de
	 * los breakpoints) — este es el tramo más angosto de todos (celulares
	 * chicos, ≤400px de ancho de viewport), donde el margen de maniobra
	 * real es mínimo antes de arriesgar que el logo empuje el ancho del
	 * contenido. Base anterior 121px/44px.
	 */
	.gsr-fila-logo img {
		width: 48px;
		height: 48px;
		padding: 3px;
	}

	/* FIX 2.4.9.6: unificado con la regla base de este breakpoint — ver
	   docblock completo junto a la regla base (desktop) de
	   .gsr-fila-logo-cabana. */
	.gsr-fila-logo img.gsr-fila-logo-cabana {
		width: 48px;
		height: 48px;
	}

	/* FIX 2.4.9.2: el doble de la base — ver docblock completo junto a
	   la regla base (desktop) de .gsr-fila-logo-grande.
	   FIX 2.4.9.4: el doble de la nueva base (133px/48px) — antes
	   242px/88px.
	   FIX 2.4.9.5: caja cuadrada — el doble de la nueva base (48px) es
	   96px.
	   FIX 2.4.9.7: renombrada de -consignataria--grande a -grande (ver
	   docblock desktop). */
	.gsr-fila-logo img.gsr-fila-logo-grande {
		width: 96px;
		height: 96px;
		padding: 6px;
	}

	/* FIX 2.4.9.7: logos que achican cuando hay 2+ del mismo tipo
	   (consignatarias o cabañas) en la fila — ver docblock desktop.
	   FIX 2.5.0.3: +25% — base anterior 36px, ver docblock desktop.
	   FIX 2.5.0.4: +20% adicional — base anterior 45px/3px, ver docblock
	   completo junto a la regla base (desktop). 45 × 1.2 = 54px. */
	.gsr-fila-logo img.gsr-fila-logo-multiple {
		width: 54px;
		height: 54px;
		padding: 4px;
	}

	/* FIX 2.4.9.7: caja de texto (nombre sin logo) — mismo criterio de
	   tamaño que la imagen, ver docblock desktop. */
	.gsr-fila-logo-nombre {
		width: 48px;
		height: 48px;
		padding: 3px;
		font-size: 0.56rem;
	}

	/* FIX 2.5.0.3: +25% — base anterior 36px/0.48rem, ver docblock desktop.
	   FIX 2.5.0.4: +20% adicional — base anterior 45px/3px/0.6rem, ver
	   docblock completo junto a la regla base (desktop). */
	.gsr-fila-logo-nombre.gsr-fila-logo-multiple {
		width: 54px;
		height: 54px;
		padding: 4px;
		font-size: 0.72rem;
	}

	.gsr-fila-logo-nombre.gsr-fila-logo-grande {
		width: 96px;
		height: 96px;
		padding: 6px;
		font-size: 0.72rem;
	}
}

/* ==========================================================================
   2.9.4.0 — Logos de consignataria/cabaña: tamaño UNIFORME, más grande,
   centrado y adaptable a la cantidad (1 o varios) con el mismo criterio.

   Va DESPUÉS de las reglas históricas de .gsr-fila-logo (que quedan intactas)
   y las unifica por cascada: los modificadores -grande (1 logo) y -multiple
   (2+) —que hasta acá daban tamaños distintos según la cantidad— pasan a un
   único tamaño por breakpoint. Cada logo sigue en su caja cuadrada con
   object-fit: contain (heredado), así que no se deforma, y las cajas de
   nombre (sin logo) usan la misma medida. Se centran (justify-content) para
   que un solo logo no quede pegado a la izquierda con espacio muerto, y el
   flex-wrap del contenedor hace que N logos fluyan en filas parejas.

   Los valores están pensados para iterar sin tocar la base: si hay que
   agrandar/achicar, se cambian acá y listo. Tamaños elegidos para entrar
   3 por fila en la columna de logos de la tarjeta a cada ancho (con wrap si
   hay más), sin superponer nada.
   ========================================================================== */
.gsr-fila-logo {
	justify-content: center;
}
.gsr-fila-logo img,
.gsr-fila-logo img.gsr-fila-logo-cabana,
.gsr-fila-logo img.gsr-fila-logo-grande,
.gsr-fila-logo img.gsr-fila-logo-multiple,
.gsr-fila-logo-nombre,
.gsr-fila-logo-nombre.gsr-fila-logo-multiple,
.gsr-fila-logo-nombre.gsr-fila-logo-grande {
	/* border-box: el ancho incluye padding y borde. Necesario porque la
	   vista de resultados (.gsr-resultados-listado) no entra en el reset de
	   box-sizing de arriba; sin esto, 104px + padding + borde desbordaría la
	   columna de logos ahí. */
	box-sizing: border-box;
	width: 104px;
	height: 104px;
	padding: 8px;
}
.gsr-fila-logo-nombre,
.gsr-fila-logo-nombre.gsr-fila-logo-multiple,
.gsr-fila-logo-nombre.gsr-fila-logo-grande {
	font-size: 0.82rem;
}

@media (max-width: 1199px) and (min-width: 768px) {
	.gsr-fila-logo img,
	.gsr-fila-logo img.gsr-fila-logo-cabana,
	.gsr-fila-logo img.gsr-fila-logo-grande,
	.gsr-fila-logo img.gsr-fila-logo-multiple,
	.gsr-fila-logo-nombre,
	.gsr-fila-logo-nombre.gsr-fila-logo-multiple,
	.gsr-fila-logo-nombre.gsr-fila-logo-grande {
		width: 92px;
		height: 92px;
		padding: 7px;
	}
	.gsr-fila-logo-nombre,
	.gsr-fila-logo-nombre.gsr-fila-logo-multiple,
	.gsr-fila-logo-nombre.gsr-fila-logo-grande {
		font-size: 0.78rem;
	}
}

@media (max-width: 767px) {
	.gsr-fila-logo img,
	.gsr-fila-logo img.gsr-fila-logo-cabana,
	.gsr-fila-logo img.gsr-fila-logo-grande,
	.gsr-fila-logo img.gsr-fila-logo-multiple,
	.gsr-fila-logo-nombre,
	.gsr-fila-logo-nombre.gsr-fila-logo-multiple,
	.gsr-fila-logo-nombre.gsr-fila-logo-grande {
		width: 100px;
		height: 100px;
		padding: 8px;
	}
	.gsr-fila-logo-nombre,
	.gsr-fila-logo-nombre.gsr-fila-logo-multiple,
	.gsr-fila-logo-nombre.gsr-fila-logo-grande {
		font-size: 0.8rem;
	}
}

@media (max-width: 400px) {
	.gsr-fila-logo img,
	.gsr-fila-logo img.gsr-fila-logo-cabana,
	.gsr-fila-logo img.gsr-fila-logo-grande,
	.gsr-fila-logo img.gsr-fila-logo-multiple,
	.gsr-fila-logo-nombre,
	.gsr-fila-logo-nombre.gsr-fila-logo-multiple,
	.gsr-fila-logo-nombre.gsr-fila-logo-grande {
		width: 88px;
		height: 88px;
		padding: 7px;
	}
	.gsr-fila-logo-nombre,
	.gsr-fila-logo-nombre.gsr-fila-logo-multiple,
	.gsr-fila-logo-nombre.gsr-fila-logo-grande {
		font-size: 0.74rem;
	}
}

/* ==========================================================================
   1.3.4 — Impresión (detalle de remate y resultados)
   Sección 22 del pedido: se esconde navegación/filtros/acciones y se
   conserva título, consignataria, fecha, fuente y la tabla de resultados,
   evitando que las filas se corten entre páginas y repitiendo el
   encabezado de la tabla si ocupa más de una hoja A4.
   ========================================================================== */

@media print {
	.gsr-tabs,
	.gsr-detalle-acciones,
	.gsr-resultado-acciones,
	.gsr-busqueda-form,
	.gsr-consignatarias-buscador,
	.gsr-cabanas-buscador,
	.gsr-card-cta,
	.gsr-listado-ver {
		display: none !important;
	}

	.gsr-detalle,
	.gsr-consignataria-detalle,
	.gsr-cabana-detalle {
		max-width: 100%;
	}

	.gsr-resultado-tabla-wrap {
		overflow: visible;
	}

	.gsr-resultado-tabla {
		width: 100%;
		border-collapse: collapse;
	}

	.gsr-resultado-tabla thead {
		display: table-header-group;
	}

	.gsr-resultado-tabla tr,
	.gsr-resultado-grupo-header,
	.gsr-resultado-subtotal {
		break-inside: avoid;
		page-break-inside: avoid;
	}

	.gsr-resultado-grupo-header th {
		background: #eee !important;
		color: #000 !important;
		-webkit-print-color-adjust: exact;
		print-color-adjust: exact;
	}

	.gsr-badge,
	.gsr-tag-resultado,
	.gsr-card-kicker {
		background: none !important;
		color: #000 !important;
		border: 1px solid #000;
	}

	.gsr-consignataria-logo,
	.gsr-consignataria-card-logo,
	.gsr-cabana-logo,
	.gsr-cabana-card-logo {
		max-width: 120px;
		max-height: 120px;
	}

	a[href]::after {
		content: "";
	}
}

/* ==========================================================================
   FIX 2.4.8.0 — Modal accesible para adjuntos (imagen/PDF)
   ==========================================================================
   Ver el docblock completo en public-resultado-modal.js: reemplaza abrir el
   adjunto en una pestaña nueva vacía por un popup con título del remate +
   fecha del resultado, embebiendo la imagen o el PDF. El <a href> real de
   cada link sigue existiendo sin cambios (progressive enhancement) — este
   bloque solo estiliza el overlay/diálogo que el JS arma y muestra.
   ========================================================================== */

.gsr-modal-overlay {
	position: fixed;
	inset: 0;
	z-index: 100000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: var(--gsr-spacing-lg);
	background: rgba(26, 26, 24, 0.6);
	box-sizing: border-box;
}

.gsr-modal-overlay[hidden] {
	display: none;
}

.gsr-modal {
	display: flex;
	flex-direction: column;
	width: 100%;
	max-width: 860px;
	max-height: 90vh;
	background: var(--gsr-color-fondo);
	border-radius: var(--gsr-radius-card);
	box-shadow: 0 12px 40px rgba(26, 26, 24, 0.35);
	overflow: hidden;
	font-family: var(--gsr-font-family);
}

.gsr-modal:focus {
	outline: none;
}

/**
 * FIX 2.4.9.8: pedido explícito — zoom/agrandar la imagen con un click en
 * los pop ups del módulo (afiche del remate y resultado en imagen, mismo
 * modal para los dos — ver docblock de public-resultado-modal.js). Con
 * el modal en modo zoom se agranda el cuadro hasta casi toda la pantalla
 * y se saca el tope de alto de la imagen (ver .gsr-modal-imagen--zoom
 * abajo); .gsr-modal-body ya tiene overflow:auto, así que el scroll
 * para ver la imagen completa sale solo, sin agregar nada más.
 */
.gsr-modal--zoom {
	max-width: 96vw;
	max-height: 96vh;
}

.gsr-modal-header {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	gap: var(--gsr-spacing-md);
	padding: var(--gsr-spacing-md) var(--gsr-spacing-lg);
	border-bottom: 1px solid var(--gsr-color-borde);
	flex-shrink: 0;
}

.gsr-modal-titulo {
	margin: 0;
	font-size: 16px;
	font-weight: 600;
	color: var(--gsr-color-verde);
}

.gsr-modal-fecha {
	margin: 4px 0 0;
	font-size: 13px;
	color: var(--gsr-color-texto-suave);
}

.gsr-modal-cerrar {
	flex-shrink: 0;
	/* FIX 2.4.8.0: 44px — tamaño mínimo recomendado de área táctil (WCAG
	   2.5.5), importante acá porque el pedido explícito enfatiza mobile y
	   tablet. El ícono visual (font-size 22px) queda centrado adentro con
	   flex, más chico que el botón en sí. */
	width: 44px;
	height: 44px;
	display: flex;
	align-items: center;
	justify-content: center;
	line-height: 1;
	font-size: 22px;
	color: var(--gsr-color-texto-suave);
	background: transparent;
	border: 1px solid var(--gsr-color-borde);
	border-radius: 50%;
	cursor: pointer;
}

.gsr-modal-cerrar:hover,
.gsr-modal-cerrar:focus-visible {
	background: var(--gsr-color-dorado);
	border-color: var(--gsr-color-dorado);
	color: var(--gsr-color-badge-hoy-texto);
}

.gsr-modal-body {
	flex: 1 1 auto;
	min-height: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	background: var(--gsr-color-verde-claro);
	overflow: auto;
}

.gsr-modal-imagen {
	display: block;
	max-width: 100%;
	max-height: 75vh;
	object-fit: contain;
	/**
	 * FIX 2.4.9.8: la imagen del pop up ahora es clickeable para hacer
	 * zoom — ver .gsr-modal-imagen--zoom y public-resultado-modal.js.
	 */
	cursor: zoom-in;
}

/**
 * FIX 2.4.9.8: pedido explícito — "posibilidad de hacerle zoom sobre la
 * imagen, o agrandar haciendo un click al menos un 50%". Se saca el tope
 * de alto (75vh de acá arriba) para que la imagen se muestre a su
 * tamaño real dentro del modal ya agrandado (.gsr-modal--zoom, hasta
 * 96vw/96vh) — en la enorme mayoría de los flyers/resultados esto ya
 * representa bastante más del 50% de aumento respecto al tamaño
 * original (75vh de un modal de 860px de ancho); .gsr-modal-body tiene
 * overflow:auto, así que si la imagen es más grande que el cuadro
 * agrandado, aparece scroll en vez de recortarse.
 */
.gsr-modal-imagen--zoom {
	max-width: none;
	max-height: none;
	width: auto;
	height: auto;
	cursor: zoom-out;
}

.gsr-modal-iframe {
	width: 100%;
	height: 70vh;
	border: 0;
}

.gsr-modal-footer {
	flex-shrink: 0;
	padding: var(--gsr-spacing-sm) var(--gsr-spacing-lg);
	border-top: 1px solid var(--gsr-color-borde);
	text-align: center;
}

.gsr-modal-link-directo {
	font-size: 13px;
	font-weight: 600;
	color: var(--gsr-color-verde);
	text-decoration: underline;
}

.gsr-modal-link-directo:hover,
.gsr-modal-link-directo:focus-visible {
	color: var(--gsr-color-dorado);
}

/* Con el modal abierto se bloquea el scroll del fondo — mismo criterio que
   cualquier diálogo modal estándar, para que el contenido detrás no se
   desplace mientras el popup está encima. */
html.gsr-modal-abierto {
	overflow: hidden;
}

@media (max-width: 600px) {
	.gsr-modal-overlay {
		padding: 0;
		align-items: flex-end;
	}

	.gsr-modal {
		max-width: 100%;
		max-height: 95vh;
		border-radius: var(--gsr-radius-card) var(--gsr-radius-card) 0 0;
	}

	.gsr-modal-iframe {
		height: 60vh;
	}
}

/**
 * FIX 2.4.9.8: cards del shortcode [guarino_remates_proximos] — ver
 * docblock completo de Shortcodes::render_proximos(). Pedido explícito:
 * "dejar contraste, poner fondo y usar en fondo blanco cada card, pero
 * con jerarquia de info. Mas importante, fecha, consignataria, lugar, y
 * cabezas". Grilla simple de hasta 4 columnas (se acomoda solo con menos
 * tarjetas), fondo blanco con borde + sombra sutil para que la tarjeta
 * se distinga de un fondo de página también blanco (el "contraste"
 * pedido, sin recurrir al gradiente oscuro de la franja de índices que
 * sirvió de referencia de posición/formato — ver docblock del método).
 */
.gsr-proximos-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
	gap: var(--gsr-spacing-lg);
}

/**
 * FIX 2.5.0.5: pedido explícito — "no esta visualmente atractivo,
 * necesito que tenga mejor jerarquia visual [...] jerarquia visial para
 * impacto en la web" (ver referencia "despues.png" en el docblock
 * completo de proximos-cards.php). Más padding y más separación entre
 * bloques que la versión anterior (6px de gap → 10px, y padding lg/xl en
 * vez de md/lg) para que la tarjeta respire — mismo criterio "fondo
 * blanco con borde + sombra sutil" de 2.4.9.8, no se toca (el pedido
 * original fue explícito en usar fondo blanco, no el fondo oscuro de la
 * franja de referencia de esa versión).
 */
.gsr-proximo-card {
	display: flex;
	flex-direction: column;
	gap: 10px;
	background: var(--gsr-color-fondo);
	border: 1px solid var(--gsr-color-borde);
	border-radius: var(--gsr-radius-card);
	box-shadow: 0 2px 10px rgba(26, 26, 24, 0.08);
	padding: var(--gsr-spacing-lg) var(--gsr-spacing-xl);
	text-decoration: none;
	transition: box-shadow 0.15s ease, border-color 0.15s ease;
}

.gsr-proximo-card:hover,
.gsr-proximo-card:focus-visible {
	border-color: var(--gsr-color-dorado);
	box-shadow: 0 4px 16px rgba(26, 26, 24, 0.14);
}

/**
 * FIX 2.5.0.5: jerarquía nueva, de mayor a menor peso visual — número de
 * fecha grande "DD/MM" (dato ancla, mismo verde institucional que ya
 * tenía .gsr-proximo-card-fecha) con la hora como dato secundario chico
 * al lado, título del remate en negrita (dato nuevo en esta tarjeta),
 * consignataria, cabezas, y una pastilla "Ver más detalles" al pie — ver
 * el docblock completo con la referencia visual en proximos-cards.php.
 * Las reglas -lugar de versiones anteriores se borran (ya no se arma esa
 * línea, ver nota de transparencia en ese mismo docblock).
 */
.gsr-proximo-card-top {
	display: flex;
	align-items: baseline;
	gap: 8px;
	flex-wrap: wrap;
}

.gsr-proximo-card-fecha-num {
	font-size: 32px;
	font-weight: 700;
	line-height: 1;
	color: var(--gsr-color-verde);
}

.gsr-proximo-card-hora {
	font-size: 13px;
	font-weight: 600;
	color: var(--gsr-color-texto-suave);
}

.gsr-proximo-card-titulo {
	font-size: 16px;
	font-weight: 700;
	color: var(--gsr-color-texto);
	line-height: 1.3;
}

.gsr-proximo-card-consignataria {
	font-size: 13px;
	font-weight: 600;
	color: var(--gsr-color-texto-suave);
}

/**
 * FIX 2.5.0.2: pedido explícito — "agrandar la cantidad de cabezas un 30%
 * respecto de la versión anterior". Base 2.4.9.9: 12px. 12 × 1.3 = 15.6px.
 * Sigue igual en 2.5.0.5, no se tocó ese tamaño.
 */
.gsr-proximo-card-cabezas {
	font-size: 15.6px;
	font-weight: 600;
	color: var(--gsr-color-texto-suave);
}

/**
 * FIX 2.5.0.5: pastilla "Ver más detalles" — reusa el componente .gsr-btn
 * ya existente (mismo verde/borde que "VER TRANSMISIÓN" y demás botones
 * del plugin, ver más arriba en esta hoja de estilos), con un modificador
 * que la achica y la separa del resto de la tarjeta. Es un <span>
 * decorativo (toda la tarjeta ya es un único <a>), no un botón real —
 * center-aligned, ancho acorde al texto, no ocupa todo el ancho de la
 * tarjeta para no verse como una acción distinta al resto del click.
 */
.gsr-proximo-card-cta {
	align-self: flex-start;
	margin-top: 2px;
	font-size: 11px;
	padding: 6px 14px;
}

.gsr-proximo-card:hover .gsr-proximo-card-cta,
.gsr-proximo-card:focus-visible .gsr-proximo-card-cta {
	background: var(--gsr-color-verde);
	color: var(--gsr-color-fondo);
}

/* 2.9.7.3 — el nombre del grupo se usa como separador, sin anteponer "Grupo". */
.gsr-resultado-tabla--jerarquica .gsr-resultado-grupo-header th {
	font-weight: 700;
}


/* 2.9.8.5 — Kilos visibles en resultados cuando existen datos.
   La tabla conserva el ancho del contenedor; en pantallas angostas usa el
   scroll horizontal ya existente, sin comprimir ni deformar la tipografía. */
table.gsr-resultado-tabla--con-kilos { min-width: 720px; }
table.gsr-resultado-tabla--con-kilos th:not(:first-child),
table.gsr-resultado-tabla--con-kilos td:not(:first-child) { white-space: nowrap; }

/* 3.0.0 — navegación directa desde el detalle hacia Resultados. */
.gsr-volver-resultados-nav{margin:0 0 14px;display:flex;justify-content:flex-start;align-items:center}
.gsr-volver-resultados-nav .gsr-btn{white-space:nowrap}


/* 3.3.4 — Marcas numeradas, sin fondo especial. */
.gsr-resultado-tabla .gsr-resultado-asterisco{font-size:.78em;font-weight:900;line-height:1;vertical-align:super;margin-left:3px;color:inherit;}
.gsr-resultado-tabla .gsr-resultado-nota-especial td{background:transparent!important;border-top:0;padding-top:7px;padding-bottom:3px;}
.gsr-resultado-tabla .gsr-resultado-nota-especial small{font-size:.88em;font-weight:400;color:inherit;}
.gsr-resultado-tabla .gsr-resultado-nota-especial strong{font-weight:800;}

/* v3.3.5 — Aclaraciones especiales fuera de la tabla de resultados. */
.gsr-resultado-notas-especiales{margin:10px 0 18px;padding:0 14px;font-size:.9em;line-height:1.45;color:inherit;}
.gsr-resultado-notas-especiales p{margin:4px 0;}
.gsr-resultado-notas-especiales strong{font-weight:800;}

/* 3.3.7 — referencias especiales más sutiles, siempre junto a la categoría. */
.gsr-resultado-tabla .gsr-resultado-asterisco{font-size:.66em!important;font-weight:800!important;vertical-align:super;margin-left:4px;opacity:.72;}
.gsr-resultado-notas-especiales{margin:7px 0 16px!important;padding:0 14px!important;font-size:.78em!important;line-height:1.35!important;opacity:.72;}
.gsr-resultado-notas-especiales p{margin:2px 0!important;}
.gsr-resultado-notas-especiales strong{font-weight:700!important;}


/* v3.3.8 — marca en el precio; aclaración sutil junto a la categoría. */
.gsr-resultado-tabla .gsr-resultado-asterisco{font-size:.68em!important;font-weight:800!important;line-height:1;vertical-align:super;margin-left:3px;white-space:nowrap;}
.gsr-resultado-tabla .gsr-resultado-aclaracion-inline{display:inline-block;margin-left:7px;font-size:.70em;font-weight:400;line-height:1.2;opacity:.66;text-transform:none;white-space:normal;}

/* v3.6.7 — precios del resultado con mayor jerarquía visual. */
.gsr-resultado-tabla td.gsr-resultado-precio{font-weight:700;}
