/*
 * Layout — contenedores, estructura de página, grillas. Sin estilos de
 * componentes individuales (eso vive en components.css).
 */

.container {
	width: 100%;
	max-width: 1280px;
	margin-inline: auto;
	padding-inline: var(--space-4);
}

@media (min-width: 768px) {
	.container {
		padding-inline: var(--space-6);
	}
}

.site {
	display: flex;
	flex-direction: column;
	min-height: 100vh;
}

.site-main {
	flex: 1;
}

.stack {
	display: flex;
	flex-direction: column;
}

.stack > * + * {
	margin-top: var(--gap, var(--space-4));
}

.cluster {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var(--gap, var(--space-3));
}

/* Grilla de tarjetas: 2 (móvil) → 3 (tablet) → 4 (desktop) → 5 (desktop grande) */
.listing-grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: var(--space-4);
}

@media (min-width: 768px) {
	.listing-grid {
		grid-template-columns: repeat(3, 1fr);
		gap: var(--space-5);
	}
}

@media (min-width: 1024px) {
	.listing-grid {
		grid-template-columns: repeat(4, 1fr);
	}
}

@media (min-width: 1280px) {
	.listing-grid {
		grid-template-columns: repeat(5, 1fr);
	}
}

.section {
	padding-block: var(--space-7);
}

/* Menos aire arriba cuando el bloque anterior ya trae su propio espaciado
   (ej. el header) — usado en la landing geográfica entre header/breadcrumb
   y entre filtros/secciones de plan. */
.section--tight-top {
	padding-top: var(--space-4);
}

.section-header {
	display: flex;
	align-items: baseline;
	justify-content: space-between;
	gap: var(--space-4);
	margin-bottom: var(--space-5);
}
