/**
 * Block pages (homepage rebuild 2026-09, inner pages converted after it).
 *
 * Scoped to .ssg-blocks-page (set on <body> only for the front page and pages
 * on the "Blocks (full width)" template, and only when they are genuinely
 * block content) so nothing here can leak onto a page still rendered by
 * Elementor. Section classes are shared between the homepage and the inner
 * pages; the "Inner pages" section at the end holds what only they need.
 *
 * @package safari-specialists
 */

/* -------------------------------------------------------------------------
 * 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-blocks-page #primary,
.ssg-blocks-page .site-main.ssg-blocks {
	max-width: none;
	width: 100%;
	margin: 0;
	padding: 0;
}

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

/*
 * Tactiko keeps 60px under the header on every page except its "Homepage"
 * template. A block page's first section is a full-bleed band that should
 * meet the navigation, as the homepage hero does.
 */
.ssg-blocks-page .site-header {
	margin-bottom: 0;
}

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

.ssg-blocks .ssg-section > .wp-block-cover__inner-container,
.ssg-blocks .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-blocks .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-blocks .ssg-eyebrow--light {
	color: var(--wp--preset--color--gold);
}

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

.ssg-blocks .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-blocks .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-blocks .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-blocks .hero__bg-video video,
.ssg-blocks .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-blocks .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-blocks .hero__toggle.is-ready { display: inline-flex; }
.ssg-blocks .hero__toggle:hover { background: rgba(0, 0, 0, 0.62); }
.ssg-blocks .hero__toggle:focus-visible {
	outline: 2px solid var(--wp--preset--color--gold);
	outline-offset: 3px;
}
.ssg-blocks .hero__toggle .hero__toggle-icon { display: block; fill: currentColor; }
.ssg-blocks .hero__toggle .hero__toggle-icon--play { display: none; }
.ssg-blocks .hero__toggle.is-paused .hero__toggle-icon--pause { display: none; }
.ssg-blocks .hero__toggle.is-paused .hero__toggle-icon--play { display: block; }

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

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

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

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

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

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

.ssg-blocks .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-blocks .ssg-card__desc {
	margin: 0.5rem 0 0;
	color: #fff;
	font-size: 1rem;
	font-weight: 700;
}

.ssg-blocks .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-blocks .ssg-card__title--link a,
.ssg-blocks .ssg-card__link .wp-block-button__link {
	position: static;
}

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

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

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

/* Ghost button used on the image cards. */
.ssg-blocks .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-blocks .ssg-btn-ghost .wp-block-button__link:hover,
.ssg-blocks .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-blocks .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-blocks .ssg-btn-light .wp-block-button__link:hover,
.ssg-blocks .ssg-btn-light .wp-block-button__link:focus-visible {
	background: var(--wp--preset--color--brand);
	color: #fff;
}

/* Outline button on light sections. */
.ssg-blocks .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-blocks .ssg-btn-dark .wp-block-button__link:hover,
.ssg-blocks .ssg-btn-dark .wp-block-button__link:focus-visible {
	background: var(--wp--preset--color--ink);
	color: #fff;
}

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

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

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

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

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

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

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

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

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

.ssg-blocks .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-blocks .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-blocks .ssg-video-link__thumb {
	position: relative;
	display: block;
	flex: 0 0 auto;
	width: 180px;
	line-height: 0;
}

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

.ssg-blocks .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-blocks .ssg-video-link__play svg { fill: currentColor; margin-left: 2px; }

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

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

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

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

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

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

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

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

/* Oversized BOOK / NOW link, stacked like the Elementor original. */
.ssg-blocks .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-blocks .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-blocks .ssg-booknow__line--alt {
	color: var(--wp--preset--color--gold);
}

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

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

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

/*
 * Tactiko's base stylesheet indents every list (ul { margin: 0 0 1em 3em }).
 * Core resets the Query Loop list's padding but not its side margins, so the
 * grid sat 3em in from the left on every screen size.
 */
.ssg-blocks .wp-block-post-template {
	margin-inline: 0;
}

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

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

.ssg-blocks .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-blocks .ssg-news__title {
	margin: 0 0 0.5rem;
	font-size: 1.125rem;
	line-height: 1.25;
	text-transform: none;
}

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

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

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

