/* ==========================================================================
   Deon Energy — main stylesheet
   Tokens verified from Figma file rSeK3CgUNdzwAoa8LHSpfc (2026-06-24).
   Revised 2026-07 per client change log v1 (Revised_Website_Change_Log_v1):
   4-colour palette, Plus Jakarta Sans display face, tightened type + spacing.
   ========================================================================== */

:root {
	/* Color — client palette (Color.png): #F29020 / #FFFFFF / #1D1B20 / #fbf9f5 */
	--color-bg: #fbf9f5;           /* off-white page background */
	--color-bg-warm: #fbf9f5;      /* alias — alternates against --color-surface */
	--color-surface: #ffffff;      /* cards, header */
	--color-ink: #1d1b20;          /* headings */
	--color-ink-dark: #1d1b20;     /* card headings */
	--color-ink-soft: #444748;     /* body text */
	--color-dark: #1d1b20;         /* dark surfaces (footer, dark strips) */
	--color-dark-soft: #2a2830;    /* raised rows on dark surfaces */
	--color-on-dark: #ffffff;      /* text on dark surfaces */
	--color-on-dark-soft: #a7a4ad; /* muted text on dark surfaces */
	--color-accent: #f29020;       /* primary orange */
	--color-accent-deep: #d97d0e;  /* hover orange */
	--color-border: #c4c7c7;       /* main hairline borders */
	--color-divider: #e5e5e5;      /* card internal dividers */
	--color-icon-bg: #efeeea;      /* icon background squares */

	/* Header dropdown (dark panel — reference §B) */
	--nav-panel: #1d1b20;          /* dark dropdown surface */
	--nav-panel-hover: #2a2830;    /* row hover on dark panel */
	--nav-icon-bg: rgba(242, 144, 32, 0.14); /* orange icon tile tint */
	--nav-title: #ffffff;          /* dropdown item title on dark */
	--nav-desc: #a7a4ad;           /* dropdown item description on dark */

	/* Type — Plus Jakarta Sans (display) + Inter (body). No serif face. */
	--font-head: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
	--font-body: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;

	/* Type scale — desktop caps cut ~25% vs. v0.5 (client: "site looks zoomed") */
	--fs-hero: clamp(30px, 3.6vw, 48px);   /* page H1 / hero heading */
	--fs-h2: clamp(24px, 2.6vw, 34px);     /* section heading */
	--fs-h3: clamp(19px, 1.7vw, 22px);     /* card heading */
	--fs-lead: clamp(15px, 1.2vw, 17px);   /* hero / section intro copy */
	--fs-body: 15px;                       /* body + card copy */
	--fs-eyebrow: 13px;                    /* uppercase section labels */

	/* Layout */
	--container-max: 1280px;
	--gutter: clamp(20px, 5vw, 64px);
	--section-pad: clamp(40px, 4.4vw, 64px);
	--header-h: 72px; /* sticky header: 71px min-height + 1px border */
}

/* ---------- Reset / base ---------- */
*,
*::before,
*::after {
	box-sizing: border-box;
}

html,
body {
	/* `clip` not `hidden`: hidden would make <html> a scroll container and kill
	   position:sticky on the header. Guards against any full-bleed child
	   overhanging the viewport (client issue A.2 — horizontal scrollbar). */
	overflow-x: clip;
	max-width: 100%;
}

body {
	margin: 0;
	font-family: var(--font-body);
	font-size: var(--fs-body);
	line-height: 1.6;
	color: var(--color-ink-soft);
	background: var(--color-bg);
	-webkit-font-smoothing: antialiased;
}

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

/* Tailwind v4 emits its utilities inside `@layer utilities`, and this file is
   unlayered — an unlayered rule beats ANY layered rule regardless of
   specificity. So the `height: auto` above silently overrode `.h-full` /
   `.w-full` on every Phase 2 image that fills a fixed-ratio box (the project
   story-video poster rendered square and pushed the photo out of the 16:9
   crop). Re-assert the three sizing utilities for images only. */
img.w-full { width: 100%; }
img.h-full { height: 100%; }
img.object-cover { object-fit: cover; }

/* Same root cause on <button>: preflight is off, so a bare button keeps the UA
   grey fill (#efefef) and outset border. Harmless on a small styled button,
   fatal on a full-bleed overlay one — the project story-video play button is
   `absolute inset-0`, so its UA background painted straight over the poster.
   This reset must LOSE to everything the theme sets, so it lives in its own
   cascade layer: layered rules always lose to unlayered ones (every BEM button
   below) and to Tailwind's `utilities` layer, declared later in
   tailwind.dist.css. Bare buttons get the reset; styled ones are untouched. */
@layer deon-reset {
	button {
		background-color: transparent;
		border: 0;
		padding: 0;
		font: inherit;
		color: inherit;
	}
}

a {
	color: inherit;
	text-decoration: none;
}

h1, h2, h3, h4, h5 {
	margin: 0;
	font-weight: 700;
	color: var(--color-ink);
}

p {
	margin: 0;
}

/* ---------- Layout helpers ---------- */
.deon-container {
	max-width: var(--container-max);
	margin-inline: auto;
	padding-inline: var(--gutter);
}

.deon-section {
	padding-block: var(--section-pad);
}

/* Section background rhythm (client: "no alternation, page blends into one
   long block"). Alternate --surface / --bg down the page; use --dark sparingly
   for a standout stats or CTA band. */
.deon-section--white { background: var(--color-surface); }
.deon-section--offwhite { background: var(--color-bg); }
.deon-section--dark {
	background: var(--color-dark);
	color: var(--color-on-dark-soft);
}
.deon-section--dark h1,
.deon-section--dark h2,
.deon-section--dark h3,
.deon-section--dark h4 {
	color: var(--color-on-dark);
}

/* ---------- Shared atoms ---------- */
.deon-eyebrow {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: var(--fs-eyebrow);
	letter-spacing: 2px;
	text-transform: uppercase;
	color: var(--color-accent);
	line-height: 1.5;
}

.deon-rule {
	display: block;
	width: 60px;
	height: 6px;
	background: var(--color-accent);
}

/* Section h2 — Inter SemiBold across all content sections */
.deon-h2 {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: var(--fs-h2);
	line-height: 1.25;
	letter-spacing: -0.4px;
	color: var(--color-ink);
}

.deon-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-family: var(--font-body);
	font-weight: 600;
	font-size: 13px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	padding: 16px 32px;
	cursor: pointer;
	border: 0;
	transition: background .2s ease, color .2s ease, opacity .2s ease;
}

.deon-btn--dark {
	background: var(--color-ink);
	color: #fff;
}
.deon-btn--dark:hover { background: #1c1c1c; }

.deon-btn--outline {
	background: transparent;
	color: var(--color-ink);
	border: 1px solid var(--color-ink);
	padding: 17px 33px;
	font-size: 12px;
}
.deon-btn--outline:hover { background: var(--color-ink); color: #fff; }

.deon-link {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: 13px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-accent);
}
.deon-link:hover { color: var(--color-accent-deep); }

/* ==========================================================================
   Global header (TopNav)
   ========================================================================== */
.site-header {
	background: var(--color-surface);
	border-bottom: 1px solid var(--color-border);
	position: sticky;
	top: 0;
	z-index: 100;
}

/* Nav sizing knobs. Scoped to the header — the shared :root token block is
   owned by Wave 0 and must not be touched. Tuned so 8 top-level items + the
   single "Get a Quote" button fit inside the 1280px container at 1366px wide. */
.site-header {
	--nav-fs: 13px;                        /* flat: the container caps at 1280px,
	                                          so growing type past 1366 only eats
	                                          the fit budget without gaining room */
	--nav-gap: clamp(2px, 0.5vw, 8px);     /* between pills */
	--nav-pad-x: clamp(8px, 0.8vw, 12px);  /* inside each pill */
}

.site-header__inner {
	display: flex;
	align-items: center;
	gap: clamp(16px, 2vw, 28px);
	min-height: 71px;
	max-width: var(--container-max);
	margin-inline: auto;
	padding-inline: var(--gutter);
	padding-block: 10px;
}

.site-header__brand {
	display: flex;
	align-items: center;
	flex-shrink: 0;
}
.site-header__brand img {
	display: block;
	height: 30px;
	width: 128px;
	object-fit: contain;
	object-position: left center;
}

.site-nav {
	display: flex;
	align-items: center;
	gap: var(--nav-gap);
	list-style: none;
	margin: 0;
	padding: 0;
	min-width: 0;
}

/* Every top-level item is a pill so hover/active states and spacing match,
   dropdown or not. No negative margins (they can push past the viewport). */
.site-nav > .menu-item {
	display: inline-flex;
	align-items: center;
	gap: 2px;
	padding: 7px var(--nav-pad-x);
	border-radius: 22px;
	transition: background 0.2s ease, color 0.2s ease;
}

.site-nav a {
	font-weight: 500;
	font-size: var(--nav-fs);
	letter-spacing: 0.1px;
	color: var(--color-ink-soft);
	white-space: nowrap;
	border-bottom: 0;
}
.site-nav > .menu-item:hover > a,
.site-nav > .menu-item:focus-within > a,
.site-nav > .menu-item.is-open > a,
.site-nav > .menu-item.current-menu-item > a,
.site-nav > .menu-item.current-menu-parent > a,
.site-nav > .menu-item.current-menu-ancestor > a,
.site-nav > .menu-item:hover > .sub-menu-toggle,
.site-nav > .menu-item.is-open > .sub-menu-toggle {
	color: var(--color-accent-deep);
}

/* Dropdown submenus (admin-created child menu items) */
.site-nav .menu-item-has-children {
	position: relative;
}

/* Caret is a real button: click + Enter/Space toggle, aria-expanded maintained.
   The parent <a> stays a plain link so the section page is still reachable. */
.sub-menu-toggle {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 16px;
	height: 16px;
	padding: 0;
	border: 0;
	background: transparent;
	color: inherit;
	cursor: pointer;
	flex-shrink: 0;
}
.sub-menu-toggle:focus-visible {
	outline: 2px solid var(--color-accent);
	outline-offset: 2px;
	border-radius: 4px;
}
.sub-menu-toggle__caret {
	display: block;
	width: 5px;
	height: 5px;
	margin-top: -3px;
	border-right: 1.5px solid currentColor;
	border-bottom: 1.5px solid currentColor;
	transform: rotate(45deg);
	transition: transform 0.2s ease, margin 0.2s ease;
}
.site-nav .menu-item-has-children:hover > .sub-menu-toggle .sub-menu-toggle__caret,
.site-nav .menu-item-has-children:focus-within > .sub-menu-toggle .sub-menu-toggle__caret,
.site-nav .menu-item-has-children.is-open > .sub-menu-toggle .sub-menu-toggle__caret {
	margin-top: 3px;
	transform: rotate(-135deg);
}

.site-nav .sub-menu {
	position: absolute;
	top: calc(100% + 10px);
	left: 0;
	width: 240px;
	max-width: calc(100vw - 32px); /* never let the panel create page overflow */
	margin: 0;
	padding: 0;
	list-style: none;
	background: #ffffff;
	border: 1px solid var(--color-border);
	border-radius: 8px;
	overflow: hidden;
	box-shadow: 0 18px 40px rgba(0, 0, 0, 0.12);
	opacity: 0;
	visibility: hidden;
	transform: translateY(6px) scale(0.96);
	transform-origin: top center;
	transition: opacity 0.22s ease, transform 0.22s cubic-bezier(0.2, 0.7, 0.2, 1), visibility 0.22s;
	z-index: 60;
}
/* Right-align the panels on the trailing dropdowns so a wide panel can never
   extend past the container / viewport edge. */
.site-nav > .menu-item-has-children:nth-last-child(-n+3) > .sub-menu {
	left: auto;
	right: 0;
}
/* Bridge the gap so hover doesn't drop when moving into the panel */
.site-nav .menu-item-has-children > .sub-menu::before {
	content: "";
	position: absolute;
	top: -12px;
	left: 0;
	width: 100%;
	height: 12px;
}
.site-nav .menu-item-has-children:hover > .sub-menu,
.site-nav .menu-item-has-children:focus-within > .sub-menu,
.site-nav .menu-item-has-children.is-open > .sub-menu {
	opacity: 1;
	visibility: visible;
	transform: translateY(0) scale(1);
}
.site-nav .sub-menu li { width: 100%; }
/* Hairline divider between dropdown rows (no line after the last row). */
.site-nav .sub-menu li:not(:last-child) { border-bottom: 1px solid var(--color-divider); }
/* Plain text rows (Solex-style): white panel, orange full-width highlight. */
.site-nav .sub-menu a {
	display: block;
	padding: 12px 22px;
	border-bottom: 0;
	border-radius: 0;
	letter-spacing: normal;
	text-transform: none;
	font-size: 15px;
	font-weight: 600;
	color: var(--color-ink-dark);
	transition: color 0.15s ease, background 0.15s ease;
}
.site-nav .sub-menu a:hover,
.site-nav .sub-menu .current-menu-item > a,
.site-nav .sub-menu .current-menu-parent > a {
	color: #ffffff;
	background: var(--color-accent);
	border-bottom: 0;
}

.site-header__actions {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-inline-start: auto;
	padding-inline-start: clamp(8px, 1vw, 16px);
	flex-shrink: 0;
}

.btn-pill,
.btn-pill-outline {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	border-radius: 25px;
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 11px;
	letter-spacing: 1.2px;
	white-space: nowrap;
	cursor: pointer;
}
.btn-pill-outline {
	border: 1px solid var(--color-ink);
	color: var(--color-accent-deep);
	background: transparent;
	padding: 7px 16px; /* -2px vs .btn-pill so the 1px border keeps equal height */
	text-transform: uppercase;
}
.btn-pill-outline:hover { background: var(--color-ink); color: #fff; }
.btn-pill {
	background: var(--color-accent);
	color: #fff;
	padding: 8px 18px;
}
.btn-pill:hover { background: var(--color-accent-deep); }

/* Mobile nav toggle */
.nav-toggle {
	display: none;
	margin-left: auto;
	width: 44px;
	height: 44px;
	border: 0;
	background: transparent;
	cursor: pointer;
	flex-direction: column;
	gap: 5px;
	align-items: center;
	justify-content: center;
}
.nav-toggle span {
	display: block;
	width: 24px;
	height: 2px;
	background: var(--color-ink);
}

/* Off-canvas drawer wrapper. `display: contents` keeps the nav and the action
   buttons as direct flex children of .site-header__inner on desktop, so the
   desktop header is byte-for-byte the layout it was before the wrapper. */
.site-header__panel { display: contents; }

/* Drawer chrome — mobile only; the media query below reveals it. */
.nav-drawer__head,
.nav-drawer__scrim { display: none; }

/* ==========================================================================
   Hero
   ========================================================================== */
.hero {
	position: relative;
	background: var(--color-ink);
	overflow: hidden;
	min-height: calc(100vh - var(--header-h)); /* fill viewport below sticky header so stat badge stays in view */
	display: flex;
	align-items: center;
}
/* Logged-in: WP admin bar (32px desktop) pushes the page down; subtract it
   so the hero + stat badge still fit inside the first viewport. */
@media (min-width: 861px) {
	.admin-bar .hero {
		min-height: calc(100vh - var(--header-h) - 32px);
	}
}

/* Full-bleed background media (image / slider / video).
   No z-index — avoids creating a stacking context so slider controls
   can layer above the scrim (z-index:1). Media renders at the bottom
   as the first-painted absolutely-positioned box. */
.hero__media {
	position: absolute;
	inset: 0;
}
.hero__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
}

/* Gradient scrim — darker on left where text sits, for readability */
.hero__scrim {
	position: absolute;
	inset: 0;
	z-index: 1;
	background:
		linear-gradient(90deg, rgba(0,0,0,.72) 0%, rgba(0,0,0,.45) 42%, rgba(0,0,0,.12) 70%, rgba(0,0,0,.05) 100%),
		linear-gradient(0deg, rgba(0,0,0,.35) 0%, rgba(0,0,0,0) 45%);
	pointer-events: none;
}

.hero__inner {
	position: relative;
	z-index: 2;
	width: 100%;
	padding-block: 80px;
}
.hero__content {
	max-width: 720px;
	margin-inline: auto;
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 20px;
}
.hero__intro {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 16px;
}
.hero__title {
	font-family: var(--font-head);
	font-size: var(--fs-hero);
	font-weight: 700;
	line-height: 1.125;
	letter-spacing: -1.5px;
	color: #fff;
}
.hero__actions {
	display: flex;
	align-items: center;
	gap: 32px;
	padding-top: 17px;
}
.hero__actions .deon-btn--dark {
	background: #c47f0a;
	color: var(--color-ink);
	border: 1.5px solid transparent;
	border-radius: 2px;
	box-shadow: 0 8px 24px rgba(196, 127, 10, 0.28);
	transition: background .2s ease, box-shadow .2s ease, transform .2s ease;
}
.hero__actions .deon-btn--dark:hover {
	background: #b0710a;
	box-shadow: 0 10px 28px rgba(196, 127, 10, 0.38);
	transform: translateY(-2px);
}

.hero__link {
	display: inline-flex;
	align-items: center;
	color: #fff;
	padding: 14px 24px;
	border: 1.5px solid rgba(255, 255, 255, 0.55);
	border-radius: 2px;
	background: rgba(255, 255, 255, 0.08);
	backdrop-filter: blur(4px);
	transition: background .2s ease, border-color .2s ease, color .2s ease, transform .2s ease;
}
.hero__link:hover {
	color: var(--color-ink);
	background: #fff;
	border-color: #fff;
	transform: translateY(-2px);
}

/* Stat badge — overlaid bottom-right of the whole hero */
.hero__stat {
	position: absolute;
	right: 0;
	bottom: 0;
	z-index: 3;
	width: 258px;
	background: var(--color-accent);
	color: #fff;
	padding: 22px 32px 32px 39px;
	display: flex;
	flex-direction: column;
	gap: 4px;
}
.hero__stat-value {
	font-family: var(--font-head);
	font-weight: 700;
	font-size: 43px;
	line-height: 40px;
}
.hero__stat-label {
	font-weight: 600;
	font-size: 13px;
	line-height: 15px;
	letter-spacing: 1.5px;
	text-transform: uppercase;
	opacity: .8;
}

@keyframes hero-fade-up {
	from { opacity: 0; transform: translateY(20px); }
	to   { opacity: 1; transform: none; }
}
@keyframes hero-fade-in {
	from { opacity: 0; }
	to   { opacity: 1; }
}

.hero .deon-eyebrow {
	animation: hero-fade-up 0.6s ease both;
	animation-delay: 0.1s;
}
.hero__title {
	animation: hero-fade-up 0.6s ease both;
	animation-delay: 0.25s;
}
.hero__actions {
	animation: hero-fade-up 0.6s ease both;
	animation-delay: 0.45s;
}
.hero__stat {
	animation: hero-fade-in 0.7s ease both;
	animation-delay: 0.6s;
}

@media (prefers-reduced-motion: reduce) {
	.hero .deon-eyebrow,
	.hero__title,
	.hero__actions,
	.hero__stat { animation: none; }
}

/* Hero — slider variant */
.hero__swiper {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
}
.hero__swiper .swiper-slide img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
}
.hero__swiper .swiper-pagination-bullet {
	background: #fff;
	opacity: 0.5;
}
.hero__swiper .swiper-pagination-bullet-active {
	background: var(--color-accent);
	opacity: 1;
}
.hero__swiper .swiper-button-prev,
.hero__swiper .swiper-button-next {
	color: #fff;
	--swiper-navigation-size: 20px;
}
/* Raise slider controls above the scrim (z-index:1) so they stay clickable */
.hero__swiper .swiper-pagination,
.hero__swiper .swiper-button-prev,
.hero__swiper .swiper-button-next {
	z-index: 6;
}

