/*
 * Categorías con identidad propia — 31-ago-2026.
 *
 * Portado de `BODY_ONLY_REFERENCE/02*-category-*.html` del paquete de rediseño
 * v4 (con autorización de Mario): la estructura y las clases son las del
 * mock, calcadas; los colores pasan a los tokens `--cf-*` de siempre
 * (`var(--line)`→`var(--cf-borde)`, `var(--accent2)`→`var(--cf-brasa)`…), y
 * las cajas `.media` con degradado decorativo se simplifican a un contenedor
 * llano: las tarjetas reales siempre llevan foto (`cf_img()`), así que el
 * placeholder visual del mock no hacía falta.
 *
 * ⚠️ SIN `var(--serif)` en los títulos — Mario ya probó una serif en los
 * titulares de nota y la descartó por consistencia (`template-parts/nota.php`).
 * Donde el mock pedía `var(--serif)` aquí va `var(--cf-titulo)`, la sans de
 * siempre.
 *
 * Encolada CONDICIONALMENTE solo en archivos de categoría — mismo criterio
 * que `eventos.css` con las vistas de evento (`inc/assets.php`).
 */

.cf-cat .page { width: min(100% - 2rem, var(--cf-ancho)); margin-inline: auto; padding-block: var(--cf-espacio-2) var(--cf-espacio-4); }
.cf-cat .breadcrumb { font-size: .78rem; color: var(--cf-texto-tenue); margin-bottom: var(--cf-espacio); }
.cf-cat .breadcrumb a { color: inherit; }

.cf-cat .cat-kicker { font-size: .7rem; letter-spacing: .12em; text-transform: uppercase; font-weight: 900; color: var(--cf-brasa); }
.cf-cat .cat-intro { padding: .5rem 0 var(--cf-espacio-2); border-bottom: 1px solid var(--cf-borde); margin-bottom: var(--cf-espacio-2); }
.cf-cat .cat-intro h1 { font-family: var(--cf-titulo); font-size: clamp(2.1rem, 5vw, 3.6rem); margin: .3rem 0 .5rem; letter-spacing: -.03em; }
.cf-cat .cat-intro p { max-width: 60ch; color: var(--cf-texto-suave); font-size: 1rem; margin: 0; }

.cf-cat .chip-row { display: flex; gap: .5rem; flex-wrap: wrap; margin-top: 1rem; }
.cf-cat .chip { display: inline-flex; align-items: center; padding: .45rem .75rem; border: 1px solid var(--cf-borde); border-radius: 999px; color: var(--cf-texto-suave); font-size: .78rem; font-weight: 650; text-decoration: none; }
.cf-cat .chip.active { color: var(--cf-acento-texto); border-color: var(--cf-acento); background: var(--cf-acento); }
.cf-cat .chip:not(.active):hover { border-color: var(--cf-borde-fuerte); color: var(--cf-texto); }

/*
 * 🔴 `.media` ES UN `<span>`: sin `display:block` el `min-height` NO HACE NADA.
 *
 * Un elemento en línea se dimensiona por su contenido, no por `min-height`/
 * `width`/`height` — el span colapsaba a la altura de una línea de texto (~21px)
 * aunque `min-height:430px` apareciera correcto en el computed style. Y la
 * imagen, absoluta dentro de ese span sin `display:block`, no tenía un
 * contenedor de bloque del que heredar el 100 % de ancho: medía 0px. Los dos
 * fallos vienen de la misma causa. Encontrado el 31-ago-2026 en `/musica/`.
 *
 * La imagen va absoluta (no en flujo con `height:100%`) porque el `min-height`
 * del padre no es una altura EXPLÍCITA: un `<img>` con `height:100%` no
 * resuelve contra eso y colapsa a 0 igualmente.
 */
/*
 * 🔴 `min-height:150px` ES DEL MOCKUP ORIGINAL, no un capricho: es el piso que
 * usan TODOS los contextos que no traen su propia altura (`.default-feed
 * .media`, entre otros). Se perdió al portar la regla base y por eso esas
 * cajas colapsaban a 0px —imagen invisible y un borde de 1px que, sin alto,
 * se veía como doble línea pegada al borde superior de la tarjeta—. Cada
 * bloque con altura propia (150/430/76/62…px) la pisa más abajo igual.
 */
.cf-cat .media { display: block; position: relative; min-height: 150px; border-radius: var(--cf-radio-chico); overflow: hidden; background: var(--cf-superficie); border: 1px solid var(--cf-borde); }
.cf-cat .media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }

