/* ==========================================================================
   ecoven — section layouts
   One block per flexible-content layout, in the same order as the builder.
   ========================================================================== */

/* ======================================================== ① Hero slider == */

.ec-hero {
	position: relative;
	overflow: hidden;
	background: var(--ec-ink-2);
	color: #fff;
	isolation: isolate;
}

.ec-hero--tall { min-height: min(945px, 82vh); }
.ec-hero--full { min-height: calc(100svh - var(--ec-header-h)); }
.ec-hero--mid  { min-height: min(640px, 66vh); }

.ec-hero__stage {
	position: absolute;
	inset: 0;
	z-index: 0;
}

.ec-hero__slide {
	position: absolute;
	inset: 0;
	opacity: 0;
	visibility: hidden;
	transition: opacity 1100ms var(--ec-ease), visibility 1100ms;
}

.ec-hero__slide.is-active {
	opacity: 1;
	visibility: visible;
}

.ec-hero__media {
	position: absolute;
	inset: -6%;
	background-size: cover;
	background-position: center;
	transform: scale(1.02) translate3d(0, var(--par, 0px), 0);
	will-change: transform;
}

.ec-hero__slide.is-active .ec-hero__media.has-kb {
	animation: ec-kenburns 12s linear forwards;
}

@keyframes ec-kenburns {
	from { transform: scale(1.02) translate3d(0, var(--par, 0px), 0); }
	to   { transform: scale(1.13) translate3d(0, var(--par, 0px), 0); }
}

.ec-hero__scrim {
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgb(26 26 26 / 0.34) 0%, rgb(26 26 26 / 0.30) 55%, rgb(1 15 46 / 0.62) 100%);
}

.ec-hero__inner {
	position: relative;
	z-index: 2;
	display: flex;
	flex-direction: column;
	justify-content: center;
	min-height: inherit;
	padding-block: clamp(4rem, 3rem + 8vw, 9rem) clamp(5rem, 3rem + 8vw, 8rem);
}

.ec-hero__content { max-width: 900px; }

.ec-hero__title {
	margin: 0 0 1.25rem;
	color: #fff;
	font-size: var(--ec-fs-hero);
	line-height: 1.03;
	text-transform: uppercase;
	text-wrap: balance;
}

.ec-hero__text {
	margin: 0;
	max-width: 663px;
	font-size: var(--ec-fs-body);
	line-height: 1.25;
	color: rgb(255 255 255 / 0.94);
}

.ec-hero__actions {
	display: flex;
	align-items: center;
	gap: clamp(1.25rem, 0.6rem + 2vw, 2.6rem);
	flex-wrap: wrap;
	margin-top: clamp(1.75rem, 1rem + 2.4vw, 2.75rem);
}

.ec-hero__phone {
	color: #fff;
	font-size: clamp(1.05rem, 0.85rem + 0.9vw, 1.5rem);
	font-weight: 500;
	text-decoration: none;
}

.ec-hero__phone:hover { color: var(--ec-amber); }

/*
 * Arrow placement.
 *
 * The Figma puts the two arrows in the page gutters, level with the
 * headline. That only works while the gutters are wide enough to hold a
 * 48px button clear of the text — roughly 1600px up. Below that the pair
 * moves to the bottom right, above the progress dots, where it can never
 * collide with the copy.
 */
.ec-hero__arrows {
	position: absolute;
	z-index: 3;
	right: clamp(1rem, 3vw, 3.5rem);
	bottom: clamp(3.5rem, 6vw, 5.5rem);
	display: flex;
	gap: 12px;
	pointer-events: none;
}

.ec-hero__arrows .ec-iconbtn { pointer-events: auto; }

@media (min-width: 1600px) {
	.ec-hero__arrows {
		top: 50%;
		bottom: auto;
		left: 50%;
		right: auto;
		width: calc(var(--ec-container) + 200px);
		max-width: calc(100% - 2rem);
		justify-content: space-between;
		transform: translate(-50%, -50%);
	}
}

.ec-hero__dots {
	position: absolute;
	z-index: 3;
	bottom: clamp(1.5rem, 3vw, 2.75rem);
	left: 50%;
	transform: translateX(-50%);
	display: flex;
	gap: 10px;
	width: min(100% - 2rem, var(--ec-container));
	justify-content: flex-start;
}

.ec-dot {
	position: relative;
	flex: 1 1 0;
	height: 4px;
	max-width: 180px;
	background: rgb(255 255 255 / 0.28);
	border: 0;
	padding: 0;
	cursor: pointer;
	overflow: hidden;
}

.ec-dot::after {
	content: "";
	position: absolute;
	inset: 0;
	background: #fff;
	transform: scaleX(0);
	transform-origin: 0 50%;
}

.ec-dot.is-active::after {
	animation: ec-dotfill var(--dur, 6s) linear forwards;
}