/* Hero — video variant */
.hero__video {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
	border: none;
}
.hero__video--embed {
	/* iframe: pointer-events off so hover never triggers YouTube controls */
	pointer-events: none;
	/* Cover: 16:9 iframe sized to always exceed the hero box in both axes,
	   centered, so it fills without black bars. Overflow crops (hero overflow:hidden),
	   pushing YouTube's top/bottom chrome outside view. */
	inset: auto;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 100vw;
	height: 56.25vw;      /* 16:9 of width */
	min-height: 100vh;
	min-width: 177.78vh;  /* 16:9 of height */
}

/* Poster cover — hides YouTube's initial control flash, then fades to reveal
   the (by then playing) muted video. JS-free; timed to typical autoplay start. */
.hero__poster {
	position: absolute;
	inset: 0;
	background-color: var(--color-ink);
	background-size: cover;
	background-position: center;
	pointer-events: none;
	animation: hero-poster-out 0.6s ease 1.6s forwards;
}
@keyframes hero-poster-out {
	to { opacity: 0; visibility: hidden; }
}
@media (prefers-reduced-motion: reduce) {
	.hero__poster { animation: none; opacity: 0; visibility: hidden; }
}

/* ==========================================================================
   Stats strip
   ========================================================================== */
.stats {
	background: var(--color-surface);
	border-top: 1px solid var(--color-border);
	border-bottom: 1px solid var(--color-border);
}
.stats__inner {
	display: grid;
	/* Column count follows the number of tiles rendered (--stats-cols, set
	   inline by template-parts/home/stats.php); 4 stays the design default. */
	grid-template-columns: repeat(var(--stats-cols, 4), 1fr);
}
.stats__item {
	padding: 48px 32px;
	text-align: center;
	border-left: 1px solid var(--color-border);
}
.stats__item:first-child { border-left: 0; }
.stats__value {
	display: block;
	font-family: var(--font-head);
	font-weight: 700;
	font-size: 48px;
	line-height: 1;
	color: var(--color-accent);
}
.stats__label {
	display: block;
	margin-top: 8px;
	font-weight: 400;
	font-size: 11px;
	letter-spacing: 1.5px;
	text-transform: uppercase;
	color: var(--color-ink-soft);
}

/* ==========================================================================
   Why Deon Energy
   ========================================================================== */
.why {
	background: var(--color-bg-warm);
}
.why__inner {
	display: grid;
	grid-template-columns: minmax(0, 448px) 1fr;
	gap: 64px;
	align-items: start;
}
.why__lead {
	display: flex;
	flex-direction: column;
	gap: 20px;
}
.why__heading {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: var(--fs-h2);
	line-height: 1.375;
	letter-spacing: -0.5px;
	color: var(--color-ink);
}
.why__text {
	font-size: 16px;
	line-height: 28.8px;
	color: var(--color-ink-soft);
}
.why__grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 32px;
}
.why__item {
	padding: 8px 8px 8px 28px;
	border-left: 4px solid var(--color-accent);
}
.why__item-title {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: 18px;
	line-height: 26px;
	color: var(--color-ink-dark);
	margin-bottom: 8px;
}
.why__item-text {
	font-size: 14px;
	line-height: 22px;
	color: var(--color-ink-soft);
}

/* ==========================================================================
   Core Services
   ========================================================================== */
.services {
	background: var(--color-surface);
}
.services__head {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 16px;
	margin-bottom: 44px;
	text-align: center;
}
.services__h2 {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: var(--fs-h2);
	line-height: 1.2;
	letter-spacing: -0.5px;
	color: var(--color-ink);
}
.services__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}
.service-card {
	display: flex;
	flex-direction: column;
	gap: 0;
	background: var(--color-surface);
	border: 1px solid var(--color-border);
	padding: 41px;
}
.service-card__icon {
	width: 100%;
	height: 40px;
	object-fit: contain;
	object-position: left center;
	margin-bottom: 17px;
}
.service-card__title {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: 22px;
	line-height: 30px;
	color: var(--color-ink-dark);
	margin-bottom: 17px;
}
.service-card__text {
	flex: 1;
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink-soft);
	margin-bottom: 17px;
}
.service-card__divider {
	display: block;
	height: 1px;
	background: var(--color-divider);
	margin-bottom: 0;
}
.service-card__link {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font-weight: 500;
	font-size: 11px;
	letter-spacing: 0.5px;
	text-transform: uppercase;
	color: var(--color-ink-dark);
	padding-top: 17px;
}
.service-card__link svg { width: 10px; height: 10px; }
.service-card__link:hover { color: var(--color-accent); }

/* ==========================================================================
   Project Gallery
   ========================================================================== */
.projects {
	background: var(--color-bg-warm);
}
.projects__inner {
	display: grid;
	grid-template-columns: minmax(0, 357px) 1fr;
	gap: 48px;
	align-items: center;
}
.projects__lead {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 24px;
}
.projects__heading {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: var(--fs-h2);
	line-height: 1.375;
	letter-spacing: -0.5px;
	color: var(--color-ink);
}
.projects__text {
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink-soft);
}
.projects__grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 16px;
}
.project-tile {
	position: relative;
	margin: 0;
	height: 361px;
	overflow: hidden;
	display: flex;
	align-items: flex-end;
	background: #dbdad6;
}
/* Whole tile is the click target when it maps to a real project. */
.project-tile__link {
	position: absolute;
	inset: 0;
	display: block;
	border-bottom: 0;
}
.project-tile__link:focus-visible {
	outline: 2px solid var(--color-accent);
	outline-offset: -4px;
}
.project-tile__img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	filter: grayscale(0%);
	transition: filter .35s ease;
}
.project-tile__overlay {
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, 0.20);
	display: flex;
	align-items: flex-end;
	padding: 24px;
	opacity: 1;
	transition: opacity .25s ease;
}
@media (min-width: 1024px) {
	.project-tile__img { filter: grayscale(100%); }
	.project-tile__overlay { opacity: 0; }
	.project-tile:hover .project-tile__img { filter: grayscale(0%); }
	.project-tile:hover .project-tile__overlay { opacity: 1; }
}
.project-tile__label {
	position: relative;
	z-index: 1;
	color: #fff;
	font-weight: 600;
	font-size: 10px;
	letter-spacing: 1px;
	text-transform: uppercase;
}

/* ==========================================================================
   About strip (orange band)
   ========================================================================== */
.about-strip {
	background: var(--color-accent);
	color: #fff;
}
.about-strip__inner {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 72px;
	align-items: center;
	padding-block: var(--section-pad);
}
.about-strip__title {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: var(--fs-h2);
	line-height: 1.22;
	letter-spacing: -0.5px;
	color: #fff;
	margin-bottom: 23px;
}
.about-strip__text {
	font-size: 18px;
	line-height: 28px;
	color: rgba(0, 0, 0, 0.9);
}
.about-strip__stats {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 64px;
}
.about-strip__stat-label {
	display: block;
	margin-bottom: 8px;
	font-weight: 600;
	font-size: 11px;
	letter-spacing: 2px;
	text-transform: uppercase;
	color: rgba(0, 0, 0, 0.55);
}
.about-strip__stat-value {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: 18px;
	line-height: 28px;
	color: #fff;
}

/* ==========================================================================
   Why Solar Power
   ========================================================================== */
.why-solar {
	background: var(--color-surface);
}
.section-head--center {
	text-align: center;
	align-items: center;
	max-width: 720px;
	margin-inline: auto;
}
.section-head {
	display: flex;
	flex-direction: column;
	gap: 16px;
	margin-bottom: 44px;
}
.section-h2 {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: var(--fs-h2);
	line-height: 48px;
	letter-spacing: -0.5px;
	color: var(--color-ink);
}
.why-solar__grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 48px;
}
.solar-card {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 16px;
}
.solar-card__icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 64px;
	height: 64px;
	background: var(--color-icon-bg);
	flex-shrink: 0;
}
.solar-card__icon img {
	width: 25px;
	height: 25px;
	object-fit: contain;
}
.solar-card__title {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink-dark);
}
.solar-card__text {
	font-size: 14px;
	line-height: 20px;
	color: var(--color-ink-soft);
}

/* ==========================================================================
   Client logo ticker
   ========================================================================== */
.logos {
	background: var(--color-bg);
	border-top: 1px solid var(--color-border);
	border-bottom: 1px solid var(--color-border);
	padding-block: 48px;
}
.logos__viewport {
	overflow: hidden;
	-webkit-mask-image: linear-gradient(to right, transparent, #000 12%, #000 88%, transparent);
	mask-image: linear-gradient(to right, transparent, #000 12%, #000 88%, transparent);
}
.logos__track {
	display: flex;
	align-items: center;
	gap: 64px;
	width: max-content;
	animation: deon-logo-scroll 32s linear infinite;
}
.logos:hover .logos__track { animation-play-state: paused; }
.logos__item {
	font-weight: 600;
	font-size: 18px;
	letter-spacing: -0.9px;
	text-transform: uppercase;
	white-space: nowrap;
	color: var(--color-ink);
	opacity: 0.5;
}
.logos__logo {
	display: block;
	height: 52px;
	width: auto;
	max-width: 180px;
	object-fit: contain;
	filter: grayscale(1);
}
/* Logos carry their own contrast — the 0.5 text opacity would wash them out. */
.logos__item:has(.logos__logo) { opacity: 0.75; }
.logos__link { display: block; }
@keyframes deon-logo-scroll {
	from { transform: translateX(0); }
	to   { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
	.logos__track { animation: none; flex-wrap: wrap; justify-content: center; }
}

/* ==========================================================================
   Recent Articles
   ========================================================================== */
.articles {
	background: var(--color-surface);
}
.articles__head {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 16px;
	margin-bottom: 44px;
	text-align: center;
}
.articles__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}
.post-card {
	display: flex;
	flex-direction: column;
	background: var(--color-surface);
	border: 1px solid var(--color-divider);
	box-shadow: 0 2px 20px rgba(0, 0, 0, 0.06);
}
.post-card__media {
	display: block;
	height: 200px;
	overflow: hidden;
	background: #dbdad6;
	position: relative;
}
.post-card__media img {
	position: absolute;
	left: 0;
	top: -38.89%;
	width: 100%;
	height: 177.79%;
	object-fit: cover;
}
.post-card__body {
	display: flex;
	flex-direction: column;
	gap: 16px;
	flex: 1;
	padding: 32px;
}
.post-card__meta {
	display: flex;
	align-items: center;
	gap: 16px;
	font-weight: 500;
	font-size: 10px;
	letter-spacing: 1px;
	text-transform: uppercase;
}
.post-card__date { color: var(--color-ink-soft); }
.post-card__cat { color: var(--color-accent); }
.post-card__title {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: 20px;
	line-height: 28px;
	letter-spacing: -0.2px;
	color: var(--color-ink);
}
.post-card__excerpt {
	flex: 1;
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink-soft);
}
.post-card__link {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font-weight: 600;
	font-size: 12px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-accent);
}
.post-card__link svg { width: 10px; height: 10px; }
.post-card__link:hover { color: var(--color-accent-deep); }

