/**
 * Homepage (block rebuild, 2026-09).
 *
 * Scoped to .ssg-home-blocks (set on <body> only once the front page is
 * genuinely block content) so nothing here can leak onto the 20-odd pages
 * still rendered by Elementor.
 *
 * @package tactiko-child
 */

/* -------------------------------------------------------------------------
 * Layout reset
 *
 * Tactiko's #primary/.site-main wraps every page in the theme's own boxed
 * container with vertical padding. The homepage sections carry their own
 * full-bleed backgrounds and spacing, so that wrapper has to get out of the
 * way - otherwise every alignfull section is inset and double-padded.
 * ---------------------------------------------------------------------- */

.ssg-home-blocks #primary,
.ssg-home-blocks .site-main.ssg-home {
	max-width: none;
	width: 100%;
	margin: 0;
	padding: 0;
}

.ssg-home-blocks .site-main.ssg-home > * {
	margin-block: 0;
}

/* Section rhythm. Full-bleed sections constrain their own inner container. */
.ssg-home .ssg-section {
	padding-block: var(--wp--preset--spacing--60);
}

.ssg-home .ssg-section > .wp-block-cover__inner-container,
.ssg-home .ssg-section > :not(.wp-block-cover__background):not(.wp-block-cover__image-background) {
	max-width: var(--wp--style--global--content-size, 1410px);
	margin-inline: auto;
	padding-inline: var(--wp--preset--spacing--30);
	width: 100%;
	box-sizing: border-box;
}

/*
 * Shared eyebrow: 14px 600 uppercase, 2px tracking - the site's "Sub Title".
 * brand-deep, not brand: at 14px semibold this is normal-size text and needs
 * 4.5:1 on white, which Safari Olive (3.5:1) misses. Buttons keep brand; their
 * white label is bold and large enough for the 3:1 tier.
 */
.ssg-home .ssg-eyebrow {
	margin: 0 0 0.75rem;
	color: var(--wp--preset--color--brand-deep);
	font-size: 0.875rem;
	font-weight: 600;
	line-height: 1.43;
	letter-spacing: 2px;
	text-transform: uppercase;
}

.ssg-home .ssg-eyebrow--light {
	color: var(--wp--preset--color--gold);
}

/* -------------------------------------------------------------------------
 * Hero
 * ---------------------------------------------------------------------- */

.ssg-home .ssg-hero {
	position: relative;
	overflow: hidden;
	min-height: 72svh;
	min-height: 72vh; /* fallback ordering: svh wins where supported */
	padding: 0;
	background-color: #1a1a1a;
}

@supports (min-height: 72svh) {
	.ssg-home .ssg-hero { min-height: clamp(420px, 72svh, 820px); }
}

/*
 * Poster image, shown until the video paints over it - no black flash.
 * max-width/margin are required because the hero is a layout container and
 * would otherwise cap this absolutely-positioned child to the content width.
 * container-type: size lets the video cover the hero's REAL box via cqw/cqh
 * rather than the viewport, which matters when the hero is taller than the
 * screen on a short landscape phone.
 */
.ssg-home .hero__bg-video {
	position: absolute;
	inset: 0;
	z-index: 0;
	overflow: hidden;
	pointer-events: none;
	max-width: none;
	margin: 0;
	container-type: size;
	background-color: #1a1a1a;
	background-image: url("../images/ssg-hero-poster-final-8.jpg");
	background-image: image-set(
		url("../images/ssg-hero-poster-final-8.avif") type("image/avif"),
		url("../images/ssg-hero-poster-final-8.webp") type("image/webp"),
		url("../images/ssg-hero-poster-final-8.jpg")  type("image/jpeg")
	);
	background-position: center;
	background-size: cover;
	background-repeat: no-repeat;
}

/*
 * Cover the hero at its real size, using container units, not the viewport.
 * The oversize-and-centre trick is required for the iframe, which ignores
 * object-fit entirely; a plain <video> would manage on object-fit alone but is
 * sized the same way so one rule serves both sources.
 *
 * 16/9 matches the 1920x1080 source (self-hosted and Vimeo alike). A clip in
 * another ratio only changes how much is cropped, never whether the frame is
 * filled - the max()/min() pair guarantees coverage either way.
 */