.ec-dot.is-active.is-paused::after { animation-play-state: paused; }

@keyframes ec-dotfill {
	to { transform: scaleX(1); }
}

@media (max-width: 720px) {
	.ec-hero__arrows { display: none; }
}

/* ======================================================== ② Page banner == */

.ec-pagehero {
	position: relative;
	display: grid;
	align-items: center;
	overflow: hidden;
	background: var(--ec-blue);
	color: #fff;
	isolation: isolate;
}

.ec-pagehero--short { min-height: 340px; }
.ec-pagehero--mid   { min-height: min(560px, 58vh); }
.ec-pagehero--tall  { min-height: min(760px, 72vh); }

.ec-pagehero__media {
	position: absolute;
	inset: -8% 0;
	background-size: cover;
	background-position: center;
	transform: translate3d(0, var(--par, 0px), 0) scale(1.06);
	will-change: transform;
}

.ec-pagehero__scrim {
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgb(1 15 46 / 0.42), rgb(1 15 46 / 0.68));
}

.ec-pagehero__inner {
	position: relative;
	z-index: 2;
	padding-block: clamp(4.5rem, 3rem + 8vw, 8rem);
}

.ec-pagehero--center .ec-pagehero__inner { text-align: center; }

.ec-pagehero__title {
	margin: 0;
	color: #fff;
	font-size: var(--ec-fs-hero);
	line-height: 1;
	text-transform: uppercase;
}

.ec-pagehero__sub {
	margin: 1rem 0 0;
	max-width: 60ch;
	font-size: var(--ec-fs-body);
	color: rgb(255 255 255 / 0.92);
}

.ec-pagehero--center .ec-pagehero__sub { margin-inline: auto; }

.ec-pagehero .ec-crumbs { margin-bottom: 1.5rem; color: rgb(255 255 255 / 0.8); }

/* ============================================================= ③ Intro == */

.ec-intro__content {
	max-width: 1102px;
	margin-inline: auto;
	font-size: var(--ec-fs-lead);
	line-height: 1.18;
}

.ec-intro--center { text-align: center; }

.ec-intro--center .ec-intro__content { text-align: center; }

.ec-intro__content p { margin-bottom: 1.2em; }

.ec-intro__content strong { color: var(--ec-black); }

/* ==================================================== ④ Photo collage === */

.ec-collage {
	position: relative;
	overflow: hidden;
	padding-block: clamp(2rem, 1.4rem + 3vw, 4rem);
}

.ec-collage__track {
	display: flex;
	gap: clamp(1rem, 2vw, 2.5rem);
	width: max-content;
	align-items: center;
	will-change: transform;
}

.ec-collage--slow .ec-collage__track { animation: ec-marquee 68s linear infinite; }
.ec-collage--medium .ec-collage__track { animation: ec-marquee 42s linear infinite; }
.ec-collage--still .ec-collage__track { animation: none; }

.ec-collage:hover .ec-collage__track { animation-play-state: paused; }

@keyframes ec-marquee {
	from { transform: translateX(0); }
	to   { transform: translateX(-50%); }
}

.ec-collage__item {
	flex: 0 0 auto;
	width: clamp(180px, 18vw, 330px);
	aspect-ratio: 5 / 3;
	overflow: hidden;
	filter: saturate(0.94);
	transition: filter var(--ec-dur) var(--ec-ease), transform var(--ec-dur) var(--ec-ease);
}

/* Alternating vertical offsets recreate the scattered look of the Figma. */
.ec-collage__item:nth-child(3n)   { transform: translateY(-22px) rotate(-1.2deg); }
.ec-collage__item:nth-child(3n+1) { transform: translateY(16px) rotate(0.9deg); }
.ec-collage__item:nth-child(4n)   { width: clamp(140px, 13vw, 240px); }

.ec-collage__item:hover {
	filter: saturate(1.1);
	transform: translateY(-6px) scale(1.03);
	z-index: 2;
}

.ec-collage__fade {
	position: absolute;
	top: 0;
	bottom: 0;
	width: clamp(60px, 10vw, 220px);
	z-index: 2;
	pointer-events: none;
}

.ec-collage__fade--l { left: 0; background: linear-gradient(90deg, var(--ec-bg), transparent); }
.ec-collage__fade--r { right: 0; background: linear-gradient(270deg, var(--ec-bg), transparent); }

/* ============================================================= ⑤ Stats == */

.ec-stats__grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: 20px;
}

/* ========================================================== ⑥ Features == */

.ec-features__rule {
	height: 1px;
	background: rgb(242 251 255 / 0.4);
	margin-bottom: clamp(2.5rem, 2rem + 3vw, 5rem);
	transform: scaleX(0);
	transform-origin: 50% 50%;
	transition: transform 1400ms var(--ec-ease);
}

.ec-features__rule.is-revealed { transform: scaleX(1); }

