/**
 * Section design system.
 *
 * A self-contained layer for the builder templates — the home page and the
 * services page. The exported Elementor page stylesheets are not loaded on
 * these pages any more: they keyed every rule to a generated element id, gave
 * the card sections no grid at all — which is why the destination cards sat at
 * four different heights, the counters stacked into one column and the services
 * came out as a bare list of headings — and fought anything written over the
 * top of them.
 *
 * Everything below is scoped under .o-page so the shared header, side panel and
 * footer keep the styling they already had. The scope is a wrapper the builder
 * templates put around their sections, not a page identity: it used to be
 * .orchid-home, which stopped being true the moment a second template rendered
 * the same sections.
 *
 * @package orchidassociate
 */

/* The palette, spacing scale and font stacks live in css/orchid-tokens.css,
   which loads on every page of the site — so the home sections, the header and
   footer, and the pages that render on the base stylesheet are all drawn from
   one set of tokens. */
.o-page {
	font-family: var(--o-sans);
	color: var(--o-body);
	background: var(--o-bg);
	-webkit-font-smoothing: antialiased;
}

/* ---------------------------------------------------------------------------
 * Reset, kept tight to this page. The shared Digilab stylesheets set margins
 * and colours on bare elements that would otherwise leak into every section.
 * ------------------------------------------------------------------------- */
.o-page *,
.o-page *::before,
.o-page *::after {
	box-sizing: border-box;
}

.o-page h1,
.o-page h2,
.o-page h3,
.o-page h4 {
	margin: 0;
	font-family: var(--o-display);
	font-weight: 800;
	line-height: 1.2;
	color: var(--o-ink);
	letter-spacing: -0.015em;
}

.o-page p {
	margin: 0;
	line-height: 1.75;
	color: inherit;
}

.o-page img {
	display: block;
	max-width: 100%;
	height: auto;
}

.o-page a {
	color: inherit;
	text-decoration: none;
}

.o-page :focus-visible {
	outline: 2px solid var(--o-red);
	outline-offset: 3px;
	border-radius: 2px;
}

/* ---------------------------------------------------------------------------
 * Sections. (.o-wrap and .o-sr are defined once, in orchid-chrome.css.)
 * ------------------------------------------------------------------------- */
.o-sec {
	position: relative;
	padding: var(--o-pad) 0;
	scroll-margin-top: 90px;
}

.o-sec--flush {
	padding: 0;
}

.o-sec--muted {
	background: var(--o-bg-muted);
}

.o-sec--dark {
	color: var(--o-body-light);
	background: var(--o-ink);
}

.o-sec--accent {
	color: rgba(255, 255, 255, 0.9);
	background: var(--o-red);
}

.o-sec--dark h1,
.o-sec--dark h2,
.o-sec--dark h3,
.o-sec--accent h1,
.o-sec--accent h2,
.o-sec--accent h3 {
	color: #fff;
}

/* A hairline between two sections that share a background, so the page still
   has a rhythm without inventing a band colour for every one. */
.o-sec + .o-sec:not(.o-sec--muted):not(.o-sec--dark):not(.o-sec--accent) {
	border-top: 1px solid var(--o-line);
}

.o-sec--muted + .o-sec--muted {
	padding-top: 0;
}

/* ---------------------------------------------------------------------------
 * Section heading
 * ------------------------------------------------------------------------- */
.o-head {
	max-width: 720px;
	margin: 0 0 clamp(32px, 4vw, 52px);
}

.o-head--center {
	margin-inline: auto;
	text-align: center;
}

.o-head__eyebrow {
	margin-bottom: 10px;
	font-size: 13px;
	font-weight: 700;
	color: var(--o-red);
	letter-spacing: 0.16em;
	text-transform: uppercase;
}

.o-sec--dark .o-head__eyebrow,
.o-sec--accent .o-head__eyebrow {
	color: rgba(255, 255, 255, 0.65);
}

.o-head__title {
	font-size: clamp(28px, 3.6vw, 42px);
}

.o-head__title span {
	color: var(--o-red);
}

.o-sec--dark .o-head__title span,
.o-sec--accent .o-head__title span {
	color: #fff;
	opacity: 0.72;
}

.o-head__rule {
	width: 56px;
	height: 3px;
	margin-top: 18px;
	background: var(--o-red);
	border-radius: 2px;
}

.o-head--center .o-head__rule {
	margin-inline: auto;
}

.o-head__text {
	margin-top: 14px;
	font-size: 16px;
}

/* ---------------------------------------------------------------------------
 * Buttons
 *
 * Scoped with .o-page so they outrank the `.o-page a { color:
 * inherit }` reset above. Without it a button label inherited the body colour
 * and the text on the red pill turned dark on dark.
 * ------------------------------------------------------------------------- */