.cf-cat .eyebrow { font-size: .7rem; letter-spacing: .1em; text-transform: uppercase; font-weight: 800; color: var(--cf-brasa); display: flex; align-items: center; gap: .4rem; }
.cf-cat .label { font-size: .68rem; letter-spacing: .08em; text-transform: uppercase; color: var(--cf-brasa); font-weight: 800; }
.cf-cat .date { font-size: .68rem; letter-spacing: .06em; text-transform: uppercase; color: var(--cf-texto-tenue); }
.cf-cat .story-deck { color: var(--cf-texto-suave); font-size: .85rem; line-height: 1.5; margin: 0 0 .75rem; }
.cf-cat .section-head { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--cf-espacio); padding-bottom: .9rem; border-bottom: 1px solid var(--cf-borde); margin: 0 0 1.25rem; }
.cf-cat .section-title { font-family: var(--cf-titulo); font-size: 1.7rem; letter-spacing: -.02em; margin: 0; }
.cf-cat .text-link, .cf-cat .right-link { color: var(--cf-acento); font-weight: 800; font-size: .8rem; text-decoration: none; }
.cf-cat .text-link:hover, .cf-cat .right-link:hover { text-decoration: underline; }

.cf-cat h2, .cf-cat h3 { color: var(--cf-texto); font-family: var(--cf-titulo); margin: 0; }
.cf-cat a { text-decoration: none; color: inherit; }
.cf-cat a:hover h2, .cf-cat a:hover h3 { color: var(--cf-acento); }

/*
 * 🔴 «Hero con foto a sangre + texto encima» — cinco identidades comparten
 * este patrón (`.cinema-marquee`, `.creator-lead`, `.celeb-feature`,
 * `.tech-lead`, `.trend-tile`): la imagen real de `cf_img()` llega como un
 * `<img>` normal y esta regla la hace comportarse como fondo a sangre — sin
 * ella la foto solo empujaría el texto hacia abajo en vez de quedar detrás.
 *
 * ⚠️ SELECTOR DESCENDIENTE, no `>` directo. En `.cinema-marquee` el `<img>`
 * queda DENTRO del `<a>` (todo el bloque es un solo enlace), mientras que en
 * los otros cuatro es hermano anterior del `<a>` — un selector de hijo
 * directo solo cazaba cuatro de los cinco y la marquesina de Cine y
 * Streaming quedaba con la foto en flujo normal. Encontrado el 31-ago-2026.
 *
 * 🔴 Y `.cinema-marquee > a` NO lleva `position:relative`: dárselo lo
 * convierte en el contenedor de referencia del `<img>` absoluto en vez de
 * `.cinema-marquee` (que ya lo es), y como el `<a>` se encoge a su
 * contenido en flujo —solo `.cinema-copy`, que también es absoluta—, el
 * `<img>` terminaba con `inset:0` resuelto contra una caja de 0×0. Esa
 * marquesina ya tiene su propio texto posicionado (`.cinema-copy`), así que
 * no necesita esta regla — las otras cuatro sí, porque su texto va en
 * flujo normal dentro del `<a>`.
 */
.cinema-marquee img, .creator-lead > img, .celeb-feature > img, .tech-lead > img, .trend-tile > img {
	position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0;
}
.creator-lead > a, .tech-lead > a, .trend-tile > a { position: relative; z-index: 1; }

/* ─── Música: lead + radar ─────────────────────────────────────────────── */
.music-layout { display: grid; grid-template-columns: 1.3fr .7fr; gap: 1.1rem; }
.music-lead .media { min-height: 430px; }
.music-lead h2 { font-size: 2.1rem; line-height: 1.05; margin: .6rem 0; }
/*
 * 🔴 EL RADAR REPARTE SUS FILAS EN TODO EL ALTO — 03-sep-2026.
 *
 * `.music-layout` es una fila de grid: las dos columnas miden lo que la más
 * alta, y la líder (foto grande + bajada) gana. El radar, con sus 4 filas de
 * 97 px, terminaba a media columna y dejaba **180 px muertos abajo** —medido en
 * `/musica/`—. No es el hueco negro de la líder de Deportes, pero rompe el
 * cierre igual.
 *
 * ⚠️ NO se estiran las filas (`flex:1` en cada una las volvería tarjetas
 *    distintas a las del resto del sitio). Se reparte el ESPACIO ENTRE ellas,
 *    que mantiene la tarjeta igual y cierra la columna a la misma altura.
 */