.ec-features__grid {
	display: grid;
	gap: clamp(2rem, 1.4rem + 2.4vw, 3rem);
	justify-items: center;
	align-items: start;
}

.ec-features__grid > * { max-width: 405px; }

/* ===================================================== ⑦ Services grid == */

.ec-svc__card {
	display: flex;
	flex-direction: column;
	gap: 1.5rem;
	height: 100%;
}

.ec-svc__card .ec-media { aspect-ratio: 464 / 280; }

.ec-svc__title {
	margin: 0;
	color: var(--ec-heading);
	font-size: var(--ec-fs-h4);
}

.ec-svc__title a,
.ec-prow__title a,
.ec-tile-wrap a {
	text-decoration: none;
	background-image: linear-gradient(currentColor, currentColor);
	background-size: 0% 1.5px;
	background-position: 0 100%;
	background-repeat: no-repeat;
	transition: background-size var(--ec-dur) var(--ec-ease);
}

.ec-svc__card:hover .ec-svc__title a,
.ec-prow:hover .ec-prow__title a {
	background-size: 100% 1.5px;
}

.ec-svc__text {
	margin: 0;
	color: var(--ec-fg);
	line-height: 1.22;
	display: -webkit-box;
	-webkit-line-clamp: 4;
	-webkit-box-orient: vertical;
	overflow: hidden;
}

.ec-svc__foot { margin-top: auto; }

/* ========================================================== ⑧ Projects == */

.ec-projects__grid {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 26px;
}

@media (max-width: 1080px) { .ec-projects__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 620px)  { .ec-projects__grid { grid-template-columns: minmax(0, 1fr); } }

.ec-tile-wrap {
	margin: 0;
	display: grid;
	gap: 0;
}

.ec-tile {
	position: relative;
	display: block;
	overflow: hidden;
	text-decoration: none;
	color: inherit;
	cursor: pointer;
}

.ec-tile__media {
	position: relative;
	display: block;
	width: 100%;
	padding: 0;
	border: 0;
	aspect-ratio: 464 / 320;
	overflow: hidden;
	background: var(--ec-ice);
	cursor: pointer;
}

.ec-tile__media img,
.ec-tile__media .ec-img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 1100ms var(--ec-ease), filter 700ms var(--ec-ease);
}

.ec-tile:hover .ec-tile__media img,
.ec-tile:hover .ec-tile__media .ec-img,
.ec-tile__media:hover img,
.ec-tile__media:hover .ec-img { transform: scale(1.08); }

/* A blue veil that lifts from the bottom on hover. */
.ec-tile__veil {
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, transparent 40%, rgb(1 30 124 / 0.78));
	opacity: 0;
	transform: translateY(24%);
	transition: opacity var(--ec-dur) var(--ec-ease), transform var(--ec-dur-lg) var(--ec-ease);
}

.ec-tile:hover .ec-tile__veil,
.ec-tile__media:hover .ec-tile__veil { opacity: 1; transform: none; }

.ec-tile__zoom {
	position: absolute;
	right: 16px;
	bottom: 16px;
	display: grid;
	place-items: center;
	width: 42px;
	height: 42px;
	border-radius: var(--ec-radius-round);
	background: #fff;
	color: var(--ec-blue);
	opacity: 0;
	transform: scale(0.6) rotate(-30deg);
	transition: opacity var(--ec-dur) var(--ec-ease), transform var(--ec-dur) var(--ec-ease-spring);
}

.ec-tile:hover .ec-tile__zoom,
.ec-tile__media:hover .ec-tile__zoom { opacity: 1; transform: none; }

.ec-tile__caption {
	margin: 1.1rem 0 0;
	color: var(--ec-black);
	font-size: var(--ec-fs-body);
	font-weight: 700;
}

.ec-tile__meta {
	margin: 0.2rem 0 0;
	color: var(--ec-muted);
	font-size: var(--ec-fs-xs);
}

.ec-projects__foot {
	display: flex;
	justify-content: center;
	margin-top: clamp(2rem, 1.4rem + 2vw, 3.25rem);
}

/* ====================================================== ⑨ Testimonials == */

.ec-test__tabs {
	display: flex;
	justify-content: center;
	margin-bottom: clamp(2rem, 1.4rem + 2.4vw, 3.5rem);
}

.ec-test__split {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 540px);
	gap: clamp(2rem, 1.4rem + 3.6vw, 4.5rem);
	align-items: center;
}

@media (max-width: 1024px) {
	.ec-test__split { grid-template-columns: minmax(0, 1fr); }
}

.ec-quote {
	display: grid;
	gap: clamp(1.25rem, 1rem + 1.6vw, 2.25rem);
	min-height: 428px;
	align-content: center;
}

.ec-quote__mark {
	margin: 0;
	font-size: 5rem;
	line-height: 0.3;
	color: var(--ec-blue);
	font-weight: 700;
}