.ssg-blocks .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-blocks .ssg-why > .wp-block-heading { margin-bottom: var(--wp--preset--spacing--40); }

.ssg-blocks .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-blocks .ssg-why__item { margin: 0; }

.ssg-blocks .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-blocks .ssg-why__link:hover,
.ssg-blocks .ssg-why__link:focus-visible {
	border-color: var(--wp--preset--color--brand);
	transform: translateY(-3px);
}

.ssg-blocks .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-blocks .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-blocks .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-blocks .ssg-quotes > .wp-block-heading { margin-bottom: var(--wp--preset--spacing--40); }

.ssg-blocks .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-blocks .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-blocks .ssg-quotes__rail:focus-visible {
	outline: 2px solid var(--wp--preset--color--brand);
	outline-offset: 4px;
}

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

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

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

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

.ssg-blocks .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-blocks .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-blocks .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-blocks .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-blocks .ssg-signup .ssg-recaptcha-notice {
	max-width: 560px;
	margin: 0.75rem auto 0;
	text-align: center;
}

.ssg-blocks .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-blocks .ssg-signup .gform_wrapper .gform_fields {
	display: block;
	grid-template-columns: none;
	row-gap: 0;
}

.ssg-blocks .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-blocks .ssg-signup .gform_wrapper .gfield--type-captcha {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip-path: inset(50%);
}

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

.ssg-blocks .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-blocks .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-blocks .ssg-signup .gform_wrapper .gform-footer {
	flex: 0 0 auto;
	align-self: flex-end;
	align-items: center;
	margin: 0;
	padding: 0;
}

.ssg-blocks .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-blocks .ssg-signup .gform_wrapper .gform_button::after {
	content: "\00bb";
	font-size: 1.05rem;
	line-height: 1;
}

.ssg-blocks .ssg-signup .gform_wrapper .gform_button:hover,
.ssg-blocks .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-blocks .ssg-signup .gform_wrapper .gform_validation_errors,
.ssg-blocks .ssg-signup .gform_wrapper .gfield_validation_message,
.ssg-blocks .ssg-signup .gform_wrapper .gform_confirmation_message,
.ssg-blocks .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-blocks .ssg-signup .gform_confirmation_message {
	max-width: 560px;
	margin-inline: auto;
	text-align: center;
}

@media (max-width: 480px) {
	.ssg-blocks .ssg-signup .gform_wrapper form { flex-wrap: wrap; }
	.ssg-blocks .ssg-signup .gform_wrapper .gform-body { flex: 1 1 100%; }
	.ssg-blocks .ssg-signup .gform_wrapper .gform-footer { flex: 1 1 100%; }
	.ssg-blocks .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-blocks .ssg-section { padding-block: var(--wp--preset--spacing--50); }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/* -------------------------------------------------------------------------
 * Inner pages (converted from Elementor, 2026-09)
 *
 * Sections emitted by _dcd-tools/elementor-pages-to-blocks.php. They reuse
 * the homepage section classes above (intro, news, eyebrow, buttons) and
 * add the handful that only inner pages have.
 * ---------------------------------------------------------------------- */

/* Page hero: the dark textured band with an eyebrow and the page title. */
.ssg-blocks .ssg-page-hero {
	padding-block: var(--wp--preset--spacing--40);
	color: #fff;
}

.ssg-blocks .ssg-page-hero .wp-block-cover__inner-container {
	display: flex;
	flex-direction: column;
	justify-content: center;
	min-height: inherit;
}

.ssg-blocks .ssg-page-hero .ssg-eyebrow { margin-bottom: 0.5rem; }

.ssg-blocks .ssg-page-hero__title {
	margin: 0;
	color: #fff;
	font-size: clamp(2.25rem, 5vw, 3.75rem);
	line-height: 1.05;
}

/*
 * Intro with a single image (the homepage version overlaps two). The
 * Elementor widget showed a fixed-height landscape crop of what is often a
 * portrait file; aspect-ratio + object-fit reproduce that without a re-crop.
 */
.ssg-blocks .ssg-intro__media--single { padding-bottom: 0; }

.ssg-blocks .ssg-intro__media--single .ssg-intro__img img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	object-fit: cover;
}

/* Copy beside the image sits behind a thin rule, as the Elementor page did. */
.ssg-blocks .ssg-intro--page .ssg-intro__body {
	padding-left: var(--wp--preset--spacing--40);
	border-left: 1px solid #d9d4cc;
}