.o-page .o-btn {
	display: inline-flex;
	gap: 8px;
	align-items: center;
	padding: 13px 26px;
	font-family: var(--o-sans);
	font-size: 15px;
	font-weight: 600;
	color: #fff;
	cursor: pointer;
	background: var(--o-red);
	border: 1px solid var(--o-red);
	border-radius: 999px;
	transition: background 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
}

.o-page .o-btn:hover,
.o-page .o-btn:focus-visible {
	color: #fff;
	background: var(--o-red-dark);
	border-color: var(--o-red-dark);
	transform: translateY(-1px);
}

.o-page .o-btn--ghost {
	color: var(--o-ink);
	background: transparent;
	border-color: var(--o-line);
}

.o-page .o-btn--ghost:hover,
.o-page .o-btn--ghost:focus-visible {
	color: var(--o-red);
	background: var(--o-red-soft);
	border-color: var(--o-red);
}

.o-page .o-btn--light {
	color: var(--o-ink);
	background: #fff;
	border-color: #fff;
}

.o-page .o-btn--light:hover,
.o-page .o-btn--light:focus-visible {
	color: var(--o-ink);
	background: var(--o-bg-muted);
	border-color: var(--o-bg-muted);
}

.o-sec__more {
	display: flex;
	justify-content: center;
	margin-top: clamp(30px, 4vw, 46px);
}

/* ---------------------------------------------------------------------------
 * Cards. One component behind destinations, services, stories and news, which
 * is what makes their rows line up.
 * ------------------------------------------------------------------------- */
/* The min() keeps the track from being wider than the space it has. A bare
   minmax(310px, 1fr) holds its floor even when the column is narrower than
   that, so below a 358px viewport the cards pushed out past the screen — the
   smallest phones still in use. */
.o-grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(310px, 100%), 1fr));
	gap: var(--o-gap);
}

.o-grid--4 {
	grid-template-columns: repeat(auto-fill, minmax(min(250px, 100%), 1fr));
}

.o-card {
	position: relative;
	display: flex;
	flex-direction: column;
	overflow: hidden;
	background: #fff;
	border: 1px solid var(--o-line);
	border-radius: var(--o-radius);
	box-shadow: var(--o-shadow);
	transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}

.o-card:hover,
.o-card:focus-within {
	border-color: transparent;
	box-shadow: var(--o-shadow-lift);
	transform: translateY(-4px);
}

.o-card__media {
	display: block;
	overflow: hidden;
	aspect-ratio: 16 / 10;
	background: var(--o-bg-muted);
}

.o-card__media img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.5s ease;
}

.o-card:hover .o-card__media img {
	transform: scale(1.05);
}

.o-card__body {
	display: flex;
	flex: 1;
	flex-direction: column;
	padding: 24px 24px 26px;
}

.o-card__meta {
	margin-bottom: 8px;
	font-size: 12px;
	font-weight: 700;
	color: var(--o-red);
	letter-spacing: 0.1em;
	text-transform: uppercase;
}

.o-card__title {
	margin-bottom: 10px;
	font-size: 19px;
	line-height: 1.4;
}

.o-card__title a::after {
	position: absolute;
	inset: 0;
	content: "";
}

.o-card__text {
	margin-bottom: 20px;
	font-size: 15px;
}

/* Pushes the link to the bottom edge so every card in a row ends level.
   Scoped, for the same specificity reason as the buttons. */
.o-page .o-card__link {
	display: inline-flex;
	gap: 7px;
	align-items: center;
	margin-top: auto;
	font-size: 14px;
	font-weight: 700;
	color: var(--o-red);
}

.o-card__link::after {
	content: "→";
	transition: transform 0.2s ease;
}

.o-card:hover .o-card__link::after {
	transform: translateX(4px);
}

/* ---------------------------------------------------------------------------
 * Hero
 * ------------------------------------------------------------------------- */
.o-hero {
	position: relative;
	overflow: hidden;
	background: var(--o-ink);
}

/* The slide takes the banners' own 1600x505 shape rather than a fixed height.
   These images carry their headline inside the artwork, so cropping them to a
   taller box — which a fixed height does on a wide screen — cuts the wording in
   half. The min-height only kicks in on narrow screens, where some cropping is
   unavoidable. */
.o-hero__slide {
	position: relative;
	min-height: 240px;
	aspect-ratio: 1600 / 505;
}

.o-hero__slide img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.o-hero__caption {
	position: absolute;
	inset: 0;
	display: flex;
	align-items: center;
	background: linear-gradient(90deg, rgba(var(--o-shade), 0.82) 0%, rgba(var(--o-shade), 0.5) 48%, rgba(var(--o-shade), 0.08) 100%);
}