/* ==========================================================================
   CTA banner
   ========================================================================== */
.cta {
	background: var(--color-bg-warm);
}
.cta__inner {
	display: flex;
	flex-direction: column;
	align-items: center;
	text-align: center;
	gap: 24px;
	max-width: 768px;
	margin-inline: auto;
	padding-block: var(--section-pad);
	padding-inline: var(--gutter);
}
.cta__title {
	font-family: var(--font-body);
	font-weight: 600;
	font-size: var(--fs-h2);
	line-height: 56px;
	letter-spacing: -0.5px;
	color: var(--color-ink);
}
.cta__text {
	font-size: 18px;
	line-height: 30px;
	max-width: 608px;
	color: var(--color-ink-soft);
}
.cta__btn {
	background: var(--color-ink);
	color: #fff;
	font-size: 14px;
	letter-spacing: 0.5px;
	padding: 20px 40px;
	border: 0;
	box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.10);
	cursor: pointer;
	font-family: var(--font-body);
	font-weight: 600;
	text-transform: uppercase;
	transition: background .2s ease;
}
.cta__btn:hover { background: #1c1c1c; }

/* ==========================================================================
   Global footer — dark surface (#1D1B20), client change log v1 §6
   Applied site-wide (footer.php is the single shared template).
   ========================================================================== */
.site-footer {
	background: var(--color-dark);
	color: var(--color-on-dark-soft);
}
.site-footer__inner {
	display: grid;
	grid-template-columns: minmax(0, 300px) minmax(0, 3fr) minmax(0, 1fr);
	gap: 32px 40px;
	padding-block: var(--section-pad);
}

/* -- Brand -- */
.site-footer__logo-link {
	display: inline-block;
	/* Client-supplied reversed asset: white wordmark on a transparent ground
	   (assets/img/deon-logo-white.png), so it sits directly on the dark footer
	   — no white chip needed. */
}
.site-footer__logo {
	height: 48px;
	width: auto;
	object-fit: contain;
	object-position: left center;
	display: block;
}
.site-footer__about {
	max-width: 300px;
	margin: 20px 0 0;
	font-size: 14px;
	line-height: 1.6;
	color: var(--color-on-dark-soft);
}
.site-footer__social {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	list-style: none;
	margin: 22px 0 0;
	padding: 0;
}
.site-footer__social a {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border: 1px solid rgba(255, 255, 255, .18);
	border-radius: 50%;
	color: var(--color-on-dark);
	transition: background .2s ease, border-color .2s ease, color .2s ease;
}
/* Extra `.site-footer` qualifier raises specificity above the general
   `.site-footer a:hover { color: accent }` rule below — without it that rule
   wins (same specificity, later in file) and turns the glyph orange on the
   orange circle, i.e. invisible. */
.site-footer .site-footer__social a:hover,
.site-footer .site-footer__social a:focus-visible {
	background: var(--color-accent);
	border-color: var(--color-accent);
	color: var(--color-dark);
}
.site-footer__social svg { display: block; }

/* -- Link columns -- */
.site-footer__nav {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 32px 24px;
}
.site-footer__heading {
	font-family: var(--font-head);
	font-weight: 600;
	font-size: 13px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--color-on-dark);
	margin: 0 0 14px;
}
.site-footer__col ul,
.site-footer__menu {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 10px;
}
.site-footer__menu {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 10px 24px;
}
.site-footer__menu .sub-menu {
	list-style: none;
	margin: 10px 0 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 10px;
}
.site-footer a {
	color: var(--color-on-dark-soft);
	text-decoration: none;
	transition: color .2s ease;
}
.site-footer__col a,
.site-footer__menu a {
	font-size: 14px;
	line-height: 1.45;
}
.site-footer a:hover,
.site-footer a:focus-visible { color: var(--color-accent); }

.site-footer__tag {
	display: inline-block;
	margin-left: 6px;
	padding: 1px 6px;
	border-radius: 3px;
	background: rgba(242, 144, 32, .16);
	color: var(--color-accent);
	font-size: 11px;
	letter-spacing: .04em;
	text-transform: uppercase;
	vertical-align: 1px;
}

/* -- Office addresses -- */
.site-footer__offices {
	border-top: 1px solid rgba(255, 255, 255, .1);
}
.site-footer__offices-inner {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 24px 40px;
	padding-block: 32px;
}
.site-footer__office a {
	display: block;
	max-width: 34ch;
	font-size: 14px;
	line-height: 1.6;
}

/* -- Bottom bar -- */
.site-footer__bar {
	border-top: 1px solid rgba(255, 255, 255, .1);
}
.site-footer__bar-inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding-block: 20px;
}
.site-footer__bar p {
	margin: 0;
	font-size: 13px;
	color: var(--color-on-dark-soft);
}
.site-footer__legal {
	display: flex;
	flex-wrap: wrap;
	gap: 24px;
}
.site-footer__legal a { font-size: 13px; }

/* ==========================================================================
   About page — Hero strip
   ========================================================================== */

/* ==========================================================================
   About page — Section 01: Company Overview
   ========================================================================== */
.about-overview {
	background: var(--color-surface);
	padding-block: var(--section-pad);
}

.about-overview__grid {
	display: grid;
	grid-template-columns: 7fr 5fr;
	gap: 24px;
	align-items: start;
}

.about-overview__text {
	display: flex;
	flex-direction: column;
	gap: 31px;
	padding-bottom: 89px;
}

.about-overview__h2 {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 41.6px;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

.about-overview__body {
	display: flex;
	flex-direction: column;
	gap: 23px;
}

.about-overview__lead {
	font-size: 18px;
	line-height: 32.4px;
	color: var(--color-ink-soft);
	margin: 0;
}

.about-overview__para {
	font-size: 16px;
	line-height: 28.8px;
	color: var(--color-ink-soft);
	margin: 0;
}

.about-overview__blockquote {
	margin: 0;
	padding: 8px 0 8px 36px;
	border-left: 4px solid var(--color-accent);
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.about-overview__blockquote p {
	font-family: var(--font-body);
	font-style: normal;
	font-weight: 500;
	font-size: 22px;
	line-height: 34px;
	color: var(--color-ink);
	margin: 0;
}

.about-overview__quote-footer {
	margin: 0;
}

.about-overview__quote-footer cite {
	font-family: var(--font-body);
	font-style: normal;
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-accent);
	line-height: 12px;
}

.about-overview__media {
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.about-overview__img-wrap {
	background: var(--color-icon-bg);
	border: 1px solid var(--color-border);
	overflow: hidden;
	height: 564px;
}

.about-overview__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
}

.about-overview__hq {
	display: flex;
	align-items: center;
	justify-content: space-between;
	background: var(--color-bg-warm);
	border: 1px solid var(--color-border);
	padding: 25px;
}

.about-overview__hq-text {
	display: flex;
	flex-direction: column;
	gap: 4px;
}

.about-overview__hq-label {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-ink-soft);
	line-height: 12px;
}

.about-overview__hq-value {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink);
}

.about-overview__hq-icon {
	width: 16px;
	height: 20px;
	object-fit: contain;
	flex-shrink: 0;
}

/* ==========================================================================
   About page — Section 02: Vision & Mission
   ========================================================================== */
.about-vm {
	background: var(--color-surface);
	padding-block: var(--section-pad);
}

.about-vm__grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 24px;
	align-items: stretch;
}

.about-vm__card {
	background: var(--color-bg-warm);
	border: 1px solid var(--color-border);
	box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
	display: flex;
	flex-direction: column;
	gap: 23px;
	padding: 48px 48px 48px 56px;
}

.about-vm__card--vision {
	border-left: 8px solid #2a486c;
}

.about-vm__card--mission {
	border-left: 8px solid var(--color-accent);
}

/* Fixed 33×33 box, not `height: auto` — the two designed glyphs have different
   intrinsic ratios (vision 33×22.5, mission 30×30), so an auto height made the
   icon rows 10px apart and knocked the two headings out of line. `contain`
   keeps each glyph undistorted inside the shared box; left-centre keeps them
   on the card's text edge. */
.about-vm__icon {
	width: 33px;
	height: 33px;
	object-fit: contain;
	object-position: left center;
	display: block;
}

.about-vm__h3 {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 41.6px;
	letter-spacing: -0.32px;
	color: var(--color-ink-dark);
	margin: 0;
}

.about-vm__text {
	font-size: 18px;
	line-height: 32.4px;
	color: var(--color-ink-soft);
	margin: 0;
}

/* ==========================================================================
   About page — Section 03: Core Values
   ========================================================================== */
.about-values {
	background: var(--color-bg-warm);
	padding-block: var(--section-pad);
}

.about-values__head {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 16px;
	margin-bottom: 44px;
	text-align: center;
}

.about-values__h2 {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 41.6px;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

.about-values__rule {
	display: block;
	width: 64px;
	height: 4px;
	background: var(--color-accent);
}

.about-values__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}

.about-values__card {
	border: 1px solid var(--color-border);
	padding: 41px;
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.about-values__icon {
	width: 26px;
	height: 26px;
	object-fit: contain;
	object-position: left;
	display: block;
}

.about-values__title {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink-dark);
	margin: 0;
	padding-top: 8px;
}

.about-values__text {
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink-soft);
	margin: 0;
}

/* ==========================================================================
   About page — Section 04: How We Work
   ========================================================================== */
.about-work {
	background: var(--color-bg-warm);
	padding-block: var(--section-pad);
}

.about-work__grid {
	display: grid;
	grid-template-columns: 4fr 8fr;
	gap: 24px;
	align-items: start;
}

.about-work__lead {
	padding-block: 16px;
	display: flex;
	flex-direction: column;
	gap: 24px;
}

.about-work__h2 {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 40px;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

.about-work__text {
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink-soft);
	margin: 0;
}

.about-work__cards {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	grid-template-rows: repeat(2, auto);
	gap: 24px;
}

.about-work__card {
	background: var(--color-surface);
	border: 1px solid var(--color-border);
	padding: 25px;
	display: flex;
	flex-direction: column;
	gap: 10px;
	min-height: 126px;
}

.about-work__num {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 1.2px;
	color: var(--color-accent);
	line-height: 12px;
}

.about-work__label {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink-dark);
	margin-top: 6px;
}

.about-work__desc {
	font-family: var(--font-body);
	font-size: 14px;
	line-height: 22px;
	color: var(--color-ink-soft);
	margin: 0;
}

/* ==========================================================================
   About page — Section 05: Growth Timeline
   ========================================================================== */
.about-journey {
	background: var(--color-surface);
	padding-block: var(--section-pad);
}

.about-journey__inner {
	display: flex;
	flex-direction: column;
	gap: 44px;
}