.radar { border-left: 1px solid var(--cf-borde); padding-left: 1.1rem; display: flex; flex-direction: column; }
.radar .radar-row:last-of-type { border-bottom: 0; }
.radar h2 { font-size: 1rem; margin: 0 0 .75rem; }
.radar-row { display: grid; grid-template-columns: 80px 1fr; gap: .6rem; padding: .75rem 0; border-bottom: 1px solid var(--cf-borde); flex: 1 1 auto; align-content: center; }
.radar-row .media { min-height: 62px; }
.radar-row h3 { font-size: .85rem; margin: .2rem 0; }
.album-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: .75rem; margin-top: 1.4rem; }
.album-card .media { min-height: 150px; }
.album-card h3 { font-size: .92rem; line-height: 1.2; margin: .45rem 0; }

/* ─── Cine y Streaming: marquesina + fila de mini-tarjetas ─────────────── */
.cinema-marquee { position: relative; min-height: 470px; border: 1px solid var(--cf-borde); border-radius: var(--cf-radio); overflow: hidden; background: var(--cf-superficie); }
.cinema-marquee::after { content: ""; position: absolute; inset: 35% 0 0; background: var(--cf-velo-degradado); }
.cinema-copy { position: absolute; z-index: 2; left: 1.6rem; right: 1.6rem; bottom: 1.5rem; }
.cinema-copy h2 { font-size: 2.3rem; line-height: 1.04; margin: .5rem 0; }
.cinema-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: .75rem; margin-top: .9rem; }
.cinema-mini { display: grid; grid-template-columns: 110px 1fr; gap: .75rem; border: 1px solid var(--cf-borde); border-radius: var(--cf-radio-chico); background: var(--cf-superficie); padding: .6rem; }
.cinema-mini .media { min-height: 92px; }
.cinema-mini h3 { font-size: .92rem; margin: .25rem 0; }

/* ─── Entretenimiento: split editorial + grilla TV ─────────────────────── */
.ent-split { display: grid; grid-template-columns: 1.05fr .95fr; gap: 0; border: 1px solid var(--cf-borde); border-radius: var(--cf-radio); overflow: hidden; background: var(--cf-superficie); }
.ent-split .media { min-height: 420px; border: 0; border-radius: 0; }
.ent-copy { padding: 2rem; align-self: center; }
.ent-copy h2 { font-size: 2.4rem; line-height: 1.02; margin: .5rem 0 .9rem; }
.tv-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: .75rem; margin-top: 1.1rem; }
.tv-card { border-top: 1px solid var(--cf-borde); padding-top: .75rem; }
.tv-card .media { min-height: 140px; }
.tv-card h3 { font-size: .92rem; line-height: 1.22; }

/* ─── Influencers: hero + "en conversación" ─────────────────────────────── */
.creator-hero { display: grid; grid-template-columns: 1.2fr .8fr; gap: .9rem; }
.creator-lead { min-height: 420px; border: 1px solid var(--cf-borde); border-radius: var(--cf-radio); background: var(--cf-superficie); display: flex; flex-direction: column; justify-content: flex-end; padding: 1.75rem; position: relative; overflow: hidden; }
.creator-lead h2 { font-size: 2.25rem; line-height: 1.05; position: relative; z-index: 1; }
.creator-lead::after { content: ""; position: absolute; inset: 30% 0 0; background: var(--cf-velo-degradado); }
.conversation-panel { border: 1px solid var(--cf-borde); border-radius: var(--cf-radio); background: var(--cf-superficie); padding: 1rem; }
.conversation { padding: .8rem 0; border-bottom: 1px solid var(--cf-borde); }
.conversation:last-child { border: 0; }
.conversation strong { font-size: .88rem; }
.conversation p { font-size: .78rem; color: var(--cf-texto-suave); margin: .3rem 0; }
.creator-cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: .75rem; margin-top: 1.1rem; }
.creator-card { border: 1px solid var(--cf-borde); border-radius: var(--cf-radio-chico); padding: .75rem; background: var(--cf-superficie); }
.creator-card .media { min-height: 170px; }
.creator-card h3 { font-size: .92rem; }