/* Arrow link: uppercase text link with the theme's double chevron. */
.ssg-blocks .ssg-btn-arrow .wp-block-button__link {
	padding: 0 0 0.2rem;
	border: 0;
	border-bottom: 2px solid var(--wp--preset--color--gold);
	border-radius: 0;
	background: none;
	color: var(--wp--preset--color--ink);
	font-size: 0.8125rem;
	font-weight: 700;
	letter-spacing: 0.5px;
	text-transform: uppercase;
}

.ssg-blocks .ssg-btn-arrow .wp-block-button__link::after {
	content: " \00bb";
	color: var(--wp--preset--color--gold);
}

.ssg-blocks .ssg-btn-arrow .wp-block-button__link:hover,
.ssg-blocks .ssg-btn-arrow .wp-block-button__link:focus-visible {
	color: var(--wp--preset--color--brand-deep);
	border-color: var(--wp--preset--color--brand-deep);
}

/*
 * Plain copy: narrower measure, gold rules either side like the original.
 * Specificity matches the generic .ssg-section child rule above so the
 * 62rem measure wins over the 1410px content size.
 */
.ssg-blocks .ssg-section.ssg-copy > :not(.wp-block-cover__background):not(.wp-block-cover__image-background) {
	max-width: 62rem;
}

.ssg-blocks .ssg-copy {
	position: relative;
}

/* The rules sit just outside the 62rem text column, not at the viewport edge. */
.ssg-blocks .ssg-copy > p:first-child:not(.ssg-map-link)::before,
.ssg-blocks .ssg-copy > p:first-child:not(.ssg-map-link)::after {
	content: "";
	position: absolute;
	top: var(--wp--preset--spacing--60);
	bottom: var(--wp--preset--spacing--60);
	width: 8px;
	background: var(--wp--preset--color--brand);
}

.ssg-blocks .ssg-copy > p:first-child::before { left: max(0.5rem, calc(50% - 31rem - 2.5rem)); }
.ssg-blocks .ssg-copy > p:first-child::after { right: max(0.5rem, calc(50% - 31rem - 2.5rem)); }

@media (max-width: 1024px) {
	.ssg-blocks .ssg-copy > p:first-child::before,
	.ssg-blocks .ssg-copy > p:first-child::after { display: none; }
}

/* Feature cards (Elementor icon boxes): chevron, title, text. */
.ssg-blocks .ssg-features { text-align: center; }

.ssg-blocks .ssg-features > h2 { margin-bottom: 0.75rem; }

.ssg-blocks .ssg-features > p { margin: 0 auto 1.5rem; max-width: 60ch; }

.ssg-blocks .ssg-features__grid { gap: var(--wp--preset--spacing--40); }

.ssg-blocks .ssg-feature {
	text-align: left;
	padding-left: 2.25rem;
	position: relative;
}

.ssg-blocks .ssg-feature::before {
	content: "\00bb";
	position: absolute;
	left: 0;
	top: -0.2em;
	color: var(--wp--preset--color--gold);
	font-size: 2.25rem;
	line-height: 1;
	font-weight: 700;
}

.ssg-blocks .ssg-feature__title {
	margin: 0 0 0.5rem;
	font-size: 1rem;
	letter-spacing: 0.5px;
}

.ssg-blocks .ssg-feature__title a { color: inherit; text-decoration: none; }
.ssg-blocks .ssg-feature__title a:hover,
.ssg-blocks .ssg-feature__title a:focus-visible { color: var(--wp--preset--color--brand-deep); text-decoration: underline; }

.ssg-blocks .ssg-feature__desc { margin: 0; font-size: 0.9375rem; }