.ec-quote__body {
	margin: 0;
	font-size: clamp(1.15rem, 1rem + 0.7vw, 1.5rem);
	font-weight: 500;
	line-height: 1.5;
	color: var(--ec-black);
}

.ec-quote__author {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1.5rem;
	flex-wrap: wrap;
}

.ec-quote__profile {
	display: flex;
	align-items: center;
	gap: 18px;
}

.ec-avatar {
	width: 63px;
	height: 63px;
	border-radius: var(--ec-radius-round);
	overflow: hidden;
	flex: 0 0 auto;
	background: var(--ec-ice);
}

.ec-avatar img { width: 100%; height: 100%; object-fit: cover; }

.ec-avatar--sm { width: 50px; height: 50px; }

.ec-quote__name {
	margin: 0;
	color: var(--ec-blue);
	font-size: 1.125rem;
	font-weight: 700;
}

.ec-quote__role {
	margin: 0;
	color: var(--ec-slate);
	font-size: 0.985rem;
}

.ec-quote__rating {
	display: grid;
	gap: 9px;
	justify-items: end;
}

.ec-quote__badge {
	margin: 0;
	color: var(--ec-blue);
	font-size: var(--ec-fs-xs);
	font-weight: 600;
	letter-spacing: 0.02em;
}

.ec-quote__nav {
	display: flex;
	align-items: center;
	gap: 18px;
}

.ec-quote__count {
	color: var(--ec-slate);
	font-size: 0.985rem;
	font-weight: 500;
	font-variant-numeric: tabular-nums;
}

.ec-videocard {
	position: relative;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	min-height: 428px;
	padding: 27px;
	overflow: hidden;
	color: #fff;
	text-decoration: none;
}

.ec-videocard__media {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	transition: transform 1400ms var(--ec-ease);
}

.ec-videocard:hover .ec-videocard__media { transform: scale(1.07); }

.ec-videocard::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgb(0 0 0 / 0.18), rgb(0 0 0 / 0.46));
}

.ec-videocard__info {
	position: relative;
	z-index: 2;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	width: 100%;
}

.ec-videocard__text { display: grid; gap: 4px; }