/* ─── Celebridades: portada revista + radar de 5 + galería ─────────────── */
.celeb-feature { position: relative; min-height: 430px; border: 1px solid var(--cf-borde); border-radius: var(--cf-radio); overflow: hidden; background: var(--cf-superficie); }
.celeb-feature::after { content: ""; position: absolute; inset: 25% 0 0; background: var(--cf-velo-degradado); }
.celeb-copy { position: absolute; z-index: 2; left: 1.9rem; right: 1.9rem; bottom: 1.75rem; max-width: 45em; }
.celeb-copy h2 { font-size: 2.4rem; line-height: 1.02; margin: .5rem 0; }
.radar-five { display: grid; grid-template-columns: repeat(5, 1fr); gap: .6rem; margin-top: 1.25rem; }
.radar-card { border: 1px solid var(--cf-borde); border-radius: var(--cf-radio-chico); padding: .85rem; background: var(--cf-superficie); min-height: 160px; }
.radar-card .num { font-family: var(--cf-titulo); font-size: 1.5rem; color: var(--cf-brasa); display: block; }
.radar-card h3 { font-size: .8rem; line-height: 1.22; margin-top: .4rem; }
.celeb-gallery { display: grid; grid-template-columns: 1.4fr .6fr; gap: .75rem; margin-top: 1.25rem; }
.celeb-gallery .media:first-child { min-height: 280px; }
.celeb-gallery-side { display: grid; gap: .75rem; }
.celeb-gallery-side .media { min-height: 134px; }

/* ─── Tendencias: mosaico asimétrico + termómetro ───────────────────────── */
.trend-grid { display: grid; grid-template-columns: 1.2fr .8fr .8fr; grid-template-rows: 220px 220px; gap: .75rem; }
.trend-tile { position: relative; border: 1px solid var(--cf-borde); border-radius: var(--cf-radio); background: var(--cf-superficie); overflow: hidden; padding: 1.1rem; display: flex; flex-direction: column; justify-content: flex-end; }
.trend-tile::after { content: ""; position: absolute; inset: 30% 0 0; background: var(--cf-velo-degradado); z-index: 0; }
.trend-tile > * { position: relative; z-index: 1; }
.trend-tile:first-child { grid-row: 1 / 3; }
.trend-tile:nth-child(2) { grid-column: 2 / 4; }
.trend-tile h2 { font-size: 1.85rem; line-height: 1.05; margin: .45rem 0; }
.trend-tile h3 { font-size: 1rem; margin: .3rem 0; }
.trend-meter { display: grid; grid-template-columns: repeat(5, 1fr); gap: .6rem; margin-top: 1.1rem; }
.meter { border: 1px solid var(--cf-borde); border-radius: var(--cf-radio-chico); padding: .75rem; background: var(--cf-superficie); }
.meter b { display: block; font-size: .92rem; }
.meter span { font-size: .75rem; color: var(--cf-texto-suave); }

/* ─── Tecnología: hero analítico + insights ─────────────────────────────── */
.tech-board { display: grid; grid-template-columns: 1.25fr .75fr; gap: .9rem; }
.tech-lead { min-height: 420px; border: 1px solid var(--cf-borde); border-radius: var(--cf-radio); background: var(--cf-superficie); padding: 1.75rem; display: flex; flex-direction: column; justify-content: flex-end; position: relative; overflow: hidden; }
.tech-lead::after { content: ""; position: absolute; inset: 30% 0 0; background: var(--cf-velo-degradado); }
.tech-lead h2 { font-size: 2.25rem; line-height: 1.05; position: relative; z-index: 1; }
/*
 * 🔴 «Lo más leído de la sección» — foto de fondo + degradado + número.
 * Pedido de Mario el 31-ago-2026, tras reemplazar las cifras editoriales
 * inventadas del mockup por artículos reales (`cf_cat_mas_leidas()`): que
 * cada uno lleve su propia foto como fondo, un velo oscuro-a-transparente
 * para que el título se lea, y el puesto (1, 2, 3) superpuesto — mismo
 * lenguaje visual que ya usan `.cinema-marquee`/`.tech-lead` para la imagen
 * a sangre, y que `.radar-card .num` para el numerado.
 */