/* CTA band: dark cover with centered heading, copy and a light button. */
.ssg-blocks .ssg-cta { color: #fff; text-align: center; }
.ssg-blocks .ssg-cta p a { color: #fff; text-decoration: underline; text-underline-offset: 0.15em; }
.ssg-blocks .ssg-cta h2, .ssg-blocks .ssg-cta h3 { color: #fff; }
.ssg-blocks .ssg-cta p { max-width: 64ch; margin-inline: auto; }

/* Steps (Elementor scroll timeline): numbered rows, image beside copy. */
.ssg-blocks .ssg-step { gap: var(--wp--preset--spacing--50); margin-bottom: var(--wp--preset--spacing--50); }
.ssg-blocks .ssg-step:last-child { margin-bottom: 0; }
.ssg-blocks .ssg-step__num { margin-bottom: 0.5rem; }
.ssg-blocks .ssg-step__title { margin: 0 0 0.75rem; }
.ssg-blocks .ssg-step__img { margin: 0; }
.ssg-blocks .ssg-step__img img { display: block; width: 100%; height: auto; }

/* Stats (Elementor counters). */
.ssg-blocks .ssg-stats__grid { gap: var(--wp--preset--spacing--40); text-align: center; }
.ssg-blocks .ssg-stat__value { margin: 0; font-size: clamp(2rem, 4vw, 3rem); color: var(--wp--preset--color--brand-deep); }
.ssg-blocks .ssg-stat__label { margin: 0.25rem 0 0; font-size: 0.875rem; letter-spacing: 1px; text-transform: uppercase; }

/* FAQ (core details replacing the accordion). */
.ssg-blocks .ssg-faq .wp-block-details {
	border-bottom: 1px solid #d9d4cc;
	padding: 1rem 0;
}
.ssg-blocks .ssg-faq .wp-block-details summary {
	cursor: pointer;
	font-weight: 700;
	font-size: 1.0625rem;
}
.ssg-blocks .ssg-faq .wp-block-details summary:focus-visible { outline: 2px solid var(--wp--preset--color--gold); outline-offset: 2px; }
.ssg-blocks .ssg-faq .wp-block-details > :not(summary) { margin-top: 0.75rem; }

/* Checklists (Elementor icon lists) and the map link. */
.ssg-blocks .ssg-checklist { list-style: none; padding: 0; }
.ssg-blocks .ssg-checklist li { position: relative; padding-left: 1.5rem; margin-bottom: 0.5rem; }
.ssg-blocks .ssg-checklist li::before { content: "\2713"; position: absolute; left: 0; color: var(--wp--preset--color--brand-deep); font-weight: 700; }
.ssg-blocks .ssg-map-link { text-align: center; }
.ssg-blocks .ssg-map-link a { font-weight: 700; }

/* Galleries (Elementor image carousels). */
.ssg-blocks .ssg-gallery .wp-block-gallery { margin-bottom: var(--wp--preset--spacing--40); }

/* Copy laid out in columns (contact details and the like): full measure, no rules. */
.ssg-blocks .ssg-section.ssg-copy--columns > :not(.wp-block-cover__background):not(.wp-block-cover__image-background) {
	max-width: var(--wp--style--global--content-size, 1410px);
}
.ssg-blocks .ssg-copy--columns > p:first-child::before,
.ssg-blocks .ssg-copy--columns > p:first-child::after { display: none; }
.ssg-blocks .ssg-copy__cols { gap: var(--wp--preset--spacing--50); }
.ssg-blocks .ssg-copy__col h3, .ssg-blocks .ssg-copy__col h4 { margin-top: 0; }

/* Contact form block on the Contact page. */
.ssg-blocks .ssg-contact-form { max-width: 48rem; margin-inline: auto; }
.ssg-blocks .ssg-steps__grid { gap: var(--wp--preset--spacing--50); margin-top: var(--wp--preset--spacing--40); }
.ssg-blocks .ssg-step--card { margin-bottom: 0; }

/* -------------------------------------------------------------------------
 * Split hero (media-text on the brand color), stat tiles, profiles
 *
 * Introduced on About, reusable anywhere: the split hero is the pattern
 * the Contact page uses, without the section padding above it.
 * ---------------------------------------------------------------------- */
.ssg-blocks .ssg-split-hero {
	--split-min: 480px;
}

.ssg-blocks .ssg-split-hero .wp-block-media-text__content {
	padding: var(--wp--preset--spacing--60) var(--wp--preset--spacing--50);
	min-height: var(--split-min);
	display: flex;
	flex-direction: column;
	justify-content: center;
}

.ssg-blocks .ssg-split-hero .wp-block-media-text__media { min-height: var(--split-min); }

.ssg-blocks .ssg-split-hero .ssg-eyebrow { color: #fff; opacity: 0.85; margin-bottom: 0.75rem; }

.ssg-blocks .ssg-split-hero__title {
	margin: 0 0 1rem;
	color: #fff;
	font-size: clamp(2.25rem, 4.5vw, 3.5rem);
	line-height: 1.05;
}

.ssg-blocks .ssg-split-hero__lede {
	max-width: 40ch;
	margin: 0 auto;
	font-size: 1.0625rem;
}

@media (max-width: 600px) {
	.ssg-blocks .ssg-split-hero { --split-min: 0; }
	.ssg-blocks .ssg-split-hero .wp-block-media-text__media { min-height: 260px; }
}

/* Who we are: copy beside a pair of stat tiles. */
.ssg-blocks .ssg-about__cols { gap: var(--wp--preset--spacing--50); }
.ssg-blocks .ssg-about h2 { margin-top: 0; }
.ssg-blocks .ssg-about .wp-block-buttons { gap: 1.5rem; align-items: center; }

.ssg-blocks .ssg-stat-tiles { padding: var(--wp--preset--spacing--40); }
.ssg-blocks .ssg-stat-tiles__row { gap: var(--wp--preset--spacing--30); }
.ssg-blocks .ssg-stat-tiles .ssg-stat { text-align: center; }

/* Profiles: portrait, role, name, bio. */
.ssg-blocks .ssg-profiles__grid { gap: var(--wp--preset--spacing--50); margin-top: var(--wp--preset--spacing--40); }

.ssg-blocks .ssg-profile__photo { margin: 0 0 1.25rem; }

.ssg-blocks .ssg-profile__photo img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 1;
	object-fit: cover;
	object-position: 50% 0;
}

.ssg-blocks .ssg-profile .ssg-eyebrow { margin-bottom: 0.35rem; }
.ssg-blocks .ssg-profile__name { margin: 0 0 0.75rem; }
.ssg-blocks .ssg-profile p:last-child { margin-bottom: 0; }

/* -------------------------------------------------------------------------
 * Rhythm (2026-09-04)
 *
 * Inner pages felt cramped next to the homepage: every section, heading
 * group and grid gets more room here. Kept at the end so it wins over the
 * earlier per-section values without editing each one.
 * ---------------------------------------------------------------------- */
.ssg-blocks .ssg-section {
	--ssg-section-pad: clamp(4.5rem, 8vw, 7.5rem);
	padding-block: var(--ssg-section-pad);
}

/* The copy section's gold rules span exactly the content box. */
.ssg-blocks .ssg-copy > p:first-child:not(.ssg-map-link)::before,
.ssg-blocks .ssg-copy > p:first-child:not(.ssg-map-link)::after {
	top: var(--ssg-section-pad);
	bottom: var(--ssg-section-pad);
}

/* Body copy: a slightly looser measure and leading on block pages. */
.ssg-blocks .ssg-section p,
.ssg-blocks .ssg-section li {
	line-height: 1.75;
}

.ssg-blocks .ssg-section > p,
.ssg-blocks .ssg-section .wp-block-column > p {
	max-width: 68ch;
}

/* Section headings: eyebrow, title, then a clear pause before the content. */
.ssg-blocks .ssg-section > .ssg-eyebrow { margin-bottom: 1rem; }

.ssg-blocks .ssg-section > h2 {
	margin-bottom: 1.25rem;
}

.ssg-blocks .ssg-section > h2 + p { margin-bottom: 0; }

.ssg-blocks .ssg-section > h2 + .wp-block-columns,
.ssg-blocks .ssg-section > p + .wp-block-columns,
.ssg-blocks .ssg-section > h2 + .wp-block-gallery,
.ssg-blocks .ssg-section > p + .wp-block-gallery,
.ssg-blocks .ssg-section > h2 + .wp-block-details {
	margin-top: clamp(2.5rem, 5vw, 4rem);
}

/* Grids breathe: cards and columns sit further apart. */
.ssg-blocks .ssg-features__grid,
.ssg-blocks .ssg-steps__grid,
.ssg-blocks .ssg-copy__cols,
.ssg-blocks .ssg-about__cols {
	gap: clamp(2.5rem, 5vw, 5rem);
}

.ssg-blocks .ssg-profiles__grid { gap: clamp(3rem, 6vw, 6rem); }

.ssg-blocks .ssg-feature__desc,
.ssg-blocks .ssg-profile p,
.ssg-blocks .ssg-step p { font-size: 1rem; }

.ssg-blocks .ssg-feature__title { margin-bottom: 0.75rem; }

/* Split hero: taller band, more air around the words. */
.ssg-blocks .ssg-split-hero { --split-min: 580px; }

.ssg-blocks .ssg-split-hero .wp-block-media-text__content {
	padding: clamp(4rem, 8vw, 7rem) clamp(2rem, 6vw, 6rem);
}

.ssg-blocks .ssg-split-hero .ssg-eyebrow { margin-bottom: 1.25rem; }
.ssg-blocks .ssg-split-hero__title { margin-bottom: 1.5rem; }
.ssg-blocks .ssg-split-hero__lede { max-width: 44ch; line-height: 1.7; }

/* Who we are + stat tiles. */
.ssg-blocks .ssg-about h2 { margin-bottom: 1.5rem; }
.ssg-blocks .ssg-about .wp-block-buttons { margin-top: 2.25rem; }
.ssg-blocks .ssg-stat-tiles { padding: clamp(2.5rem, 4vw, 3.5rem) clamp(1.5rem, 3vw, 2.5rem); }
.ssg-blocks .ssg-stat__value { font-size: clamp(2.5rem, 4.5vw, 3.75rem); }
.ssg-blocks .ssg-stat__label { margin-top: 0.5rem; }

/* Profiles. */
.ssg-blocks .ssg-profile__photo { margin-bottom: 1.75rem; }
.ssg-blocks .ssg-profile__name { margin-bottom: 1rem; }

/* CTA band: taller, narrower copy. */
.ssg-blocks .ssg-cta { padding-block: clamp(5.5rem, 10vw, 9rem); }
.ssg-blocks .ssg-cta h2 { margin-bottom: 1.25rem; }
.ssg-blocks .ssg-cta p { max-width: 54ch; margin-bottom: 0; }
.ssg-blocks .ssg-cta .wp-block-buttons { margin-top: 2.25rem; }

/* News head to grid. */
.ssg-blocks .ssg-news__head { margin-bottom: clamp(2.5rem, 5vw, 4rem); }

@media (max-width: 1024px) {
	.ssg-blocks .ssg-section { --ssg-section-pad: clamp(3.5rem, 8vw, 5rem); }
}

/* Long-form copy: subheads one step down from section titles. */
.ssg-blocks .ssg-copy h2 { font-size: clamp(1.75rem, 3vw, 2.25rem); margin-top: 2.5rem; }
.ssg-blocks .ssg-copy > h2:first-child { margin-top: 0; }
.ssg-blocks .ssg-copy h3 { font-size: 1.375rem; margin-top: 2rem; }

/* Consecutive copy sections read as one flow: no double padding between them. */
.ssg-blocks .ssg-copy + .ssg-copy { padding-top: 0; }

/* Packing lists: two columns once there is room. */
@media (min-width: 768px) {
	.ssg-blocks .ssg-checklist { column-count: 2; column-gap: var(--wp--preset--spacing--50); }
	.ssg-blocks .ssg-checklist li { break-inside: avoid; }
}

/* Step cards with a photo: same crop on every card, copy underneath. */
.ssg-blocks .ssg-step--card .ssg-step__img { margin: 0 0 1.5rem; }
.ssg-blocks .ssg-step--card .ssg-step__img img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	object-fit: cover;
}

/* -------------------------------------------------------------------------
 * Hunting methods: three photo cards on the shell background
 * ---------------------------------------------------------------------- */
.ssg-blocks .ssg-methods { text-align: center; }
.ssg-blocks .ssg-methods__lede { max-width: 58ch; margin-inline: auto; }
.ssg-blocks .ssg-methods__grid { gap: clamp(1.5rem, 3vw, 2.5rem); text-align: left; }

.ssg-blocks .ssg-method {
	display: flex;
	flex-direction: column;
	background: #fff;
	box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 12px 32px -18px rgba(0, 0, 0, 0.25);
}

.ssg-blocks .ssg-method__media { position: relative; }
.ssg-blocks .ssg-method__media > * { max-width: none; }

.ssg-blocks .ssg-method__img { margin: 0; }
.ssg-blocks .ssg-method__img img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 4 / 3;
	object-fit: cover;
}

.ssg-blocks .ssg-method__num {
	position: absolute;
	top: 1rem;
	left: 1rem;
	margin: 0;
	padding: 0.35rem 0.65rem;
	background: var(--wp--preset--color--gold);
	color: var(--wp--preset--color--ink);
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 1.5px;
	line-height: 1;
}

.ssg-blocks .ssg-method__body { padding: clamp(1.5rem, 2.5vw, 2rem); }
.ssg-blocks .ssg-method__body > * { max-width: none; }
.ssg-blocks .ssg-method__title { margin: 0 0 0.75rem; font-size: 1.25rem; }
.ssg-blocks .ssg-method__body p:last-child { margin-bottom: 0; font-size: 1rem; }

/* -------------------------------------------------------------------------
 * Homepage cards, refreshed (2026-09-04)
 *
 * Destinations and popular hunts: the cards get air between them, a soft
 * radius, a bottom-up gradient instead of a flat dim, and bottom-left
 * copy. Why hunt with us: roomier cards, larger icon, a real hover.
 * Appended so it wins over the first-pass rules above.
 * ---------------------------------------------------------------------- */
.ssg-blocks .ssg-card-row {
	gap: clamp(1rem, 2vw, 1.75rem);
}

.ssg-blocks .ssg-card {
	border-radius: 6px;
	padding: clamp(1.5rem, 2.5vw, 2.25rem);
	box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 18px 40px -24px rgba(0, 0, 0, 0.45);
	transition: transform 350ms ease, box-shadow 350ms ease;
}

.ssg-blocks .ssg-card:hover,
.ssg-blocks .ssg-card:focus-within {
	transform: translateY(-4px);
	box-shadow: 0 2px 4px rgba(0, 0, 0, 0.06), 0 28px 48px -24px rgba(0, 0, 0, 0.55);
}

/*
 * Gradient scrim: photo shows through the top, copy stays legible at the
 * foot. Core sets the preset overlay color with !important, so the color has
 * to be cleared the same way or it stays a solid black under the gradient.
 */
.ssg-blocks .wp-block-cover.ssg-card > .wp-block-cover__background.has-background-dim {
	opacity: 1;
	background-color: transparent !important;
	background-image: linear-gradient(to top, rgba(0, 0, 0, 0.82) 0%, rgba(0, 0, 0, 0.45) 45%, rgba(0, 0, 0, 0.08) 100%);
}

/* Copy sits bottom-left; the ghost button becomes a quiet arrow link. */
.ssg-blocks .ssg-card > .wp-block-cover__inner-container {
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	align-items: flex-start;
	height: 100%;
	text-align: left;
}

.ssg-blocks .ssg-card .has-text-align-center { text-align: left; }
.ssg-blocks .ssg-card .wp-block-buttons { justify-content: flex-start; margin-top: 1rem; }

.ssg-blocks .ssg-card__title {
	font-size: clamp(1.25rem, 1.6vw, 1.5rem);
	letter-spacing: 0.5px;
}

.ssg-blocks .ssg-card__desc {
	font-weight: 400;
	font-size: 0.9375rem;
	opacity: 0.9;
}

.ssg-blocks .ssg-card .ssg-btn-ghost .wp-block-button__link {
	padding: 0 0 0.25rem;
	border: 0;
	border-bottom: 2px solid var(--wp--preset--color--gold);
	font-size: 0.75rem;
	letter-spacing: 1.5px;
}

.ssg-blocks .ssg-card .ssg-btn-ghost .wp-block-button__link::after {
	content: " \00bb";
	color: var(--wp--preset--color--gold);
}

.ssg-blocks .ssg-card .ssg-btn-ghost .wp-block-button__link:hover,
.ssg-blocks .ssg-card .ssg-btn-ghost .wp-block-button__link:focus-visible {
	background: transparent;
	color: var(--wp--preset--color--gold);
}

/* The five popular-hunts cards: title only, tighter type, same treatment. */
.ssg-blocks .ssg-card--tall { min-height: 380px; }
.ssg-blocks .ssg-card--tall .ssg-card__title { font-size: 1.125rem; }

/* Why hunt with us. */
.ssg-blocks .ssg-why > .ssg-eyebrow { margin-bottom: 1rem; }
.ssg-blocks .ssg-why > .wp-block-heading { margin-bottom: clamp(2.5rem, 5vw, 4rem); }

.ssg-blocks .ssg-why__grid { gap: clamp(1.25rem, 2vw, 1.75rem); }

.ssg-blocks .ssg-why__link {
	padding: clamp(2rem, 3vw, 2.5rem);
	border: 1px solid transparent;
	border-radius: 6px;
	box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 12px 32px -20px rgba(0, 0, 0, 0.25);
	transition: transform 250ms ease, box-shadow 250ms ease, border-color 250ms ease;
}

.ssg-blocks .ssg-why__link:hover,
.ssg-blocks .ssg-why__link:focus-visible {
	transform: translateY(-4px);
	border-color: var(--wp--preset--color--gold);
	box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05), 0 24px 44px -22px rgba(0, 0, 0, 0.35);
}

