/*
 Theme Name:   Adfish Theme - St. Augustine Food & Wine Festival
 Theme URI:    https://github.com/adfishgroup/adfish-wp
 Description:  Child theme for St. Augustine Food & Wine Festival
 Author:       Adfish Group
 Author URI:   https://adfish.com
 Template:     adfish-theme
 Version:      2.0.0
 License:      Proprietary
 Text Domain:  adfish-stafwf
*/

/* ==========================================================================
   Design tokens
   ========================================================================== */
:root {
	/* ---- Brand ---- */
	--color-primary: #1d3858;        /* navy — text, strokes, primary brand */
	--color-accent: #b58b3f;         /* gold — eyebrows, links, buttons */
	--color-highlight: #f0c66a;      /* light gold — small highlights (event time) */

	/* RGB channel triplets for rgba() composition — rgba(var(--ink-rgb), .25) etc.
	   Keep in sync with the hex above. */
	--accent-rgb: 181, 139, 63;      /* = #b58b3f */
	--ink-rgb: 29, 56, 88;           /* = #1d3858 — text, hairlines, pale fills */

	/* ---- Surfaces ---- */
	--color-surface: #1d3858;        /* large dark fills (footer, slideout, CTA, cards) */
	--color-cream: #f5ede0;          /* light tinted section background */
	--color-bg: #fff;                /* page background */
	--color-placeholder: #eee;       /* image placeholder fill */

	/* ---- Text ---- */
	--color-text: #1d3858;           /* body text on light */
	--color-text-on-dark: rgba(255, 255, 255, 0.9);
	--color-muted: rgba(var(--ink-rgb), 0.65);

	/* ---- Feedback ---- */
	--color-error: #b8453d;

	/* ---- Hairlines / pale fills (navy-tinted) ---- */
	--color-line: rgba(var(--ink-rgb), 0.12);    /* default 1px borders */
	--color-line-soft: rgba(var(--ink-rgb), 0.06);
	--color-tint: rgba(var(--ink-rgb), 0.08);    /* pale badge/tier fills */

	/* ---- Elevation ---- */
	--shadow-sm: 0 4px 14px rgba(0, 0, 0, 0.15);
	--shadow-md: 0 4px 20px rgba(0, 0, 0, 0.25);
	--shadow-lg: 0 16px 40px rgba(0, 0, 0, 0.4);
	--shadow-panel: 10px 0 30px rgba(0, 0, 0, 0.3);   /* slideout side shadow */

	/* ---- Radius ---- */
	--radius-pill: 999px;
	--radius-circle: 50%;

	/* ---- Motion (canonical durations; one-offs like 0.25s/0.6s stay explicit) ---- */
	--duration-fast: 0.2s;
	--duration-base: 0.3s;
	--duration-slow: 0.5s;

	/* ---- Typography / layout ---- */
	--font-heading: "Cormorant Garamond", "Iowan Old Style", Charter, Cambria, Georgia, serif;
	--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
	--container-max: 1200px;
	--navbar-height: 84px;

	/* ---- Deprecated aliases ----
	   The pre-taxonomy names. Page content written before the rename still
	   references them in inline styles; keep until no post_content uses them. */
	--color-blue: var(--color-primary);
	--color-gold: var(--color-accent);
	--color-blue-dark: #0a1426;
}

/* ==========================================================================
   Base
   ========================================================================== */
*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	-webkit-text-size-adjust: 100%;
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

html, body {
	margin: 0;
	padding: 0;
}

body {
	overflow-x: clip;
}

body {
	font-family: var(--font-body);
	font-size: 16px;
	line-height: 1.6;
	color: var(--color-text);
	background: var(--color-bg);
}

h1, h2, h3, h4, h5, h6 {
	font-family: var(--font-heading);
	font-weight: 500;
	line-height: 1.15;
	letter-spacing: 0.005em;
	color: inherit;
	margin: 0 0 0.65em;
}

h1 { font-size: clamp(2.25rem, 5vw, 4rem); }
h2 { font-size: clamp(1.875rem, 4vw, 3rem); }
h3 { font-size: clamp(1.5rem, 3vw, 2.125rem); }
h4 { font-size: clamp(1.25rem, 2.4vw, 1.625rem); }
h5 { font-size: 1.125rem; }
h6 { font-size: 1rem; letter-spacing: 0.1em; text-transform: uppercase; }

p {
	margin: 0 0 1.25em;
}

a {
	color: var(--color-primary);
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 0.18em;
	transition: color var(--duration-fast) ease;
}

a:hover,
a:focus {
	color: var(--color-accent);
}

ul, ol {
	margin: 0 0 1.25em;
	padding-left: 1.25em;
	line-height: 1.65;
}

li + li {
	margin-top: 0.35em;
}

img {
	max-width: 100%;
	height: auto;
}

button,
input,
select,
textarea {
	font-family: inherit;
	font-size: inherit;
	color: inherit;
}

/* ==========================================================================
   Inner page container — used by parent page.php
   ========================================================================== */
.adfish-page {
	max-width: var(--container-max);
	margin: 0 auto;
	padding: calc(var(--navbar-height) + 4rem) clamp(1.5rem, 5vw, 4rem) 6rem;
}

/* When a fullscreen hero precedes the page wrapper, the hero already
   visually fills the navbar zone — drop the navbar-height top padding
   so the body content sits naturally below the hero. */
.adfish-page--after-hero {
	padding-top: 4rem;
}

/* When another adfish-* section follows the page wrapper (e.g. ticket
   cards auto-rendered after a single event's body), drop the wrapper's
   bottom padding so it doesn't compound with the next section's own
   top margin into a too-big visual gap. The footer is not such a section,
   so it's excluded; a page that ends in plain content or ticket cards keeps
   its gap above the footer. */
.adfish-page--after-hero:has(+ [class^="adfish-"]:not(.adfish-footer)) {
	padding-bottom: 0;
}

/* A logo grid as the last block brings its own bottom padding, so the
   wrapper's would double the gap above the footer. An empty grid renders
   nothing and doesn't count as last, so the wrapper's padding stays. */
.adfish-page--after-hero:has(> .adfish-page__content > .adfish-logo-section:last-child) {
	padding-bottom: 0;
}

.adfish-page > h1:first-child {
	margin-top: 0;
	margin-bottom: 1.5rem;
	font-size: clamp(2.5rem, 5.5vw, 4.5rem);
}

.adfish-page__content > :first-child {
	margin-top: 0;
}

.adfish-page__content > :last-child {
	margin-bottom: 0;
}

.adfish-page__thumbnail {
	margin: 0 0 2.5rem;
}

/* ==========================================================================
   With Hero pages — auto-constrained prose with full-bleed escape.

   Direct text/HTML children flow into a constrained reading column;
   shortcode-produced sections (anything starting with class `adfish-`)
   escape to viewport edge so backgrounds and grids span full-width.
   Authors don't have to wrap prose to make it look right.
   ========================================================================== */
.adfish-page-prose {
	display: grid;
	grid-template-columns:
		[full-start] 1fr
		[content-start] min(var(--container-max), 100% - 2 * clamp(1.5rem, 5vw, 4rem))
		[content-end] 1fr [full-end];
	/* Gap below the hero, matching single-event's .adfish-page--after-hero (4rem)
	   so pages and events share the same hero→content spacing. The --no-hero
	   variant below overrides this with navbar clearance when there's no hero. */
	padding-top: 4rem;
	padding-bottom: 6rem;
}

.adfish-page-prose--no-hero {
	padding-top: calc(var(--navbar-height) + 4rem);
}

.adfish-page-prose > * {
	grid-column: content;
}

.adfish-page-prose > [class^="adfish-"],
.adfish-page-prose > [class*=" adfish-"] {
	grid-column: full;
}

.adfish-page-prose > :first-child {
	margin-top: 0;
}

.adfish-page-prose > :last-child {
	margin-bottom: 0;
}

.adfish-page__thumbnail img {
	display: block;
	width: 100%;
	height: auto;
	max-height: 480px;
	object-fit: cover;
}

/* 404 page */
.adfish-404 {
	text-align: center;
	max-width: 720px;
	padding-top: calc(var(--navbar-height) + 6rem);
	padding-bottom: 8rem;
}

.adfish-404__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 1.5rem;
}

.adfish-404__title {
	font-size: clamp(2.5rem, 5vw, 4rem);
	margin: 0 0 1.5rem;
	line-height: 1.1;
}

.adfish-404__body {
	font-size: 1.125rem;
	line-height: 1.7;
	margin: 0 0 2.5rem;
	opacity: 0.8;
}

.adfish-404__actions {
	display: inline-flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.75rem;
}

/* Escape the constrained page container — for hero banners, full-bleed sections, etc. */
.full-bleed {
	width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}

/* Site footer */
.adfish-footer {
	background: var(--color-surface);
	color: rgba(255, 255, 255, 0.8);
	padding: 5rem 2rem 0;
	font-size: 0.95rem;
}

.adfish-footer__inner {
	display: grid;
	grid-template-columns: 1fr;
	gap: 3rem;
	max-width: 1200px;
	margin: 0 auto;
	padding-bottom: 3.5rem;
	border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}

@media (min-width: 768px) {
	.adfish-footer__inner {
		grid-template-columns: 1.2fr 0.9fr 1.6fr;
		gap: 4rem;
	}
}

.adfish-footer__brand { max-width: 360px; }

/* Middle column stacks Explore + Follow; right column stacks the producer,
   supporter and charity credits — so the partner logos share the columns'
   vertical space instead of adding a tall full-width band below. */
.adfish-footer__col {
	display: flex;
	flex-direction: column;
	gap: 2.5rem;
}

.adfish-footer__support {
	display: flex;
	flex-direction: column;
	gap: 1.75rem;
}

.adfish-footer__credit {
	display: flex;
	flex-direction: column;
	gap: 0.8rem;
}

.adfish-footer__credit-label {
	font-size: 0.75rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
}

.adfish-footer__credit-text {
	margin: 0;
	max-width: 30rem;
	font-size: 0.82rem;
	line-height: 1.6;
	opacity: 0.8;
}

.adfish-footer__logos {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 1.25rem;
}

/* Partner logos are reversed out to white on the navy footer (brightness(0)
   flattens the artwork to black keeping its alpha, invert(1) flips it to
   white). Footer-scoped only: the same Logo images stay full-colour elsewhere. */
.adfish-footer__partner {
	display: inline-flex;
	align-items: center;
	justify-content: center;
}

.adfish-footer__partner img {
	display: block;
	width: auto;
	height: auto;
	/* Per-group sizes × the logo's Footer size (--logo-footer-scale, set
	   inline). The grid Scale (--logo-scale) is deliberately not used here. */
	max-height: calc(84px * var(--logo-footer-scale, 1));
	max-width: calc(260px * var(--logo-footer-scale, 1));
	filter: brightness(0) invert(1);
	opacity: 0.9;
	transition: opacity var(--duration-fast) ease, transform var(--duration-fast) ease;
}

/* Supporter marks sit smaller so the "Produced by" lockup leads. */
.adfish-footer__partner--compact img {
	max-height: calc(44px * var(--logo-footer-scale, 1));
	max-width: calc(220px * var(--logo-footer-scale, 1));
}

a.adfish-footer__partner:hover img,
a.adfish-footer__partner:focus img {
	opacity: 1;
	transform: translateY(-1px);
}

/* `.adfish-footer__brand` prefix keeps this above the shared `.adfish-logo-mark`
   base (which the img also carries) so the footer sizing wins the class tie. */
.adfish-footer__brand .adfish-footer__logo {
	display: block;
	max-width: 180px;
	height: auto;
	margin-bottom: 1.25rem;
}

.adfish-footer__tagline {
	font-size: 1rem;
	margin: 0 0 0.5rem;
	opacity: 0.85;
}