.insights { display: grid; gap: .6rem; }
.insight { position: relative; overflow: hidden; min-height: 100px; border: 1px solid var(--cf-borde); border-radius: var(--cf-radio-chico); background: var(--cf-superficie); }
.insight a { display: block; height: 100%; padding: .8rem; }
.insight img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.insight::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, var(--cf-velo), var(--cf-velo-fuerte)); z-index: 1; }
.insight__num { position: relative; z-index: 2; display: block; font-family: var(--cf-titulo); font-size: 1.3rem; color: var(--cf-brasa); }
.insight__titulo { position: relative; z-index: 2; display: block; margin-top: .3rem; font-size: .92rem; line-height: 1.25; color: var(--cf-sobre-oscuro); }
.tech-latest { display: grid; grid-template-columns: repeat(3, 1fr); gap: .75rem; margin-top: 1.1rem; }
.tech-latest .card { border: 1px solid var(--cf-borde); border-radius: var(--cf-radio-chico); background: var(--cf-superficie); overflow: hidden; }
.tech-latest .card .media { min-height: 140px; border: 0; border-radius: 0; }
.tech-latest .card-body { padding: .75rem; }
.tech-latest .story-title { font-size: .92rem; margin: 0; }

/* ─── Fallback (categorías nuevas/sin identidad propia) ─────────────────── */
.default-package { display: grid; grid-template-columns: 1.3fr .7fr; gap: 1rem; }
/*
 * 🔴 LA FOTO DE LA LÍDER CRECE HASTA LLENAR LA CELDA — 03-sep-2026.
 *
 * Las dos columnas del paquete son una fila de grid, así que ambas celdas miden
 * lo mismo: lo que mida la más alta. La derecha lleva DOS tarjetas apiladas y
 * casi siempre gana, y la líder —con su foto de alto fijo— dejaba el resto en
 * negro. Medido en `/deportes/` antes de tocarlo: celda de **915 px**, contenido
 * de la líder terminando en **538 px**, o sea **378 px de vacío**.
 *
 * Con la líder en columna flexible y la foto en `flex:1`, la imagen absorbe
 * exactamente lo que sobre. El `min-height` se queda como suelo para cuando la
 * columna derecha sea la corta.
 *
 * 📌 Mismo criterio que ya se aplicó a la líder de las rejillas del home: si la
 *    celda va a tener ese alto igual, que lo llene la foto y no un hueco.
 */
.default-package > article { display: flex; flex-direction: column; }
/*
 * ⚠️ LA CADENA FLEX NO PUEDE ROMPERSE EN EL ENLACE. `.media` NO es hijo directo
 * del `<article>`: va dentro del `<a>` que envuelve foto, etiqueta y titular.
 * Con el `<a>` en `display:block`, un `flex:1` sobre `.media` no hace
 * absolutamente nada —probado, el vacío seguía en 378 px—. El enlace también
 * tiene que ser columna flexible y crecer, y solo entonces la foto puede
 * absorber lo que sobra.
 */
.default-package > article > a { display: flex; flex-direction: column; flex: 1 1 auto; }
.default-package > article > a .media { flex: 1 1 auto; }
.default-package .media { min-height: 390px; }
.default-side { display: grid; gap: .75rem; }

/*
 * 🔴 EL MOSAICO DE «SEGUIR CARGANDO» — un solo ritmo, igual en las 7
 * identidades y en el fallback. Decisión de Mario del 31-ago-2026, calcada de
 * cómo compone Infobae: fila de 2 grande → fila de 3 media → fila de 4 chica
 * → fila de 3 con foto grande otra vez → se repite (`cf_cat_filas_mosaico()`
 * en `inc/categorias.php` arma los grupos; aquí solo se dimensiona cada uno).
 * La variedad de ritmo es lo que evita que una sección con 30+ artículos se
 * vea como la misma rejilla repetida cuarenta veces.
 */
.cf-mosaico { display: flex; flex-direction: column; gap: 1.6rem; margin-top: 1.6rem; }
.cf-mosaico__fila { display: grid; gap: 1.1rem; }
.cf-mosaico__fila article { display: flex; flex-direction: column; }
.cf-mosaico__fila .story-title { margin: .6rem 0 0; }
.cf-mosaico__fila--2 { grid-template-columns: repeat(2, 1fr); }
.cf-mosaico__fila--2 .media { min-height: 260px; }
.cf-mosaico__fila--2 .story-title { font-size: 1.15rem; }
.cf-mosaico__fila--3 { grid-template-columns: repeat(3, 1fr); }
.cf-mosaico__fila--3 .media { min-height: 170px; }
.cf-mosaico__fila--4 { grid-template-columns: repeat(4, 1fr); }
.cf-mosaico__fila--4 .media { min-height: 120px; }
.cf-mosaico__fila--4 .story-title { font-size: .85rem; }
.cf-mosaico__fila--5 { grid-template-columns: repeat(5, 1fr); }
.cf-mosaico__fila--5 .media { min-height: 100px; }
.cf-mosaico__fila--5 .story-title { font-size: .8rem; }
.cf-mosaico__fila--3-grande { grid-template-columns: repeat(3, 1fr); }
.cf-mosaico__fila--3-grande .media { min-height: 230px; }
.cf-mosaico__fila--3-grande .story-title { font-size: 1.05rem; }