.ssg-blocks .ssg-why__icon {
	width: 64px;
	height: 64px;
	margin-bottom: 1.5rem;
	background: var(--wp--preset--color--shell);
	color: var(--wp--preset--color--brand-deep);
}

.ssg-blocks .ssg-why__icon svg { width: 30px; height: 30px; }

.ssg-blocks .ssg-why__title {
	margin-bottom: 0.75rem;
	font-size: 1.125rem;
	font-style: normal;
	letter-spacing: 0.5px;
}

.ssg-blocks .ssg-why__desc {
	font-size: 1rem;
	line-height: 1.65;
}

@media (max-width: 1024px) {
	.ssg-blocks .ssg-card-row--five { flex-wrap: wrap; }
	.ssg-blocks .ssg-card-row--five .wp-block-column { flex-basis: calc(50% - 1rem) !important; }
}

/*
 * Phones: core stacks columns itself (flex-basis 100% below 782px) and the
 * row's flex gap becomes the vertical space between cards, so nothing here
 * switches the row to display:block. The five-card row goes to one column
 * as well; two-up leaves each card too narrow for its uppercase title.
 */
@media (max-width: 767px) {
	.ssg-blocks .ssg-card-row--five .wp-block-column { flex-basis: 100% !important; }
}

/* Card copy pinned to the bottom-left: the cover centers its inner container
   and the constrained layout auto-margins its children; both undone here. */