.adfish-footer__dates {
	font-size: 0.8rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0;
}

.adfish-footer__heading {
	font-size: 0.75rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	margin: 0 0 1.25rem;
	font-weight: 700;
}

.adfish-footer__nav ul {
	list-style: none;
	margin: 0;
	padding: 0;
}

.adfish-footer__nav li {
	margin-bottom: 0.6rem;
}

/* Footer submenus collapse/expand like the slide-out's: the parent theme's
   script adds the same chevron button and toggles `is-expanded`. */
.adfish-footer__menu .adfish-slideout__expand {
	position: static;
	width: 1.75rem;
	height: 1.75rem;
	margin-left: 0.25rem;
	padding: 0;
	background: none;
	border: 0;
	color: inherit;
	cursor: pointer;
	vertical-align: middle;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}

.adfish-footer__menu .adfish-slideout__expand svg {
	transition: transform var(--duration-fast) ease;
}

.adfish-footer__menu .is-expanded > .adfish-slideout__expand svg {
	transform: rotate(180deg);
}

.adfish-footer__nav .sub-menu {
	display: none;
	margin: 0.5rem 0 0 0.25rem;
	padding-left: 1rem;
	border-left: 1px solid rgba(255, 255, 255, 0.18);
	font-size: 0.875rem;
}

.adfish-footer__nav .is-expanded > .sub-menu {
	display: block;
}

.adfish-footer__nav .sub-menu li {
	margin-bottom: 0.45rem;
}

.adfish-footer a {
	color: inherit;
	text-decoration: none;
	transition: color var(--duration-fast) ease;
}

.adfish-footer a:hover,
.adfish-footer a:focus {
	color: #fff;
}

.adfish-footer__social {
	display: flex;
	gap: 0.75rem;
	margin-bottom: 1.5rem;
}

.adfish-footer__social a {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border: 1px solid rgba(255, 255, 255, 0.25);
	border-radius: var(--radius-circle);
	transition: background var(--duration-fast) ease, border-color var(--duration-fast) ease, color var(--duration-fast) ease;
}

.adfish-footer__social a:hover,
.adfish-footer__social a:focus {
	background: var(--color-accent);
	border-color: var(--color-accent);
	color: #fff;
}

.adfish-footer__bottom {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	gap: 1rem;
	max-width: 1200px;
	margin: 0 auto;
	padding: 2rem 0;
	font-size: 0.8rem;
	color: rgba(255, 255, 255, 0.55);
}

.adfish-footer__bottom p {
	margin: 0;
}

.adfish-footer__bottom a {
	color: inherit;
	text-decoration: none;
}

.adfish-footer__bottom a:hover,
.adfish-footer__bottom a:focus {
	color: #fff;
}

/* Generic reveal-on-scroll. Add data-reveal to a section, .reveal-item to each child you want cascaded.
   `!important` on opacity wins over element-level baseline opacity (e.g. `.event-hero__venue { opacity: 0.9 }`)
   so the from-0-to-visible animation isn't masked by stylistic dimming on the same element. */
[data-reveal] .reveal-item {
	opacity: 0 !important;
	transform: translateY(40px);
	transition: opacity 0.45s ease-out, transform 0.45s ease-out;
}

[data-reveal].is-revealed .reveal-item {
	opacity: 1 !important;
	transform: translateY(0);
}

body.adfish-menu-open {
	overflow: hidden;
}

/* Fullscreen hero */
.adfish-fullscreen {
	position: relative;
	width: 100%;
	height: 100vh;
	overflow: hidden;
	background-size: cover;
	background-position: var(--hero-position, center);
	color: #fff;
}

/* Inner pages with the With-Hero template — shorter hero so content peeks below.
   Also applied to single-event when its content opens with a hero shortcode. */
body.page-template-page-with-hero .adfish-fullscreen,
body.single-event .adfish-fullscreen {
	height: 65vh;
	min-height: 460px;
}

/* The hero image is a real <img> (srcset + fetchpriority — a CSS background
   is invisible to the preload scanner and tanks mobile LCP); it gets the same
   full-bleed cover treatment as a hero video. --hero-position is the per-page
   framing seam: set via the hero shortcodes' position="…" attr or a content
   <style> block, it drives object-position here AND background-position on
   the CSS-fallback path, so a framing fix works whichever way the hero
   renders. */
.adfish-fullscreen video,
.adfish-fullscreen .adfish-fullscreen__bg {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: var(--hero-position, center);
}

.adfish-fullscreen__overlay {
	position: absolute;
	inset: 0;
}

.adfish-fullscreen__content {
	position: absolute;
	inset: 0;
	z-index: 2;
	display: flex;
	flex-direction: column;
}

/* Hero centered content block — used inside [adfish_fullscreen] for the home + with-hero pages */
.hero-center {
	flex: 1;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	text-align: center;
	padding: 0 2rem 4rem;
}

/* Event heroes stack date/title/venue/button — on short viewports (small
   phones) or with long titles that block can ride up under the fixed navbar
   and clip the date line. Reserve the navbar height at the top so the
   vertically-centered content always stays clear of it. */
.hero-center--event {
	padding-top: var(--navbar-height);
}

.hero-center img {
	max-width: 320px;
	height: auto;
	margin-bottom: 1.5rem;
}

.hero-center h1 {
	font-size: clamp(2rem, 5vw, 4rem);
	margin: 0 0 0.5rem;
}

.hero-center p {
	font-size: 1.25rem;
	margin: 0 0 2rem;
	opacity: 0.95;
}

/* Site navbar — fixed at top, solid by default; transparent overlay on hero pages */
.adfish-navbar {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	z-index: 100;
	height: var(--navbar-height);
	display: grid;
	/* Equal side columns keep the centre logo centred regardless of CTA width. */
	grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
	align-items: center;
	padding: 0 clamp(1rem, 3vw, 2.5rem);
	background: #fff;
	color: var(--color-primary);
	box-shadow: 0 4px 18px rgba(var(--ink-rgb), 0.12);
	transition: background var(--duration-base) ease, color var(--duration-base) ease, box-shadow var(--duration-base) ease;
}

.adfish-navbar__toggle {
	justify-self: start;
}

.adfish-navbar__brand {
	justify-self: center;
	display: inline-flex;
	align-items: center;
	text-decoration: none;
	transition: opacity var(--duration-base) ease;
}

/* `.adfish-navbar` prefix raises specificity above the shared `.adfish-logo-mark`
   base (which the img also carries) so the navbar sizing wins the class tie. */
.adfish-navbar .adfish-navbar__logo {
	height: 66px;
	width: auto;
	display: block;
}

/* Text fallback shown in the brand slot when no logo is set in the Customizer. */
.adfish-navbar__title {
	font-family: var(--font-heading, serif);
	font-size: 1.35rem;
	letter-spacing: 0.02em;
	color: inherit;
}

/* The site logo (Site Identity → Logo), rendered by adfish_site_logo() in the
   navbar, slide-out and the [adfish_logo] shortcode. On dark surfaces it
   renders the dedicated white logo (Site Identity → "Logo (white, for dark
   backgrounds)") as --white-art, which stafwf sets because the filter below
   fills its navy disc solid white; with none set, --white flips the logo via
   a CSS filter instead. */
.adfish-logo-mark {
	display: block;
	max-width: 100%;
	height: auto;
}

.adfish-logo-mark--white {
	filter: brightness(0) invert(1);
}

/* `.adfish-navbar` prefix raises specificity above the base `.adfish-button`
   (defined later in this file) so the navbar CTA sizing actually wins. */
.adfish-navbar .adfish-navbar__cta {
	justify-self: end;
	max-width: 100%;
	text-align: center;
	padding: 0.65rem 1.5rem;
	font-size: 0.7rem;
	letter-spacing: 0.18em;
}

/* Overlay mode — applied by JS when an .adfish-fullscreen hero is in view. */
.adfish-navbar.is-overlay {
	background: transparent;
	color: #fff;
	box-shadow: none;
}

.adfish-navbar.is-overlay .adfish-navbar__brand {
	opacity: 0;
	pointer-events: none;
}

.adfish-navbar.is-overlay .adfish-navbar__cta {
	background: transparent;
	border-color: rgba(255, 255, 255, 0.6);
	color: #fff;
}

.adfish-navbar.is-overlay .adfish-navbar__cta:hover,
.adfish-navbar.is-overlay .adfish-navbar__cta:focus {
	background: #fff;
	color: var(--color-primary);
	border-color: #fff;
}

/* Hide the menu label on smaller screens to keep the navbar compact. */
@media (max-width: 600px) {
	.adfish-navbar__toggle .adfish-menu-toggle__label { display: none; }
	.adfish-navbar .adfish-navbar__logo { height: 46px; }
	/* Tighter, lower-tracking CTA so a long label stays compact and doesn't crowd
	   the centre logo. (.adfish-navbar prefix to out-rank the base .adfish-button.) */
	.adfish-navbar .adfish-navbar__cta {
		padding: 0.45rem 0.7rem;
		font-size: 0.58rem;
		letter-spacing: 0.04em;
		line-height: 1.25;
		/* A long label ("Tickets On Sale Monday, 11/16") wraps to two even
		   lines instead of leaving one word on the second, and keeps clear of
		   the centre logo. */
		text-wrap: balance;
		margin-left: 0.5rem;
	}
}

/* Offset for the WP admin bar when logged in. */
body.admin-bar .adfish-navbar { top: 32px; }
@media screen and (max-width: 782px) {
	body.admin-bar .adfish-navbar { top: 46px; }
}

/* Slide-out menu */
.adfish-slideout {
	position: fixed;
	inset: 0;
	z-index: 1000;
	pointer-events: none;
}

.adfish-slideout__backdrop {
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, 0.5);
	opacity: 0;
	transition: opacity var(--duration-base) ease;
}

.adfish-slideout__panel {
	position: absolute;
	top: 0;
	left: 0;
	bottom: 0;
	width: min(360px, 85vw);
	background: var(--color-surface);
	color: #fff;
	padding: 4rem 2rem 2rem;
	transform: translateX(-100%);
	transition: transform var(--duration-base) ease;
	box-shadow: var(--shadow-panel);
	overflow-y: auto;
}

.adfish-slideout.is-open {
	pointer-events: auto;
}

.adfish-slideout.is-open .adfish-slideout__backdrop {
	opacity: 1;
}

.adfish-slideout.is-open .adfish-slideout__panel {
	transform: translateX(0);
}

.adfish-slideout__close {
	position: absolute;
	top: 1rem;
	right: 1rem;
	background: none;
	border: 0;
	color: #fff;
	font-size: 2rem;
	line-height: 1;
	cursor: pointer;
	padding: 0.5rem;
}

.adfish-slideout__brand {
	display: block;
	text-align: center;
	margin: 0 auto 2.25rem;
	max-width: 160px;
}

.adfish-slideout__brand img {
	width: 100%;
	height: auto;
	display: block;
}

.adfish-slideout__menu {
	list-style: none;
	margin: 0;
	padding: 0;
}

.adfish-slideout__menu li {
	border-bottom: 1px solid rgba(255, 255, 255, 0.15);
}

.adfish-slideout__menu a {
	display: block;
	padding: 1rem 0;
	color: #fff;
	text-decoration: none;
	font-size: 1.125rem;
	letter-spacing: 0.03em;
}

.adfish-slideout__menu a:hover,
.adfish-slideout__menu a:focus {
	color: rgba(255, 255, 255, 0.7);
}

.adfish-slideout__menu .menu-item-has-children {
	position: relative;
}

.adfish-slideout__menu .menu-item-has-children > a {
	padding-right: 2.5rem;
}

.adfish-slideout__expand {
	position: absolute;
	top: 0.5rem;
	right: 0;
	width: 2.5rem;
	height: 2.5rem;
	background: none;
	border: 0;
	color: inherit;
	cursor: pointer;
	padding: 0;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}