/* ─── Franja contextual de agenda ("Cartelera musical", etc.) ─────────────
 * `.category-note` en sí vive en `main.css` desde el 31-ago-2026 —la misma
 * franja se pinta también en el home, donde esta hoja no está cargada—.
 * Aquí no queda nada que redeclarar. */

/* ─── Continuación de archivo ("Cargar más") ─────────────────────────────── */
.archive-continuation { display: flex; align-items: center; justify-content: center; gap: 1rem; margin: 2.6rem 0 .4rem; padding-top: 1.5rem; border-top: 1px solid var(--cf-borde); }
.archive-continuation .page-state { font-size: .75rem; color: var(--cf-texto-suave); }
.archive-continuation .load-more { min-width: 210px; text-align: center; }

@media (max-width: 959px) {
	.music-layout, .creator-hero, .tech-board, .celeb-gallery, .default-package { grid-template-columns: 1fr; }
	.radar { border-left: 0; padding-left: 0; }
	.album-grid, .tv-grid, .creator-cards, .radar-five, .tech-latest, .trend-meter { grid-template-columns: 1fr 1fr; }
	.trend-grid { grid-template-columns: 1fr 1fr; grid-template-rows: auto; }
	.trend-tile:first-child { grid-row: auto; grid-column: 1 / -1; min-height: 320px; }
	.trend-tile:nth-child(2) { grid-column: auto; }
	.ent-split { grid-template-columns: 1fr; }
	.ent-copy h2 { font-size: 1.9rem; }
	.cf-mosaico__fila--4, .cf-mosaico__fila--5 { grid-template-columns: repeat(2, 1fr); }
	.cf-mosaico__fila--3, .cf-mosaico__fila--3-grande { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 560px) {
	.cf-cat .cat-intro h1 { font-size: 2.2rem; }
	.music-lead .media, .cinema-marquee, .creator-lead, .tech-lead, .celeb-feature { min-height: 300px; }
	.music-lead h2, .cinema-copy h2, .creator-lead h2, .tech-lead h2 { font-size: 1.65rem; }
	.album-grid, .tv-grid, .creator-cards, .radar-five, .tech-latest, .trend-meter { grid-template-columns: 1fr; }
	.cinema-row { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; }
	.cinema-mini { min-width: 82%; grid-template-columns: 90px 1fr; scroll-snap-align: start; }
	.ent-copy { padding: 1.2rem; }
	.ent-copy h2 { font-size: 1.75rem; }
	.celeb-copy { left: 1.1rem; right: 1.1rem; bottom: 1.1rem; }
	.celeb-copy h2 { font-size: 1.9rem; }
	.trend-grid { grid-template-columns: 1fr; }
	.trend-tile:first-child { grid-column: auto; min-height: 300px; }
	.trend-tile { min-height: 190px; }
	.archive-continuation { flex-direction: column; }
	.archive-continuation .load-more { width: 100%; }

	/*
	 * 🔴 EN MOBILE EL MOSAICO ES LISTADO, no rejilla encogida. Mario, 31-ago-2026:
	 * las filas de 2/3/4 solo tienen sentido con espacio horizontal para
	 * variar el ritmo — en una pantalla angosta esa variedad desaparece de
	 * todos modos (todo se apila), así que en vez de simular columnas que ya
	 * no caben, cada fila se vuelve una sola columna de filas de lista
	 * horizontales: miniatura a la izquierda, texto a la derecha.
	 */
	.cf-mosaico { gap: 0; margin-top: 1.2rem; }
	.cf-mosaico__fila { grid-template-columns: 1fr !important; gap: 0; }
	.cf-mosaico__fila article { flex-direction: row; align-items: center; gap: .85rem; padding: .85rem 0; border-top: 1px solid var(--cf-borde); }
	.cf-mosaico__fila article:first-child { border-top: 0; }
	.cf-mosaico__fila article a { display: flex; flex-direction: row; align-items: center; gap: .85rem; width: 100%; }
	.cf-mosaico__fila .media { flex: 0 0 92px; min-height: 92px !important; }
	.cf-mosaico__fila .story-title { margin: 0 !important; font-size: .88rem !important; order: 0; }
	.cf-mosaico__fila .date { order: 1; }
}

/* ─── MAQUETA ÚNICA DE SECCIÓN — aislada ─────────────────────────────────────
 *
 * 🔴 Prueba pedida por Mario el 06-sep-2026 sobre `default.php` (la que usa Deportes) para
 * unificar las ocho identidades: *«1 destacada y luego grid de 4 cols; en mobile la vista
 * puede ser como la de más información (listado)»*.
 *
 * ⚠️ NO CUELGA DE `.cf-rejilla` NI DE `.cf-nota`, por instrucción suya del mismo día. Es la
 *    tercera pieza que se escribe aislada hoy, y por la misma razón medida: sobre el bloque de
 *    relacionados caían **74 reglas** de la rejilla de la portada.
 */
.cf-sec { display: grid; gap: var(--cf-espacio-2); }

/*
 * ─── LA COSTURA ENTRE TANDAS DE «CARGAR MÁS» ────────────────────────────────────────────
 *
 * 🔴 LA REGLA NO VA POR ANCHURA, VA POR CÓMO SE SEPARAN LOS ÍTEMS. Y eso cambia con la
 * maqueta, no con el número de píxeles:
 *
 *   · tarjetas (desde 1101) → se separan con HUECO y sin raya  → la costura es un margen
 *   · lista (hasta 1100)    → se separan con BORDE y relleno   → la costura es ese borde
 *
 * ⚠️ ESTO SE ARREGLÓ MAL DOS VECES. Primero fue un margen para todas las anchuras, y en móvil
 *    dejaba **la única junta de la lista sin raya**. Al corregirlo lo acoté a 859 px… pero la
 *    lista llega hasta **1100**: entre 860 y 1100 quedaban filas de lista con la costura de las
 *    tarjetas. Lo vio Mario. **El corte de una regla es el de la maqueta a la que sirve** — el
 *    mismo error de elegir un número redondo que ya costó la fila de evento.
 */
@media (min-width: 1101px) {
	/* El margen es el mismo hueco que separa las filas de la rejilla: la unión no se nota. */
	.cf-sec + .cf-sec { margin-top: var(--cf-espacio); }
}

@media (max-width: 1100px) {
	.cf-sec + .cf-sec { margin-top: 0; }
	/*
	 * Las que abren la tanda recuperan su raya. Son DOS en el tramo de dos columnas y una en el
	 * de una sola; declararlas las dos vale para los dos casos, porque en una columna la
	 * segunda pieza ya la lleva de todos modos.
	 */
	.cf-sec + .cf-sec .cf-sec__pieza:nth-child(1),
	.cf-sec + .cf-sec .cf-sec__pieza:nth-child(2) {
		border-top: 1px solid var(--cf-borde);
		padding-top: .85rem;
	}
}

/* ── La destacada: foto a la izquierda, texto a la derecha ── */
.cf-sec__lider {
	display: grid; grid-template-columns: 1.15fr 1fr;
	gap: var(--cf-espacio-2); align-items: center;
	padding-bottom: var(--cf-espacio-2);
	border-bottom: 1px solid var(--cf-borde);
}
.cf-sec__lider .cf-sec__titular { font-size: clamp(1.5rem, 2.2vw, 2.1rem); line-height: 1.14; }
.cf-sec__lider .cf-sec__foto { aspect-ratio: 16 / 10; }

/* ── La rejilla de cuatro ── */
.cf-sec__rejilla { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--cf-espacio); }