.ec-videocard__title { display: block; margin: 0; color: #fff; font-size: 1.25rem; font-weight: 700; line-height: 1.2; }
.ec-videocard__meta { display: block; margin: 0; font-size: 0.9rem; opacity: 0.8; }

.ec-videocard__play {
	position: relative;
	display: grid;
	place-items: center;
	width: 63px;
	height: 63px;
	border-radius: var(--ec-radius-round);
	background: #fff;
	color: var(--ec-blue);
	flex: 0 0 auto;
	transition: transform var(--ec-dur) var(--ec-ease-spring), background-color var(--ec-dur-sm) var(--ec-ease);
}

.ec-videocard__play::before {
	content: "";
	position: absolute;
	width: 63px;
	height: 63px;
	border-radius: var(--ec-radius-round);
	border: 2px solid rgb(255 255 255 / 0.6);
	animation: ec-ring 2.6s var(--ec-ease-in-out) infinite;
}

@keyframes ec-ring {
	0%   { transform: scale(1); opacity: 0.8; }
	70%  { transform: scale(1.6); opacity: 0; }
	100% { transform: scale(1.6); opacity: 0; }
}

.ec-videocard:hover .ec-videocard__play {
	transform: scale(1.12);
	background: var(--ec-amber);
}

.ec-test__cards {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 27px;
	margin-top: clamp(2.5rem, 2rem + 3vw, 4.5rem);
}

@media (max-width: 980px) { .ec-test__cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 620px) { .ec-test__cards { grid-template-columns: minmax(0, 1fr); } }

.ec-tcard {
	display: grid;
	gap: 27px;
	align-content: start;
	padding: clamp(1.5rem, 1.2rem + 1.4vw, 2.25rem);
	background: var(--ec-ice);
	transition: transform var(--ec-dur) var(--ec-ease), box-shadow var(--ec-dur) var(--ec-ease);
}

.ec-tcard:hover {
	transform: translateY(-6px);
	box-shadow: var(--ec-shadow);
}

.ec-tcard__top {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1rem;
	flex-wrap: wrap;
}

.ec-tcard__profile { display: flex; align-items: center; gap: 13px; }
.ec-tcard__name { margin: 0; color: var(--ec-ink); font-size: 1.05rem; font-weight: 700; }
.ec-tcard__role { margin: 0; color: var(--ec-slate); font-size: 0.92rem; }
.ec-tcard__body { margin: 0; color: var(--ec-ink); font-size: 1.05rem; line-height: 1.5; }

/* =============================================================== ⑩ FAQ == */

.ec-faq__inner { max-width: 1200px; margin-inline: auto; }

/* ======================================================== ⑪ CTA banner == */

.ec-ctabanner {
	position: relative;
	display: grid;
	align-items: center;
	min-height: clamp(420px, 40vw, 640px);
	overflow: hidden;
	color: #fff;
	isolation: isolate;
	background: var(--ec-ink-2);
}

.ec-ctabanner__media {
	position: absolute;
	inset: -10% 0;
	background-size: cover;
	background-position: center;
	transform: translate3d(0, var(--par, 0px), 0);
	will-change: transform;
}

.ec-ctabanner__scrim {
	position: absolute;
	inset: 0;
	background: linear-gradient(90deg, rgb(10 25 48 / 0.55), rgb(10 25 48 / 0.28));
}

.ec-ctabanner__inner {
	position: relative;
	z-index: 2;
	display: grid;
	gap: 1.5rem;
	justify-items: start;
	max-width: 920px;
	margin-left: auto;
	padding-block: clamp(3rem, 2rem + 5vw, 6rem);
}

.ec-ctabanner__title {
	margin: 0;
	color: #fff;
	font-size: var(--ec-fs-h2);
	line-height: 1;
	text-transform: uppercase;
}

.ec-ctabanner__text {
	margin: 0;
	max-width: 600px;
	font-size: var(--ec-fs-lead);
}

/* ========================================================= ⑫ CTA split == */

.ec-split {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: clamp(2rem, 1.4rem + 4vw, 5rem);
	align-items: center;
}

.ec-split--reverse .ec-split__media { order: -1; }

@media (max-width: 900px) {
	.ec-split { grid-template-columns: minmax(0, 1fr); }
	.ec-split--reverse .ec-split__media { order: 0; }
}

.ec-split__media {
	position: relative;
	aspect-ratio: 4 / 3;
	overflow: hidden;
}

.ec-split__media img { width: 100%; height: 100%; object-fit: cover; }

.ec-split__body { display: grid; gap: 1.25rem; justify-items: start; }

/* ============================================================= ⑬ Posts == */

.ec-posts__grid {
	display: grid;
	gap: 30px;
}

.ec-posts__foot {
	display: flex;
	justify-content: center;
	margin-top: clamp(2rem, 1.4rem + 2.4vw, 3.5rem);
}

.ec-pcard__media { aspect-ratio: 464 / 254; }
.ec-pcard__title { font-size: var(--ec-fs-h4); line-height: 1.3; }
.ec-pcard__excerpt { line-height: 1.5; }

/* =========================================================== ⑭ Contact == */

.ec-contact__grid {
	display: grid;
	grid-template-columns: minmax(0, 560px) minmax(0, 822px);
	gap: clamp(2rem, 1.4rem + 4vw, 5rem);
	align-items: start;
}

@media (max-width: 1100px) {
	.ec-contact__grid { grid-template-columns: minmax(0, 1fr); }
}

.ec-contact__title {
	margin: 0 0 1.25rem;
	font-size: var(--ec-fs-h1);
	line-height: 1.1;
}

.ec-contact__body { font-size: 1rem; line-height: 1.6; }

.ec-contact__cards {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 16px;
	margin-top: 2.5rem;
}

@media (max-width: 520px) {
	.ec-contact__cards { grid-template-columns: minmax(0, 1fr); }
}

.ec-ccard {
	display: grid;
	gap: 8px;
	padding: 16px;
	border: 3px solid var(--ec-blue);
	color: var(--ec-blue);
	text-decoration: none;
	transition: background-color var(--ec-dur-sm) var(--ec-ease), color var(--ec-dur-sm) var(--ec-ease), transform var(--ec-dur-sm) var(--ec-ease);
}

.ec-ccard:hover {
	background: var(--ec-blue);
	color: #fff;
	transform: translateY(-4px);
}

.ec-ccard__label {
	display: flex;
	align-items: center;
	gap: 8px;
	font-size: var(--ec-fs-micro);
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}

.ec-ccard__value {
	margin: 0;
	font-size: var(--ec-fs-xs);
	font-weight: 600;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

/* =========================================================== ⑮ Process == */

.ec-process {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: clamp(1.5rem, 1rem + 2vw, 2.5rem);
	counter-reset: step;
}

@media (max-width: 1000px) { .ec-process { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px)  { .ec-process { grid-template-columns: minmax(0, 1fr); } }

.ec-step {
	position: relative;
	display: grid;
	gap: 0.75rem;
	padding-top: 2.5rem;
}

.ec-step::before {
	content: "";
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	height: 2px;
	background: var(--ec-blue);
	transform: scaleX(0);
	transform-origin: 0 50%;
	transition: transform 900ms var(--ec-ease);
	transition-delay: calc(var(--i, 0) * 140ms);
}

.ec-step.is-revealed::before { transform: scaleX(1); }

.ec-step__num {
	color: var(--ec-blue);
	font-size: 1rem;
	font-weight: 700;
	letter-spacing: 0.08em;
	font-variant-numeric: tabular-nums;
}

.ec-step__title {
	margin: 0;
	font-size: var(--ec-fs-h4);
	color: var(--ec-heading);
}

.ec-step__text { margin: 0; color: var(--ec-fg); line-height: 1.5; }

/* ============================================================ ⑯ Values == */

.ec-values {
	display: grid;
	grid-template-columns: minmax(0, 420px) minmax(0, 1fr);
	gap: clamp(2rem, 1.4rem + 4vw, 5rem);
	align-items: start;
}

@media (max-width: 980px) { .ec-values { grid-template-columns: minmax(0, 1fr); } }

.ec-values__lead {
	display: grid;
	gap: 1rem;
	justify-items: start;
	position: sticky;
	top: calc(var(--ec-header-nav-h) + var(--ec-adminbar) + 32px);
}

@media (max-width: 980px) { .ec-values__lead { position: static; } }

.ec-values__icon {
	display: grid;
	place-items: center;
	width: 56px;
	height: 56px;
	border-radius: var(--ec-radius-round);
	background: var(--ec-blue);
	color: #fff;
}

.ec-values__grid {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: clamp(1.5rem, 1rem + 2vw, 2.5rem);
}

@media (max-width: 640px) { .ec-values__grid { grid-template-columns: minmax(0, 1fr); } }

.ec-value {
	display: grid;
	gap: 0.6rem;
	padding: clamp(1.25rem, 1rem + 1vw, 1.75rem);
	border-left: 2px solid var(--ec-border);
	transition: border-color var(--ec-dur) var(--ec-ease), background-color var(--ec-dur) var(--ec-ease), transform var(--ec-dur) var(--ec-ease);
}

.ec-value:hover {
	border-color: var(--ec-blue);
	background: color-mix(in srgb, var(--ec-ice) 60%, transparent);
	transform: translateX(6px);
}

.ec-value__title { margin: 0; font-size: 1.15rem; color: var(--ec-heading); }
.ec-value__text { margin: 0; line-height: 1.5; }

/* ====================================================== ⑰ Product list == */

.ec-plist { display: grid; gap: clamp(1.5rem, 1rem + 2vw, 2.5rem); }

.ec-prow {
	display: grid;
	grid-template-columns: minmax(0, 420px) minmax(0, 1fr);
	gap: clamp(1.5rem, 1rem + 3vw, 3rem);
	padding: clamp(1.25rem, 1rem + 1.5vw, 2rem);
	border: 1px solid var(--ec-line);
	background: #fff;
	transition: box-shadow var(--ec-dur) var(--ec-ease), border-color var(--ec-dur) var(--ec-ease), transform var(--ec-dur) var(--ec-ease);
}

.ec-prow:hover {
	border-color: color-mix(in srgb, var(--ec-blue) 35%, transparent);
	box-shadow: var(--ec-shadow);
	transform: translateY(-4px);
}

@media (max-width: 860px) { .ec-prow { grid-template-columns: minmax(0, 1fr); } }

.ec-prow__media {
	position: relative;
	aspect-ratio: 4 / 5;
	overflow: hidden;
	background: var(--ec-ice);
}

.ec-prow__media img { width: 100%; height: 100%; object-fit: contain; transition: transform 900ms var(--ec-ease); }
.ec-prow:hover .ec-prow__media img { transform: scale(1.05); }

.ec-prow__body { display: grid; gap: 1.25rem; align-content: start; }

.ec-prow__title { margin: 0; font-size: var(--ec-fs-h3); }

.ec-prow__title a { text-decoration: none; }

.ec-prow__price {
	margin: 0;
	color: var(--ec-blue);
	font-size: 1.25rem;
	font-weight: 700;
}

.ec-specs { width: 100%; border-collapse: collapse; }

.ec-specs tr { border-bottom: 1px solid var(--ec-line); }

.ec-specs th,
.ec-specs td {
	padding: 0.7rem 0;
	border: 0;
	font-size: var(--ec-fs-sm);
	vertical-align: middle;
}

.ec-specs th {
	color: var(--ec-slate-2);
	font-weight: 500;
	width: 58%;
}

.ec-specs td {
	color: var(--ec-blue);
	font-weight: 600;
	text-align: right;
}

.ec-specs td .ec-rating { justify-content: flex-end; }

/* ==================================================== Single product ==== */

.ec-product__top {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 520px);
	gap: clamp(2rem, 1.4rem + 4vw, 4.5rem);
	align-items: start;
}

@media (max-width: 1000px) { .ec-product__top { grid-template-columns: minmax(0, 1fr); } }

.ec-product__gallery { display: grid; gap: 1rem; }

.ec-product__stage {
	position: relative;
	aspect-ratio: 1;
	overflow: hidden;
	background: var(--ec-ice);
}

.ec-product__stage img { width: 100%; height: 100%; object-fit: contain; }

.ec-product__thumbs {
	display: flex;
	gap: 12px;
	flex-wrap: wrap;
}

.ec-product__thumb {
	width: 88px;
	height: 88px;
	overflow: hidden;
	border: 2px solid transparent;
	background: var(--ec-ice);
	cursor: pointer;
	padding: 0;
	transition: border-color var(--ec-dur-sm) var(--ec-ease), transform var(--ec-dur-sm) var(--ec-ease);
}

.ec-product__thumb img { width: 100%; height: 100%; object-fit: cover; }
.ec-product__thumb:hover { transform: translateY(-3px); }
.ec-product__thumb.is-active { border-color: var(--ec-blue); }

.ec-product__title { margin: 0 0 0.5rem; font-size: var(--ec-fs-h1); }

.ec-product__highlights {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
	gap: 1rem;
	margin-block: 1.5rem;
}

.ec-hl {
	display: grid;
	gap: 4px;
	padding: 1rem;
	background: var(--ec-ice);
}

.ec-hl__value { color: var(--ec-blue); font-size: 1.5rem; font-weight: 700; line-height: 1; }
.ec-hl__label { color: var(--ec-slate-2); font-size: var(--ec-fs-2xs); line-height: 1.3; }

.ec-product__services {
	display: grid;
	gap: 0.75rem;
	margin-block: 1.5rem;
	padding: 0;
	list-style: none;
}

.ec-product__services li {
	display: flex;
	align-items: center;
	gap: 0.75rem;
	color: var(--ec-ink);
	font-size: var(--ec-fs-sm);
}

.ec-product__services svg { color: var(--ec-blue); flex: 0 0 auto; }

.ec-benefits {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: clamp(1.5rem, 1rem + 2vw, 2.5rem);
}

@media (max-width: 980px) { .ec-benefits { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 600px) { .ec-benefits { grid-template-columns: minmax(0, 1fr); } }

.ec-benefit { display: grid; gap: 0.75rem; }

.ec-benefit__icon {
	display: grid;
	place-items: center;
	width: 48px;
	height: 48px;
	background: var(--ec-blue);
	color: #fff;
	transition: transform var(--ec-dur) var(--ec-ease-spring);
}

.ec-benefit:hover .ec-benefit__icon { transform: rotate(-8deg) scale(1.08); }

.ec-benefit__title { margin: 0; font-size: 1.1rem; text-transform: uppercase; }
.ec-benefit__text { margin: 0; line-height: 1.5; }

.ec-advantages {
	display: grid;
	gap: 0.85rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.ec-advantages li {
	position: relative;
	display: flex;
	gap: 0.75rem;
	align-items: flex-start;
	line-height: 1.5;
}

.ec-advantages svg { color: var(--ec-blue); flex: 0 0 auto; margin-top: 3px; }

.ec-finishes {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
	gap: 1rem;
}

.ec-finish { display: grid; gap: 0.5rem; text-align: center; }

.ec-finish__swatch {
	aspect-ratio: 3 / 4;
	overflow: hidden;
	background: var(--sw, var(--ec-ice));
	transition: transform var(--ec-dur) var(--ec-ease);
}

.ec-finish:hover .ec-finish__swatch { transform: translateY(-5px) scale(1.03); }

.ec-finish__name { font-size: var(--ec-fs-2xs); color: var(--ec-slate-2); }

.ec-pbanner {
	position: relative;
	aspect-ratio: 1440 / 540;
	overflow: hidden;
}

.ec-pbanner img { width: 100%; height: 100%; object-fit: cover; }

.ec-pbanner__point {
	position: absolute;
	left: calc(var(--x, 50) * 1%);
	top: calc(var(--y, 50) * 1%);
	display: flex;
	align-items: center;
	gap: 0.5rem;
	padding: 0.4rem 0.75rem;
	background: rgb(255 255 255 / 0.94);
	color: var(--ec-blue);
	font-size: var(--ec-fs-2xs);
	font-weight: 600;
	white-space: nowrap;
	transform: translate(-50%, -50%) scale(0.8);
	opacity: 0;
	transition: opacity var(--ec-dur) var(--ec-ease), transform var(--ec-dur) var(--ec-ease-spring);
	transition-delay: calc(var(--i, 0) * 160ms);
}

.ec-pbanner.is-revealed .ec-pbanner__point { opacity: 1; transform: translate(-50%, -50%); }

/* ====================================================== Blog article ==== */

.ec-article {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 360px);
	gap: clamp(2rem, 1.4rem + 4vw, 4.5rem);
	align-items: start;
}

@media (max-width: 1000px) { .ec-article { grid-template-columns: minmax(0, 1fr); } }

.ec-article__content {
	font-size: var(--ec-fs-body);
	line-height: 1.7;
	max-width: 78ch;
}

.ec-article__content h2 {
	margin: 2.2em 0 0.6em;
	font-size: clamp(1.4rem, 1.1rem + 1.2vw, 2rem);
}

.ec-article__content h3 { margin: 1.8em 0 0.5em; }

.ec-article__content img { margin-block: 2em; }

.ec-pullquote {
	margin: 2.5em 0;
	padding: 2rem 0 2rem 2rem;
	border-left: 3px solid var(--ec-blue);
	font-size: clamp(1.15rem, 1rem + 0.8vw, 1.5rem);
	line-height: 1.45;
	color: var(--ec-blue);
	font-weight: 500;
}

.ec-pullquote cite {
	display: block;
	margin-top: 1rem;
	font-size: var(--ec-fs-sm);
	font-style: normal;
	letter-spacing: 0.06em;
	text-transform: uppercase;
	color: var(--ec-slate);
}

.ec-aside { display: grid; gap: 1.5rem; position: sticky; top: calc(var(--ec-header-nav-h) + var(--ec-adminbar) + 32px); }

@media (max-width: 1000px) { .ec-aside { position: static; } }

.ec-infocard {
	display: grid;
	gap: 1rem;
	padding: 1.75rem;
	background: var(--ec-ice);
}

.ec-infocard__title {
	margin: 0;
	font-size: 1.05rem;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

.ec-inforow {
	display: grid;
	gap: 2px;
	padding-block: 0.6rem;
	border-bottom: 1px solid rgb(1 30 124 / 0.12);
}

.ec-inforow:last-child { border-bottom: 0; }

.ec-inforow__label { color: var(--ec-slate-2); font-size: var(--ec-fs-2xs); text-transform: uppercase; letter-spacing: 0.05em; }
.ec-inforow__value { color: var(--ec-blue); font-weight: 600; font-size: var(--ec-fs-sm); }

.ec-asidecta {
	display: grid;
	gap: 1rem;
	padding: 1.75rem;
	background: var(--ec-blue);
	color: #fff;
}

.ec-asidecta h3 { color: #fff; font-size: 1.15rem; margin: 0; }
.ec-asidecta p { margin: 0; font-size: var(--ec-fs-sm); opacity: 0.88; }

.ec-toc {
	display: grid;
	gap: 0.5rem;
	padding: 1.5rem;
	border: 1px solid var(--ec-line);
}

.ec-toc__title { font-size: var(--ec-fs-2xs); letter-spacing: 0.08em; text-transform: uppercase; color: var(--ec-slate-2); }

.ec-toc a {
	display: block;
	padding: 0.3rem 0 0.3rem 0.75rem;
	border-left: 2px solid var(--ec-line);
	color: var(--ec-ink);
	font-size: var(--ec-fs-sm);
	text-decoration: none;
	transition: border-color var(--ec-dur-sm) var(--ec-ease), color var(--ec-dur-sm) var(--ec-ease), padding-left var(--ec-dur-sm) var(--ec-ease);
}

.ec-toc a:hover,
.ec-toc a.is-current {
	border-color: var(--ec-blue);
	color: var(--ec-blue);
	padding-left: 1rem;
}

.ec-share { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; margin-top: 2.5rem; }
.ec-share__label { font-size: var(--ec-fs-2xs); text-transform: uppercase; letter-spacing: 0.08em; color: var(--ec-slate-2); }

.ec-share a {
	display: grid;
	place-items: center;
	width: 40px;
	height: 40px;
	border-radius: var(--ec-radius-round);
	border: 1px solid var(--ec-line);
	color: var(--ec-blue);
	transition: background-color var(--ec-dur-sm) var(--ec-ease), color var(--ec-dur-sm) var(--ec-ease), transform var(--ec-dur-sm) var(--ec-ease-spring);
}

.ec-share a:hover { background: var(--ec-blue); color: #fff; transform: translateY(-3px); }

.ec-convbar {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 1.5rem;
	flex-wrap: wrap;
	padding: clamp(1.5rem, 1.2rem + 1.6vw, 2.25rem);
	background: var(--ec-blue);
	color: #fff;
	margin-top: clamp(2.5rem, 2rem + 3vw, 4rem);
}

.ec-convbar h3 { margin: 0; color: #fff; font-size: clamp(1.15rem, 1rem + 0.8vw, 1.5rem); }

/* ============================================================ 404/search */

.ec-empty {
	display: grid;
	gap: 1.25rem;
	justify-items: center;
	text-align: center;
	padding-block: clamp(4rem, 3rem + 6vw, 8rem);
}

.ec-empty__code {
	font-size: clamp(4rem, 2rem + 12vw, 10rem);
	font-weight: 700;
	line-height: 0.9;
	color: var(--ec-ice);
	-webkit-text-stroke: 2px var(--ec-blue);
}

.ec-searchform {
	display: flex;
	gap: 0.5rem;
	width: min(100%, 480px);
}

.ec-searchform input {
	flex: 1;
	height: 48px;
	padding: 0 1rem;
	border: 1px solid var(--ec-line);
}