.adfish-slideout__expand svg {
	transition: transform 0.25s ease;
}

.adfish-slideout__menu .is-expanded > .adfish-slideout__expand svg {
	transform: rotate(180deg);
}

.adfish-slideout__menu .sub-menu {
	list-style: none;
	margin: 0 0 0 0.25rem;
	padding: 0;
	border-left: 1px solid rgba(255, 255, 255, 0.18);
	display: none;
}

.adfish-slideout__menu .is-expanded > .sub-menu {
	display: block;
	padding: 0.25rem 0 0.5rem 1rem;
}

.adfish-slideout__menu .sub-menu li {
	border-bottom: 0;
	margin-top: 0;
}

.adfish-slideout__menu .sub-menu a {
	padding: 0.4rem 0;
	font-size: 0.95rem;
	font-family: var(--font-body);
	letter-spacing: 0.01em;
	opacity: 0.8;
}

/* Event carousel */
.adfish-event-carousel {
	padding: 6rem 0;
	background:
		radial-gradient(ellipse 60% 50% at top left, rgba(var(--accent-rgb), 0.14), transparent 60%),
		radial-gradient(ellipse 50% 60% at bottom right, rgba(255, 255, 255, 0.05), transparent 65%),
		var(--color-surface);
	color: #fff;
	overflow: hidden;
	position: relative;
}

.adfish-event-carousel__header {
	text-align: center;
	max-width: 720px;
	margin: 0 auto 3rem;
	padding: 0 2rem;
}

.adfish-event-carousel__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	margin: 0 0 1rem;
	opacity: 0.7;
}

.adfish-event-carousel__title {
	font-size: clamp(2rem, 4vw, 3rem);
	margin: 0;
	font-weight: 400;
	letter-spacing: 0.02em;
}

.adfish-event-carousel__viewport {
	position: relative;
}

.adfish-event-carousel__track {
	display: flex;
	gap: 1.5rem;
	overflow-x: auto;
	scroll-behavior: smooth;
	-webkit-overflow-scrolling: touch;
	padding: 1rem 2rem 2rem;
	scrollbar-width: thin;
	scrollbar-color: rgba(255, 255, 255, 0.3) transparent;
	/* Centers cards when they fit in the viewport (e.g. 3 events for 2026);
	   `safe` keeps `flex-start` when overflowing so scrolling still starts at
	   the first card instead of clipping it offscreen. */
	justify-content: safe center;
}

.adfish-event-carousel__track::-webkit-scrollbar {
	height: 4px;
}

.adfish-event-carousel__track::-webkit-scrollbar-track {
	background: transparent;
}

.adfish-event-carousel__track::-webkit-scrollbar-thumb {
	background: rgba(255, 255, 255, 0.3);
	border-radius: 2px;
}

.adfish-event-carousel__track::-webkit-scrollbar-thumb:hover {
	background: rgba(255, 255, 255, 0.5);
}

.adfish-event-carousel__nav {
	position: absolute;
	top: calc(50% - 1rem);
	transform: translateY(-50%);
	width: 56px;
	height: 56px;
	border-radius: var(--radius-circle);
	border: 0;
	background: #fff;
	color: var(--color-primary);
	font-size: 2rem;
	line-height: 1;
	cursor: pointer;
	z-index: 5;
	box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
	transition: transform var(--duration-fast) ease, box-shadow var(--duration-fast) ease;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 0 0 4px 0;
}

.adfish-event-carousel__nav:hover,
.adfish-event-carousel__nav:focus {
	transform: translateY(-50%) scale(1.08);
	box-shadow: 0 6px 24px rgba(0, 0, 0, 0.28);
}

.adfish-event-carousel__nav.is-disabled {
	opacity: 0.35;
	pointer-events: none;
}

.adfish-event-carousel__nav--prev {
	left: 1rem;
}

.adfish-event-carousel__nav--next {
	right: 1rem;
}

@media (min-width: 768px) {
	.adfish-event-carousel__nav--prev { left: 2rem; }
	.adfish-event-carousel__nav--next { right: 2rem; }
}


.adfish-event-card {
	flex: 0 0 420px;
	aspect-ratio: 4 / 5;
	background: var(--color-surface);
	color: #fff;
	text-decoration: none;
	box-shadow: var(--shadow-md);
	overflow: hidden;
	transition: box-shadow 0.4s ease;
	position: relative;
	display: block;
}

.adfish-event-card:hover,
.adfish-event-card:focus {
	box-shadow: var(--shadow-lg);
}

.adfish-event-card__image {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.6s ease;
}

.adfish-event-card:hover .adfish-event-card__image {
	transform: scale(1.07);
}

.adfish-event-card::after {
	content: '';
	position: absolute;
	inset: 0;
	background:
		linear-gradient(180deg, rgba(0, 0, 0, 0.2) 0%, transparent 30%),
		linear-gradient(to top, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0.65) 30%, transparent 65%);
	pointer-events: none;
}

.adfish-event-card__badge {
	position: absolute;
	top: 1.25rem;
	left: 1.25rem;
	z-index: 2;
	background: var(--color-accent);
	color: #fff;
	padding: 0.75rem 1rem 0.7rem;
	text-align: center;
	line-height: 1;
	box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3);
	min-width: 60px;
}

.adfish-event-card__badge-day {
	display: block;
	font-size: 0.7rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: rgba(255, 255, 255, 0.9);
	font-weight: 700;
	margin-bottom: 0.4rem;
}

.adfish-event-card__badge-num {
	display: block;
	font-size: 1.5rem;
	font-weight: 700;
	letter-spacing: 0.02em;
}

.adfish-event-card__badge-month {
	display: block;
	font-size: 0.75rem;
	letter-spacing: 0.15em;
	text-transform: uppercase;
	margin-top: 0.3rem;
	opacity: 0.85;
}

.adfish-event-card__body {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 2;
	padding: 1.75rem 2rem 2rem;
	display: flex;
	flex-direction: column;
}

.adfish-event-card__time {
	font-size: 0.75rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--color-highlight);
	font-weight: 700;
	margin: 0 0 0.6rem;
}

.adfish-event-card__title {
	font-size: 1.625rem;
	margin: 0 0 0.5rem;
	font-weight: 400;
	line-height: 1.2;
	letter-spacing: 0.01em;
	color: #fff;
}

.adfish-event-card__venue {
	font-size: 0.95rem;
	margin: 0 0 1.25rem;
	opacity: 0.85;
}

.adfish-event-card__more {
	font-size: 0.75rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	font-weight: 700;
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	border-top: 1px solid rgba(255, 255, 255, 0.25);
	padding-top: 1.1rem;
}

.adfish-event-card__more::after {
	content: '→';
	font-size: 1rem;
	transition: transform var(--duration-base) ease;
}

.adfish-event-card:hover .adfish-event-card__more::after {
	transform: translateX(6px);
}

@media (min-width: 768px) {
	.adfish-event-carousel__track {
		padding: 1rem 4rem 2rem;
		scroll-padding-left: 4rem;
	}
}

@media (max-width: 480px) {
	.adfish-event-card {
		flex: 0 0 85vw;
	}
}

/* Event schedule — chronological list grouped by day */
.adfish-event-schedule {
	margin: 0;
}

.adfish-event-schedule__day {
	max-width: 960px;
	margin-left: auto;
	margin-right: auto;
}

.adfish-event-schedule__day + .adfish-event-schedule__day {
	margin-top: 4rem;
	padding-top: 4rem;
	border-top: 1px solid var(--color-line);
}

/* Mobile: the day group spans the full width (no 960px cap), so inset it so the
   card text/images don't sit flush against the screen edges. */
@media (max-width: 767px) {
	.adfish-event-schedule__day {
		padding-left: clamp(1.25rem, 5vw, 2rem);
		padding-right: clamp(1.25rem, 5vw, 2rem);
	}
}

.adfish-event-schedule__day-header {
	margin: 0 0 2.5rem;
	text-align: center;
}

.adfish-event-schedule__day-eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 0.5rem;
}

.adfish-event-schedule__day-title {
	font-size: clamp(2rem, 4vw, 3rem);
	margin: 0;
	line-height: 1.1;
}

.adfish-event-schedule__event {
	display: grid;
	grid-template-columns: 1fr;
	gap: 2rem;
	margin-bottom: 3rem;
}

@media (min-width: 768px) {
	.adfish-event-schedule__event {
		grid-template-columns: minmax(0, 6fr) minmax(0, 5fr);
		gap: 3.5rem;
		align-items: center;
	}
}

.adfish-event-schedule__media {
	display: block;
	overflow: hidden;
	background: var(--color-placeholder);
}

.adfish-event-schedule__image {
	display: block;
	width: 100%;
	height: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	transition: transform var(--duration-slow) ease;
}

@media (min-width: 768px) {
	.adfish-event-schedule__image {
		aspect-ratio: 5 / 4;
	}
}

.adfish-event-schedule__media:hover .adfish-event-schedule__image,
.adfish-event-schedule__media:focus .adfish-event-schedule__image {
	transform: scale(1.04);
}

.adfish-event-schedule__time {
	font-size: 0.75rem;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 0.6rem;
}

.adfish-event-schedule__title {
	font-size: clamp(1.625rem, 3vw, 2.125rem);
	margin: 0 0 0.5rem;
	line-height: 1.2;
}

.adfish-event-schedule__title a {
	color: inherit;
	text-decoration: none;
}

.adfish-event-schedule__title a:hover,
.adfish-event-schedule__title a:focus {
	color: var(--color-accent);
}

.adfish-event-schedule__venue {
	margin: 0 0 1rem;
	font-size: 0.95rem;
	opacity: 0.7;
}

.adfish-event-schedule__description {
	margin: 0 0 1.5rem;
	font-size: 1rem;
	line-height: 1.65;
}

.adfish-event-schedule__meta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 1rem 1.5rem;
}

.adfish-event-schedule__price {
	font-size: 0.85rem;
	letter-spacing: 0.15em;
	text-transform: uppercase;
	font-weight: 700;
	color: var(--color-primary);
	opacity: 0.8;
}

.adfish-event-schedule__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
}

/* Venue mark on a schedule card. The plugin renders it as a standard logo tile
   (.adfish-logo-section__item + __image), so per-logo scale/backing/filter and
   the hover transition all carry over — this only sizes it for the card. */
.adfish-event-schedule__venue-logo {
	display: inline-flex;
	margin: 0 0 1rem;
	max-width: calc(200px * var(--logo-scale, 1));
}

.adfish-event-schedule__venue-logo .adfish-logo-section__image {
	max-height: calc(48px * var(--logo-scale, 1));
}

/* Hero on single event pages */
.hero-center--event {
	gap: 0.4rem;
}

.hero-center--event .event-hero__when {
	font-size: 0.9rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0;
}

.hero-center--event h1 {
	font-size: clamp(2.5rem, 6vw, 4.5rem);
	margin: 0;
}

.hero-center--event .event-hero__venue {
	font-size: 1.1rem;
	margin: 0;
	opacity: 0.9;
}

.adfish-event-detail {
	padding-top: 5rem;
}

/* Default (non-hero) event meta line under the title */
.adfish-event-meta {
	display: flex;
	flex-wrap: wrap;
	gap: 0.4rem 1.5rem;
	margin: -0.5rem 0 1.5rem;
	font-size: 0.95rem;
	color: var(--color-muted);
}

.adfish-event-meta__when {
	color: var(--color-accent);
	font-weight: 700;
	letter-spacing: 0.12em;
	text-transform: uppercase;
	font-size: 0.8rem;
}

/* Single talent page */
.adfish-breadcrumb {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem;
	margin: 0 0 1.75rem;
	font-size: 0.78rem;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	font-weight: 600;
}