.cf-sec__pieza { display: grid; gap: .55rem; align-content: start; min-width: 0; }
.cf-sec__pieza .cf-sec__titular {
	font-size: 1rem; line-height: 1.3;
	display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; overflow: hidden;
}

/* ── Piezas comunes ── */
.cf-sec__foto {
	display: block; overflow: hidden; border-radius: var(--cf-radio-chico);
	background: var(--cf-superficie-2); aspect-ratio: 16 / 9;
}
/*
 * 🔴 EL `.media` ANIDADO NECESITA ALTURA — lo señaló Mario: «en `.cf-cat .media` falta
 *    `height: 100%`».
 *
 * `cf_cat_media()` devuelve un `<span class="media">` con `min-height: 150px` y la imagen en
 * `position: absolute`. Dentro de una caja con `aspect-ratio`, ese span no se estira: se queda
 * en sus 150 px y la foto no llena el hueco que la caja ya reservó. Es la misma trampa que este
 * proyecto documenta para `.media` («es un `<span>`: sin `display:block`, `min-height` no hace
 * nada»), en su versión inversa — aquí el `min-height` es justo lo que sobra.
 */
.cf-sec__foto .media { height: 100%; min-height: 0; border: 0; border-radius: 0; }
.cf-sec__foto img,
.cf-sec__foto .media img { width: 100%; height: 100%; object-fit: cover; display: block; }

