/*
 * match-portfolio.css — template-match-portfolio.php only
 * (enqueued by m6m_pf_assets() in inc/portfolio-query.php).
 *
 * Only what is portfolio-specific lives here: the filtered-view title,
 * the filter bar and phone dock, the photo grid, By match, empty states
 * and the lightbox. The shared matchday components (frame, kicker, h2,
 * buttons, hero, proof strip, latest rail, club wall, voices, booking
 * panel) and their tokens (--m6mpf-hi, --m6mpf-score, --m6mpf-px,
 * --m6mpf-rule) are in assets/css/components/matchday.css, a declared
 * dependency that always prints directly before this file.
 *
 * Grid: 2 / 4 / 6 columns at 0 / 560 / 900. Row height is 0.75 of a
 * column (container query units), so a 2×2 span is 4:3, 1×2 is 2:3
 * and 2×3 is near-square. Every tile's box is fixed by the grid before
 * its image arrives: no layout shift. The `sizes` strings in
 * m6m_pf_tile_sizes() mirror these spans — change both together.
 *
 * Mobile-first; min-width 560 / 768 / 900 / 1100.
 */

/* Filtered / paged views lead with a title that names the filters. */
.m6mpf-intro { padding-block: clamp(2.5rem, 7vw, 5rem) 1.5rem; }
.m6mpf-title {
	margin: 0;
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--display);
	font-weight: 700;
	line-height: .9;
	letter-spacing: -.03em;
	text-transform: uppercase;
	text-wrap: balance;
}
.m6mpf-intro__sub {
	margin: .9rem 0 0;
	font-size: var(--wp--preset--font-size--label);
	letter-spacing: .12em;
	text-transform: uppercase;
	font-variant-numeric: tabular-nums;
	color: var(--wp--preset--color--text-secondary);
}

/* ---- Buttons: busy state while "Load more" fetches ------- */
.m6mpf-btn[aria-busy="true"] { opacity: .6; pointer-events: none; }

/* ============================================================
   4. THE WORK — filter bar, grid, By match
   ============================================================ */
.m6mpf-work { padding-top: clamp(3.5rem, 9vw, 7rem); }
.m6mpf-intro + .m6mpf-work { padding-top: 0; }

/* ---- Filter bar: sticky under the header (≥768), thumb dock (<768) */
.m6mpf-bar {
	z-index: 5;
	background: color-mix(in srgb, var(--wp--preset--color--bg) 94%, transparent);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border-block: 1px solid var(--m6mpf-rule);
}
.m6mpf-bar:focus { outline: none; }
.m6mpf-bar:focus-visible { outline: 2px solid var(--m6mpf-hi); outline-offset: -2px; }
.m6mpf-bar__inner {
	display: flex;
	align-items: center;
	gap: .5rem;
	padding-block: .6rem;
	overflow-x: auto;
	overscroll-behavior-x: contain;
	scrollbar-width: none;
	scroll-padding-inline: var(--m6mpf-px);
}
.m6mpf-bar__inner::-webkit-scrollbar { display: none; }
.m6mpf-bar__views,
.m6mpf-bar__rail,
.m6mpf-bar__group {
	display: flex;
	flex: none;
	align-items: center;
	gap: .4rem;
}
.m6mpf-bar__views {
	padding-right: .6rem;
	border-right: 1px solid var(--m6mpf-rule);
}
.m6mpf-bar__group {
	padding-left: .6rem;
	border-left: 1px solid var(--m6mpf-rule);
}
.m6mpf-bar__label {
	font-size: .7rem;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--wp--preset--color--text-muted);
	white-space: nowrap;
}
.m6mpf-bar__count {
	flex: none;
	margin: 0 0 0 auto;
	padding-left: 1rem;
	font-size: var(--wp--preset--font-size--label);
	font-variant-numeric: tabular-nums;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--text-secondary);
	white-space: nowrap;
}

.m6mpf-chip {
	display: inline-flex;
	flex: none;
	align-items: center;
	min-height: 44px;
	padding: 0 1rem;
	border: 1px solid var(--m6mpf-rule);
	border-radius: 9999px;
	font-family: var(--wp--preset--font-family--heading);
	font-size: .85rem;
	font-weight: 600;
	letter-spacing: .04em;
	color: var(--wp--preset--color--text-secondary);
	text-decoration: none;
	white-space: nowrap;
	cursor: pointer;
	transition: color var(--wp--custom--duration--fast) var(--wp--custom--easing--standard),
		border-color var(--wp--custom--duration--fast) var(--wp--custom--easing--standard);
}
.m6mpf-chip:hover { color: var(--wp--preset--color--text); border-color: var(--wp--preset--color--accent-border); }
.m6mpf-chip.is-active,
.m6mpf-chip[aria-pressed="true"] {
	color: var(--m6mpf-hi);
	border-color: var(--m6mpf-hi);
	background: var(--wp--preset--color--accent-subtle);
}