.adfish-breadcrumb__link {
	color: var(--color-accent);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: border-color var(--duration-fast) ease;
}

.adfish-breadcrumb__link:hover,
.adfish-breadcrumb__link:focus {
	border-bottom-color: currentColor;
}

.adfish-breadcrumb__sep {
	color: var(--color-muted);
	opacity: 0.55;
}

.adfish-breadcrumb__current {
	color: var(--color-muted);
}

.adfish-talent-detail {
	max-width: var(--container-max);
	margin: 0 auto;
	padding: calc(var(--navbar-height) + 4rem) clamp(1.5rem, 5vw, 4rem) 6rem;
}

.adfish-talent-detail__hero {
	display: grid;
	grid-template-columns: 1fr;
	gap: 2.5rem;
	margin-bottom: 3rem;
}

@media (min-width: 768px) {
	.adfish-talent-detail__hero {
		grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
		gap: 4rem;
		align-items: center;
	}
}

.adfish-talent-detail__photo img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 5;
	object-fit: cover;
}

.adfish-talent-detail__name {
	font-size: clamp(2.5rem, 6vw, 4.5rem);
	margin: 0 0 0.75rem;
	line-height: 1.05;
}

.adfish-talent-detail__role {
	font-size: 0.875rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 0.75rem;
}

.adfish-talent-detail__org {
	font-size: 1.125rem;
	margin: 0;
	opacity: 0.8;
}

.adfish-talent-detail__org:has(.adfish-talent-detail__org-link) {
	opacity: 1;
}

.adfish-talent-detail__org-link {
	color: var(--color-accent);
	text-decoration: none;
	border-bottom: 1px solid rgba(var(--accent-rgb), 0.4);
	padding-bottom: 0.05rem;
	transition: border-color var(--duration-fast) ease, color var(--duration-fast) ease;
}

.adfish-talent-detail__org-link:hover,
.adfish-talent-detail__org-link:focus {
	border-bottom-color: var(--color-accent);
}

.adfish-talent-detail__website {
	margin: 0.75rem 0 0;
}

.adfish-talent-detail__website-link {
	display: inline-block;
	font-size: 0.8rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	font-weight: 700;
	color: var(--color-accent);
	text-decoration: none;
	border-bottom: 1px solid rgba(var(--accent-rgb), 0.4);
	padding-bottom: 0.1rem;
	transition: border-color var(--duration-fast) ease, color var(--duration-fast) ease;
}

.adfish-talent-detail__website-link:hover,
.adfish-talent-detail__website-link:focus {
	color: var(--color-accent);
	border-bottom-color: var(--color-accent);
}

.adfish-talent-detail__logos {
	margin: 3rem 0;
	padding: 2.5rem 0;
	border-top: 1px solid var(--color-line);
	border-bottom: 1px solid var(--color-line);
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 2.5rem 3rem;
}

.adfish-talent-detail__logos--solo .adfish-talent-detail__logo-image {
	max-height: calc(140px * var(--logo-scale, 1));
}

.adfish-talent-detail__logos--row .adfish-talent-detail__logo-image {
	max-height: calc(80px * var(--logo-scale, 1));
}

.adfish-talent-detail__logo {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	transition: opacity 0.25s ease;
	opacity: 0.85;
	/* Per-logo backing chip (issue #73); inert when unset. */
	background: var(--logo-bg, transparent);
	padding: var(--logo-pad, 0);
	border-radius: var(--logo-radius, 0);
}

a.adfish-talent-detail__logo:hover,
a.adfish-talent-detail__logo:focus {
	opacity: 1;
}

.adfish-talent-detail__logo-image {
	width: auto;
	height: auto;
	max-width: calc(200px * var(--logo-scale, 1));
	object-fit: contain;
	/* --logo-filter: per-logo invert for white/light logos (#73); none when unset. */
	filter: var(--logo-filter, none);
}

.adfish-talent-detail__bio {
	max-width: 720px;
	margin: 3rem auto;
	font-size: 1.0625rem;
	line-height: 1.75;
}

.adfish-talent-detail__events {
	margin-top: 4rem;
	padding-top: 3.5rem;
	border-top: 1px solid var(--color-line);
}

.adfish-talent-detail__events-heading {
	font-size: clamp(1.75rem, 3vw, 2.25rem);
	margin: 0 0 2rem;
	text-align: center;
}

.adfish-talent-detail__event-list {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
	gap: 1.5rem;
}

.adfish-talent-detail__event {
	display: block;
	padding: 1.75rem;
	background: var(--color-cream);
	color: var(--color-primary);
	text-decoration: none;
	transition: transform 0.25s ease;
}

.adfish-talent-detail__event:hover,
.adfish-talent-detail__event:focus {
	transform: translateY(-3px);
	color: var(--color-primary);
}

.adfish-talent-detail__event-date {
	font-size: 0.7rem;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 0.5rem;
}

.adfish-talent-detail__event-title {
	font-size: 1.25rem;
	margin: 0 0 0.4rem;
	line-height: 1.25;
}

.adfish-talent-detail__event-venue {
	margin: 0;
	font-size: 0.9rem;
	opacity: 0.7;
}

/* Talent grid — for the dedicated Talent page */
.adfish-talent-grid {
	margin: 0;
}

.adfish-talent-grid__items {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
	gap: 2rem 1.5rem;
}

@media (min-width: 1100px) {
	.adfish-talent-grid__items {
		grid-template-columns: repeat(4, 1fr);
	}
}

/* Cards inside the grid use the same .adfish-talent-card styles defined below;
   only width is different (no fixed flex basis since grid handles sizing). */
.adfish-talent-grid .adfish-talent-card {
	flex: none;
	width: 100%;
}

/* Talent lineup — an event's talent, everyone visible (#151).
   Centred heading (same scale as .adfish-cards) over centred, wrapping
   rows: five across on desktop, three on tablets, two on phones; a short
   last row stays centred because the row is flex, not grid. */
.adfish-talent-lineup {
	--lineup-gap: clamp(1rem, 2.5vw, 1.5rem);
	margin: clamp(2.5rem, 6vw, 4rem) 0;
	color: var(--color-primary);
}

.adfish-talent-lineup__intro {
	text-align: center;
	margin: 0 0 clamp(1.5rem, 4vw, 2.25rem);
}

.adfish-talent-lineup__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 0.5rem;
}

.adfish-talent-lineup__title {
	font-size: clamp(1.8rem, 3.5vw, 2.6rem);
	font-weight: 500;
	color: var(--color-primary);
	margin: 0;
	line-height: 1.2;
}

.adfish-talent-lineup__body {
	max-width: 40rem;
	margin: 0.75rem auto 0;
	line-height: 1.7;
	color: var(--color-text);
}

.adfish-talent-lineup__items {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 2rem var(--lineup-gap);
}

.adfish-talent-lineup .adfish-talent-card {
	flex: 0 0 calc((100% - var(--lineup-gap)) / 2);
	min-width: 0;
}

@media (min-width: 600px) {
	.adfish-talent-lineup .adfish-talent-card {
		flex-basis: calc((100% - 2 * var(--lineup-gap)) / 3);
	}
}

@media (min-width: 960px) {
	.adfish-talent-lineup .adfish-talent-card {
		flex-basis: calc((100% - 4 * var(--lineup-gap)) / 5);
	}
}

.adfish-talent-lineup__cta {
	text-align: center;
	margin: clamp(1.75rem, 4vw, 2.5rem) 0 0;
}

/* Talent showcase (split layout: text left, scrolling row right) */
.adfish-talent-showcase {
	display: grid;
	grid-template-columns: 1fr;
	gap: 3rem;
	padding: 9rem 0 6rem 2rem;
	background: #fff;
	color: var(--color-primary);
	overflow: hidden;
}

@media (min-width: 900px) {
	.adfish-talent-showcase {
		grid-template-columns: minmax(280px, 380px) 1fr;
		gap: 4rem;
		padding: 10rem 0 6rem clamp(2rem, 6vw, 6rem);
		align-items: center;
	}
}

.adfish-talent-showcase__intro {
	max-width: 480px;
	padding-right: 2rem;
}

.adfish-talent-showcase__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	margin: 0 0 1rem;
	color: var(--color-accent);
	font-weight: 700;
}

.adfish-talent-showcase__title {
	font-size: clamp(2rem, 3.6vw, 3rem);
	margin: 0 0 1.5rem;
	font-weight: 400;
	letter-spacing: 0.02em;
	line-height: 1.15;
}

.adfish-talent-showcase__body {
	font-size: 1.05rem;
	line-height: 1.7;
	margin: 0 0 2rem;
	opacity: 0.85;
}

.adfish-talent-showcase__viewport {
	position: relative;
	min-width: 0;
}

.adfish-talent-showcase__viewport .adfish-event-carousel__nav {
	width: 48px;
	height: 48px;
	font-size: 1.5rem;
	background: #fff;
	color: var(--color-primary);
	box-shadow: var(--shadow-sm);
	padding: 0 0 3px 0;
}

.adfish-talent-showcase__viewport .adfish-event-carousel__nav--prev {
	left: 0.75rem;
}

.adfish-talent-showcase__viewport .adfish-event-carousel__nav--next {
	right: 1.5rem;
}

.adfish-talent-showcase__track {
	display: flex;
	gap: 1.25rem;
	overflow-x: auto;
	scroll-behavior: smooth;
	-webkit-overflow-scrolling: touch;
	padding: 0.5rem 2rem 1rem 0;
	scrollbar-width: thin;
	scrollbar-color: rgba(var(--ink-rgb), 0.25) transparent;
}

.adfish-talent-showcase__track::-webkit-scrollbar {
	height: 4px;
}

.adfish-talent-showcase__track::-webkit-scrollbar-track {
	background: transparent;
}

.adfish-talent-showcase__track::-webkit-scrollbar-thumb {
	background: rgba(var(--ink-rgb), 0.25);
	border-radius: 2px;
}

.adfish-talent-showcase__track::-webkit-scrollbar-thumb:hover {
	background: rgba(var(--ink-rgb), 0.45);
}

.adfish-talent-card {
	flex: 0 0 240px;
	scroll-snap-align: start;
	color: inherit;
	text-decoration: none;
	display: flex;
	flex-direction: column;
}

.adfish-talent-card__media {
	aspect-ratio: 4 / 5;
	overflow: hidden;
	background: var(--color-placeholder);
	margin-bottom: 1rem;
}

.adfish-talent-card__image {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.6s ease;
}

.adfish-talent-card:hover .adfish-talent-card__image,
.adfish-talent-card:focus .adfish-talent-card__image {
	transform: scale(1.05);
}

.adfish-talent-card__name {
	font-size: 1.125rem;
	margin: 0 0 0.25rem;
	font-weight: 400;
	letter-spacing: 0.01em;
	line-height: 1.2;
}

.adfish-talent-card__role {
	font-size: 0.8rem;
	letter-spacing: 0.15em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0;
}

.adfish-talent-card__org {
	font-size: 0.875rem;
	color: #5c6470;
	margin: 0.25rem 0 0;
	line-height: 1.3;
}

/* Logo section (charity partners, sponsors, etc.) */
.adfish-logo-section {
	padding: 9rem 2rem;
	background: #fff;
	color: var(--color-primary);
	border-top: 1px solid var(--color-line);
}

.adfish-logo-section:has(+ .adfish-logo-section) {
	padding-bottom: 3rem;
}

.adfish-logo-section + .adfish-logo-section {
	padding-top: 3rem;
	border-top: 0;
}

/* A year heading (`.adfish-partners-year`, written in page content) between
   logo grids breaks the adjacency above, so each grid would otherwise open
   and close with the full 9rem. Keep the grids under one year as tight as
   neighbouring grids are. */
.adfish-partners-year + .adfish-logo-section {
	padding-top: 3rem;
}