.ssg-home .hero__bg-video video,
.ssg-home .hero__bg-video iframe {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width:  max(100cqw, calc(100cqh * 16 / 9));
	height: max(100cqh, calc(100cqw * 9 / 16));
	min-width: 100cqw;
	min-height: 100cqh;
	border: 0;
	object-fit: cover;
	pointer-events: none;
}

.ssg-home .hero__toggle {
	display: none;
	position: absolute;
	right: 2rem;
	bottom: 2rem;
	z-index: 3;
	align-items: center;
	justify-content: center;
	width: 44px;
	height: 44px;
	padding: 0;
	border: 1px solid rgba(255, 255, 255, 0.45);
	border-radius: 3px;
	background: rgba(0, 0, 0, 0.4);
	color: #fff;
	cursor: pointer;
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
}

.ssg-home .hero__toggle.is-ready { display: inline-flex; }
.ssg-home .hero__toggle:hover { background: rgba(0, 0, 0, 0.62); }
.ssg-home .hero__toggle:focus-visible {
	outline: 2px solid var(--wp--preset--color--gold);
	outline-offset: 3px;
}
.ssg-home .hero__toggle .hero__toggle-icon { display: block; fill: currentColor; }
.ssg-home .hero__toggle .hero__toggle-icon--play { display: none; }
.ssg-home .hero__toggle.is-paused .hero__toggle-icon--pause { display: none; }
.ssg-home .hero__toggle.is-paused .hero__toggle-icon--play { display: block; }

/* -------------------------------------------------------------------------
 * Image cards (destinations + popular hunts)
 * ---------------------------------------------------------------------- */

.ssg-home .ssg-card-row {
	gap: 0;
}

.ssg-home .ssg-card-row .wp-block-column {
	min-width: 0;
}

.ssg-home .ssg-card {
	position: relative;
	overflow: hidden;
	padding: var(--wp--preset--spacing--30);
	transition: transform 350ms ease;
}

.ssg-home .ssg-card .wp-block-cover__image-background {
	transition: transform 600ms ease;
}

.ssg-home .ssg-card:hover .wp-block-cover__image-background,
.ssg-home .ssg-card:focus-within .wp-block-cover__image-background {
	transform: scale(1.06);
}

.ssg-home .ssg-card__title {
	margin: 0;
	color: #fff;
	font-size: 1.4375rem;
	font-style: normal;
	font-weight: 700;
	line-height: 1.14;
	text-transform: uppercase;
}

.ssg-home .ssg-card__desc {
	margin: 0.5rem 0 0;
	color: #fff;
	font-size: 1rem;
	font-weight: 700;
}

.ssg-home .ssg-card .wp-block-buttons {
	margin-top: 1.25rem;
}

/*
 * Whole-card link. The <a> already inside the card is stretched to cover it,
 * so the card is clickable without a second (duplicate) link in the
 * accessibility tree and without any JS box-click handler.
 */
.ssg-home .ssg-card__title--link a,
.ssg-home .ssg-card__link .wp-block-button__link {
	position: static;
}

.ssg-home .ssg-card__title--link a::after,
.ssg-home .ssg-card__link .wp-block-button__link::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 2;
}

.ssg-home .ssg-card__title--link a {
	color: #fff;
	text-decoration: none;
}

.ssg-home .ssg-card__title--link a:hover,
.ssg-home .ssg-card__title--link a:focus-visible {
	color: var(--wp--preset--color--gold);
	text-decoration: none;
}

/* Ghost button used on the image cards. */
.ssg-home .ssg-btn-ghost .wp-block-button__link {
	border: 1px solid rgba(255, 255, 255, 0.85);
	border-radius: 0;
	background: transparent;
	color: #fff;
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 1px;
	padding: 0.75rem 1.5rem;
	text-transform: uppercase;
}

.ssg-home .ssg-btn-ghost .wp-block-button__link:hover,
.ssg-home .ssg-btn-ghost .wp-block-button__link:focus-visible {
	background: #fff;
	color: var(--wp--preset--color--ink);
}

