/*
 Theme Name:   Adfish Theme - Whiskey, Wine & Wildlife
 Theme URI:    https://github.com/adfishgroup/adfish-wp
 Description:  Child theme for Whiskey, Wine & Wildlife Festival
 Author:       Adfish Group
 Author URI:   https://adfish.com
 Template:     adfish-theme
 Version:      1.0.0
 License:      Proprietary
 Text Domain:  adfish-w3
*/

/* ==========================================================================
   Design tokens
   ========================================================================== */
:root {
	/* ---- Brand ---- */
	--color-primary: #5a3b29;        /* logo brown — text, strokes, primary brand */
	--color-accent: #879a47;         /* olive green — eyebrows, headings, links, buttons */
	--color-highlight: #f0c66a;      /* warm gold — small highlights (event time) */

	/* RGB channel triplets for rgba() composition — rgba(var(--ink-rgb), .25) etc.
	   Keep in sync with the hex above. --ink-rgb is a darker text/hairline brown and is
	   intentionally NOT --color-primary (90,59,41). */
	--accent-rgb: 135, 154, 71;      /* = #879a47 */
	--ink-rgb: 58, 38, 24;           /* darker brown for text, hairlines, pale fills */

	/* ---- Surfaces ---- */
	--color-surface: #5a3b29;        /* 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: #5a3b29;           /* 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 (brown-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%;

	/* ---- Texture ----
	   Fine SVG grain (~0.45KB inline, cached with the CSS — no extra request, no raster).
	   Surfaces get tooth from a single global grain layer (body::before); large colored
	   fills get a soft radial "glow" for dimension. Colorless — re-themes for free. */
	--noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");

	/* ---- 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;
}

/* ==========================================================================
   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);
	/* Tonal wash: a hair of warmth so flat #fff areas don't read as a dead sheet (0 bytes). */
	background: linear-gradient(180deg, var(--color-bg) 0%, #fdfbf7 100%) fixed;
}

/* Grain backdrop: one fixed, viewport-wide layer that sits BEHIND page content
   (z-index:-1) so it shows through transparent content columns and the side gutters
   equally — uniform edge-to-edge, never films over body copy, and never boxes a
   centered column (which becomes its own stacking context via the reveal transform).
   Colored full-bleed bands are opaque and carry their own grain (see footer/CTA/VIP).
   Multiply over the warm wash keeps the speckle neutral; opacity is the one knob. */
body::before {
	content: "";
	position: fixed;
	inset: 0;
	z-index: -1;
	background-image: var(--noise);
	background-size: 170px;
	mix-blend-mode: multiply;
	opacity: 0.05;
	pointer-events: none;
}

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. */
.adfish-page--after-hero:has(+ [class^="adfish-"]) {
	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 {
	/* Soft glow for dimension + grain blended in (soft-light = gentle tooth on dark). */
	background:
		var(--noise),
		radial-gradient(120% 100% at 50% -10%, #6b4733 0%, var(--color-surface) 55%, #4a3020 100%);
	background-size: 170px, auto;
	background-blend-mode: soft-light, normal;
	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 supporter
   + 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__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;
}

.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;
}

/* Credits — producer + supporting partners. Logos sit on white "chips" so the
   white-background JPEG sponsor logos read cleanly on the dark footer. */
.adfish-footer__credit {
	display: flex;
	flex-direction: column;
	gap: 0.8rem;
}

.adfish-footer__brand .adfish-footer__credit {
	margin-top: 2rem;
}

.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: 0.7rem;
}

/* Partner logos are "reversed out" to white on the dark footer via filter:
   brightness(0) flattens the artwork to solid black (keeping its alpha),
   invert(1) flips that to white — so the transparent-PNG marks read as clean
   white silhouettes with no backing chip. Footer-scoped only: the same Logo
   CPT images stay full-colour wherever else they appear (e.g. the tourism
   partners grid). */
.adfish-footer__partner {
	display: inline-flex;
	align-items: center;
	justify-content: center;
}

.adfish-footer__partner img {
	display: block;
	width: auto;
	height: auto;
	/* --logo-scale: per-logo optical weight set inline by the plugin (issue #67);
	   multiplies on top of the per-group --compact baseline. */
	max-height: calc(84px * var(--logo-scale, 1));
	max-width: calc(260px * var(--logo-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. The cap is
   the binding constraint for the taller SJCC mark (~3.4:1); the very wide TDC
   mark (~6.7:1) is width-bound so it's unaffected by the height. */
.adfish-footer__partner--compact img {
	max-height: calc(44px * var(--logo-scale, 1));
	max-width: calc(220px * var(--logo-scale, 1));
}

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

.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: 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;
}

.adfish-fullscreen video {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.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 truly centred regardless of how
	   wide the CTA label is. */
	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 var(--color-line);
	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. One file is kept; dark
   surfaces flip it to white with --white instead of a second asset (same
   brightness(0) invert(1) trick as the footer partner logos). */
.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 ("Tickets Coming Soon") stays
	   compact and doesn't crowd the centre logo. (.adfish-navbar prefix needed 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;
	}
}

/* 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: 500;
	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: 500;
	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;
}

/* 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 */
/* Breadcrumb — single event / talent, links back to the listing. */
.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 showcase (split layout: text left, scrolling row right) */
.adfish-talent-showcase {
	display: grid;
	grid-template-columns: 1fr;
	gap: 3rem;
	padding: 9rem 0 6rem 2rem;
	/* Transparent so the section inherits the page's warm wash + grain backdrop
	   instead of stamping a cold opaque-white box on it. */
	background: transparent;
	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: 500;
	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-family: var(--font-body);
	font-size: 1.125rem;
	margin: 0 0 0.25rem;
	font-weight: 600;
	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: var(--color-muted);
	margin: 0.25rem 0 0;
	line-height: 1.3;
}

/* Logo section (charity partners, sponsors, etc.) */
.adfish-logo-section {
	padding: 9rem 2rem;
	/* Transparent so logos sit on the page's warm wash + grain, not a cold white box. */
	background: transparent;
	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;
}

.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: 500;
	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 3.5rem;
	margin-top: 3rem;
}

.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);
	transition: transform 0.25s ease;
}

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);
}