.adfish-logo-section:has(+ .adfish-partners-year) {
	padding-bottom: 3rem;
}

.adfish-logo-section__intro {
	max-width: 720px;
	margin: 0 auto;
	text-align: center;
}

.adfish-logo-section__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 1rem;
}

.adfish-logo-section__title {
	font-size: clamp(1.85rem, 3.5vw, 2.75rem);
	margin: 0 0 1.5rem;
	font-weight: 400;
	letter-spacing: 0.02em;
	line-height: 1.2;
}

.adfish-logo-section__body {
	font-size: 1.05rem;
	line-height: 1.7;
	margin: 0 0 2.5rem;
	opacity: 0.85;
}

.adfish-logo-section__grid {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	align-items: center;
	gap: 2.5rem;
	margin-top: 3rem;
}

/* Fixed-width cells so full rows line up as columns, within a grid and across
   the grids stacked on one page (three across in the 720px intro). The logo
   centres in its cell, and the backing chip moves to the image so it still
   hugs the mark instead of filling the cell. A scaled-up wide logo may grow
   past its cell into half the gap (250px), so Scale still enlarges marks
   whose width, not height, is the limit. */
.adfish-logo-section__grid > .adfish-logo-section__item {
	flex: 0 0 210px;
	max-width: 210px;
	background: none;
	padding: 0;
	border-radius: 0;
}

/* [adfish_logo_section lead="1"]: the first logo takes a centred row of its
   own above the rest (a presenting sponsor heading the grid). */
.adfish-logo-section--lead .adfish-logo-section__grid > .adfish-logo-section__item:first-child {
	flex-basis: 100%;
	max-width: 100%;
}

.adfish-logo-section__grid .adfish-logo-section__image {
	max-width: min(250px, calc(180px * var(--logo-scale, 1)));
	flex-shrink: 0;
	background: var(--logo-bg, transparent);
	padding: var(--logo-pad, 0);
	border-radius: var(--logo-radius, 0);
}

.adfish-logo-section__item {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	/* --logo-scale / --logo-bg / --logo-pad / --logo-radius: per-logo presentation
	   set inline by the plugin (issues #67 + #73). The backing chip makes a white/
	   flat logo read on the transparent grid; inert when the props are unset. */
	max-width: calc(180px * var(--logo-scale, 1));
	background: var(--logo-bg, transparent);
	padding: var(--logo-pad, 0);
	border-radius: var(--logo-radius, 0);
}

a.adfish-logo-section__item:hover .adfish-logo-section__image,
a.adfish-logo-section__item:focus .adfish-logo-section__image {
	transform: scale(1.04);
}

.adfish-logo-section__image {
	max-width: 100%;
	max-height: calc(90px * var(--logo-scale, 1));
	height: auto;
	width: auto;
	object-fit: contain;
	transition: transform 0.25s ease;
	/* --logo-filter: per-logo invert for white/light logos (#73); none when unset. */
	filter: var(--logo-filter, none);
}

/* Paid sponsorship role (e.g. "Presenting Sponsor") captioning a tile —
   the tile goes column so the caption sits centered under the mark. */
.adfish-logo-section__item--has-honorific {
	flex-direction: column;
	gap: 0.75rem;
}

/* A linked tile would otherwise underline its caption (global `a` rule). */
a.adfish-logo-section__item--has-honorific {
	text-decoration: none;
}

.adfish-logo-section__honorific {
	font-size: 0.72rem;
	font-weight: 700;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--color-accent);
	text-align: center;
}

/* coming_soon note under the grid — quiet, doesn't compete with the logos. */
.adfish-logo-section__note {
	margin: 2rem 0 0;
	font-size: 0.9rem;
	font-style: italic;
	letter-spacing: 0.03em;
	color: var(--color-muted);
}

/* Split variant: text + logos on left, image on right */
.adfish-logo-section--split {
	padding: 0;
	display: grid;
	grid-template-columns: 1fr;
}

.adfish-logo-section--split .adfish-logo-section__intro {
	max-width: 580px;
	margin: 0;
	text-align: left;
	padding: 6rem 2rem;
	justify-self: center;
}

.adfish-logo-section--split .adfish-logo-section__grid {
	justify-content: flex-start;
	gap: 2rem 3rem;
}

.adfish-logo-section--split .adfish-logo-section__item {
	max-width: calc(150px * var(--logo-scale, 1));
}

.adfish-logo-section__media {
	min-height: 320px;
	overflow: hidden;
}

.adfish-logo-section__media img {
	width: 100%;
	height: 100%;
	min-height: 320px;
	object-fit: cover;
	display: block;
}

@media (min-width: 900px) {
	.adfish-logo-section--split {
		grid-template-columns: 1fr 1fr;
		align-items: stretch;
	}

	.adfish-logo-section--split .adfish-logo-section__intro {
		padding: 8rem clamp(2rem, 5vw, 5rem);
		max-width: 620px;
		justify-self: end;
		align-self: center;
	}

	.adfish-logo-section__media,
	.adfish-logo-section__media img {
		min-height: 100%;
	}
}

/* Phones: two logo columns instead of one. The desktop cells (and two wide
   marks side by side) don't fit two across under ~600px, so the grid would
   otherwise stack every logo on its own row. Each logo centres in a half-width
   cell; a lead logo, and an odd one left over at the end, span both columns. */
@media (max-width: 599px) {
	.adfish-logo-section__grid,
	.adfish-logo-section--split .adfish-logo-section__grid {
		display: grid;
		grid-template-columns: repeat(2, minmax(0, 1fr));
		justify-items: center;
		gap: 2rem 1.5rem;
	}

	.adfish-logo-section__grid > .adfish-logo-section__item,
	.adfish-logo-section--split .adfish-logo-section__item {
		max-width: 100%;
	}

	.adfish-logo-section__grid .adfish-logo-section__image {
		max-width: min(100%, calc(150px * var(--logo-scale, 1)));
		max-height: calc(70px * var(--logo-scale, 1));
	}

	.adfish-logo-section--lead .adfish-logo-section__grid > .adfish-logo-section__item:first-child,
	.adfish-logo-section:not(.adfish-logo-section--lead) .adfish-logo-section__grid > .adfish-logo-section__item:last-child:nth-child(odd),
	.adfish-logo-section--lead .adfish-logo-section__grid > .adfish-logo-section__item:last-child:nth-child(even) {
		grid-column: 1 / -1;
	}
}

/* Venue / location section — copy left, image grid right */
.adfish-venue {
	display: grid;
	grid-template-columns: 1fr;
	gap: 3rem;
	color: var(--color-primary);
	padding: 1rem clamp(2rem, 5vw, 4rem) 2rem;
	max-width: var(--container-max);
	margin: 0 auto;
}

.adfish-venue__copy {
	max-width: 620px;
}

.adfish-venue__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 1.5rem;
}

.adfish-venue__welcome {
	font-size: clamp(2rem, 4vw, 2.75rem);
	line-height: 1.15;
	margin: 0 0 2rem;
}

.adfish-venue__logo {
	display: block;
	max-width: 320px;
	height: auto;
	margin: 0 0 2rem;
}

.adfish-venue__title {
	font-size: 2rem;
	margin: 0 0 1.5rem;
}

.adfish-venue__body {
	font-size: 1.0625rem;
	line-height: 1.7;
	opacity: 0.85;
	margin: 0 0 2rem;
}

.adfish-venue__meta {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 1.25rem;
	margin-top: 2rem;
}

.adfish-venue__address {
	font-size: 1rem;
	font-weight: 600;
	margin: 0;
	letter-spacing: 0.04em;
}

.adfish-venue__gallery {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 0.75rem;
}

.adfish-venue__gallery-item {
	overflow: hidden;
	aspect-ratio: 1 / 1;
	background: var(--color-line-soft);
}

.adfish-venue__gallery-item img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform var(--duration-slow) ease;
}

.adfish-venue__gallery-item:hover img {
	transform: scale(1.04);
}

@media (min-width: 900px) {
	.adfish-venue {
		grid-template-columns: 1fr 1fr;
		gap: clamp(3rem, 6vw, 6rem);
		align-items: center;
		padding: 2rem clamp(2rem, 5vw, 5rem) 3rem;
	}

	.adfish-venue__copy {
		max-width: none;
	}

	.adfish-venue__gallery {
		grid-template-columns: repeat(2, 1fr);
	}
}

/* Event stages (Cooking Demo, Music Stage, musician, etc.) — stages sit
   side-by-side at desktop so total height is max(stageA, stageB), not
   their sum. Each stage column flows: image → name → presenter →
   schedule. Slot rows are compact and have a flex layout that can
   absorb a talent thumbnail without reflow. */
.adfish-event-stages {
	display: grid;
	grid-template-columns: 1fr;
	gap: 3rem;
	max-width: var(--container-max);
	margin: 0 auto 6rem;
	padding: 0 clamp(1.5rem, 5vw, 4rem);
	color: var(--color-primary);
}

@media (min-width: 760px) {
	.adfish-event-stages--count-2 {
		grid-template-columns: 1fr 1fr;
		gap: clamp(2.5rem, 5vw, 4rem);
	}

	.adfish-event-stages--count-3 {
		grid-template-columns: repeat(3, 1fr);
		gap: clamp(2rem, 4vw, 3rem);
	}
}

/* Single-stage case: don't stretch full width, keep it readable. */
.adfish-event-stages--count-1 {
	max-width: 680px;
}

.adfish-event-stage {
	display: flex;
	flex-direction: column;
	gap: 1.25rem;
	min-width: 0;
}

.adfish-event-stage__media {
	overflow: hidden;
	aspect-ratio: 3 / 2;
	background: var(--color-line-soft);
}

.adfish-event-stage__media img,
.adfish-event-stage__image {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.adfish-event-stage__header {
	display: flex;
	flex-direction: column;
	gap: 0.35rem;
}

.adfish-event-stage__name {
	font-size: clamp(1.35rem, 2vw, 1.625rem);
	margin: 0;
	line-height: 1.2;
}

.adfish-event-stage__presenter {
	font-size: 0.75rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--color-accent);
	margin: 0;
	font-weight: 700;
}

.adfish-event-stage__slots {
	list-style: none;
	margin: 0;
	padding: 0;
}

.adfish-event-stage__description {
	font-size: 1rem;
	line-height: 1.7;
	color: var(--color-text);
}

.adfish-event-stage__description p {
	margin: 0 0 1rem;
}

.adfish-event-stage__description p:last-child {
	margin-bottom: 0;
}

.adfish-event-stage__slot {
	display: flex;
	align-items: center;
	gap: 0.875rem;
	padding: 0.55rem 0;
	border-top: 1px solid var(--color-line);
	font-size: 0.9375rem;
	line-height: 1.35;
}

.adfish-event-stage__slot:last-child {
	border-bottom: 1px solid var(--color-line);
}

.adfish-event-stage__slot-time {
	font-weight: 700;
	letter-spacing: 0.02em;
	white-space: nowrap;
	flex-shrink: 0;
	color: var(--color-primary);
}

.adfish-event-stage__slot-title {
	flex: 1;
	min-width: 0;
	font-style: italic;
	opacity: 0.9;
}

/* Reserved hook for future talent thumbnail (round avatar at slot start). */
.adfish-event-stage__slot-avatar {
	width: 36px;
	height: 36px;
	border-radius: var(--radius-circle);
	overflow: hidden;
	flex-shrink: 0;
	background: var(--color-tint);
}

.adfish-event-stage__slot-avatar img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* Event gallery — linear slider. Reuses the parent theme's data-carousel
   click handler and shares .adfish-event-carousel__nav styling so it
   reads as part of the same family as the upcoming events carousel. */
.adfish-event-gallery {
	margin: 0 auto 6rem;
	max-width: var(--container-max);
	color: var(--color-primary);
}