/* Solid light button used on the dark sections. */
.ssg-home .ssg-btn-light .wp-block-button__link {
	border-radius: 0;
	background: #fff;
	color: var(--wp--preset--color--ink);
	font-size: 0.875rem;
	font-weight: 700;
	letter-spacing: 1px;
	padding: 0.9rem 1.75rem;
	text-transform: uppercase;
}

.ssg-home .ssg-btn-light .wp-block-button__link:hover,
.ssg-home .ssg-btn-light .wp-block-button__link:focus-visible {
	background: var(--wp--preset--color--brand);
	color: #fff;
}

/* Outline button on light sections. */
.ssg-home .ssg-btn-dark .wp-block-button__link {
	border: 1px solid var(--wp--preset--color--ink);
	border-radius: 0;
	background: transparent;
	color: var(--wp--preset--color--ink);
	font-size: 0.875rem;
	font-weight: 700;
	letter-spacing: 1px;
	padding: 0.9rem 1.75rem;
	text-transform: uppercase;
}

.ssg-home .ssg-btn-dark .wp-block-button__link:hover,
.ssg-home .ssg-btn-dark .wp-block-button__link:focus-visible {
	background: var(--wp--preset--color--ink);
	color: #fff;
}

/* -------------------------------------------------------------------------
 * Intro
 * ---------------------------------------------------------------------- */

.ssg-home .ssg-intro__cols {
	gap: var(--wp--preset--spacing--50);
}

/* The two images overlap the way the Elementor original did. */
.ssg-home .ssg-intro__media {
	position: relative;
	padding-bottom: 3rem;
}

.ssg-home .ssg-intro__img { margin: 0; }

.ssg-home .ssg-intro__img--back img {
	display: block;
	width: 78%;
	height: auto;
}

.ssg-home .ssg-intro__img--front {
	position: absolute;
	right: 0;
	bottom: 0;
	width: 46%;
}

.ssg-home .ssg-intro__img--front img {
	display: block;
	width: 100%;
	height: auto;
	border: 6px solid #fff;
}

.ssg-home .ssg-intro__title {
	margin: 0 0 0.75rem;
}

.ssg-home .ssg-intro__body p {
	max-width: 46ch;
}

.ssg-home .ssg-intro__body .ssg-eyebrow {
	font-size: 1.125rem;
	font-weight: 500;
	letter-spacing: 0;
	text-transform: none;
}

/* Intro video link (replaces the Elementor video-popup widget). */
.ssg-home .ssg-video-link {
	display: inline-flex;
	align-items: center;
	gap: 1rem;
	margin-top: 1.75rem;
	color: var(--wp--preset--color--ink);
	text-decoration: none;
}

.ssg-home .ssg-video-link__thumb {
	position: relative;
	display: block;
	flex: 0 0 auto;
	width: 180px;
	line-height: 0;
}

.ssg-home .ssg-video-link__thumb img {
	width: 180px;
	height: 100px;
	object-fit: cover;
}

.ssg-home .ssg-video-link__play {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	display: grid;
	place-items: center;
	width: 38px;
	height: 38px;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.92);
	color: var(--wp--preset--color--ink);
}

.ssg-home .ssg-video-link__play svg { fill: currentColor; margin-left: 2px; }

.ssg-home .ssg-video-link__label {
	font-size: 0.875rem;
	font-style: italic;
	font-weight: 700;
	line-height: 1.2;
	text-transform: uppercase;
}

.ssg-home .ssg-video-link:hover .ssg-video-link__play,
.ssg-home .ssg-video-link:focus-visible .ssg-video-link__play {
	background: var(--wp--preset--color--gold);
}

/* -------------------------------------------------------------------------
 * Popular hunts / lodge (dark cover sections)
 * ---------------------------------------------------------------------- */

.ssg-home .ssg-hunts,
.ssg-home .ssg-lodge,
.ssg-home .ssg-signup {
	color: #fff;
}

.ssg-home .ssg-hunts :is(h2, h3),
.ssg-home .ssg-lodge :is(h2, h3),
.ssg-home .ssg-signup :is(h2, h3) {
	color: #fff;
}

.ssg-home .ssg-hunts__head,
.ssg-home .ssg-lodge__cols,
.ssg-home .ssg-news__head {
	margin-bottom: var(--wp--preset--spacing--40);
}