.o-hero__caption--center {
	text-align: center;
	background: rgba(var(--o-shade), 0.55);
}

.o-hero__caption--center .o-hero__inner {
	margin-inline: auto;
}

.o-hero__caption--right {
	text-align: right;
	background: linear-gradient(270deg, rgba(var(--o-shade), 0.82) 0%, rgba(var(--o-shade), 0.5) 48%, rgba(var(--o-shade), 0.08) 100%);
}

.o-hero__caption--right .o-hero__inner {
	margin-left: auto;
}

.o-hero__inner {
	max-width: 640px;
}

.o-hero__title {
	font-size: clamp(30px, 4.6vw, 56px);
	color: #fff;
}

.o-hero__text {
	margin-top: 16px;
	font-size: clamp(15px, 1.5vw, 19px);
	color: rgba(255, 255, 255, 0.85);
}

.o-hero__cta {
	margin-top: 28px;
}

/* Dots sit over the image rather than reserving a strip below it. */
.o-hero .swiper-pagination {
	position: absolute;
	bottom: 24px;
	left: 0;
	z-index: 2;
	display: flex;
	gap: 9px;
	justify-content: center;
	width: 100%;
}

.o-hero .swiper-pagination-bullet {
	width: 9px;
	height: 9px;
	cursor: pointer;
	background: rgba(255, 255, 255, 0.45);
	border: 0;
	border-radius: 999px;
	transition: width 0.25s ease, background 0.25s ease;
}

.o-hero .swiper-pagination-bullet-active {
	width: 28px;
	background: #fff;
}

/* ---------------------------------------------------------------------------
 * Welcome
 * ------------------------------------------------------------------------- */
.o-split {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
	gap: clamp(32px, 5vw, 64px);
	align-items: center;
}

.o-split__media {
	position: relative;
}

.o-split__media::before {
	position: absolute;
	right: -18px;
	bottom: -18px;
	z-index: 0;
	width: 62%;
	height: 62%;
	content: "";
	background: var(--o-red-soft);
	border-radius: var(--o-radius);
}

.o-split__frame {
	position: relative;
	z-index: 1;
	overflow: hidden;
	border-radius: var(--o-radius);
	box-shadow: var(--o-shadow-lift);
}

.o-split__frame .swiper-slide {
	aspect-ratio: 4 / 3;
}

.o-split__frame img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.o-split__body h1,
.o-split__body h2 {
	font-size: clamp(28px, 3.4vw, 40px);
}

.o-split__body p {
	margin-top: 18px;
	font-size: 16px;
}

.o-split__body .o-btn {
	margin-top: 28px;
}

/* ---------------------------------------------------------------------------
 * CEO
 * ------------------------------------------------------------------------- */
.o-ceo {
	display: grid;
	grid-template-columns: minmax(240px, 340px) 1fr;
	gap: clamp(32px, 5vw, 64px);
	align-items: start;
}

.o-ceo__portrait {
	position: relative;
	padding: 18px;
	background: var(--o-bg-muted);
	border-radius: var(--o-radius);
}

.o-ceo__portrait img {
	width: 100%;
	border-radius: var(--o-radius-sm);
}

.o-ceo__quote {
	position: relative;
	padding-left: 26px;
	font-size: clamp(16px, 1.7vw, 19px);
	line-height: 1.8;
	border-left: 3px solid var(--o-red);
}

.o-ceo__quote p + p {
	margin-top: 14px;
}

.o-creds {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: 4px 40px;
	padding: 0;
	margin: 34px 0 0;
	list-style: none;
}

.o-cred {
	padding: 16px 0;
	border-top: 1px solid var(--o-line);
}

.o-cred__role {
	font-size: 13px;
	font-weight: 600;
	color: var(--o-red);
	letter-spacing: 0.04em;
}

.o-cred__org {
	margin-top: 4px;
	font-size: 15px;
	font-weight: 600;
	color: var(--o-ink);
	line-height: 1.5;
}

/* ---------------------------------------------------------------------------
 * Counters
 * ------------------------------------------------------------------------- */
.o-stats {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
	gap: 2px;
	overflow: hidden;
	background: var(--o-line);
	border-radius: var(--o-radius);
}

.o-stat {
	padding: clamp(26px, 3vw, 38px) 24px;
	text-align: center;
	background: var(--o-bg-muted);
}

.o-sec--muted .o-stat {
	background: #fff;
}

.o-stat__value {
	font-family: var(--o-display);
	font-size: clamp(34px, 4.4vw, 52px);
	font-weight: 800;
	line-height: 1;
	color: var(--o-ink);
	letter-spacing: -0.02em;
}

.o-stat__suffix {
	color: var(--o-red);
}