.adfish-event-gallery__header {
	margin-bottom: 2.5rem;
	text-align: center;
	padding: 0 clamp(1.5rem, 5vw, 4rem);
}

.adfish-event-gallery__eyebrow {
	font-size: 0.8rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 0.5rem;
}

.adfish-event-gallery__title {
	font-size: clamp(1.5rem, 3vw, 2rem);
	margin: 0;
	line-height: 1.2;
}

.adfish-event-gallery__viewport {
	position: relative;
}

.adfish-event-gallery__track {
	list-style: none;
	margin: 0;
	padding: 0 clamp(1.5rem, 5vw, 4rem) 0.5rem;
	display: flex;
	gap: 1.25rem;
	overflow-x: auto;
	scroll-behavior: smooth;
	scroll-snap-type: x mandatory;
	-webkit-overflow-scrolling: touch;
	/* Hide scrollbar — the nav buttons are the affordance, not a scrollbar. */
	scrollbar-width: none;
}

.adfish-event-gallery__track::-webkit-scrollbar {
	display: none;
}

.adfish-event-gallery__item {
	flex: 0 0 clamp(260px, 70vw, 400px);
	aspect-ratio: 4 / 5;
	overflow: hidden;
	scroll-snap-align: start;
	background: var(--color-line-soft);
	box-shadow: 0 6px 24px rgba(var(--ink-rgb), 0.12);
}

.adfish-event-gallery__item img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.6s ease;
}

.adfish-event-gallery__item:hover img {
	transform: scale(1.04);
}

/* Reposition the (existing) carousel nav buttons against the gallery's
   light background — base style is white-on-dark for the events carousel,
   here it sits on a light section so we just scoot the buttons inward. */
.adfish-event-gallery .adfish-event-carousel__nav--prev {
	left: 0.75rem;
}

.adfish-event-gallery .adfish-event-carousel__nav--next {
	right: 0.75rem;
}

@media (min-width: 768px) {
	.adfish-event-gallery .adfish-event-carousel__nav--prev {
		left: 1.5rem;
	}

	.adfish-event-gallery .adfish-event-carousel__nav--next {
		right: 1.5rem;
	}
}

/* Event ticket panels (GA + optional VIP) — stacked, full-width info blocks */
.adfish-tickets {
	display: flex;
	flex-direction: column;
	gap: 2.5rem;
	max-width: 820px;
	margin: 4rem auto 6rem;
	padding: 0 clamp(1.5rem, 5vw, 4rem);
}

/* A talent showcase right after the ticket panels, or right before a
   partners year heading (which brings its own 5rem top margin), would stack
   its 10rem/6rem padding on the neighbour's spacing. Let the neighbour's
   spacing be the gap. A <style> block written in content may sit between
   the showcase and the heading, hence the second selector. */
.adfish-tickets:has(+ .adfish-talent-showcase) {
	margin-bottom: 4rem;
}

.adfish-tickets + .adfish-talent-showcase {
	padding-top: 0;
}

.adfish-talent-showcase:has(+ .adfish-partners-year),
.adfish-talent-showcase:has(+ style + .adfish-partners-year) {
	padding-bottom: 0;
}

.adfish-ticket-card {
	background: #fff;
	border: 1px solid var(--color-line);
	padding: clamp(2rem, 4vw, 3rem);
	color: var(--color-primary);
	display: flex;
	flex-direction: column;
	gap: 1.5rem;
	scroll-margin-top: calc(var(--navbar-height) + 1rem);
}

.adfish-ticket-card--vip {
	background: var(--color-primary);
	color: #fff;
	border-color: transparent;
}

.adfish-ticket-card__header {
	display: flex;
	flex-direction: column;
	gap: 0.5rem;
}

.adfish-ticket-card__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	font-weight: 700;
	color: var(--color-accent);
	margin: 0;
}

.adfish-ticket-card__title {
	font-size: clamp(1.5rem, 3vw, 2rem);
	margin: 0;
	line-height: 1.2;
}

.adfish-ticket-card__date {
	font-size: 1rem;
	margin: 0;
	letter-spacing: 0.04em;
	opacity: 0.85;
}

.adfish-ticket-card__subtitle {
	font-size: 0.95rem;
	font-weight: 700;
	color: var(--color-accent);
	margin: 0;
	letter-spacing: 0.04em;
}

.adfish-ticket-card__info {
	display: grid;
	grid-template-columns: max-content 1fr;
	gap: 0.75rem 1.5rem;
	margin: 0;
	font-size: 0.95rem;
	line-height: 1.6;
}

.adfish-ticket-card__info dt {
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	font-size: 0.8rem;
	margin: 0;
	padding-top: 0.15rem;
	color: var(--color-accent);
}

.adfish-ticket-card__info dd {
	margin: 0;
}

.adfish-ticket-card__directions {
	display: inline-block;
	margin-top: 0.4rem;
	font-size: 0.8rem;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	font-weight: 700;
	color: var(--color-accent);
	text-decoration: none;
	border-bottom: 1px solid rgba(var(--accent-rgb), 0.4);
	padding-bottom: 0.1rem;
	transition: border-color var(--duration-fast) ease, color var(--duration-fast) ease;
}

.adfish-ticket-card__directions:hover,
.adfish-ticket-card__directions:focus {
	color: var(--color-accent);
	border-bottom-color: var(--color-accent);
}

.adfish-ticket-card__tier-badge {
	display: inline-block;
	margin-left: 0.5rem;
	padding: 0.15rem 0.6rem;
	font-size: 0.7rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	font-weight: 700;
	background: rgba(255, 255, 255, 0.08);
	border-radius: var(--radius-pill);
	vertical-align: 0.15em;
}

.adfish-ticket-card--ga .adfish-ticket-card__tier-badge {
	background: var(--color-tint);
}

/* Promotional vs regular price note (#157) — under the active price while a
   promo tier is live. */
.adfish-ticket-card__regular {
	display: inline-block;
	margin-top: 0.2rem;
	font-size: 0.85rem;
	color: var(--color-muted);
}

.adfish-ticket-card--vip .adfish-ticket-card__regular {
	color: rgba(255, 255, 255, 0.65);
}

.adfish-ticket-card__perks {
	font-size: 0.95rem;
	line-height: 1.7;
}

.adfish-ticket-card__perks ul {
	margin: 0;
	padding-left: 1.25rem;
}

.adfish-ticket-card__perks li {
	margin-bottom: 0.4rem;
}

/* What every General Admission ticket includes (#155): a short note under
   the GA box, not inside it. Pulled up toward the card (the stack's gap is
   2.5rem) so it reads as belonging to it. */
.adfish-tickets__ga-note {
	margin-top: -1.5rem;
	text-align: center;
	font-size: 0.95rem;
	font-style: italic;
	line-height: 1.6;
	color: var(--color-primary);
}

.adfish-tickets__ga-note p {
	margin: 0 0 0.35rem;
}

.adfish-tickets__ga-note p:last-child {
	margin-bottom: 0;
}

.adfish-ticket-card__cta {
	margin-top: auto;
}

@media (max-width: 480px) {
	.adfish-ticket-card__info {
		grid-template-columns: 1fr;
		gap: 0.25rem 0;
	}
	.adfish-ticket-card__info dt {
		padding-top: 0.75rem;
	}
}

/* Ticket packages grid ([adfish_packages], the VIP Packages page). Each card
   is styled like the VIP ticket panel (navy, gold labels, serif title) so
   the page reads like the event pages. A lone card goes photo-beside-copy on
   wide screens instead of a narrow column. */
.adfish-packages {
	max-width: 980px;
	margin: 0 auto 2rem;
}

.adfish-packages__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr));
	gap: 2rem;
}

.adfish-package-card {
	display: flex;
	flex-direction: column;
	background: var(--color-primary);
	color: #fff;
	text-align: left;
	overflow: hidden;
}

.adfish-package-card__link {
	display: flex;
	flex-direction: column;
	flex: 1;
	color: inherit;
	text-decoration: none;
}

.adfish-package-card__image {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 3 / 2;
	object-fit: cover;
}

.adfish-package-card__body {
	display: flex;
	flex-direction: column;
	gap: 1.25rem;
	padding: clamp(1.75rem, 4vw, 2.5rem) clamp(1.75rem, 4vw, 2.5rem) 1.5rem;
}

.adfish-package-card__title {
	font-size: clamp(1.75rem, 3vw, 2.25rem);
	font-weight: 500;
	line-height: 1.15;
	color: #fff;
	margin: 0;
}

a.adfish-package-card__link:hover .adfish-package-card__title,
a.adfish-package-card__link:focus-visible .adfish-package-card__title {
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 0.2em;
}

.adfish-package-card__includes {
	list-style: none;
	margin: 0;
	padding: 0;
	border-top: 1px solid rgba(255, 255, 255, 0.15);
}

.adfish-package-card__includes li {
	padding: 0.7rem 0;
	border-bottom: 1px solid rgba(255, 255, 255, 0.15);
	font-size: 0.95rem;
	letter-spacing: 0.02em;
}

.adfish-package-card__price {
	display: flex;
	flex-direction: column;
	gap: 0.3rem;
	margin: 0;
}

.adfish-package-card__price-label {
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--color-accent);
}

.adfish-package-card__price-value {
	font-family: var(--font-heading);
	font-size: clamp(2rem, 4vw, 2.75rem);
	line-height: 1;
	color: #fff;
}

.adfish-package-card__buy {
	align-self: flex-start;
	margin: 0 clamp(1.75rem, 4vw, 2.5rem) clamp(1.75rem, 4vw, 2.5rem);
}

@media (min-width: 768px) {
	.adfish-package-card:only-child {
		display: grid;
		grid-template-columns: 1.1fr 1fr;
		grid-template-rows: 1fr auto;
	}

	.adfish-package-card:only-child .adfish-package-card__link {
		display: contents;
	}

	.adfish-package-card:only-child .adfish-package-card__image {
		grid-column: 1;
		grid-row: 1 / span 2;
		/* The copy sets the card's height; the photo fills it instead of
		   stretching it to its own (portrait) height. */
		height: 0;
		min-height: 100%;
		aspect-ratio: auto;
	}

	.adfish-package-card:only-child .adfish-package-card__body {
		grid-column: 2;
		justify-content: center;
	}

	.adfish-package-card:only-child .adfish-package-card__buy {
		grid-column: 2;
		justify-self: start;
	}
}

/* A package's own page: the bundle card under the description
   ([adfish_package_tickets]). Same panel as the event ticket cards; the
   included tickets read like the info rows, each with a GA/VIP pill. */
.adfish-package-tickets .adfish-ticket-card {
	text-align: left;
}

.adfish-package-tickets .adfish-ticket-card__price {
	display: flex;
	flex-direction: column;
	gap: 0.3rem;
	margin: 0;
}

.adfish-package-tickets .adfish-ticket-card__price-value {
	font-family: var(--font-heading);
	font-size: clamp(2rem, 4vw, 2.75rem);
	line-height: 1;
}

.adfish-package-tickets .adfish-ticket-card__price-label {
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--color-accent);
}

.adfish-package-tickets__includes-head {
	margin: 0 0 0.5rem;
	font-size: 0.8rem;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--color-accent);
}

.adfish-package-tickets__includes ul {
	list-style: none;
	margin: 0;
	padding: 0;
	border-top: 1px solid var(--color-line);
}

.adfish-package-tickets__includes li {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	padding: 0.75rem 0;
	border-bottom: 1px solid var(--color-line);
	font-size: 0.95rem;
}

.adfish-package-tickets__includes a {
	color: inherit;
	text-decoration: none;
}

.adfish-package-tickets__includes a:hover,
.adfish-package-tickets__includes a:focus {
	color: var(--color-accent);
}