.ssg-home .ssg-hunts__lede {
	margin: 0.75rem 0 0;
	max-width: 44ch;
	color: rgba(255, 255, 255, 0.85);
}

.ssg-home .ssg-lodge__title {
	margin: 0 0 1.75rem;
}

/* Oversized BOOK / NOW link, stacked like the Elementor original. */
.ssg-home .ssg-booknow {
	display: block;
	color: #fff;
	font-size: clamp(2.5rem, 6vw, 4.5rem);
	font-style: italic;
	font-weight: 700;
	line-height: 0.92;
	text-align: right;
	text-decoration: none;
	text-transform: uppercase;
}

.ssg-home .ssg-booknow__line { display: block; }

/*
 * Second line in gold. The Elementor original drew this as a hollow,
 * white-outlined word; a stroke with no fill has no contrast value a checker
 * (or a low-vision reader) can rely on, so it is a solid fill now: gold on the
 * section's 80% overlay is 6.5:1, and the hover flips it to white.
 */
.ssg-home .ssg-booknow__line--alt {
	color: var(--wp--preset--color--gold);
}

.ssg-home .ssg-booknow:hover .ssg-booknow__line--alt,
.ssg-home .ssg-booknow:focus-visible .ssg-booknow__line--alt {
	color: #fff;
}

/* -------------------------------------------------------------------------
 * News (core Query Loop replacing the theme's post-grid widget)
 * ---------------------------------------------------------------------- */

.ssg-home .ssg-news__lede {
	margin: 0.75rem 0 0;
	max-width: 48ch;
}

.ssg-home .ssg-news__grid .wp-block-post-template {
	gap: var(--wp--preset--spacing--30);
}

.ssg-home .ssg-news__thumb img {
	width: 100%;
	height: 200px;
	object-fit: cover;
}

.ssg-home .ssg-news__date {
	margin: 1rem 0 0.35rem;
	color: var(--wp--preset--color--muted);
	font-size: 0.8125rem;
	letter-spacing: 1px;
	text-transform: uppercase;
}

.ssg-home .ssg-news__title {
	margin: 0 0 0.5rem;
	font-size: 1.125rem;
	line-height: 1.25;
	text-transform: none;
}

.ssg-home .ssg-news__title a {
	color: var(--wp--preset--color--ink);
	text-decoration: none;
}

.ssg-home .ssg-news__title a:hover,
.ssg-home .ssg-news__title a:focus-visible {
	color: var(--wp--preset--color--brand);
}

.ssg-home .ssg-news__excerpt {
	color: var(--wp--preset--color--body-text);
	font-size: 0.9375rem;
}

.ssg-home .ssg-news__excerpt .wp-block-post-excerpt__more-link {
	display: inline-block;
	margin-top: 0.5rem;
	font-weight: 700;
	letter-spacing: 1px;
	text-transform: uppercase;
	font-size: 0.8125rem;
}

/* -------------------------------------------------------------------------
 * Why hunt with us
 * ---------------------------------------------------------------------- */

.ssg-home .ssg-why > .wp-block-heading { margin-bottom: var(--wp--preset--spacing--40); }

.ssg-home .ssg-why__grid {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: var(--wp--preset--spacing--30);
	margin: 0;
	padding: 0;
	list-style: none;
}

.ssg-home .ssg-why__item { margin: 0; }

.ssg-home .ssg-why__link {
	display: block;
	height: 100%;
	padding: var(--wp--preset--spacing--30);
	border: 1px solid var(--wp--preset--color--rule);
	background: #fff;
	color: inherit;
	text-decoration: none;
	transition: border-color 200ms ease, transform 200ms ease;
}

.ssg-home .ssg-why__link:hover,
.ssg-home .ssg-why__link:focus-visible {
	border-color: var(--wp--preset--color--brand);
	transform: translateY(-3px);
}

.ssg-home .ssg-why__icon {
	display: grid;
	place-items: center;
	width: 54px;
	height: 54px;
	margin-bottom: 1rem;
	border-radius: 50%;
	background: var(--wp--preset--color--bone);
	color: var(--wp--preset--color--brand);
}