.cf-sec__cuerpo { display: grid; gap: .4rem; align-content: start; min-width: 0; }
.cf-sec__ojo {
	font-size: .68rem; font-weight: 800; letter-spacing: .09em; text-transform: uppercase;
	color: var(--cf-brasa);
}
.cf-sec__titular { margin: 0; font-weight: 750; }
.cf-sec__titular a { color: var(--cf-texto); text-decoration: none; }
.cf-sec__titular a:hover { color: var(--cf-acento); }
.cf-sec__bajada { margin: 0; color: var(--cf-texto-suave); font-size: .95rem; line-height: 1.45; }
.cf-sec__fecha { font-size: .75rem; color: var(--cf-texto-tenue); }

/*
 * ── Tableta (700-1100): DOS COLUMNAS DE FILAS, no de tarjetas ──
 *
 * Maqueta pedida por Mario el 06-sep-2026 con una referencia: *«vista iPad puede ser esta»*.
 * Y es la decisión correcta para ese ancho: con dos tarjetas de foto grande por fila entran
 * cuatro titulares por pantalla; en fila compacta entran ocho, que es lo que se busca en una
 * página de archivo.
 *
 * 🔴 La altura de la fila la mide LA IMAGEN, no el texto —proporción fija y titular recortado—,
 * que es lo que mantiene las dos columnas cuadradas entre sí.
 */
@media (min-width: 860px) and (max-width: 1100px) {
	.cf-sec__rejilla { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 var(--cf-espacio-2); }
	.cf-sec__pieza {
		grid-template-columns: 145px minmax(0, 1fr); gap: .9rem; align-items: center;
		padding: .85rem 0; border-top: 1px solid var(--cf-borde);
	}
	/* Las dos primeras abren columna: ninguna lleva raya encima. */
	.cf-sec__pieza:nth-child(1), .cf-sec__pieza:nth-child(2) { border-top: 0; padding-top: 0; }
	.cf-sec__pieza .cf-sec__titular { font-size: .98rem; -webkit-line-clamp: 3; }
}

/*
 * ── Móvil: LISTA, como «Más información» de la referencia ──
 *
 * 🔴 La altura de la fila la mide LA IMAGEN, no el texto: proporción fija y titular recortado.
 * Es la misma lección de esta tarde — con la miniatura libre, cada fila medía una cosa y el
 * bloque se veía desordenado.
 */
/*
 * ── Hasta 859: UNA columna de filas ──
 * ⚠️ El corte NO está en 700. Medido a 768 —el iPad vertical— con dos columnas: la caja del
 *    texto caía a **180 px** junto a una foto de 145, y el titular se partía en dos palabras
 *    por línea. El punto de corte de un componente es donde deja de caber su contenido, no un
 *    número redondo.
 */
@media (max-width: 859px) {
	.cf-sec__lider { grid-template-columns: 1fr; gap: .9rem; align-items: start; }
	.cf-sec__lider .cf-sec__titular { font-size: 1.35rem; }

	.cf-sec__rejilla { grid-template-columns: 1fr; gap: 0; }
	.cf-sec__pieza {
		grid-template-columns: 116px minmax(0, 1fr); gap: .8rem; align-items: center;
		padding: .85rem 0; border-top: 1px solid var(--cf-borde);
	}
	.cf-sec__pieza:first-child { border-top: 0; padding-top: 0; }
	.cf-sec__pieza .cf-sec__titular { font-size: .95rem; -webkit-line-clamp: 2; }

}

/*
 * ⚠️ ENTRE 600 Y 859 LA MINIATURA CRECE. Medido a 768 —iPad vertical—: la fila mide 704 px y
 *    una foto de 116 se pierde dentro, con 575 px de texto al lado. El tamaño de la miniatura
 *    depende del ancho de la FILA, no de si es «móvil».
 */
@media (min-width: 600px) and (max-width: 859px) {
	.cf-sec__pieza { grid-template-columns: 190px minmax(0, 1fr); gap: 1rem; }
	.cf-sec__pieza .cf-sec__titular { font-size: 1.05rem; -webkit-line-clamp: 3; }
}