.adfish-package-tickets__track {
	flex: none;
	padding: 0.15rem 0.6rem;
	font-size: 0.7rem;
	font-weight: 700;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	background: var(--color-tint);
	border-radius: var(--radius-pill);
}

.adfish-package-tickets .adfish-button {
	align-self: flex-start;
}

/* Charity Partners section heading + each partner block */
.adfish-charity-heading {
	text-align: center;
	max-width: 720px;
	margin: 0 auto;
	padding: 5rem 2rem 0;
	color: var(--color-primary);
}

.adfish-charity-heading__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 1rem;
}

.adfish-charity-heading__title {
	font-size: clamp(2rem, 4vw, 3rem);
	margin: 0;
}

.adfish-charity-partner {
	display: grid;
	grid-template-columns: 1fr;
	gap: 3rem;
	color: var(--color-primary);
	padding: 2rem clamp(2rem, 5vw, 4rem);
	max-width: var(--container-max);
	margin: 0 auto;
}

.adfish-charity-partner__copy {
	max-width: 620px;
}

.adfish-charity-partner__logo {
	display: block;
	max-width: 180px;
	height: auto;
	margin: 0 0 1.5rem;
}

.adfish-charity-partner__logo img {
	display: block;
	width: 100%;
	height: auto;
}

.adfish-charity-partner__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 0.5rem;
}

.adfish-charity-partner__name {
	font-size: clamp(1.75rem, 3vw, 2.25rem);
	margin: 0 0 0.5rem;
}

.adfish-charity-partner__location {
	font-size: 0.95rem;
	letter-spacing: 0.04em;
	font-weight: 600;
	margin: 0 0 1.5rem;
	opacity: 0.7;
}

.adfish-charity-partner__body {
	font-size: 1.0625rem;
	line-height: 1.7;
	opacity: 0.85;
	margin: 0 0 1.25rem;
}

.adfish-charity-partner__footer {
	font-size: 0.95rem;
	line-height: 1.6;
	margin: 1.5rem 0 0;
	font-style: italic;
	opacity: 0.75;
}

.adfish-charity-partner__gallery {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 0.75rem;
}

.adfish-charity-partner__gallery-item {
	overflow: hidden;
	aspect-ratio: 1 / 1;
	background: var(--color-line-soft);
}

.adfish-charity-partner__gallery-item img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	transition: transform var(--duration-slow) ease;
}

.adfish-charity-partner__gallery-item:hover img {
	transform: scale(1.04);
}

@media (min-width: 900px) {
	.adfish-charity-partner {
		grid-template-columns: 1fr 1fr;
		gap: clamp(3rem, 6vw, 6rem);
		align-items: center;
		padding: 3rem clamp(2rem, 5vw, 5rem);
	}

	.adfish-charity-partner__copy {
		max-width: none;
	}

	/* Reverse swaps: copy goes right, gallery goes left. Visual rhythm
	   when stacking multiple partners. */
	.adfish-charity-partner--reverse .adfish-charity-partner__copy {
		order: 2;
	}

	.adfish-charity-partner--reverse .adfish-charity-partner__gallery {
		order: 1;
	}
}

/* CTA section (Buy Tickets, etc.) */
.adfish-cta {
	background: var(--color-primary);
	color: #fff;
	padding: 9rem 2rem;
	text-align: center;
}

.adfish-cta--image {
	background-size: cover;
	background-position: center;
	background-repeat: no-repeat;
}

.adfish-cta__inner {
	max-width: 720px;
	margin: 0 auto;
}

.adfish-cta__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.25em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 1.25rem;
}

.adfish-cta__title {
	font-size: clamp(2.25rem, 5vw, 3.75rem);
	margin: 0 0 1.25rem;
	line-height: 1.1;
}

.adfish-cta__body {
	font-size: 1.125rem;
	line-height: 1.65;
	margin: 0 auto 2.5rem;
	max-width: 560px;
	opacity: 0.9;
}

/* Secondary booking links under the main button — for events ticketed off-site,
   which the button's own flow can't sell. Deliberately quieter than the button. */
.adfish-cta__links {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 0.75rem 2rem;
	margin: 1.75rem 0 0;
}

.adfish-cta__link {
	font-size: 0.9rem;
	font-weight: 600;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	/* currentColor: the links must read on both dark and light CTA variants. */
	color: inherit;
	text-decoration: none;
	border-bottom: 1px solid currentColor;
	padding-bottom: 0.2rem;
	opacity: 0.75;
	transition: border-color var(--duration-fast) ease, opacity var(--duration-fast) ease;
}

.adfish-cta__link:hover,
.adfish-cta__link:focus-visible {
	border-bottom-color: var(--color-accent);
	opacity: 1;
}

/* VIP signup */
.adfish-vip-signup {
	background: var(--color-cream);
	color: var(--color-primary);
	padding: 9rem 2rem;
}

.adfish-vip-signup__inner {
	max-width: 640px;
	margin: 0 auto;
	text-align: center;
}

.adfish-vip-signup__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 1rem;
}

.adfish-vip-signup__title {
	font-size: clamp(2rem, 4vw, 3rem);
	margin: 0 0 1.25rem;
	font-weight: 400;
	letter-spacing: 0.02em;
}

.adfish-vip-signup__body {
	font-size: 1.05rem;
	line-height: 1.7;
	margin: 0 0 2.5rem;
	opacity: 0.85;
}

.adfish-vip-signup__form {
	display: flex;
	flex-direction: column;
	gap: 0.75rem;
	max-width: 460px;
	margin: 0 auto;
}

@media (min-width: 560px) {
	.adfish-vip-signup__form {
		flex-direction: row;
	}
}

.adfish-vip-signup__email {
	flex: 1;
	background: transparent;
	border: 1.5px solid rgba(var(--ink-rgb), 0.3);
	color: var(--color-primary);
	padding: 1rem 1.25rem;
	font-size: 1rem;
	letter-spacing: 0.02em;
	transition: border-color 0.25s ease;
}

.adfish-vip-signup__email::placeholder {
	color: rgba(var(--ink-rgb), 0.45);
}

.adfish-vip-signup__email:focus {
	outline: none;
	border-color: var(--color-accent);
}

.adfish-vip-signup__form .adfish-button {
	border-radius: 0;
	white-space: nowrap;
}

.adfish-vip-signup__message {
	min-height: 1.5em;
	margin: 1.25rem 0 0;
	font-size: 0.95rem;
	letter-spacing: 0.02em;
}

.adfish-vip-signup__message.is-success {
	color: var(--color-accent);
}

.adfish-vip-signup__message.is-error {
	color: var(--color-error);
}

/* Submission confirmation — replaces the form on success so it reads as DONE.
   ([hidden] alone can't beat the form's display:flex, so override explicitly.) */
.adfish-vip-signup__form[hidden] {
	display: none;
}

.adfish-vip-signup__done {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 1rem;
	text-align: center;
	padding: 1.5rem 0 0.5rem;
	animation: adfish-done-in 0.4s ease both;
}

.adfish-vip-signup__done[hidden] {
	display: none;
}

.adfish-vip-signup__check {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	border-radius: var(--radius-circle);
	background: var(--color-accent);
	color: #fff;
}

.adfish-vip-signup__check svg {
	width: 28px;
	height: 28px;
}

.adfish-vip-signup__check svg path {
	stroke-dasharray: 22;
	stroke-dashoffset: 22;
	animation: adfish-check-draw 0.45s 0.15s ease forwards;
}

.adfish-vip-signup__done-text {
	margin: 0;
	max-width: 42ch;
	font-size: 1.15rem;
	line-height: 1.5;
	color: var(--color-primary);
}

@keyframes adfish-done-in {
	from { opacity: 0; transform: translateY(8px); }
	to { opacity: 1; transform: none; }
}

@keyframes adfish-check-draw {
	to { stroke-dashoffset: 0; }
}

@media (prefers-reduced-motion: reduce) {
	.adfish-vip-signup__done { animation: none; }
	.adfish-vip-signup__check svg path { animation: none; stroke-dashoffset: 0; }
}

/* Stacked multi-field variant (contact form, etc.) */
.adfish-vip-signup--stacked {
	/* lighter band than the full-bleed signup — sits inside a constrained page */
	padding: clamp(2.5rem, 6vw, 4rem) clamp(1.5rem, 5vw, 3rem);
}

.adfish-vip-signup--stacked .adfish-vip-signup__inner {
	max-width: 620px;
}

.adfish-vip-signup--stacked .adfish-vip-signup__form {
	flex-direction: column;
	max-width: 100%;
	gap: 1.25rem;
	text-align: left;
}

@media (min-width: 560px) {
	/* override the inline row rule so the stacked variant stays a column */
	.adfish-vip-signup--stacked .adfish-vip-signup__form {
		flex-direction: column;
	}
}

.adfish-vip-signup__field {
	display: flex;
	flex-direction: column;
	gap: 0.45rem;
	text-align: left;
}

.adfish-vip-signup__label {
	font-size: 0.78rem;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	font-weight: 700;
	color: var(--color-accent);
}

.adfish-vip-signup__input,
.adfish-vip-signup__textarea {
	width: 100%;
	background: transparent;
	border: 1.5px solid rgba(var(--ink-rgb), 0.3);
	color: var(--color-primary);
	padding: 0.95rem 1.15rem;
	font-size: 1rem;
	font-family: inherit;
	letter-spacing: 0.02em;
	transition: border-color 0.25s ease;
}

.adfish-vip-signup__textarea {
	resize: vertical;
	min-height: 9rem;
	line-height: 1.6;
}

.adfish-vip-signup__input::placeholder,
.adfish-vip-signup__textarea::placeholder {
	color: rgba(var(--ink-rgb), 0.45);
}

.adfish-vip-signup__input:focus,
.adfish-vip-signup__textarea:focus {
	outline: none;
	border-color: var(--color-accent);
}

.adfish-vip-signup--stacked .adfish-vip-signup__form .adfish-button {
	align-self: flex-start;
}

/* Buttons */
.adfish-button {
	display: inline-flex;
	align-items: center;
	gap: 0.6rem;
	padding: 1rem 2rem 0.9rem;
	background: var(--color-accent);
	color: #fff;
	text-decoration: none;
	font-size: 0.78rem;
	font-weight: 700;
	letter-spacing: 0.22em;
	text-transform: uppercase;
	border: 1.5px solid var(--color-accent);
	cursor: pointer;
	transition: background 0.25s ease, color 0.25s ease, border-color 0.25s ease;
	line-height: 1;
}

.adfish-button:hover,
.adfish-button:focus {
	background: transparent;
	color: var(--color-accent);
}

/* Tickets-not-on-sale state — reads as secondary (links to the insider list). */
.adfish-button--soon {
	background: transparent;
	color: rgba(0, 0, 0, 0.5);
	border-color: rgba(0, 0, 0, 0.2);
}