.ssg-home .ssg-why__title {
	display: block;
	margin-bottom: 0.5rem;
	color: var(--wp--preset--color--ink);
	font-size: 1rem;
	font-style: italic;
	font-weight: 700;
	text-transform: uppercase;
}

.ssg-home .ssg-why__desc {
	display: block;
	color: var(--wp--preset--color--body-text);
	font-size: 0.9375rem;
	line-height: 1.5;
}

/* -------------------------------------------------------------------------
 * Testimonials
 *
 * A CSS scroll-snap rail rather than a JS carousel: it keeps keyboard and
 * touch scrolling native, and lets the homepage drop Swiper entirely.
 * ---------------------------------------------------------------------- */

.ssg-home .ssg-quotes > .wp-block-heading { margin-bottom: var(--wp--preset--spacing--40); }

.ssg-home .ssg-quotes__rail {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: var(--wp--preset--spacing--30);
	margin: 0;
	padding: 0;
	list-style: none;
}

/*
 * Below the point where four quotes still read comfortably, the same list
 * becomes a horizontal snap rail. Native scrolling, no carousel JS, which is
 * what lets the homepage drop Swiper entirely.
 */
@media (max-width: 1024px) {
	.ssg-home .ssg-quotes__rail {
		grid-template-columns: none;
		grid-auto-flow: column;
		grid-auto-columns: minmax(min(340px, 82%), 1fr);
		padding-bottom: 1rem;
		overflow-x: auto;
		scroll-snap-type: x mandatory;
		overscroll-behavior-x: contain;
	}
}

.ssg-home .ssg-quotes__rail:focus-visible {
	outline: 2px solid var(--wp--preset--color--brand);
	outline-offset: 4px;
}

.ssg-home .ssg-quote {
	margin: 0;
	scroll-snap-align: start;
}

.ssg-home .ssg-quote__inner {
	height: 100%;
	margin: 0;
	padding: 1.875rem 2.5rem;
	border: 0;
	background: #f8f8f8;
}

.ssg-home .ssg-quote__text {
	margin: 0;
	font-size: 0.9375rem;
	line-height: 1.6;
}

.ssg-home .ssg-quote__by {
	margin-top: 1rem;
	padding-top: 0.9rem;
	border-top: 1px solid var(--wp--preset--color--rule);
}

.ssg-home .ssg-quote__by cite {
	color: var(--wp--preset--color--ink);
	font-size: 0.875rem;
	font-style: normal;
	font-weight: 700;
	letter-spacing: 1px;
	text-transform: uppercase;
}

/* -------------------------------------------------------------------------
 * Newsletter
 * ---------------------------------------------------------------------- */

.ssg-home .ssg-signup__title { margin: 0 0 1.75rem; }

/*
 * Newsletter form: Gravity Forms (form 1) feeding Constant Contact, laid out as
 * one row like the old Mailchimp markup it replaced.
 *
 * Gravity's "orbital" theme stacks .gform-body above .gform-footer and lays the
 * fields out in a 12-column grid. Both are undone here rather than fought with
 * !important: the <form> becomes the flex row, and the field grid collapses to a
 * single full-width cell. Scoped to .ssg-signup so any other Gravity form on the
 * site keeps its normal stacked layout.
 */
.ssg-home .ssg-signup .gform_wrapper {
	width: 100%;
	max-width: 560px;
	margin-inline: auto;

	/*
	 * Row height is set through Gravity's OWN size tokens, not with height/
	 * block-size on the controls.
	 *
	 * Orbital sizes every control from `--gf-ctrl-size-*` (inputs) and
	 * `--gf-ctrl-btn-size-*` (buttons), feeding them into logical properties -
	 * `block-size: var(--gf-local-height)`, `min-block-size:
	 * var(--gf-local-min-height)`. Two things follow. Logical and physical
	 * properties cascade together by order rather than specificity, so a plain
	 * `height: 56px` here loses to Orbital's `block-size` however specific the
	 * selector is - the button rendered 47px (the stock `lg` token) while the
	 * rule said 56px. And overriding the tokens instead keeps the input and the
	 * button locked to one number by construction, which is what makes the row
	 * line up.
	 *
	 * The form uses the `lg` size, so those are the tokens to set.
	 */
	--ssg-field-height: 56px;
	--gf-ctrl-size-lg: var(--ssg-field-height);
	--gf-ctrl-btn-size-lg: var(--ssg-field-height);
}