@media (min-width: 768px) {
	.m6mpf-bar { position: sticky; top: 64px; } /* .site-header__inner height */
	.admin-bar .m6mpf-bar { top: 96px; }
}

/* Phones: the bar docks at the bottom, where the thumb is. It stays
   in the DOM before the results, so reading and tab order hold. */
@media (max-width: 767px) {
	.m6mpf-bar {
		position: fixed;
		inset: auto 0 0;
		z-index: calc(var(--wp--custom--z--scroll-top) - 1);
		border-bottom: 0;
		padding-bottom: env(safe-area-inset-bottom, 0px);
	}
	.m6mpf-bar__inner { position: relative; padding-top: 1.5rem; }
	.m6mpf-bar__count {
		position: absolute;
		top: .35rem;
		left: var(--m6mpf-px);
		padding: 0;
		font-size: .7rem;
	}
	body.m6mpf-has-dock { padding-bottom: calc(5.75rem + env(safe-area-inset-bottom, 0px)); }
	body.m6mpf-has-dock .scroll-top { bottom: calc(6.5rem + env(safe-area-inset-bottom, 0px)); }
}

/* ---- Grid ------------------------------------------------- */
.m6mpf-results {
	container-type: inline-size;
	padding-top: clamp(1rem, 3vw, 1.5rem);
	scroll-margin-top: 8rem;
}
.m6mpf-grid {
	--cols: 2;
	--gap: 4px;
	display: grid;
	grid-template-columns: repeat(var(--cols), minmax(0, 1fr));
	grid-auto-rows: calc((100cqi - (var(--cols) - 1) * var(--gap)) / var(--cols) * .75);
	grid-auto-flow: row dense;
	gap: var(--gap);
	margin: 0;
	padding: 0;
	list-style: none;
}
@media (min-width: 560px) { .m6mpf-grid { --cols: 4; } }
@media (min-width: 900px) { .m6mpf-grid { --cols: 6; --gap: 6px; } }

.m6mpf-tile {
	position: relative;
	grid-column: span 2;
	grid-row: span 2;
	overflow: hidden;
	background: var(--wp--preset--color--surface);
}
.m6mpf-tile--portrait { grid-column: span 1; }
.m6mpf-tile--square   { grid-row: span 3; }
/* The page's one unpaired portrait: double width at its natural 2:3, so no hole. */
.m6mpf-tile--portrait.is-solo { grid-column: span 2; grid-row: span 4; }

/* Feature tiles (one per match with picks; every fourth cover otherwise) run big. */
@media (min-width: 560px) {
	.m6mpf-tile--landscape.is-feature { grid-column: span 4; grid-row: span 4; }
	.m6mpf-tile--square.is-feature    { grid-column: span 4; grid-row: span 5; }
	.m6mpf-tile--portrait.is-feature  { grid-column: span 2; grid-row: span 4; }
}

.m6mpf-tile__link {
	display: block;
	width: 100%;
	height: 100%;
	color: var(--wp--preset--color--text);
	text-decoration: none;
}
.m6mpf a.m6mpf-tile__link:focus-visible { outline-offset: -3px; }
.m6mpf-tile__img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: var(--m6mpf-focus, 50% 40%);
	transition: transform var(--wp--custom--duration--slow) var(--wp--custom--easing--out),
		filter var(--wp--custom--duration--slow) var(--wp--custom--easing--out);
}
.m6mpf-tile.is-pick.is-feature::before {
	content: "Pick";
	position: absolute;
	top: .6rem;
	left: .6rem;
	z-index: 1;
	padding: .2rem .55rem;
	border: 1px solid var(--m6mpf-score);
	border-radius: 9999px;
	background: color-mix(in srgb, var(--wp--preset--color--bg) 70%, transparent);
	font-size: .65rem;
	font-weight: 600;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--m6mpf-score);
	pointer-events: none;
}
.m6mpf-tile__overlay {
	position: absolute;
	inset: auto 0 0;
	display: flex;
	flex-direction: column;
	gap: .15rem;
	padding: 2.75rem .9rem .8rem;
	background: linear-gradient(to top,
		color-mix(in srgb, var(--wp--preset--color--bg) 92%, transparent) 0%,
		color-mix(in srgb, var(--wp--preset--color--bg) 0%, transparent) 100%);
	opacity: 0;
	transform: translateY(8px);
	transition: opacity var(--wp--custom--duration--base) var(--wp--custom--easing--standard),
		transform var(--wp--custom--duration--base) var(--wp--custom--easing--standard);
	pointer-events: none;
}
.m6mpf-tile__title {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	font-family: var(--wp--preset--font-family--heading);
	font-size: .88rem;
	font-weight: 700;
	letter-spacing: .03em;
	line-height: 1.15;
	text-transform: uppercase;
}
.m6mpf-tile__score {
	font-family: var(--wp--preset--font-family--heading);
	font-size: 1.75rem;
	font-weight: 700;
	line-height: 1;
	font-variant-numeric: tabular-nums;
	color: var(--m6mpf-score);
}
.m6mpf-tile.is-feature .m6mpf-tile__score { font-size: var(--wp--preset--font-size--score); }
.m6mpf-tile__date {
	font-size: .72rem;
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--text-secondary);
}
.m6mpf-tile__link:hover .m6mpf-tile__overlay,
.m6mpf-tile__link:focus-visible .m6mpf-tile__overlay { opacity: 1; transform: none; }
/* Floodlight: on pointer devices the grid rests slightly dimmed and
   each photo comes up to full exposure under the cursor. (The rail's
   half of this rule is in components/matchday.css.) */