.ssg-blocks .wp-block-cover.ssg-card { align-items: flex-end; }
/* Core's constrained layout centers children with !important auto margins;
   full-width children make those margins moot. */
.ssg-blocks .ssg-card > .wp-block-cover__inner-container > * { width: 100%; max-width: none; }

/* The card's stretched-link pseudo moves to ::before so ::after can carry the
   arrow glyph inline instead of floating it over the title. */
.ssg-blocks .ssg-card__link .wp-block-button__link::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 2;
}
.ssg-blocks .ssg-card .ssg-card__link .wp-block-button__link::after {
	position: static;
	inset: auto;
	content: " \00bb";
}

/* -------------------------------------------------------------------------
 * One radius everywhere (2026-09-04)
 *
 * The homepage cards set the tone: 6px on every card surface and every
 * photo that sits inside the content column. Full-bleed heroes, cover
 * sections and the media-text hero stay square, as they meet the viewport.
 * ---------------------------------------------------------------------- */
.ssg-blocks {
	--ssg-radius: 6px;
}

/* Photos in the content column. */
.ssg-blocks .wp-block-image:not(.ssg-intro__img--front) img,
.ssg-blocks .wp-block-gallery .wp-block-image img,
.ssg-blocks .ssg-news__thumb img,
.ssg-blocks .ssg-video-link__thumb img,
.ssg-blocks .ssg-profile__photo img,
.ssg-blocks .ssg-step__img img {
	border-radius: var(--ssg-radius);
}

.ssg-blocks .ssg-intro__img--front img { border-radius: var(--ssg-radius); }

/* Card surfaces. */
.ssg-blocks .ssg-method,
.ssg-blocks .ssg-stat-tiles,
.ssg-blocks .ssg-quote,
.ssg-blocks .ssg-quotes__rail > li,
.ssg-blocks .ssg-faq .wp-block-details,
.ssg-blocks .ssg-checklist-card {
	border-radius: var(--ssg-radius);
}

/* Card photos are clipped by the card, not rounded on their own. */
.ssg-blocks .ssg-method { overflow: hidden; }
.ssg-blocks .ssg-method__img img { border-radius: 0; }

/* Buttons keep their square corners: that is the brand's type-led style. */