/*
 * align-items: flex-end, not stretch. On a validation error Gravity injects a
 * message *above* the input inside .gfield, so .gform-body grows taller than
 * one row. With stretch, .gform-footer matched that height and the button grew
 * with it (a 56px button rendering 107px tall). flex-end keeps the footer at
 * its content height and pins it to the bottom of the row, which is exactly
 * where the input sits once the message has pushed it down - so the button
 * stays level with the input instead of towering over it.
 */
.ssg-home .ssg-signup .gform_wrapper form {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	justify-content: center;
	gap: 0;
}

/*
 * The reCAPTCHA notice (ssg_recaptcha_notice() in inc/a11y.php) is appended
 * after the form's wrapper, so it is a sibling in the enclosing group. That
 * group is a vertical flex layout (block attribute), which stacks the two and
 * centers them; the text is centered under the input + button pair here.
 */
.ssg-home .ssg-signup .ssg-recaptcha-notice {
	max-width: 560px;
	margin: 0.75rem auto 0;
	text-align: center;
}

.ssg-home .ssg-signup .gform_wrapper .gform-body {
	flex: 1 1 260px;
	min-width: 0;
	margin: 0;
}

/* Collapse the 12-column grid: one field, full width, no row gap. */
.ssg-home .ssg-signup .gform_wrapper .gform_fields {
	display: block;
	grid-template-columns: none;
	row-gap: 0;
}

.ssg-home .ssg-signup .gform_wrapper .gfield {
	width: 100%;
	max-width: none;
	padding: 0;
	grid-column: 1 / -1;
}

/*
 * The reCAPTCHA field is invisible (data-size="invisible"), so it has nothing to
 * show - but its .gfield wrapper still takes a row. It is collapsed rather than
 * display:none'd: grecaptcha renders into this container, and hiding it outright
 * is a known way to break invisible captcha submission.
 */
.ssg-home .ssg-signup .gform_wrapper .gfield--type-captcha {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip-path: inset(50%);
}

.ssg-home .ssg-signup .gform_wrapper .gfield_label,
.ssg-home .ssg-signup .gform_wrapper .gfield_required {
	display: none;
}

.ssg-home .ssg-signup .gform_wrapper input[type="email"] {
	width: 100%;
	padding-inline: 1rem;
	border: 0;
	border-radius: 0;
	background: #fff;
	color: var(--wp--preset--color--ink);
	font-family: inherit;
	font-size: 0.9375rem;
}

.ssg-home .ssg-signup .gform_wrapper input[type="email"]:focus-visible {
	outline: 2px solid var(--wp--preset--color--gold);
	outline-offset: -2px;
}

/*
 * The footer is display:flex in Gravity's own CSS, so its default
 * align-items: stretch would stretch the button even after the footer itself
 * stops stretching. Both levels are pinned.
 */
.ssg-home .ssg-signup .gform_wrapper .gform-footer {
	flex: 0 0 auto;
	align-self: flex-end;
	align-items: center;
	margin: 0;
	padding: 0;
}

.ssg-home .ssg-signup .gform_wrapper .gform_button {
	display: inline-flex;
	flex: 0 0 auto;
	align-self: center;
	align-items: center;
	gap: 0.5rem;
	margin: 0;
	padding-inline: 1.75rem;
	border: 0;
	border-radius: 0;
	background: var(--wp--preset--color--brand);
	color: #fff;
	cursor: pointer;
	font-family: inherit;
	font-size: 0.875rem;
	font-weight: 700;
	letter-spacing: 1px;
	text-transform: uppercase;
	white-space: nowrap;
}

/* The chevrons are decoration, so they are a pseudo-element, not button text. */
.ssg-home .ssg-signup .gform_wrapper .gform_button::after {
	content: "\00bb";
	font-size: 1.05rem;
	line-height: 1;
}