.o-stat__label {
	margin-top: 10px;
	font-size: 14px;
	line-height: 1.5;
}

/* ---------------------------------------------------------------------------
 * Services
 * ------------------------------------------------------------------------- */
.o-service__icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	margin: 24px 24px 0;
	font-size: 24px;
	color: var(--o-red);
	background: var(--o-red-soft);
	border-radius: 50%;
}

.o-service .o-card__body {
	padding-top: 18px;
}

/* ---------------------------------------------------------------------------
 * Partners
 * ------------------------------------------------------------------------- */
.o-logos {
	position: relative;
	padding: 0 56px;
}

.o-logos .swiper-slide {
	display: flex;
	align-items: center;
	justify-content: center;
	height: 110px;
	padding: 16px;
	background: #fff;
	border: 1px solid var(--o-line);
	border-radius: var(--o-radius-sm);
}

.o-logos img {
	max-width: 100%;
	max-height: 76px;
	object-fit: contain;
	filter: grayscale(1);
	opacity: 0.72;
	transition: filter 0.25s ease, opacity 0.25s ease;
}

.o-logos .swiper-slide:hover img {
	filter: grayscale(0);
	opacity: 1;
}

.o-logos__nav {
	position: absolute;
	top: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	color: var(--o-ink);
	cursor: pointer;
	background: #fff;
	border: 1px solid var(--o-line);
	border-radius: 50%;
	box-shadow: var(--o-shadow);
	transform: translateY(-50%);
	transition: color 0.2s ease, border-color 0.2s ease;
}

.o-logos__nav:hover {
	color: var(--o-red);
	border-color: var(--o-red);
}

.o-logos__nav--prev {
	left: 0;
}

.o-logos__nav--next {
	right: 0;
}

.o-logos__nav.swiper-button-disabled {
	opacity: 0.35;
	pointer-events: none;
}

/* ---------------------------------------------------------------------------
 * Call to action
 * ------------------------------------------------------------------------- */
.o-sec--cta {
	background-position: center;
	background-size: cover;
}

/* The band keeps its contrast when a background image is set behind it. */
.o-sec--cta::before {
	position: absolute;
	inset: 0;
	content: "";
	background: rgba(var(--o-shade), 0.78);
}

.o-sec--cta:not(.o-sec--has-image)::before {
	display: none;
}

.o-sec--cta .o-wrap {
	position: relative;
	z-index: 1;
}

.o-cta {
	display: flex;
	flex-wrap: wrap;
	gap: 28px 48px;
	align-items: center;
	justify-content: space-between;
}

.o-cta__body {
	flex: 1 1 460px;
}

.o-cta__title {
	font-size: clamp(24px, 3.2vw, 38px);
}

.o-cta__title span {
	color: var(--o-red);
}

.o-sec--dark .o-cta__title span {
	color: var(--o-red-light);
	opacity: 1;
}

.o-cta__text {
	margin-top: 12px;
	font-size: 16px;
}

/* ---------------------------------------------------------------------------
 * Free content block
 * ------------------------------------------------------------------------- */
.o-prose {
	max-width: 780px;
	font-size: 16px;
}

.o-prose p + p {
	margin-top: 16px;
}

.o-prose ul,
.o-prose ol {
	padding-left: 20px;
	margin: 16px 0;
	line-height: 1.8;
}

.o-page .o-prose a {
	color: var(--o-red);
	text-decoration: underline;
}

/* ---------------------------------------------------------------------------
 * Responsive
 * ------------------------------------------------------------------------- */
@media (max-width: 900px) {
	.o-ceo {
		grid-template-columns: 1fr;
	}

	.o-ceo__portrait {
		max-width: 320px;
	}
}

@media (max-width: 700px) {
	/* A 1600x505 banner in a 240px-tall box has to lose most of its width, and
	   these banners carry their wording inside the artwork — so the slide
	   letterboxes rather than crops. The ground is white because the banners
	   themselves fade to near-white at the edges. */
	.o-hero {
		background: #fff;
	}

	.o-hero__slide img {
		object-fit: contain;
	}

	.o-hero__caption,
	.o-hero__caption--center,
	.o-hero__caption--right {
		text-align: left;
		background: linear-gradient(0deg, rgba(var(--o-shade), 0.9) 12%, rgba(var(--o-shade), 0.25) 70%);
	}

	.o-hero__caption {
		align-items: flex-end;
		padding-bottom: 56px;
	}

	.o-logos {
		padding: 0;
	}

	.o-logos__nav {
		display: none;
	}

	.o-cta {
		flex-direction: column;
		align-items: flex-start;
	}
}

@media (prefers-reduced-motion: reduce) {
	.o-page *,
	.o-page *::before,
	.o-page *::after {
		transition: none !important;
		animation: none !important;
	}
}