@media (hover: hover) {
	.m6mpf-tile__img { filter: var(--wp--custom--exposure--dim); }
	.m6mpf-tile__link:hover .m6mpf-tile__img,
	.m6mpf-tile__link:focus-visible .m6mpf-tile__img { filter: var(--wp--custom--exposure--full); }
	.m6mpf-tile__link:hover .m6mpf-tile__img { transform: scale(1.03); }
}
/* Touch screens have no hover: the feature tiles carry the caption,
   the rest stay clean so one match never repeats its score four times. */
@media (hover: none) {
	.m6mpf-tile.is-feature .m6mpf-tile__overlay { opacity: 1; transform: none; padding-top: 2rem; }
}

/* ---- Load more -------------------------------------------- */
.m6mpf-more {
	display: flex;
	justify-content: center;
	gap: .75rem;
	padding-block: 2rem 0;
}
.m6mpf-more:empty { display: none; }

/* ---- Empty states ----------------------------------------- */
.m6mpf-empty { padding-block: clamp(2rem, 8vw, 5rem); max-width: 40rem; }
.m6mpf-empty p { color: var(--wp--preset--color--text-secondary); }
.m6mpf-empty .m6mpf-empty__title {
	margin: 0 0 .75rem;
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--h2);
	font-weight: 700;
	line-height: 1.05;
	text-transform: uppercase;
	color: var(--wp--preset--color--text);
}

/* ---- By match --------------------------------------------- */
.m6mpf-matches {
	display: grid;
	gap: clamp(2.5rem, 6vw, 4rem);
	margin: 0;
	padding: 0;
	list-style: none;
}
.m6mpf-match__head {
	display: grid;
	gap: .35rem;
	margin-bottom: 1rem;
	padding-top: 1rem;
	border-top: 1px solid var(--m6mpf-rule);
}
.m6mpf-match__title {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: .25rem 1rem;
	margin: 0;
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--h3);
	font-weight: 700;
	line-height: 1.05;
	text-transform: uppercase;
}
.m6mpf-match__score {
	font-size: var(--wp--preset--font-size--score);
	line-height: .9;
	font-variant-numeric: tabular-nums;
	color: var(--m6mpf-score);
}
.m6mpf-match__pens { margin: 0; font-size: var(--wp--preset--font-size--label); color: var(--m6mpf-score); }
.m6mpf-match__meta {
	margin: 0;
	font-size: var(--wp--preset--font-size--label);
	letter-spacing: .1em;
	text-transform: uppercase;
	color: var(--wp--preset--color--text-secondary);
}
.m6mpf-match__links {
	display: flex;
	flex-wrap: wrap;
	gap: .25rem 1.25rem;
	margin: .25rem 0 0;
}
.m6mpf-match__links a {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	gap: .35rem;
	color: var(--wp--preset--color--text);
	text-decoration: underline;
	text-decoration-color: var(--wp--preset--color--accent-border);
	text-underline-offset: .25em;
}
.m6mpf-match__links a:hover { text-decoration-color: var(--m6mpf-hi); }
.m6mpf-match__empty { margin: 0; color: var(--wp--preset--color--text-secondary); }
/* ============================================================
   LIGHTBOX — native <dialog>
   ============================================================ */