/* 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%;
	}
}

/* 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 var(--color-line);
}

.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);
}

.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-surface);
	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);
}

.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;
}

.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;
	}
}

/* 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 {
	/* image-overlay tint read by the plugin's inline gradient (falls back to navy elsewhere) */
	--cta-overlay-rgb: 58, 38, 24;
	background: var(--color-surface);
	color: #fff;
	padding: 9rem 2rem;
	text-align: center;
}

/* Solid CTAs get the glow + grain. Scoped away from image CTAs so the blend-mode
   never touches the plugin's inline photo/overlay layers. */
.adfish-cta:not(.adfish-cta--image) {
	background:
		var(--noise),
		radial-gradient(120% 100% at 50% -10%, #6b4733 0%, var(--color-surface) 55%, #4a3020 100%);
	background-size: 170px, auto;
	background-blend-mode: soft-light, normal;
}

.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;
}

/* VIP signup */
.adfish-vip-signup {
	background:
		var(--noise),
		radial-gradient(120% 90% at 15% 0%, #fbf5ea 0%, var(--color-cream) 60%, #efe4d2 100%);
	background-size: 170px, auto;
	background-blend-mode: soft-light, normal;
	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;
	/* Short intro lines wrap evenly instead of stranding the last word. */
	text-wrap: balance;
}

.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: 50%;
	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 so it's clearly not a live
   buy button (links to the insider list). */
.adfish-button--soon {
	background: transparent;
	color: var(--color-muted);
	border-color: var(--color-line);
}

.adfish-button--soon:hover,
.adfish-button--soon:focus {
	background: var(--color-tint);
	color: var(--color-primary);
	border-color: var(--color-primary);
}

/* On a dark hero overlay the muted dark variant is invisible — use light. */
.adfish-fullscreen .adfish-button--soon,
.adfish-navbar.is-overlay .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 {
	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-surface);
}

/* Menu toggle (hamburger) — generic, used wherever it appears */
/* Visually hidden but available to screen readers and search engines
   (e.g. the home hero's <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;
}

.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;
}