.about-journey__h2 {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 41.6px;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

/* Blue serpentine journey (client reference) --------------------------- */
.about-journey {
	/* All derived from the theme accent — retheme automatically. */
	--j-blue: var(--color-accent);            /* Icon accent + photo ring + connector. */
	--j-blue-deep: var(--color-accent-deep);  /* Year label. */
	--j-ribbon: color-mix(in srgb, var(--color-accent) 26%, #fff);      /* Band edge lines. */
	--j-ribbon-fill: color-mix(in srgb, var(--color-accent) 11%, #fff); /* Band centre. */
	--j-icon-bg: color-mix(in srgb, var(--color-accent) 8%, #fff);      /* Icon circle fill. */
	--j-mute: #b7bfc4;          /* Future milestones. */
	--j-mute-ribbon: #e5e8ea;   /* Future icon wrap-ring. */
}

/* Timeline shell -------------------------------------------------------- */
.about-journey__timeline {
	position: relative;
}

/* Serpentine SVG path — sized + drawn by JS on desktop only. */
.about-journey__svg {
	display: none;
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	overflow: visible;
	pointer-events: none;
	z-index: 0;
}

/* Ribbon = a weaving "track" (per client reference): a wider edge stroke under
   a narrower lighter fill stroke, so the band reads as a road with two edge
   lines and a pale centre — not a solid blob. Both paths share the same JS d. */
.about-journey__path {
	fill: none;
	stroke-linecap: round;
	stroke-linejoin: round;
}

.about-journey__path--edge {
	stroke: var(--j-ribbon); /* Tinted edge lines. */
	stroke-width: 30;
}

.about-journey__path--casing {
	stroke: #fff; /* Thin white lines inside the edges — road-marking look. */
	stroke-width: 24;
}

.about-journey__path--fill {
	stroke: var(--j-ribbon-fill); /* Pale centre of the track. */
	stroke-width: 18;
}

.about-journey__list {
	position: relative;
	list-style: none;
	margin: 0;
	padding: 0;
}

/* --- Base / fallback / mobile: simple left-spine vertical list --------- */
.about-journey__list::before {
	content: "";
	position: absolute;
	top: 8px;
	bottom: 8px;
	left: 30px;
	width: 4px;
	border-radius: 4px;
	background: linear-gradient(
		to bottom,
		transparent,
		var(--j-ribbon) 6%,
		var(--j-ribbon) 94%,
		transparent
	);
}

.about-journey__item {
	position: relative;
	display: flex;
	align-items: center;
	gap: 16px;
	padding-block: 22px;
}

.about-journey__item[hidden] {
	display: none;
}

/* Scroll reveal (client note 2026-08 — the section used to arrive fully drawn).
   The hidden initial state is armed ONLY by `.is-animated`, which main.js adds
   at run time and skips under prefers-reduced-motion — so a no-JS visitor gets
   the whole timeline immediately. The ribbon itself is wiped in by JS via
   stroke-dashoffset; these rules cover the nodes. */
.about-journey__timeline.is-animated .about-journey__item {
	opacity: 0;
	transform: translateY(22px);
	transition: opacity 0.55s ease, transform 0.65s cubic-bezier(0.22, 0.61, 0.36, 1);
}

.about-journey__timeline.is-animated .about-journey__item.is-revealed {
	opacity: 1;
	transform: none;
}

/* Ribbon draw — JS sets stroke-dasharray/offset; the transition smooths the
   per-tick jumps into a continuous wipe. */
.about-journey__timeline.is-animated .about-journey__path {
	transition: stroke-dashoffset 0.35s linear;
}

@media (prefers-reduced-motion: reduce) {
	.about-journey__timeline.is-animated .about-journey__item,
	.about-journey__timeline.is-animated .about-journey__icon,
	.about-journey__timeline.is-animated .about-journey__path {
		opacity: 1;
		transform: none;
		transition: none;
	}
	.about-journey__timeline.is-animated .about-journey__icon {
		transform: translate(-50%, -50%);
	}
}

/* Icon circle — sits inside a loop of the ribbon (desktop serpentine only;
   hidden on the mobile left-spine list, where the photo is the spine node).
   The thick ribbon-coloured ring makes the band read as if it wraps AROUND
   the icon, and — being opaque — hides the SVG path that runs behind it. */
.about-journey__icon {
	display: none;
	align-items: center;
	justify-content: center;
	width: 64px;
	height: 64px;
	border-radius: 50%;
	background: var(--j-icon-bg);
	color: var(--j-blue);
	box-shadow: 0 0 0 4px #fff; /* White ring only — clear gap to the band. */
}

.about-journey__icon svg {
	width: 30px;
	height: 30px;
}

.about-journey__icon img {
	width: 30px;
	height: 30px;
	object-fit: contain;
	display: block;
}

/* Connector between icon and photo: a short line (content::before) tipped
   with a dot at the photo end. Desktop serpentine only. */
.about-journey__link {
	display: none;
}

/* Content = photo circle + text group. */
.about-journey__content {
	position: relative;
	flex: 1 1 auto;
	min-width: 0;
	display: flex;
	align-items: center;
	gap: 16px;
	text-align: left;
}

.about-journey__photo {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 64px;
	height: 64px;
	border-radius: 50%;
	overflow: hidden;
	background: var(--color-surface);
	box-shadow: 0 0 0 4px #fff, 0 0 0 7px var(--j-blue), 0 10px 24px color-mix(in srgb, var(--color-accent) 16%, transparent);
}

.about-journey__photo img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	display: block;
}

.about-journey__photo--placeholder {
	background: var(--j-icon-bg);
	color: var(--j-blue);
}

.about-journey__photo svg {
	width: 26px;
	height: 26px;
}

.about-journey__text {
	min-width: 0;
}

.about-journey__year {
	margin: 0 0 3px;
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 24px;
	line-height: 1.1;
	letter-spacing: -0.2px;
	color: var(--j-blue-deep);
}

.about-journey__phase {
	margin: 0 0 6px;
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-ink-soft);
}

.about-journey__desc {
	margin: 0;
	font-size: 16px;
	line-height: 24px;
	font-weight: 500;
	color: var(--color-ink);
}

/* Future milestones read muted. */
.about-journey__item--future .about-journey__icon {
	color: var(--j-mute);
	box-shadow: 0 0 0 4px #fff, 0 0 0 14px var(--j-mute-ribbon);
}

.about-journey__item--future .about-journey__photo {
	box-shadow: 0 0 0 4px #fff, 0 0 0 7px var(--j-mute), 0 10px 24px rgba(0, 0, 0, 0.08);
}

.about-journey__item--future .about-journey__year {
	color: var(--j-mute);
}

/* Show all / show fewer toggle ------------------------------------------ */
.about-journey__more {
	display: flex;
	justify-content: center;
}

.about-journey__toggle {
	appearance: none;
	border: 1px solid var(--j-blue);
	background: transparent;
	color: var(--j-blue-deep);
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 14px;
	letter-spacing: 0.2px;
	padding: 12px 28px;
	border-radius: 999px;
	cursor: pointer;
	transition: background 0.2s ease, color 0.2s ease;
}

.about-journey__toggle:hover {
	background: var(--j-blue);
	color: #fff;
}

/* --- Desktop serpentine: absolute nodes threaded by the JS-drawn path --- */
/* Activated only once JS adds .is-ready (has positioned every node), so the
   no-JS experience stays the readable left-spine list above.
   Geometry: icon circle sits ON the ribbon point (item origin); the content
   group (photo + text) is offset toward the outer side, mirrored per side. */
@media (min-width: 961px) {
	.about-journey__timeline.is-ready .about-journey__svg {
		display: block;
	}

	.about-journey__timeline.is-ready .about-journey__list::before {
		display: none;
	}

	.about-journey__timeline.is-ready .about-journey__item {
		position: absolute;
		display: block;
		padding: 0;
		width: 0;
		height: 0;
		/* left / top set inline by JS (icon-circle centre). */
	}

	.about-journey__timeline.is-ready .about-journey__icon {
		display: flex;
		position: absolute;
		top: 0;
		left: 0;
		width: 64px;
		height: 64px;
		transform: translate(-50%, -50%);
	}

	.about-journey__timeline.is-ready .about-journey__photo {
		width: 96px;
		height: 96px;
	}

	.about-journey__timeline.is-ready .about-journey__photo svg {
		width: 32px;
		height: 32px;
	}

	.about-journey__timeline.is-ready .about-journey__content {
		position: absolute;
		top: 0;
		align-items: center;
		width: 300px;
		transform: translateY(-50%);
	}

	/* Photo hugs the icon (short connector between); text is outermost.
	   Offset = icon wrap-ring radius (46) + connector gap. */
	.about-journey__timeline.is-ready .about-journey__item--left .about-journey__content {
		right: 120px;
		flex-direction: row-reverse;
		text-align: right;
	}

	.about-journey__timeline.is-ready .about-journey__item--right .about-journey__content {
		left: 120px;
		flex-direction: row;
		text-align: left;
	}

	.about-journey__timeline.is-ready .about-journey__text {
		flex: 1 1 auto;
	}

	/* Connector line — starts at the icon wrap-ring and reaches toward the
	   photo, stopping short so it never touches the photo circle. */
	.about-journey__timeline.is-ready .about-journey__content::before {
		content: "";
		position: absolute;
		top: 50%;
		width: 56px;
		height: 3px;
		border-radius: 3px;
		background: var(--j-blue);
		transform: translateY(-50%);
	}

	.about-journey__timeline.is-ready .about-journey__item--left .about-journey__content::before {
		right: -74px;
	}

	.about-journey__timeline.is-ready .about-journey__item--right .about-journey__content::before {
		left: -74px;
	}

	/* Dot at the photo end of the connector (points toward the image circle,
	   stopping just short of it). */
	.about-journey__timeline.is-ready .about-journey__link {
		display: block;
		position: absolute;
		top: 0;
		width: 11px;
		height: 11px;
		border-radius: 50%;
		background: var(--j-blue);
		transform: translate(-50%, -50%);
		z-index: 3;
	}

	.about-journey__timeline.is-ready .about-journey__item--left .about-journey__link {
		left: -102px;
	}

	.about-journey__timeline.is-ready .about-journey__item--right .about-journey__link {
		left: 102px;
	}

	.about-journey__timeline.is-ready .about-journey__item--future .about-journey__content::before,
	.about-journey__timeline.is-ready .about-journey__item--future .about-journey__link {
		background: var(--j-mute);
	}
}

/* Icon pop — a beat after its node lands, so the band reads as arriving first
   and the milestone settling onto it. MUST come after the desktop block above:
   that block sets `transform: translate(-50%, -50%)` on the same element at
   equal specificity, so an earlier rule would lose the scale. */
@media (min-width: 961px) {
	.about-journey__timeline.is-animated.is-ready .about-journey__icon {
		opacity: 0;
		transform: translate(-50%, -50%) scale(0.6);
		transition: opacity 0.4s ease 0.12s, transform 0.5s cubic-bezier(0.34, 1.4, 0.64, 1) 0.12s;
	}

	.about-journey__timeline.is-animated.is-ready .about-journey__item.is-revealed .about-journey__icon {
		opacity: 1;
		transform: translate(-50%, -50%) scale(1);
	}

	@media (prefers-reduced-motion: reduce) {
		.about-journey__timeline.is-animated.is-ready .about-journey__icon {
			opacity: 1;
			transform: translate(-50%, -50%);
			transition: none;
		}
	}
}

/* ==========================================================================
   About page — Section 07: Global Certifications
   ========================================================================== */
.about-certs {
	background: var(--color-bg-warm);
	padding-block: var(--section-pad);
}

.about-certs__head {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	text-align: center;
	margin-bottom: 48px;
}

.about-certs__h2 {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 41.6px;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

.about-certs__sub {
	font-size: 16px;
	line-height: 24px;
	color: var(--color-ink-soft);
	margin: 0;
}

.about-certs__row {
	display: flex;
	align-items: flex-start;
	justify-content: center;
	gap: 31px;
	flex-wrap: wrap;
}

.about-certs__badge {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 4px;
	width: 150px;
	min-height: 150px;
	border: 1px solid var(--color-border);
	padding: 17px;
	text-align: center;
	background: #f2f2f2;
}

.about-certs__badge-icon {
	width: auto;
	max-width: 34px;
	height: 40px;
	object-fit: contain;
	display: block;
	margin-bottom: 4px;
}

.about-certs__badge-code {
	font-size: 10px;
	line-height: 15px;
	text-transform: uppercase;
	color: var(--color-ink-dark);
	font-weight: 400;
}

.about-certs__badge-label {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 12px;
	line-height: 15px;
	color: var(--color-ink-dark);
	text-align: center;
}

/* ==========================================================================
   Solutions page — Core Capabilities
   ========================================================================== */

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

/* Figma hero eyebrow: 12px / 700 / 2.4px — overrides the shared .deon-eyebrow atom */
/* ---- Section 01: Solar EPC ---- */
.sol-epc {
	background: #ffffff;
	padding-block: 120px;
	position: relative;
	overflow: hidden;
}

.sol-epc__section-num {
	position: absolute;
	top: -20px;
	left: 0;
	font-family: var(--font-body);
	font-weight: 900;
	font-size: 180px;
	line-height: 1;
	color: var(--color-ink-dark);
	opacity: 0.04;
	pointer-events: none;
	user-select: none;
}

.sol-epc__inner {
	display: flex;
	flex-direction: column;
	gap: 64px;
}

.sol-epc__header {
	display: flex;
	flex-direction: column;
	gap: 15px;
}

.sol-epc__title {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 1.3;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

.sol-epc__sub {
	font-size: 18px;
	line-height: 1.8;
	color: var(--color-ink-soft);
	margin: 0;
}

.sol-epc__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}

.sol-epc__card {
	background: #ffffff;
	border: 1px solid var(--color-border);
	box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
	padding: 33px;
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.sol-epc__card-top {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
}

.sol-epc__card-icon {
	width: auto;
	height: 27px;
	display: block;
}

.sol-epc__card-arrow {
	width: 14px;
	height: 14px;
	display: block;
	flex-shrink: 0;
}

.sol-epc__card-title {
	font-family: var(--font-body);
	font-weight: 400;
	font-size: 20px;
	line-height: 1.4;
	color: var(--color-ink-dark);
	margin: 0;
	padding-top: 32px;
}

.sol-epc__card-body {
	font-size: 16px;
	line-height: 1.5;
	color: var(--color-ink-soft);
	margin: 0;
}

/* ---- Section 02: System Design & Compliance ---- */
.sol-sysdesign {
	padding-block: 120px;
	position: relative;
	overflow: hidden;
}

.sol-sysdesign__section-num {
	position: absolute;
	top: -20px;
	left: 0;
	font-family: var(--font-body);
	font-weight: 900;
	font-size: 180px;
	line-height: 1;
	color: #dbdad6;
	opacity: 0.3;
	pointer-events: none;
	user-select: none;
}

.sol-sysdesign__inner {
	display: grid;
	grid-template-columns: 5fr 6fr;
	gap: 24px 96px;
	align-items: start;
}

.sol-sysdesign__left {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

.sol-sysdesign__title {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 1.3;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

.sol-sysdesign__body {
	font-size: 16px;
	line-height: 1.5;
	color: var(--color-ink-soft);
	margin: 0;
}

.sol-sysdesign__img-wrap {
	border: 1px solid var(--color-border);
	height: 264px;
	overflow: hidden;
}

.sol-sysdesign__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
}

.sol-sysdesign__right {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

.sol-sysdesign__compliance-label {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-ink);
	margin: 0;
	padding-bottom: 9px;
	border-bottom: 1px solid var(--color-border);
}

.sol-sysdesign__compliance-intro {
	font-family: var(--font-body);
	font-size: 14px;
	line-height: 1.55;
	color: var(--color-ink-soft);
	margin: 14px 0 4px;
}

.sol-sysdesign__compliance-note {
	font-family: var(--font-body);
	font-size: 13px;
	line-height: 1.55;
	font-style: italic;
	color: var(--color-ink-soft);
	margin: 16px 0 0;
}

.sol-sysdesign__compliance-list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 0;
}

.sol-sysdesign__compliance-row {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 4px;
	padding: 16px 0 17px;
	border-bottom: 1px solid var(--color-border);
}

.sol-sysdesign__compliance-code {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 16px;
	line-height: 1.5;
	color: var(--color-ink-dark);
}

.sol-sysdesign__compliance-name {
	font-size: 14px;
	line-height: 1.43;
	color: var(--color-ink-soft);
}

/* ---- Section 03: Commercial Rooftop Solar ---- */
.sol-rooftop {
	background: #000000;
	padding-block: 120px;
	position: relative;
	overflow: hidden;
}

.sol-rooftop__section-num {
	position: absolute;
	top: -20px;
	left: 0;
	font-family: var(--font-body);
	font-weight: 900;
	font-size: 180px;
	line-height: 1;
	color: #ffffff;
	opacity: 0.3;
	pointer-events: none;
	user-select: none;
}

.sol-rooftop__inner {
	display: flex;
	flex-direction: column;
	gap: 64px;
}

.sol-rooftop__header {
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.sol-rooftop__title {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 1.3;
	letter-spacing: -0.32px;
	color: #ffffff;
	margin: 0;
}

.sol-rooftop__sub {
	font-size: 16px;
	line-height: 1.5;
	color: #ffffff;
	margin: 0;
}

.sol-rooftop__grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 48px;
}

.sol-rooftop__item {
	border-top: 1px solid var(--color-border);
	padding-top: 33px;
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.sol-rooftop__num {
	font-family: var(--font-body);
	font-weight: 400;
	font-size: 32px;
	line-height: 1.5;
	color: var(--color-accent);
	display: block;
}

.sol-rooftop__feat-title {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 16px;
	line-height: 1.5;
	color: #ffffff;
	margin: 0;
	padding-top: 8px;
}

.sol-rooftop__feat-body {
	font-size: 14px;
	line-height: 1.43;
	color: #858383;
	margin: 0;
}

/* ---- Section 04: Industrial Financial Models ---- */
.sol-finmodels {
	padding-block: 120px;
	position: relative;
	overflow: hidden;
}

.sol-finmodels__section-num {
	position: absolute;
	top: -20px;
	left: 0;
	font-family: var(--font-body);
	font-weight: 900;
	font-size: 180px;
	line-height: 1;
	color: #dbdad6;
	opacity: 0.3;
	pointer-events: none;
	user-select: none;
}

.sol-finmodels__inner {
	display: flex;
	flex-direction: column;
	gap: 64px;
}

.sol-finmodels__header {
	display: flex;
	flex-direction: column;
	gap: 0;
}

.sol-finmodels__title {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 1.3;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

.sol-finmodels__sub {
	font-size: 16px;
	line-height: 1.5;
	color: var(--color-ink-soft);
	margin: 0;
}

.sol-finmodels__note,
.sol-rooftop__feat-note {
	font-family: var(--font-body);
	font-size: 13px;
	line-height: 1.55;
	font-style: italic;
	color: var(--color-ink-soft);
	margin: 16px 0 0;
}

/* Section 03 sits on the dark band — the muted ink used elsewhere for notes
   drops below readable contrast there. */
.sol-rooftop__feat-note {
	color: #a9a7a7;
	margin-top: 10px;
}

.sol-finmodels__table-wrap {
	overflow-x: auto;
}

.sol-finmodels__table {
	width: 100%;
	border-collapse: collapse;
	min-width: 600px;
}

.sol-finmodels__thead-row {
	background: var(--color-ink);
}

.sol-finmodels__th {
	padding: 24px 25px 25px;
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: #ffffff;
	text-align: left;
	border: 1px solid var(--color-ink);
}

.sol-finmodels__th--metric {
	width: 30%;
}

.sol-finmodels__row:nth-child(odd) .sol-finmodels__td--metric {
	background: #ffffff;
}
.sol-finmodels__row:nth-child(even) .sol-finmodels__td--metric {
	background: #ffffff;
}

.sol-finmodels__td {
	padding: 24.5px 25px;
	font-size: 16px;
	line-height: normal;
	color: var(--color-ink-dark);
	border: 1px solid var(--color-border);
	vertical-align: middle;
}

.sol-finmodels__td--metric {
	font-weight: 700;
	background: #ffffff;
}

/* ---- Section 05: Operations & Maintenance ---- */
.sol-om {
	background: #ffffff;
	padding-block: 120px;
	position: relative;
	overflow: hidden;
}

.sol-om__section-num {
	position: absolute;
	top: -20px;
	left: 0;
	font-family: var(--font-body);
	font-weight: 900;
	font-size: 180px;
	line-height: 1;
	color: var(--color-ink-dark);
	opacity: 0.04;
	pointer-events: none;
	user-select: none;
}

.sol-om__inner {
	display: grid;
	grid-template-columns: 4fr 8fr;
	gap: 24px 48px;
	align-items: start;
}

.sol-om__left {
	display: flex;
	flex-direction: column;
	gap: 24px;
}

.sol-om__title {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 1.3;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

.sol-om__body {
	font-size: 16px;
	line-height: 1.5;
	color: var(--color-ink-soft);
	margin: 0;
}

.sol-om__features {
	list-style: none;
	margin: 0;
	padding: 8px 0 0;
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.sol-om__feature-item {
	display: flex;
	align-items: flex-start;
	gap: 16px;
}

.sol-om__feature-icon {
	width: 20px;
	height: 20px;
	flex-shrink: 0;
}

.sol-om__feature-item > span {
	display: flex;
	flex-direction: column;
	gap: 2px;
}

.sol-om__feature-label {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 16px;
	line-height: 1.5;
	color: var(--color-ink-dark);
}

.sol-om__feature-desc {
	font-family: var(--font-body);
	font-size: 14px;
	line-height: 1.5;
	color: var(--color-ink-soft);
}

.sol-om__cards {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 16px;
	align-items: start;
}

.sol-om__card {
	background: #ffffff;
	border: 1px solid var(--color-border);
	padding: 33px;
	display: flex;
	flex-direction: column;
	gap: 16px;
}

.sol-om__card-label {
	font-family: var(--font-body);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-ink-soft);
	margin: 0;
}

.sol-om__card-body {
	font-size: 16px;
	line-height: 1.5;
	color: var(--color-ink-dark);
	margin: 0;
}

/* ---- Section 06: Advisory & Consultancy ---- */
.sol-advisory {
	padding-block: 120px;
	position: relative;
	overflow: hidden;
}

.sol-advisory__section-num {
	position: absolute;
	top: -20px;
	left: 0;
	font-family: var(--font-body);
	font-weight: 900;
	font-size: 180px;
	line-height: 1;
	color: #dbdad6;
	opacity: 0.04;
	pointer-events: none;
	user-select: none;
}

.sol-advisory__inner {
	display: flex;
	flex-direction: column;
	gap: 64px;
}

.sol-advisory__header {
	display: flex;
	flex-direction: column;
	gap: 16px;
	max-width: 576px;
}

.sol-advisory__title {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: 32px;
	line-height: 1.3;
	letter-spacing: -0.32px;
	color: var(--color-ink);
	margin: 0;
}

.sol-advisory__sub {
	font-size: 16px;
	line-height: 1.5;
	color: var(--color-ink-soft);
	margin: 0;
}

.sol-advisory__grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 24px;
}

.sol-advisory__card {
	border-left: 4px solid var(--color-ink);
	padding: 16px 0 16px 28px;
	display: flex;
	flex-direction: column;
	gap: 8px;
}

.sol-advisory__card--accent {
	border-left-color: var(--color-accent);
}

.sol-advisory__card-title {
	font-family: var(--font-body);
	font-weight: 900;
	font-size: 16px;
	line-height: 1.5;
	text-transform: uppercase;
	color: var(--color-ink-dark);
	margin: 0;
}

.sol-advisory__card-body {
	font-size: 14px;
	line-height: 1.43;
	color: var(--color-ink-soft);
	margin: 0;
}

/* ---- CTA ---- */
.sol-cta {
	background: var(--color-accent);
	padding-block: 120px;
}

.sol-cta__inner {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 32px;
}

.sol-cta__title {
	font-family: var(--font-body);
	font-weight: 800;
	font-size: var(--fs-h2);
	line-height: 1.2;
	letter-spacing: -0.02em;
	color: var(--color-ink);
	text-align: center;
	margin: 0;
}

.sol-cta__btn {
	font-size: 13px;
	letter-spacing: 1.2px;
	text-transform: uppercase;
}

/* ==========================================================================
   Responsive
   ========================================================================== */
/* Tighten header spacing before the hamburger cutoff so the wider nav fits */
@media (max-width: 1280px) {
	.site-header { --nav-gap: 0px; --nav-pad-x: 8px; }
	.site-header__inner { gap: 16px; }
	.site-header__brand img { height: 28px; width: 118px; }
	.btn-pill { padding: 8px 14px; }
}

@media (max-width: 1024px) {
	.hero { min-height: calc(90vh - var(--header-h)); } /* tablet */
}

/* Switch to hamburger before the 8-item nav + button can overflow */
@media (max-width: 1150px) {
	.nav-toggle { display: flex; }

	/* --------------------------------------------------------------------
	   Off-canvas drawer (client request: match solex.in on mobile/tablet).
	   Dark panel slides in from the right over a scrim; the page behind it
	   does not reflow. Desktop (> 1150px) is untouched.
	   -------------------------------------------------------------------- */
	.site-header__panel {
		display: flex;
		flex-direction: column;
		position: fixed;
		top: 0;
		right: 0;
		z-index: 1000;
		width: min(82vw, 360px);
		height: 100dvh;
		padding: 20px 26px 36px;
		background: var(--color-dark);
		overflow-y: auto;
		overscroll-behavior: contain;
		transform: translateX(100%);
		visibility: hidden;
		transition: transform 0.32s cubic-bezier(0.22, 0.61, 0.36, 1), visibility 0s 0.32s;
	}
	.site-header.is-open .site-header__panel {
		transform: none;
		visibility: visible;
		transition: transform 0.32s cubic-bezier(0.22, 0.61, 0.36, 1), visibility 0s;
	}

	.nav-drawer__scrim {
		display: block;
		position: fixed;
		inset: 0;
		z-index: 999;
		background: rgba(0, 0, 0, 0.55);
		opacity: 0;
		visibility: hidden;
		transition: opacity 0.32s ease, visibility 0s 0.32s;
	}
	.site-header.is-open .nav-drawer__scrim {
		opacity: 1;
		visibility: visible;
		transition: opacity 0.32s ease, visibility 0s;
	}

	/* Drawer head: white logo + close button. */
	.nav-drawer__head {
		display: flex;
		align-items: center;
		justify-content: space-between;
		gap: 16px;
		padding-bottom: 16px;
		border-bottom: 1px solid rgba(255, 255, 255, 0.12);
	}
	.nav-drawer__logo {
		width: 116px;
		height: auto;
	}
	.nav-drawer__close {
		display: flex;
		align-items: center;
		justify-content: center;
		width: 40px;
		height: 40px;
		margin-right: -8px;
		padding: 0;
		border: 0;
		background: transparent;
		color: var(--color-on-dark);
		cursor: pointer;
	}
	.nav-drawer__close:focus-visible {
		outline: 2px solid var(--color-accent);
		outline-offset: 2px;
	}

	/* Nav + actions live inside the panel now, so they are always laid out;
	   the panel's transform is what hides them. */
	.site-header__nav {
		display: block;
		width: 100%;
	}
	.site-nav {
		flex-direction: column;
		align-items: stretch;
		gap: 0;
		width: 100%;
		padding: 10px 0 0;
	}

	/* Rows: flush-left white text, caret pushed to the right, no separators. */
	.site-nav > .menu-item {
		display: flex;
		align-items: center;
		justify-content: space-between;
		flex-wrap: wrap;
		width: 100%;
		padding: 0;
		border: 0;
		border-radius: 0;
		background: transparent;
	}
	.site-nav > .menu-item > a {
		flex: 1 1 auto;
		padding: 13px 0;
		font-size: 18px;
		font-weight: 400;
		color: var(--color-on-dark);
	}
	.site-nav > .menu-item:hover,
	.site-nav > .menu-item:focus-within,
	.site-nav > .menu-item.is-open {
		background: transparent;
	}
	.site-nav > .menu-item:hover > a,
	.site-nav > .menu-item.is-open > a,
	.site-nav > .menu-item.current-menu-item > a,
	.site-nav > .menu-item.current-menu-parent > a,
	.site-nav > .menu-item.current-menu-ancestor > a {
		color: var(--color-accent);
		background: transparent;
	}
	.site-nav > .menu-item .sub-menu-toggle {
		width: 44px;
		height: 44px;
		flex-shrink: 0;
		color: rgba(255, 255, 255, 0.65);
	}
	.site-nav > .menu-item:hover > .sub-menu-toggle,
	.site-nav > .menu-item.is-open > .sub-menu-toggle {
		color: var(--color-accent);
		background: transparent;
	}

	/* Submenus: inline accordion, not the floating desktop dropdown.
	   display:none (not visibility) so collapsed children leave the tab order. */
	.site-nav .menu-item-has-children > .sub-menu,
	.site-nav .menu-item-has-children:hover > .sub-menu,
	.site-nav .menu-item-has-children:focus-within > .sub-menu {
		display: none;
		position: static;
		opacity: 1;
		visibility: visible;
		transform: none;
		border: 0;
		box-shadow: none;
		padding: 0;
		width: 100%;
		max-width: none;
		flex-basis: 100%;
		background: transparent;
		transition: none;
	}
	.site-nav .menu-item-has-children.is-open > .sub-menu {
		display: block;
		padding: 2px 0 12px 4px;
	}
	.site-nav .menu-item-has-children > .sub-menu::before { content: none; }
	/* Solex rules its child rows, not its top-level ones — and never the last
	   child, so an expanded group closes without a trailing line. */
	.site-nav .sub-menu li:not(:last-child) {
		border-bottom: 1px solid rgba(255, 255, 255, 0.25);
	}
	.site-nav .sub-menu li:last-child { border-bottom: 0; }
	.site-nav .sub-menu a {
		padding: 10px 0 10px 20px;
		font-size: 16px;
		font-weight: 400;
		color: rgba(255, 255, 255, 0.72);
		background: transparent;
	}
	.site-nav .sub-menu a:hover,
	.site-nav .sub-menu .current-menu-item > a,
	.site-nav .sub-menu .current-menu-parent > a {
		color: var(--color-accent);
		background: transparent;
	}

	/* CTAs pinned to the foot of the drawer. */
	.site-header__actions {
		display: flex;
		flex-direction: column;
		align-items: stretch;
		gap: 12px;
		width: 100%;
		margin-top: auto;
		padding-top: 28px;
	}
	.site-header__actions .btn-pill-outline {
		border-color: rgba(255, 255, 255, 0.35);
		color: var(--color-on-dark);
		text-align: center;
	}
	.site-header__actions .btn-pill-outline:hover {
		border-color: var(--color-accent);
		color: var(--color-accent);
	}
	.site-header__actions .btn-pill {
		width: 100%;
		padding-block: 13px;
		text-align: center;
	}
}

/* Page behind the drawer must not scroll. Set by main.js on the mobile
   breakpoint only, cleared on close. */
body.nav-drawer-open {
	overflow: hidden;
}

@media (max-width: 860px) {
	.hero {
		min-height: clamp(480px, 78vh, 620px);
	}
	.hero__inner {
		padding-block: 56px 88px;
	}
	.hero__content {
		max-width: 100%;
		width: 100%;
	}
	.hero__scrim {
		/* stronger vertical scrim on small screens — text sits over full-width image */
		background:
			linear-gradient(90deg, rgba(0,0,0,.7) 0%, rgba(0,0,0,.4) 60%, rgba(0,0,0,.25) 100%),
			linear-gradient(0deg, rgba(0,0,0,.4) 0%, rgba(0,0,0,0) 50%);
	}
	.hero__stat {
		width: auto;
		max-width: 62vw;
		padding: 16px 22px 20px 24px;
	}
	.hero__stat-value {
		font-size: 32px;
		line-height: 34px;
		white-space: nowrap;
	}
	.hero__stat-label {
		font-size: 11px;
		letter-spacing: 1px;
	}

	.why__inner { grid-template-columns: 1fr; gap: 40px; }
	.why__grid { grid-template-columns: 1fr; }

	.services__grid { grid-template-columns: 1fr; }

	.projects__inner { grid-template-columns: 1fr; gap: 32px; }
	.projects__grid { grid-template-columns: 1fr; }
	.project-tile { height: 280px; }

	.about-strip__inner { grid-template-columns: 1fr; gap: 32px; padding-block: 64px; }

	.why-solar__grid { grid-template-columns: repeat(2, 1fr); gap: 40px; }

	.articles__grid { grid-template-columns: 1fr; max-width: 480px; margin-inline: auto; }

	.site-footer__inner {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
	.site-footer__brand { grid-column: 1 / -1; }
	.site-footer__nav { grid-column: 1 / 2; }
	.site-footer__offices-inner { grid-template-columns: repeat(2, minmax(0, 1fr)); }

	/* About page */
	.about-overview__grid { grid-template-columns: 1fr; }
	.about-overview__text { padding-bottom: 0; }
	.about-overview__img-wrap { height: 340px; }
	.about-vm__grid { grid-template-columns: 1fr; }
	.about-vm__card { padding: 40px 32px; }
	.about-values__grid { grid-template-columns: 1fr; }
	.about-work__grid { grid-template-columns: 1fr; }
	.about-work__lead { padding-block: 0; }
	.about-work__cards { grid-template-columns: repeat(2, 1fr); }

	/* Solutions page */
	.sol-epc__grid { grid-template-columns: 1fr; }
	.sol-sysdesign__inner { grid-template-columns: 1fr; gap: 48px; }
	.sol-rooftop__grid { grid-template-columns: repeat(2, 1fr); gap: 32px 24px; }
	.sol-om__inner { grid-template-columns: 1fr; gap: 48px; }
	.sol-om__cards { grid-template-columns: repeat(2, 1fr); }
	.sol-advisory__grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 600px) {
	.stats__inner { grid-template-columns: repeat(2, 1fr); }
	.stats__item:nth-child(odd) { border-left: 0; }
	.stats__item:nth-child(-n+2) { border-bottom: 1px solid var(--color-border); }
	.stats__value { font-size: 38px; }

	.about-strip__stats { grid-template-columns: 1fr; gap: 28px; }

	.why-solar__grid { grid-template-columns: 1fr; }

	.hero__actions { flex-wrap: wrap; gap: 18px; }

	.site-footer__inner { grid-template-columns: 1fr; gap: 28px; }
	.site-footer__nav { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.site-footer__menu { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.site-footer__offices-inner { grid-template-columns: 1fr; padding-block: 24px; }
	.site-footer__bar-inner { flex-direction: column; align-items: flex-start; }

	/* About page */
	.about-values__grid { grid-template-columns: 1fr; }
	.about-work__cards { grid-template-columns: 1fr; }
	.about-certs__row { gap: 16px; }
	.about-certs__badge { width: calc(50% - 8px); min-height: 120px; }

}

@media (max-width: 600px) {
	/* Solutions page */
	.sol-rooftop__grid { grid-template-columns: 1fr; }
	.sol-advisory__grid { grid-template-columns: 1fr; }
	.sol-om__cards { grid-template-columns: 1fr; }
}

/* FAQ answer qualifier — the approved copy attaches a disclaimer to the
   payback range; it must read as a caveat, not as part of the answer. */
.deon-faq__note {
	font-size: 13px;
	line-height: 1.55;
	color: var(--color-ink-soft);
	margin-top: 10px;
}

/* ==========================================================================
   Scroll animations
   ========================================================================== */
.anim {
	opacity: 0;
	transform: translateY(24px);
	transition: opacity 0.55s ease var(--anim-delay, 0s),
	            transform 0.55s ease var(--anim-delay, 0s);
}
.anim--visible {
	opacity: 1;
	transform: none;
}
@media (prefers-reduced-motion: reduce) {
	.anim { transition: none; transform: none; }
	.anim--visible { opacity: 1; }
}

/* ==========================================================================
   Knowledge Hub — post body (the_content) typography.
   Scoped to .deon-prose so it never leaks into the Tailwind Phase 2 pages
   (Tailwind preflight is off; this is the approved main.css exception for the
   single-article body only). Used by single.php.
   ========================================================================== */
.deon-prose {
	font-family: var(--font-body);
	font-size: 18px;
	line-height: 1.78;
	color: var(--color-ink-soft);
}
.deon-prose > *:first-child { margin-top: 0; }
.deon-prose > *:last-child { margin-bottom: 0; }
.deon-prose p { margin: 0 0 1.5em; }
.deon-prose h2,
.deon-prose h3,
.deon-prose h4 {
	color: var(--color-ink-dark);
	line-height: 1.2;
	margin: 2em 0 0.6em;
	scroll-margin-top: calc(var(--header-h) + 20px);
}
.deon-prose h2 { font-family: var(--font-head); font-weight: 700; font-size: 32px; letter-spacing: -0.5px; }
.deon-prose h3 { font-family: var(--font-head); font-weight: 700; font-size: 24px; letter-spacing: -0.3px; }
.deon-prose h4 { font-family: var(--font-body); font-weight: 700; font-size: 18px; }
.deon-prose a {
	color: var(--color-accent);
	text-decoration: underline;
	text-underline-offset: 3px;
	transition: color 0.2s ease;
}
.deon-prose a:hover { color: var(--color-accent-deep); }
.deon-prose strong { color: var(--color-ink-dark); font-weight: 700; }
.deon-prose ul,
.deon-prose ol { margin: 0 0 1.5em; padding-left: 1.4em; }
.deon-prose li { margin: 0 0 0.5em; }
.deon-prose ul > li { list-style: disc; }
.deon-prose ol > li { list-style: decimal; }
.deon-prose blockquote {
	margin: 1.75em 0;
	padding: 4px 0 4px 24px;
	border-left: 3px solid var(--color-accent);
	font-family: var(--font-head);
	font-weight: 500;
	font-size: 22px;
	line-height: 1.5;
	color: var(--color-ink-dark);
}
.deon-prose blockquote p { margin-bottom: 0.5em; }
.deon-prose img,
.deon-prose figure { max-width: 100%; height: auto; margin: 2em 0; }
.deon-prose figure img { margin: 0; }
.deon-prose figcaption {
	margin-top: 10px;
	font-size: 13px;
	line-height: 1.5;
	color: var(--color-ink-soft);
	text-align: center;
}
.deon-prose hr { margin: 2.5em 0; border: 0; border-top: 1px solid var(--color-divider); }
.deon-prose code {
	font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
	font-size: 0.9em;
	background: var(--color-bg-warm);
	border: 1px solid var(--color-divider);
	padding: 2px 6px;
	border-radius: 3px;
}
.deon-prose pre {
	margin: 1.75em 0;
	padding: 20px 24px;
	overflow-x: auto;
	background: var(--color-ink-dark);
	color: var(--color-bg);
	border-radius: 4px;
}
.deon-prose pre code { background: none; border: 0; padding: 0; color: inherit; }
.deon-prose table { width: 100%; border-collapse: collapse; margin: 1.75em 0; font-size: 16px; }
.deon-prose th,
.deon-prose td { text-align: left; padding: 12px 16px; border-bottom: 1px solid var(--color-divider); }
.deon-prose th { font-weight: 700; color: var(--color-ink-dark); }
@media (max-width: 600px) {
	.deon-prose { font-size: 17px; }
	.deon-prose h2 { font-size: 28px; }
	.deon-prose h3 { font-size: 22px; }
	.deon-prose blockquote { font-size: 20px; }
}

/* ==========================================================================
   Breadcrumb — rendered inside the page hero, just below the title
   (all pages except home). deon_breadcrumb() is only ever called from a hero
   partial now, so the trail carries no strip background or container of its
   own; it inherits the hero's centred (or, on the Project Gallery, left)
   alignment. Colour on photographic heroes is handled under .deon-phero--media.
   ========================================================================== */
.deon-breadcrumb {
	width: 100%;
}

.deon-breadcrumb__inner {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px;
	font-size: 12px;
	letter-spacing: 0.6px;
	text-transform: uppercase;
}

.deon-breadcrumb__link {
	color: var(--color-ink-soft);
	text-decoration: none;
	transition: color 0.2s ease;
}
.deon-breadcrumb__link:hover,
.deon-breadcrumb__link:focus-visible {
	color: var(--color-accent-deep);
}

.deon-breadcrumb__sep {
	color: var(--color-border);
}

.deon-breadcrumb__current {
	color: var(--color-ink);
	font-weight: 500;
}

/* ── Project gallery lightbox ─────────────────────────────────────────────
   Full-screen viewer for single-deon_project.php. Rendered by
   assets/js/project-gallery.js. */
.deon-lightbox {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: none;
	align-items: center;
	justify-content: center;
	padding: clamp(16px, 4vw, 56px);
	background: rgba(15, 15, 14, 0.92);
}
.deon-lightbox.is-open {
	display: flex;
}
.deon-lightbox__figure {
	margin: 0;
	max-width: 100%;
	max-height: 100%;
	display: flex;
	align-items: center;
	justify-content: center;
}
.deon-lightbox__img {
	max-width: min(1100px, 92vw);
	max-height: 84vh;
	width: auto;
	height: auto;
	object-fit: contain;
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}
.deon-lightbox__close,
.deon-lightbox__nav {
	position: absolute;
	background: transparent;
	border: none;
	color: #fff;
	cursor: pointer;
	line-height: 1;
	opacity: 0.8;
	transition: opacity 0.2s ease, color 0.2s ease;
}
.deon-lightbox__close:hover,
.deon-lightbox__nav:hover {
	opacity: 1;
	color: var(--color-accent);
}
.deon-lightbox__close {
	top: clamp(12px, 3vw, 32px);
	right: clamp(12px, 3vw, 40px);
	font-size: 40px;
}
.deon-lightbox__nav {
	top: 50%;
	transform: translateY(-50%);
	font-size: 56px;
	padding: 0 clamp(8px, 2vw, 24px);
}
.deon-lightbox__prev { left: 0; }
.deon-lightbox__next { right: 0; }
.deon-lightbox__nav[hidden] { display: none; }
.deon-lightbox__count {
	position: absolute;
	bottom: clamp(12px, 3vw, 32px);
	left: 50%;
	transform: translateX(-50%);
	color: #fff;
	font-family: var(--font-sans, Inter, sans-serif);
	font-size: 13px;
	letter-spacing: 1px;
	opacity: 0.7;
}
@media (max-width: 640px) {
	.deon-lightbox__nav { font-size: 40px; }
	.deon-lightbox__close { font-size: 32px; }
}

/* ==========================================================================
   Page hero — shared inner-page hero component (redesign wave 1)
   --------------------------------------------------------------------------
   Client change log v1: "Redesign the hero section of all inner pages to match
   one consistent reference layout" + "Add high-quality, relevant background /
   side images". Markup: template-parts/global/page-hero.php.

   Lives in main.css rather than Tailwind on purpose: the Phase 1 pages
   (Home/About/Solutions) never load tailwind.dist.css, so a single CSS home is
   the only way the shape can be genuinely identical everywhere.

   Height budget (desktop): 40px pad + 300px media + 40px pad ≈ 380–420px.
   No min-h-screen / 80vh anywhere — client issue "banners too tall".

   Exception: the Project Gallery hero (template-parts/projects/hero.php) is
   left untouched by explicit client instruction.
   ========================================================================== */
.deon-phero {
	position: relative;
	overflow: hidden;
	background: var(--color-bg);
	border-bottom: 1px solid var(--color-divider);
}
.deon-phero--white { background: var(--color-surface); }
.deon-phero--offwhite { background: var(--color-bg); }

.deon-phero__inner {
	position: relative;
	z-index: 2;
	max-width: var(--container-max);
	margin-inline: auto;
	padding: clamp(28px, 3vw, 40px) var(--gutter);
	display: grid;
	gap: clamp(24px, 3vw, 44px);
	align-items: center;
}

@media (min-width: 900px) {
	.deon-phero__inner {
		grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
		min-height: 380px;
	}
	/* No image available for this page — single full-width text column.
	   Client request (2026-07): center the content and give every inner-page
	   hero the same, slightly taller height for a uniform look. */
	.deon-phero--plain .deon-phero__inner {
		grid-template-columns: minmax(0, 1fr);
		min-height: 360px;
	}
}

/* Centered inner-page hero — eyebrow + title only, no lead (client 2026-07).
   Applies to every plain hero so all inner pages match exactly. */
.deon-phero--plain .deon-phero__content {
	align-items: center;
	text-align: center;
	max-width: 760px;
	margin-inline: auto;
}

.deon-phero__content {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	gap: 14px;
	max-width: 620px;
	min-width: 0;
}

.deon-phero__back {
	font-family: var(--font-body);
	font-size: 12px;
	font-weight: 600;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-accent);
	text-decoration: none;
}
.deon-phero__back:hover { color: var(--color-accent-deep); }

.deon-phero__eyebrow {
	margin: 0;
	font-family: var(--font-body);
	font-size: var(--fs-eyebrow);
	font-weight: 700;
	line-height: 1;
	letter-spacing: 1.6px;
	text-transform: uppercase;
	color: var(--color-accent);
}

.deon-phero__title {
	margin: 0;
	font-family: var(--font-head);
	font-size: var(--fs-hero);
	font-weight: 700;
	line-height: 1.12;
	letter-spacing: -0.02em;
	color: var(--color-ink);
	text-wrap: balance;
}

.deon-phero__lead {
	margin: 0;
	font-family: var(--font-body);
	font-size: var(--fs-lead);
	font-weight: 400;
	line-height: 1.65;
	color: var(--color-ink-soft);
	max-width: 58ch;
}

/* Inline fact row (project detail: location · capacity · commissioned). */
.deon-phero__meta {
	list-style: none;
	margin: 2px 0 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px 20px;
	font-family: var(--font-body);
	font-size: 14px;
	line-height: 1.4;
	color: var(--color-ink-soft);
}
.deon-phero__meta li { position: relative; padding-left: 20px; }
.deon-phero__meta li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 50%;
	width: 8px;
	height: 8px;
	margin-top: -4px;
	background: var(--color-accent);
}

/* Icon variant — the square bullet is replaced by a real glyph (pin / bolt /
   calendar / status), matching the Project Gallery cards. */
.deon-phero__meta li.deon-phero__meta--icon {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	padding-left: 0;
}
.deon-phero__meta li.deon-phero__meta--icon::before { content: none; }
.deon-phero__meta-icon {
	display: inline-flex;
	flex: 0 0 auto;
	color: var(--color-accent);
}
.deon-phero__meta-icon svg {
	width: 16px;
	height: 16px;
	display: block;
}

/* Status pill (Investor Relations IPO status). */
.deon-phero__badge {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	margin: 2px 0 0;
	padding: 8px 15px;
	border: 1px solid var(--color-accent);
	border-radius: 999px;
	font-family: var(--font-body);
	font-size: 12px;
	font-weight: 500;
	line-height: 1;
	letter-spacing: 1.1px;
	text-transform: uppercase;
	color: var(--color-accent-deep);
}
.deon-phero__badge-dot {
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: var(--color-accent);
}

/* Compact stat row (careers open positions, etc.). */
.deon-phero__stats {
	list-style: none;
	margin: 6px 0 0;
	padding: 0;
	display: flex;
	flex-wrap: wrap;
	gap: 12px 36px;
}
.deon-phero__stat {
	display: flex;
	flex-direction: column;
	gap: 4px;
	padding-left: 16px;
	border-left: 2px solid var(--color-accent);
}
.deon-phero__stat-value {
	font-family: var(--font-head);
	font-size: var(--fs-h3);
	font-weight: 700;
	line-height: 1.1;
	color: var(--color-ink);
}
.deon-phero__stat-label {
	font-family: var(--font-body);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-ink-soft);
}

.deon-phero__actions { margin: 8px 0 0; }
.deon-phero__cta {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	padding: 13px 26px;
	background: var(--color-accent);
	color: #fff;
	font-family: var(--font-body);
	font-size: 13px;
	font-weight: 700;
	line-height: 1;
	letter-spacing: 1px;
	text-transform: uppercase;
	text-decoration: none;
	transition: background-color 0.2s ease;
}
.deon-phero__cta:hover { background: var(--color-accent-deep); color: #fff; }

/* FAQ live-filter input. */
.deon-phero__search {
	position: relative;
	width: 100%;
	max-width: 460px;
	margin-top: 6px;
}
.deon-phero__search-icon {
	position: absolute;
	left: 15px;
	top: 50%;
	transform: translateY(-50%);
	display: flex;
	color: #9aa0a6;
	pointer-events: none;
}
.deon-phero__search input {
	width: 100%;
	padding: 13px 16px 13px 42px;
	border: 1px solid var(--color-border);
	background: var(--color-surface);
	font-family: var(--font-body);
	font-size: var(--fs-body);
	line-height: 1.4;
	color: var(--color-ink);
}
.deon-phero__search input:focus {
	outline: none;
	border-color: var(--color-accent);
}
.deon-phero__sr {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0 0 0 0);
	white-space: nowrap;
	border: 0;
}

/* Image panel — 5/12 of the grid, fixed height so the hero can never grow. */
.deon-phero__media {
	margin: 0;
	min-width: 0;
	background: var(--color-icon-bg);
	border: 1px solid var(--color-border);
	overflow: hidden;
}
.deon-phero__media img {
	display: block;
	width: 100%;
	height: clamp(200px, 24vw, 300px);
	object-fit: cover;
}

@media (max-width: 899px) {
	.deon-phero__inner { padding-block: clamp(24px, 6vw, 36px); }
	.deon-phero--plain .deon-phero__inner { min-height: 280px; }
	.deon-phero__media img { height: clamp(180px, 42vw, 240px); }
}

/* ==========================================================================
   Page hero — optional full-bleed background media (image / video)
   Set per-page in wp-admin (deon_get_hero_bg / "Hero Background" meta box).
   The `.deon-phero--media` modifier flips the plain colour hero into a
   photographic one: a media layer, a legibility scrim tuned for the centred
   title, and light-on-dark typography. No media => none of this renders and
   the hero keeps its flat colour background.
   ========================================================================== */
.deon-phero__bg {
	position: absolute;
	inset: 0;
	z-index: 0;
}
.deon-phero__bg-img,
.deon-phero__video {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
	border: 0;
}
/* Embedded YouTube/Vimeo: pointer-events off, 16:9 sized to always exceed the
   hero box in both axes so overflow crops the player's chrome (mirrors .hero). */
.deon-phero__video--embed {
	pointer-events: none;
	inset: auto;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
	width: 100vw;
	height: 56.25vw;      /* 16:9 of width  */
	min-height: 100vh;
	min-width: 177.78vh;  /* 16:9 of height */
}
/* Poster masks the embed's initial control flash, then fades once it plays. */
.deon-phero__poster {
	position: absolute;
	inset: 0;
	z-index: 1;
	background-color: var(--color-ink);
	background-size: cover;
	background-position: center;
	pointer-events: none;
	animation: hero-poster-out 0.6s ease 1.6s forwards;
}
@media (prefers-reduced-motion: reduce) {
	.deon-phero__poster { animation: none; opacity: 0; visibility: hidden; }
}
/* Legibility scrim — warm-ink wash weighted to the centre where the title and
   trail sit, and a shade deeper at the foot behind the breadcrumb. */
.deon-phero__scrim {
	position: absolute;
	inset: 0;
	z-index: 1;
	pointer-events: none;
	background:
		radial-gradient(120% 130% at 50% 42%, rgba(23,21,19,0.30) 0%, rgba(23,21,19,0.58) 100%),
		linear-gradient(180deg, rgba(23,21,19,0.34) 0%, rgba(23,21,19,0.30) 50%, rgba(23,21,19,0.54) 100%);
}

/* Light-on-dark typography for photographic heroes. The eyebrow keeps the
   brand accent (it clears contrast on the scrim); the rest shifts to warm
   white. Accent structural marks (stat rule, meta dot) stay accent. */
.deon-phero--media .deon-phero__title {
	color: #fff;
	text-shadow: 0 1px 28px rgba(0,0,0,0.35);
}
.deon-phero--media .deon-phero__meta,
.deon-phero--media .deon-phero__stat-value {
	color: #fff;
}
.deon-phero--media .deon-phero__stat-label {
	color: rgba(255,255,255,0.82);
}
.deon-phero--media .deon-phero__badge {
	color: #fff;
	border-color: rgba(255,255,255,0.55);
}
.deon-phero--media .deon-phero__back {
	color: #fff;
}
.deon-phero--media .deon-phero__back:hover {
	color: var(--color-accent);
}

/* Centred inner-page heroes centre the trail under the title; the Project
   Gallery hero (left-aligned, not .deon-phero--plain) keeps it left. */
.deon-phero--plain .deon-breadcrumb__inner {
	justify-content: center;
}
.deon-phero--media .deon-breadcrumb__link {
	color: rgba(255,255,255,0.78);
}
.deon-phero--media .deon-breadcrumb__link:hover,
.deon-phero--media .deon-breadcrumb__link:focus-visible {
	color: #fff;
}
.deon-phero--media .deon-breadcrumb__sep {
	color: rgba(255,255,255,0.45);
}
.deon-phero--media .deon-breadcrumb__current {
	color: #fff;
}

/* ==========================================================================
   Leadership — 3D flip profile cards
   Owned by the Leadership section. Appended at the END of this file on purpose:
   3D transforms cannot be expressed as Tailwind utilities, but everything else
   on the Leadership page stays Tailwind (Phase 2 rules). Do not move this into
   the :root token block.

   Structure (see template-parts/leadership/leader-card.php):
     .deon-flip            perspective + hover/tap/focus target
       .deon-flip__inner   the rotating plane
         .deon-flip__face  --front (professional photo) / --back (casual photo
                           or the branded info panel)

   Flip triggers: hover on fine pointers, :focus-within for keyboard,
   .is-flipped toggled by the tap handler at the end of assets/js/main.js.
   Both faces stay in the accessibility tree — backface-visibility is a purely
   visual property — so the back-face bio/LinkedIn is always readable by screen
   readers even when it holds the only copy of that copy.
   ========================================================================== */

/* The whole card is the hover/tap target, so the pointer covers photo + name. */
.deon-leader-card {
	cursor: pointer;
}

.deon-flip {
	position: relative;
	perspective: 1400px;
	outline: none;
	transition: transform 0.6s cubic-bezier(0.22, 0.68, 0.28, 1),
	            box-shadow 0.6s cubic-bezier(0.22, 0.68, 0.28, 1);
}

.deon-flip__inner {
	position: absolute;
	inset: 0;
	transform-style: preserve-3d;
	transition: transform 0.6s cubic-bezier(0.22, 0.68, 0.28, 1);
}

.deon-flip__face {
	position: absolute;
	inset: 0;
	overflow: hidden;
	backface-visibility: hidden;
	-webkit-backface-visibility: hidden;
	transform: rotateY(0deg);
}

.deon-flip__back {
	transform: rotateY(180deg);
}

/* The base `img { height: auto }` reset is UNLAYERED and so beats Tailwind's
   layered `.h-full` — leaving the photo at its natural height and exposing the
   grey face below it. This unlayered, more-specific rule restores the fill so
   the professional/casual photo covers the whole 4:5 card. */
.deon-flip__face img,
.deon-flip-static img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: top;
}

/* Subtle lift — reads as "premium" without bouncing the grid. Hover is scoped
   to the whole card (photo + name), so hovering the name flips the photo too. */
.deon-leader-card:hover .deon-flip,
.deon-flip:focus-visible,
.deon-flip:focus-within,
.deon-flip.is-flipped {
	transform: translateY(-4px);
	box-shadow: 0 18px 40px -18px rgba(29, 27, 32, 0.45);
}

/* Static portrait (no second photo): same premium lift on hover, no flip. */
.deon-flip-static {
	transition: transform 0.6s cubic-bezier(0.22, 0.68, 0.28, 1),
	            box-shadow 0.6s cubic-bezier(0.22, 0.68, 0.28, 1);
}
.deon-leader-card:hover .deon-flip-static {
	transform: translateY(-4px);
	box-shadow: 0 18px 40px -18px rgba(29, 27, 32, 0.45);
}

/* Keyboard affordance — the card itself is the control. */
.deon-flip:focus-visible {
	outline: 2px solid var(--color-accent);
	outline-offset: 3px;
}

/* Fine pointers (mouse/trackpad) only: hovering anywhere on the card flips. */
@media (hover: hover) and (pointer: fine) {
	.deon-leader-card:hover .deon-flip__inner {
		transform: rotateY(180deg);
	}
}

/* Keyboard focus and the coarse-pointer tap toggle flip everywhere. */
.deon-flip:focus-within .deon-flip__inner,
.deon-flip.is-flipped .deon-flip__inner {
	transform: rotateY(180deg);
}

/* Reduced motion: cross-fade instead of spinning. */
@media (prefers-reduced-motion: reduce) {
	.deon-flip,
	.deon-flip__inner {
		transition: none;
	}
	.deon-leader-card:hover .deon-flip,
	.deon-flip:focus-visible,
	.deon-flip:focus-within,
	.deon-flip.is-flipped {
		transform: none;
	}
	.deon-flip .deon-flip__inner,
	.deon-flip:hover .deon-flip__inner,
	.deon-flip:focus-within .deon-flip__inner,
	.deon-flip.is-flipped .deon-flip__inner {
		transform: none;
	}
	.deon-flip__face {
		backface-visibility: visible;
		-webkit-backface-visibility: visible;
		transition: opacity 0.15s linear;
	}
	.deon-flip__back {
		transform: none;
		opacity: 0;
	}
	.deon-flip:hover .deon-flip__back,
	.deon-flip:focus-within .deon-flip__back,
	.deon-flip.is-flipped .deon-flip__back {
		opacity: 1;
	}
}

/* ==========================================================================
   Solutions page — anchor targets + redesign-spec cleanup
   Appended block (Wave: nav dropdown anchors, July 2026).
   Solutions is a Phase 1 page: main.css only, no Tailwind. Everything the
   header's "Solutions" dropdown needs to land correctly lives here, plus the
   REDESIGN-SPEC.md pass (type scale tokens, 4-colour palette, --section-pad,
   white / #fbf9f5 alternating rhythm) applied as overrides so nothing above
   this comment had to be reordered.
   ========================================================================== */

/* ---- Anchor landing --------------------------------------------------- */
/* Header is sticky at --header-h (72px). Without scroll-margin-top the
   section's own heading lands *behind* it. +24px gives the heading breathing
   room instead of butting straight against the header's bottom border.
   No `scroll-behavior: smooth` is set here: the theme only opts into smooth
   scrolling on the About timeline viewport, never at the document level, so
   these anchors stay instant-jump and consistent with the rest of the site
   (and inherit the OS reduced-motion preference for free). */
#solar-epc,
#system-design,
#rooftop-solar,
#financial-models,
#operations,
#advisory {
	scroll-margin-top: calc(var(--header-h) + 24px);
}

/* ---- Section rhythm + padding ----------------------------------------- */
/* Alternating white / off-white down the page, one dark standout band
   (Commercial Rooftop Solar). 120px hard padding -> --section-pad. */
.sol-epc,
.sol-sysdesign,
.sol-rooftop,
.sol-finmodels,
.sol-om,
.sol-advisory {
	padding-block: var(--section-pad);
}

/* white -> off-white -> dark -> white -> off-white -> white(+accent CTA) */
.sol-epc,
.sol-finmodels,
.sol-advisory {
	background: var(--color-surface);
}

.sol-sysdesign,
.sol-om {
	background: var(--color-bg);
}

/* The one dark standout band on this page — #000000 was off-palette. */
.sol-rooftop {
	background: var(--color-dark);
}

/* ---- Type scale -------------------------------------------------------- */
/* Section H2s: hardcoded 32px -> --fs-h2 (client: "site looks zoomed"). */
.sol-epc__title,
.sol-sysdesign__title,
.sol-rooftop__title,
.sol-finmodels__title,
.sol-om__title,
.sol-advisory__title {
	font-family: var(--font-head);
	font-size: var(--fs-h2);
}

/* Section intro / lead copy -> --fs-lead. */
.sol-epc__sub,
.sol-rooftop__sub,
.sol-finmodels__sub,
.sol-advisory__sub,
.sol-sysdesign__body,
.sol-om__body {
	font-size: var(--fs-lead);
	line-height: 1.6;
}

/* Card headings -> --fs-h3. */
.sol-epc__card-title {
	font-family: var(--font-head);
	font-weight: 700;
	font-size: var(--fs-h3);
	padding-top: 24px;
}

/* Body / card copy -> --fs-body. */
.sol-epc__card-body,
.sol-sysdesign__compliance-code,
.sol-sysdesign__compliance-name,
.sol-rooftop__feat-title,
.sol-rooftop__feat-body,
.sol-finmodels__td,
.sol-om__feature-item span,
.sol-om__card-body,
.sol-advisory__card-title,
.sol-advisory__card-body {
	font-size: var(--fs-body);
}

/* Big ghost section numerals: scale down with the rest of the page. */
.sol-epc__section-num,
.sol-sysdesign__section-num,
.sol-rooftop__section-num,
.sol-finmodels__section-num,
.sol-om__section-num,
.sol-advisory__section-num {
	font-size: clamp(72px, 11vw, 140px);
	top: -12px;
}

/* Feature numerals on the dark band track the H3 step, not a stray 32px. */
.sol-rooftop__num {
	font-size: var(--fs-h3);
}

/* ---- Palette ----------------------------------------------------------- */
/* #dbdad6 was outside the four brand colours — use ink at low opacity. */
.sol-sysdesign__section-num,
.sol-finmodels__section-num,
.sol-advisory__section-num {
	color: var(--color-ink);
	opacity: 0.05;
}

.sol-rooftop__section-num {
	color: var(--color-on-dark);
	opacity: 0.08;
}

/* Dark-band text tokens (#ffffff / #858383 hardcodes). */
.sol-rooftop__title,
.sol-rooftop__feat-title {
	color: var(--color-on-dark);
}

.sol-rooftop__sub,
.sol-rooftop__feat-body {
	color: var(--color-on-dark-soft);
}

/* Hairlines on the dark band: full-strength border reads too hot. */
.sol-rooftop__item {
	border-top-color: rgba(255, 255, 255, 0.16);
	padding-top: 24px;
}

/* Cards / table cells -> surface token instead of raw #ffffff. */
.sol-epc__card,
.sol-om__card,
.sol-finmodels__td--metric,
.sol-finmodels__row:nth-child(odd) .sol-finmodels__td--metric,
.sol-finmodels__row:nth-child(even) .sol-finmodels__td--metric {
	background: var(--color-surface);
}

.sol-finmodels__th {
	color: var(--color-on-dark);
}

/* CTA band: #fea525 was a near-miss of the brand orange. */
.sol-cta {
	background: var(--color-accent);
	padding-block: var(--section-pad);
}

/* ---- Inner spacing ----------------------------------------------------- */
/* 64px stack gaps were tuned against 120px section padding; re-proportion. */
.sol-epc__inner,
.sol-rooftop__inner,
.sol-finmodels__inner,
.sol-advisory__inner {
	gap: clamp(28px, 3vw, 44px);
}

/* ========================================================================
   Video lightbox — global overlay (Investor Video Library, [data-video-*]).
   JS-driven component, so styled here rather than as Tailwind utilities.
   ======================================================================== */
.deon-video-overlay[hidden] { display: none; }
.deon-video-overlay {
	position: fixed;
	inset: 0;
	z-index: 1000;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: clamp(16px, 4vw, 48px);
}
.deon-video-backdrop {
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, 0.82);
}
.deon-video-dialog {
	position: relative;
	width: 100%;
	max-width: 1024px;
}
.deon-video-stage {
	position: relative;
	aspect-ratio: 16 / 9;
	background: #000;
	box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
}
.deon-video-el {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	border: 0;
	display: block;
}
.deon-video-x {
	position: absolute;
	top: -44px;
	right: 0;
	width: 36px;
	height: 36px;
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 28px;
	line-height: 1;
	color: #fff;
	background: transparent;
	border: 0;
	cursor: pointer;
}
.deon-video-x:hover { color: var(--deon-accent, #e8930a); }

/* -- Floating WhatsApp button — site-wide, bottom-right (shared footer) ----- */
.deon-whatsapp-float {
	position: fixed;
	right: clamp(16px, 3vw, 28px);
	bottom: clamp(16px, 3vw, 28px);
	z-index: 999;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 56px;
	height: 56px;
	border-radius: 50%;
	color: #fff;
	background: #25d366;
	box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25);
	transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.deon-whatsapp-float:hover {
	transform: translateY(-3px);
	box-shadow: 0 10px 26px rgba(0, 0, 0, 0.3);
	color: #fff;
}
.deon-whatsapp-float svg { display: block; }

/* ==========================================================================
   Careers — Apply Now form (Contact Form 7 branch).

   Second scoped-CSS exception after `.deon-prose`, and for the same reason:
   the markup is not ours. CF7 renders the form from a template stored in the
   database, so Tailwind never scans it and any utility class typed into the
   CF7 editor resolves to nothing. Everything the plugin can emit is styled
   here instead, element-first, so the band matches the approved reference
   whatever the client edits the form template to.

   Companion markup: docs/CLIENT-GUIDE-CAREERS-FORM.md.
   ========================================================================== */
/* WordPress auto-paragraphs the CF7 template: every field's caption + control
   end up inside a <p> separated by <br>. Flatten that back into the field. */
.deon-apply-form p { margin: 0; }
.deon-apply-form .deon-apply-field p {
	display: flex;
	flex-direction: column;
	gap: 10px;
}
.deon-apply-form .deon-apply-field br { display: none; }

.deon-apply-form form,
.deon-apply-form .wpcf7-form {
	display: flex;
	flex-direction: column;
	gap: 28px;
}

/* Field shell — one label per field, caption above the control. */
.deon-apply-form label,
.deon-apply-form .deon-apply-field {
	display: flex;
	flex-direction: column;
	gap: 10px;
	font-family: var(--font-body);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 1px;
	text-transform: uppercase;
	color: var(--color-ink);
}

/* Two-up row (first / last name). Falls back to stacked on small screens. */
.deon-apply-form .deon-apply-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 28px;
}
@media (max-width: 640px) {
	.deon-apply-form .deon-apply-row { grid-template-columns: 1fr; }
}

/* CF7 wraps every control in a span — it must not break the column flow. */
.deon-apply-form .wpcf7-form-control-wrap { display: block; }

/* Underline-only controls (reference design: no boxes, one rule per field). */
.deon-apply-form input[type="text"],
.deon-apply-form input[type="email"],
.deon-apply-form input[type="tel"],
.deon-apply-form input[type="url"],
.deon-apply-form input[type="date"],
.deon-apply-form select,
.deon-apply-form textarea {
	width: 100%;
	padding: 12px 0;
	border: 0;
	border-bottom: 1px solid var(--color-border);
	border-radius: 0;
	background: transparent;
	font-family: var(--font-body);
	font-size: 15px;
	font-weight: 400;
	letter-spacing: normal;
	text-transform: none;
	color: var(--color-ink-soft);
	transition: border-color 0.2s ease;
	appearance: none;
}
.deon-apply-form textarea {
	min-height: 120px;
	resize: vertical;
}
.deon-apply-form input::placeholder,
.deon-apply-form textarea::placeholder {
	color: var(--color-ink-soft);
	opacity: 0.5;
}
.deon-apply-form input:focus,
.deon-apply-form select:focus,
.deon-apply-form textarea:focus {
	outline: none;
	border-bottom-color: var(--color-accent);
}

/* CV upload — dashed drop panel around the native file input. */
.deon-apply-form input[type="file"] {
	width: 100%;
	padding: 32px 20px;
	border: 1px dashed var(--color-border);
	background: transparent;
	font-family: var(--font-body);
	font-size: 13px;
	font-weight: 400;
	letter-spacing: normal;
	text-transform: none;
	color: var(--color-ink-soft);
	cursor: pointer;
	transition: border-color 0.2s ease, background-color 0.2s ease;
}
.deon-apply-form input[type="file"]:hover {
	border-color: var(--color-accent);
	background: rgba(242, 144, 32, 0.04);
}
.deon-apply-form input[type="file"]::file-selector-button {
	margin-right: 14px;
	padding: 10px 18px;
	border: 1px solid var(--color-accent);
	background: transparent;
	font-family: var(--font-body);
	font-size: 11px;
	font-weight: 700;
	letter-spacing: 1px;
	text-transform: uppercase;
	color: var(--color-accent);
	cursor: pointer;
	transition: background-color 0.2s ease, color 0.2s ease;
}
.deon-apply-form input[type="file"]::file-selector-button:hover {
	background: var(--color-accent);
	color: #fff;
}

/* Hint line under the upload panel ("Limit 10MB" in the reference). */
.deon-apply-form .deon-apply-hint {
	font-size: 10px;
	font-weight: 700;
	letter-spacing: 1px;
	text-transform: uppercase;
	color: var(--color-ink-soft);
	opacity: 0.6;
}

/* Submit — solid dark button, left aligned. */
.deon-apply-form input[type="submit"],
.deon-apply-form button[type="submit"] {
	align-self: flex-start;
	margin-top: 8px;
	padding: 18px 44px;
	border: 0;
	border-radius: 0;
	background: var(--color-dark);
	font-family: var(--font-body);
	font-size: 12px;
	font-weight: 700;
	letter-spacing: 1.2px;
	text-transform: uppercase;
	color: var(--color-on-dark);
	cursor: pointer;
	transition: opacity 0.2s ease;
}
.deon-apply-form input[type="submit"]:hover,
.deon-apply-form button[type="submit"]:hover { opacity: 0.85; }

/* CF7 feedback: spinner, inline validation, response banner. */
.deon-apply-form .wpcf7-spinner { margin: 0 0 0 14px; }
.deon-apply-form .wpcf7-not-valid-tip {
	margin-top: 8px;
	font-size: 11px;
	font-weight: 600;
	letter-spacing: 0.4px;
	text-transform: none;
	color: #c0392b;
}
.deon-apply-form .wpcf7-not-valid { border-bottom-color: #c0392b; }
.deon-apply-form .wpcf7-response-output {
	margin: 8px 0 0;
	padding: 16px 20px;
	border: 1px solid var(--color-border);
	font-size: 13px;
	font-weight: 400;
	letter-spacing: normal;
	text-transform: none;
	color: var(--color-ink-soft);
}
.deon-apply-form form.sent .wpcf7-response-output { border-color: var(--color-accent); }
.deon-apply-form form.invalid .wpcf7-response-output,
.deon-apply-form form.failed .wpcf7-response-output { border-color: #c0392b; }

/* ==========================================================================
   Pagination — ONE control for every paged listing (Project Gallery,
   Knowledge Hub, Press Coverage, Leadership). Client request 2026-08.

   Lives in main.css, not Tailwind, because main.css is the only stylesheet
   loaded on both the Phase 1 pages and the Tailwind Phase 2 pages — and the
   client-side pagers in main.js build these exact class names.

   States: .is-current (active page), .is-disabled (dead arrow, also matched
   on a real [disabled] button so the JS pagers can use either).
   ========================================================================== */
.deon-pager {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 8px;
}

.deon-pager__btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 40px;
	height: 40px;
	padding: 0 10px;
	border: 1px solid var(--color-border);
	background: var(--color-surface);
	font-family: var(--font-body);
	font-size: 13px;
	font-weight: 700;
	line-height: 1;
	letter-spacing: 0.5px;
	color: var(--color-ink);
	text-decoration: none;
	cursor: pointer;
	transition: color 0.2s ease, border-color 0.2s ease, background-color 0.2s ease;
}

.deon-pager__btn:hover,
.deon-pager__btn:focus-visible {
	border-color: var(--color-accent);
	color: var(--color-accent);
}

.deon-pager__btn.is-current,
.deon-pager__btn.is-current:hover {
	background: var(--color-dark);
	border-color: var(--color-dark);
	color: var(--color-on-dark);
	cursor: default;
}

.deon-pager__btn.is-disabled,
.deon-pager__btn[disabled] {
	opacity: 0.35;
	pointer-events: none;
}

.deon-pager__icon {
	width: 15px;
	height: 15px;
	flex-shrink: 0;
}

.deon-pager__gap {
	min-width: 20px;
	text-align: center;
	font-family: var(--font-body);
	font-size: 13px;
	color: var(--color-ink-soft);
}

/* Mobile: numbers stay tappable but the control must not wrap into a block. */
@media (max-width: 480px) {
	.deon-pager { gap: 6px; }
	.deon-pager__btn {
		min-width: 36px;
		height: 36px;
		padding: 0 8px;
		font-size: 12px;
	}
}

/* ==========================================================================
   Page loading — preloader curtain + navigation progress bar
   Markup: header.php. Behaviour: main.js ([data-preloader], [data-nav-progress]).
   Both are display:none until deon_js_flag() puts `.deon-js` on <html>, so a
   JS-less browser is never trapped behind a curtain nothing can dismiss.
   ========================================================================== */

.deon-visually-hidden {
	position: absolute;
	width: 1px;
	height: 1px;
	margin: -1px;
	padding: 0;
	overflow: hidden;
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

/* ---------- Preloader curtain ---------- */
.deon-preloader {
	display: none;
}

.deon-js .deon-preloader {
	display: flex;
	position: fixed;
	inset: 0;
	z-index: 2000; /* above the sticky header and the WhatsApp float */
	align-items: center;
	justify-content: center;
	/* Off-white backdrop, matching the page — curtain logo is the ink variant. */
	background: var(--color-bg);
	opacity: 1;
	visibility: visible;
	transition: opacity 0.45s ease, visibility 0s linear 0s;
}

/* JS adds .is-done on window load; the element is removed from the DOM after
   the fade so it can never intercept a click. */
.deon-js .deon-preloader.is-done {
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	transition: opacity 0.45s ease, visibility 0s linear 0.45s;
}

.deon-preloader__inner {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 22px;
}

.deon-preloader__logo {
	width: 149px;
	height: auto;
	animation: deon-preloader-pulse 1.6s ease-in-out infinite;
}

.deon-preloader__track {
	position: relative;
	display: block;
	width: 160px;
	height: 2px;
	overflow: hidden;
	border-radius: 2px;
	background: var(--color-divider);
}

/* Indeterminate sweep — we have no real progress figure to report. */
.deon-preloader__fill {
	position: absolute;
	inset: 0 auto 0 0;
	width: 40%;
	border-radius: 2px;
	background: var(--color-accent);
	animation: deon-preloader-sweep 1.15s ease-in-out infinite;
}

.deon-preloader.is-done .deon-preloader__fill {
	animation: none;
	width: 100%;
}

@keyframes deon-preloader-sweep {
	0%   { transform: translateX(-110%); }
	100% { transform: translateX(260%); }
}

@keyframes deon-preloader-pulse {
	0%, 100% { opacity: 1; }
	50%      { opacity: 0.55; }
}

/* ---------- Navigation progress bar ---------- */
.deon-progress {
	display: none;
}

.deon-js .deon-progress {
	display: block;
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	height: 3px;
	z-index: 2001; /* above the curtain — it also runs on the way out */
	opacity: 0;
	pointer-events: none;
	transition: opacity 0.25s ease;
}

.deon-js .deon-progress.is-active {
	opacity: 1;
}

.deon-progress__bar {
	display: block;
	width: 100%;
	height: 100%;
	transform: scaleX(0);
	transform-origin: 0 50%;
	background: var(--color-accent);
	transition: transform 0.2s ease;
}

/* Reduced motion: keep the states, drop the looping animation. */
@media (prefers-reduced-motion: reduce) {
	.deon-preloader__logo,
	.deon-preloader__fill {
		animation: none;
	}
	.deon-preloader__fill {
		width: 100%;
	}
	.deon-js .deon-preloader,
	.deon-js .deon-preloader.is-done {
		transition-duration: 0.01ms;
	}
}