.m6mpf-lb {
	box-sizing: border-box;
	width: 100vw;
	max-width: none;
	height: 100dvh;
	max-height: none;
	margin: 0;
	padding: 0;
	border: 0;
	background: var(--wp--preset--color--bg);
	color: var(--wp--preset--color--text);
	overflow: hidden;
}
.m6mpf-lb[open] {
	display: grid;
	grid-template-rows: minmax(0, 1fr) auto;
}
.m6mpf-lb::backdrop { background: var(--wp--preset--color--bg); }
.m6mpf-lb__stage {
	display: grid;
	place-items: center;
	min-height: 0;
	padding: 3.5rem .5rem .5rem;
	touch-action: pan-y pinch-zoom;
}
.m6mpf-lb__img {
	max-width: 100%;
	max-height: 100%;
	width: auto;
	height: auto;
	object-fit: contain;
	transition: opacity var(--wp--custom--duration--base) var(--wp--custom--easing--standard);
}
.m6mpf-lb__img.is-loading { opacity: .25; }
.m6mpf-lb__info {
	display: grid;
	gap: .2rem;
	padding: .75rem var(--m6mpf-px, 16px) calc(1rem + env(safe-area-inset-bottom, 0px));
	border-top: 1px solid var(--m6mpf-rule);
}
.m6mpf-lb__pos {
	margin: 0;
	font-size: .72rem;
	letter-spacing: .12em;
	text-transform: uppercase;
	font-variant-numeric: tabular-nums;
	color: var(--wp--preset--color--text-muted);
}
.m6mpf-lb__title {
	margin: 0;
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--h4);
	font-weight: 700;
	line-height: 1.1;
	text-transform: uppercase;
}
.m6mpf-lb__score {
	margin: 0;
	font-family: var(--wp--preset--font-family--heading);
	font-size: var(--wp--preset--font-size--score);
	font-weight: 700;
	line-height: 1;
	color: var(--m6mpf-score);
}
.m6mpf-lb__score:empty,
.m6mpf-lb__meta:empty { display: none; }
.m6mpf-lb__meta {
	margin: 0;
	font-size: var(--wp--preset--font-size--label);
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--wp--preset--color--text-secondary);
}
.m6mpf-lb__links { display: flex; flex-wrap: wrap; gap: .5rem; margin: .6rem 0 0; }
.m6mpf-lb__btn {
	position: absolute;
	display: grid;
	place-items: center;
	width: 48px;
	height: 48px;
	padding: 0;
	border: 1px solid var(--m6mpf-rule);
	border-radius: 50%;
	background: color-mix(in srgb, var(--wp--preset--color--bg) 80%, transparent);
	color: var(--wp--preset--color--text);
	font-size: 1.75rem;
	line-height: 1;
	cursor: pointer;
}
.m6mpf-lb__btn:hover { border-color: var(--m6mpf-hi); color: var(--m6mpf-hi); }
.m6mpf-lb__btn--close { top: .5rem; right: .5rem; }
.m6mpf-lb__btn--prev,
.m6mpf-lb__btn--next { top: calc(50% - 5rem); }
.m6mpf-lb__btn--prev { left: .5rem; }
.m6mpf-lb__btn--next { right: .5rem; }
.m6mpf-lb__btn[hidden] { display: none; }
@media (min-width: 900px) {
	.m6mpf-lb[open] { grid-template-rows: none; grid-template-columns: minmax(0, 1fr) 22rem; }
	.m6mpf-lb__stage { padding: 1.5rem 4.5rem; }
	.m6mpf-lb__info { align-content: end; border-top: 0; border-left: 1px solid var(--m6mpf-rule); padding: 2rem 1.5rem; }
	.m6mpf-lb__btn--prev,
	.m6mpf-lb__btn--next { top: calc(50% - 24px); }
	.m6mpf-lb__btn--next { right: calc(22rem + .75rem); }
	.m6mpf-lb__btn--prev { left: .75rem; }
}
html:has(.m6mpf-lb[open]) { overflow: hidden; }

/* ============================================================
   MOTION + FORCED COLOURS (the shared rules are in matchday.css)
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
	.m6mpf-tile__link:hover .m6mpf-tile__img { transform: none; }
}
@media (forced-colors: active) {
	.m6mpf-chip.is-active,
	.m6mpf-chip[aria-pressed="true"] { border-width: 3px; forced-color-adjust: none; background: Highlight; color: HighlightText; }
	.m6mpf-tile__overlay { background: Canvas; opacity: 1; transform: none; }
	.m6mpf-lb__btn { border-color: ButtonText; }
}