.adfish-button--soon:hover,
.adfish-button--soon:focus {
	background: rgba(0, 0, 0, 0.05);
	color: var(--color-text, #333);
	border-color: var(--color-text, #333);
}

/* On a dark hero overlay or the dark VIP ticket card the muted dark variant
   is invisible — use light. */
.adfish-fullscreen .adfish-button--soon,
.adfish-navbar.is-overlay .adfish-button--soon,
.adfish-ticket-card--vip .adfish-button--soon,
.adfish-package-card .adfish-button--soon {
	color: rgba(255, 255, 255, 0.9);
	border-color: rgba(255, 255, 255, 0.5);
	background: transparent;
}

.adfish-fullscreen .adfish-button--soon:hover,
.adfish-fullscreen .adfish-button--soon:focus,
.adfish-navbar.is-overlay .adfish-button--soon:hover,
.adfish-navbar.is-overlay .adfish-button--soon:focus,
.adfish-ticket-card--vip .adfish-button--soon:hover,
.adfish-ticket-card--vip .adfish-button--soon:focus,
.adfish-package-card .adfish-button--soon:hover,
.adfish-package-card .adfish-button--soon:focus {
	background: rgba(255, 255, 255, 0.14);
	color: #fff;
	border-color: #fff;
}

.adfish-button--ghost-light {
	background: transparent;
	border-color: #fff;
	color: #fff;
}

.adfish-button--ghost-light:hover,
.adfish-button--ghost-light:focus {
	background: #fff;
	color: var(--color-primary);
	border-color: #fff;
}

.adfish-button--ghost-dark {
	background: transparent;
	border-color: var(--color-primary);
	color: var(--color-primary);
}

.adfish-button--ghost-dark:hover,
.adfish-button--ghost-dark:focus {
	background: var(--color-surface);
	color: #fff;
	border-color: var(--color-primary);
}

/* Menu toggle (hamburger) — generic, used wherever it appears */
.adfish-menu-toggle {
	background: none;
	border: 0;
	/* Vertical padding sized so the toggle hits a ~44px tap target on mobile. */
	padding: 0.875rem 0.75rem;
	cursor: pointer;
	color: inherit;
	display: inline-flex;
	align-items: center;
	gap: 0.75rem;
	font: inherit;
}

.adfish-menu-toggle__icon {
	display: inline-flex;
	flex-direction: column;
	gap: 6px;
	width: 30px;
}

.adfish-menu-toggle__icon span {
	display: block;
	height: 3px;
	background: currentColor;
	border-radius: 1.5px;
}

.adfish-menu-toggle__label {
	font-size: 0.875rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	font-weight: 700;
}

/* Visually hidden but available to screen readers and search engines
   (e.g. a hero <h1> where the festival name is shown as a logo image). */
.adfish-sr-only {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}

/* Accommodations: [adfish_hotel] property card. Photo on top (absent until
   one is supplied), then logo, eyebrow, name, address, description, booking
   button. Cards stack in the content column, not full-bleed like other
   adfish-* sections, so they keep the page gutter on phones. */
.adfish-page-prose > .adfish-hotel {
	grid-column: content;
}

.adfish-hotel {
	max-width: 720px;
	margin: 0 auto 2.5rem;
	background: #fff;
	border: 1px solid var(--color-line);
	display: flex;
	flex-direction: column;
	overflow: hidden;
}

.adfish-hotel__photo img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 16 / 9;
	object-fit: cover;
}

/* Several photos: a slider on the parent theme's data-carousel JS. One slide
   per view, snap-scrolled, no autoplay. Dots are the position cue; the
   arrows are a quiet desktop extra (shown on hover/focus, gone on touch
   screens where swiping is the gesture, and hidden at either end). */
.adfish-hotel__photo--slider {
	position: relative;
}

.adfish-hotel__slides {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	overscroll-behavior-x: contain;
	-webkit-overflow-scrolling: touch;
	scrollbar-width: none;
}

.adfish-hotel__slides::-webkit-scrollbar {
	display: none;
}

.adfish-hotel__slides:focus-visible {
	outline: 2px solid var(--color-accent);
	outline-offset: -4px;
}

.adfish-hotel__slide {
	flex: 0 0 100%;
	scroll-snap-align: start;
	aspect-ratio: 16 / 9;
	overflow: hidden;
}

/* The slide owns the 16:9 box and the photo fills it, so no strip shows
   under the photo whatever the line box does. */
.adfish-hotel__slide img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* A soft shade under the dots so they read on any photo. */
.adfish-hotel__photo--slider::after {
	content: "";
	position: absolute;
	inset: auto 0 0;
	height: 4.5rem;
	background: linear-gradient(to top, rgba(0, 0, 0, 0.38), transparent);
	pointer-events: none;
}

.adfish-hotel__dots {
	position: absolute;
	left: 50%;
	bottom: 0.4rem;
	transform: translateX(-50%);
	display: flex;
	z-index: 2;
}

/* 24px tap target (WCAG 2.2) around an 8px dot; the current one is a pill. */
.adfish-hotel__dot {
	width: 24px;
	height: 24px;
	padding: 0;
	border: 0;
	background: none;
	display: grid;
	place-items: center;
	cursor: pointer;
}

.adfish-hotel__dot::before {
	content: "";
	width: 8px;
	height: 8px;
	border-radius: var(--radius-pill);
	background: rgba(255, 255, 255, 0.6);
	transition: width var(--duration-fast, 0.2s) ease, background-color var(--duration-fast, 0.2s) ease;
}

.adfish-hotel__dot[aria-current="true"]::before {
	width: 20px;
	background: #fff;
}

.adfish-hotel__dot:focus-visible {
	outline: 2px solid #fff;
	outline-offset: -2px;
	border-radius: var(--radius-pill);
}

.adfish-hotel__nav {
	position: absolute;
	top: 50%;
	z-index: 2;
	width: 40px;
	height: 40px;
	padding: 0;
	border: 0;
	border-radius: var(--radius-circle);
	background: rgba(0, 0, 0, 0.35);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
	color: #fff;
	display: grid;
	place-items: center;
	cursor: pointer;
	transform: translateY(-50%);
	opacity: 0;
	transition: opacity var(--duration-fast, 0.2s) ease, background-color var(--duration-fast, 0.2s) ease;
}

.adfish-hotel__nav--prev {
	left: 0.75rem;
}

.adfish-hotel__nav--next {
	right: 0.75rem;
}

.adfish-hotel__photo--slider:hover .adfish-hotel__nav,
.adfish-hotel__photo--slider:focus-within .adfish-hotel__nav {
	opacity: 1;
}

.adfish-hotel__nav:hover {
	background: rgba(0, 0, 0, 0.55);
}

.adfish-hotel__photo--slider .adfish-hotel__nav.is-disabled {
	opacity: 0;
	visibility: hidden;
}

@media (hover: none) {
	.adfish-hotel__nav {
		display: none;
	}
}

@media (prefers-reduced-motion: reduce) {
	.adfish-hotel__slides {
		scroll-behavior: auto;
	}

	.adfish-hotel__dot::before,
	.adfish-hotel__nav {
		transition: none;
	}
}

.adfish-hotel__body {
	padding: clamp(1.5rem, 4vw, 2.25rem);
	display: flex;
	flex-direction: column;
	gap: 0.55rem;
	line-height: 1.7;
}

/* The logo sits centred on a slim white band between the photo and the
   copy. White, not cream: several hotel logos are JPGs/PNGs with a white
   background, which would show as a box on any tint. Kept slim so the name
   and button stay close to the photo on phones. */
.adfish-hotel__logo-wrap {
	background: #fff;
	border-bottom: 1px solid var(--color-line);
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 1.25rem 1.5rem;
}

/* Tall marks need the height, wide ones the width. --logo-scale is the Logo
   post's Scale setting (box dims, never transform), e.g. Hyatt's file has
   built-in padding so it runs at 150%. */
.adfish-hotel__logo {
	display: block;
	width: auto;
	height: auto;
	max-width: calc(200px * var(--logo-scale, 1));
	max-height: calc(72px * var(--logo-scale, 1));
}

.adfish-hotel__eyebrow {
	font-size: 0.72rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0;
}

.adfish-hotel__name {
	font-size: clamp(1.3rem, 2.4vw, 1.6rem);
	font-weight: 400;
	margin: 0;
	color: var(--color-primary);
}

.adfish-hotel__address {
	font-size: 0.9rem;
	color: var(--color-muted);
	margin: 0;
}

.adfish-hotel__description {
	margin: 0.35rem 0 0;
}

.adfish-hotel__button {
	margin-top: 1rem;
	align-self: flex-start;
}

/* size="compact": the smaller listing for a lower-tier sponsor. Logo beside
   the copy, a text link instead of the button, no photo. */
.adfish-hotel--compact {
	flex-direction: row;
	flex-wrap: wrap;
	align-items: center;
	gap: 1.5rem;
	padding: 1.25rem 1.5rem;
}

.adfish-hotel--compact .adfish-hotel__logo-wrap {
	flex: 0 0 auto;
	border: 0;
	padding: 0;
	min-height: 0;
}

.adfish-hotel--compact .adfish-hotel__logo {
	max-width: calc(150px * var(--logo-scale, 1));
	max-height: calc(66px * var(--logo-scale, 1));
}

.adfish-hotel--compact .adfish-hotel__body {
	flex: 1;
	min-width: 220px;
	padding: 0;
	gap: 0.3rem;
	line-height: 1.6;
}

.adfish-hotel--compact .adfish-hotel__name {
	font-size: 1.1rem;
	font-weight: 500;
}

.adfish-hotel--compact .adfish-hotel__description {
	font-size: 0.88rem;
	color: var(--color-muted);
	margin: 0;
}

.adfish-hotel__link {
	font-size: 0.85rem;
	color: var(--color-accent);
	text-decoration: none;
	font-weight: 600;
}

/* ==========================================================================
   Event page anatomy (#125): [adfish_cards] / [adfish_card] highlight grids
   and the [adfish_notes] "Know Before You Go" list. Content carries no inline
   styles; everything here reads the theme tokens.
   ========================================================================== */
.adfish-cards {
	margin: clamp(2.5rem, 6vw, 4rem) 0;
}

.adfish-cards__intro {
	text-align: center;
	margin: 0 0 clamp(1.5rem, 4vw, 2.25rem);
}

.adfish-cards__eyebrow {
	font-size: 0.875rem;
	letter-spacing: 0.2em;
	text-transform: uppercase;
	color: var(--color-accent);
	font-weight: 700;
	margin: 0 0 0.5rem;
}

.adfish-cards__title {
	font-size: clamp(1.8rem, 3.5vw, 2.6rem);
	font-weight: 500;
	color: var(--color-primary);
	margin: 0;
	line-height: 1.2;
}

.adfish-cards__grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: clamp(1.25rem, 3vw, 2rem);
}

@media (min-width: 720px) {
	.adfish-cards--cols-2 .adfish-cards__grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 960px) {
	.adfish-cards--cols-3 .adfish-cards__grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

.adfish-card {
	display: flex;
	flex-direction: column;
	background: var(--color-cream);
	overflow: hidden;
}

.adfish-card__image {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 3 / 2;
	object-fit: cover;
}

.adfish-card__body {
	padding: clamp(1.25rem, 3vw, 1.75rem);
}

.adfish-card__title {
	font-size: clamp(1.3rem, 2.4vw, 1.6rem);
	font-weight: 500;
	line-height: 1.25;
	color: var(--color-primary);
	margin: 0 0 0.5rem;
}

.adfish-card__title a {
	color: inherit;
	text-decoration: none;
}

.adfish-card__title a:hover,
.adfish-card__title a:focus {
	text-decoration: underline;
}

.adfish-card__text {
	margin: 0 0 0.5rem;
	line-height: 1.7;
	color: var(--color-text);
}

.adfish-card__text:last-child {
	margin-bottom: 0;
}

.adfish-notes {
	margin: clamp(2rem, 5vw, 3rem) 0;
	padding: clamp(1.5rem, 4vw, 2rem);
	background: var(--color-cream);
	border-left: 4px solid var(--color-accent);
}

.adfish-notes__title {
	font-size: clamp(1.5rem, 3vw, 1.9rem);
	font-weight: 500;
	color: var(--color-primary);
	margin: 0 0 1rem;
}

.adfish-notes__list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 0.75rem;
}

.adfish-notes__item {
	position: relative;
	padding-left: 1.25rem;
	line-height: 1.6;
	color: var(--color-text);
}

.adfish-notes__item::before {
	content: "";
	position: absolute;
	left: 0;
	top: 0.6em;
	width: 6px;
	height: 6px;
	border-radius: var(--radius-circle, 50%);
	background: var(--color-accent);
}

.adfish-notes__label {
	color: var(--color-primary);
}
