/**
 * Game card (decision 0026): a poster (the cover at 3:4) with the title, year
 * and type under it; lifts and zooms on hover. A list view (franchise games
 * grid, data-view="list") lays the same card out as a row.
 */

.vgp-game-card {
	position: relative;
	height: 100%;
	background: var(--vgp-surface);
	border: 1px solid var(--vgp-hairline);
	border-radius: var(--vgp-radius);
	overflow: hidden;
	transition: transform var(--vgp-speed) var(--vgp-ease), border-color var(--vgp-speed) var(--vgp-ease), box-shadow var(--vgp-speed) var(--vgp-ease);
}

.vgp-game-card:hover,
.vgp-game-card:focus-within {
	transform: translateY(-4px);
	border-color: rgba(var(--vgp-orange-rgb), 0.6);
	box-shadow: var(--vgp-shadow);
}

.vgp-game-card__link {
	display: flex;
	flex-direction: column;
	height: 100%;
	color: inherit;
	text-decoration: none;
}

.vgp-game-card__link:focus-visible {
	outline-offset: -2px;
}

.vgp-game-card__cover {
	position: relative;
	container-type: inline-size;
	aspect-ratio: 3 / 4;
	overflow: hidden;
	background: linear-gradient(160deg, var(--vgp-surface-raised), #0a0b0d);
}

.vgp-game-card__cover img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.6s var(--vgp-ease);
}

.vgp-game-card:hover .vgp-game-card__cover img {
	transform: scale(1.06);
}

/* No cover yet: the title set large on the brand gradient, so the grid never shows a blank tile. */
.vgp-game-card__placeholder {
	position: absolute;
	inset: 0;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	gap: 0.5rem;
	padding: 0.9rem;
	background:
		radial-gradient(120% 80% at 100% 0%, rgba(var(--vgp-orange-rgb), 0.35), transparent 60%),
		linear-gradient(160deg, #22262d, #0e1013);
	color: #fff;
	font-weight: 900;
	/* Sized to the card (container units), and long words hyphenate, so any title fits. */
	font-size: clamp(0.7rem, 10.5cqi, 1.1rem);
	line-height: 1.1;
	letter-spacing: -0.02em;
	text-transform: uppercase;
	overflow-wrap: anywhere;
	hyphens: auto;
}

.vgp-game-card__placeholder i {
	font-size: 1.5rem;
	color: var(--vgp-orange);
	opacity: 0.85;
}

.vgp-game-card__body {
	display: flex;
	flex-direction: column;
	flex: 1;
	gap: 0.35rem;
	padding: 0.7rem 0.75rem 0.8rem;
}

.vgp-game-card__title {
	font-size: 0.875rem;
	font-weight: 700;
	line-height: 1.25;
	letter-spacing: -0.01em;
	margin: 0;
	color: var(--bs-emphasis-color);
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.vgp-game-card__meta {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem;
	margin-top: auto;
	font-size: 0.8125rem;
	color: var(--bs-secondary-color);
}

/* List view: cover thumbnail, then the text, in one row. */
[data-view="list"] .vgp-game-card__link {
	flex-direction: row;
	align-items: stretch;
}

[data-view="list"] .vgp-game-card__cover {
	flex: 0 0 4.5rem;
	aspect-ratio: 3 / 4;
}

[data-view="list"] .vgp-game-card__placeholder {
	font-size: 0.6rem;
	padding: 0.4rem;
}

[data-view="list"] .vgp-game-card__placeholder i {
	font-size: 0.9rem;
}

[data-view="list"] .vgp-game-card__body {
	justify-content: center;
	padding: 0.75rem 1rem;
}

[data-view="list"] .vgp-game-card__title {
	font-size: 1rem;
}

[data-view="list"] .vgp-game-card__meta {
	margin-top: 0;
	justify-content: flex-start;
}

[data-view="list"] .vgp-game-card:hover {
	transform: translateX(4px);
}

/*
 * The grid: a set number of poster columns per breakpoint (2, 3, 6, then 7
 * across a wide page; Bootstrap's row-cols stop at 6). Every count divides the
 * games archive's page size (42, inc/template-functions.php), so a full page
 * never ends on a straggler row.
 */
.vgp-grid {
	--vgp-grid-cols: 2;
	display: grid;
	grid-template-columns: repeat(var(--vgp-grid-cols), minmax(0, 1fr));
	gap: 1rem 0.9rem;
}

@media (min-width: 576px) {
	.vgp-grid {
		--vgp-grid-cols: 3;
	}
}

@media (min-width: 992px) {
	.vgp-grid {
		--vgp-grid-cols: 6;
	}
}

@media (min-width: 1400px) {
	.vgp-grid {
		--vgp-grid-cols: 7;
	}
}

.vgp-grid[data-view="list"] {
	grid-template-columns: repeat(auto-fill, minmax(min(24rem, 100%), 1fr));
	gap: 0.75rem;
}

.vgp-grid > [hidden] {
	display: none;
}

/* The type badge: its own centered line at the bottom of the card, under the year (the cover stays clean). */
.vgp-game-card__badge {
	align-self: center;
	max-width: 100%;
	margin-top: 0.15rem;
	white-space: normal;
	background: rgba(var(--vgp-orange-rgb), 0.12);
	color: #ffc189;
	border: 1px solid rgba(var(--vgp-orange-rgb), 0.55);
}

/* In the list view it lines up with the text instead. */
.vgp-game-card__badges {
	justify-content: center;
}

[data-view="list"] .vgp-game-card__badges {
	justify-content: flex-start;
}

/* "Coming soon": cyan, apart from the orange type badge. */
.vgp-game-card__badge--soon {
	background: rgba(var(--bs-info-rgb), 0.12);
	color: var(--bs-info-text-emphasis);
	border-color: rgba(var(--bs-info-rgb), 0.55);
}

[data-view="list"] .vgp-game-card__badge {
	align-self: flex-start;
}

[data-view="list"] .vgp-game-card__badge--none {
	display: none;
}