.ssg-home .ssg-signup .gform_wrapper .gform_button:hover,
.ssg-home .ssg-signup .gform_wrapper .gform_button:focus-visible {
	background: var(--wp--preset--color--gold);
	color: var(--wp--preset--color--ink);
}

/*
 * Validation and confirmation messages break onto their own full-width line
 * under the row instead of stretching it.
 */
.ssg-home .ssg-signup .gform_wrapper .gform_validation_errors,
.ssg-home .ssg-signup .gform_wrapper .gfield_validation_message,
.ssg-home .ssg-signup .gform_wrapper .gform_confirmation_message,
.ssg-home .ssg-signup .gform_wrapper .validation_message {
	flex: 1 0 100%;
	margin: 0.75rem 0 0;
	padding: 0.6rem 0.9rem;
	border: 0;
	border-radius: 0;
	background: rgba(0, 0, 0, 0.45);
	color: #fff;
	font-size: 0.875rem;
	text-align: left;
}

.ssg-home .ssg-signup .gform_confirmation_message {
	max-width: 560px;
	margin-inline: auto;
	text-align: center;
}

@media (max-width: 480px) {
	.ssg-home .ssg-signup .gform_wrapper form { flex-wrap: wrap; }
	.ssg-home .ssg-signup .gform_wrapper .gform-body { flex: 1 1 100%; }
	.ssg-home .ssg-signup .gform_wrapper .gform-footer { flex: 1 1 100%; }
	.ssg-home .ssg-signup .gform_wrapper .gform_button {
		width: 100%;
		justify-content: center;
	}
}

/* -------------------------------------------------------------------------
 * Responsive
 *
 * 1025px / 768px match Tactiko's own Elementor breakpoints (viewport_lg /
 * viewport_md) so the block sections and the still-Elementor header break at
 * the same widths.
 * ---------------------------------------------------------------------- */

@media (max-width: 1024px) {
	.ssg-home .ssg-section { padding-block: var(--wp--preset--spacing--50); }

	.ssg-home .ssg-why__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }

	.ssg-home .ssg-card-row--five .wp-block-column { flex-basis: 33.333% !important; }

	.ssg-home .ssg-intro__cols { gap: var(--wp--preset--spacing--40); }
}

@media (max-width: 767px) {
	.ssg-home .ssg-hero { min-height: clamp(360px, 60svh, 560px); }

	.ssg-home .hero__toggle { right: 1rem; bottom: 1rem; }

	.ssg-home .ssg-card-row { display: block; }

	.ssg-home .ssg-card-row .wp-block-column {
		flex-basis: auto !important;
		margin-left: 0 !important;
	}

	.ssg-home .ssg-why__grid { grid-template-columns: 1fr; }

	/* Stacked columns: restore the gap the row-level gap:0 removed. */
	.ssg-home .ssg-hunts__head .wp-block-column + .wp-block-column,
	.ssg-home .ssg-lodge__cols .wp-block-column + .wp-block-column,
	.ssg-home .ssg-news__head .wp-block-column + .wp-block-column {
		margin-top: var(--wp--preset--spacing--30);
	}

	.ssg-home .ssg-hunts__head .wp-block-buttons,
	.ssg-home .ssg-news__head .wp-block-buttons {
		justify-content: flex-start;
	}

	.ssg-home .ssg-booknow { text-align: left; }

	.ssg-home .ssg-intro__media { padding-bottom: 2rem; }

	.ssg-home .ssg-video-link__thumb,
	.ssg-home .ssg-video-link__thumb img { width: 140px; }
	.ssg-home .ssg-video-link__thumb img { height: 80px; }
}

/* -------------------------------------------------------------------------
 * Reduced motion
 * ---------------------------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {
	.ssg-home .ssg-card,
	.ssg-home .ssg-card .wp-block-cover__image-background,
	.ssg-home .ssg-why__link {
		transition: none;
	}

	.ssg-home .ssg-card:hover .wp-block-cover__image-background,
	.ssg-home .ssg-card:focus-within .wp-block-cover__image-background,
	.ssg-home .ssg-why__link:hover,
	.ssg-home .ssg-why__link:focus-visible {
		transform: none;
	}

	.ssg-home .ssg-quotes__rail { scroll-behavior: auto; }
}
