/* =========================================================
   IRC ENGINEERING SERVICES — ported from the agency HTML demo
   (https://omlogic.in/demo/irc-engineering-services/css/style.css)
   ========================================================= */

:root {
	--red: #DE0011;
	--red-dark: #B5000E;
	--ink: #1C1C1C;
	--gray-text: #666666;
	--gray-mid: #8A8A8A;
	--light-bg: #F5F6F8;
	--gray-bg: #EFEFEF;
	--yellow-badge: #FFDAA3;
	--dark: #000000;
	--border-soft: #E3E3E3;
	--font-head: 'Inter', sans-serif;
	--font-body: 'Inter', sans-serif;
	--radius-lg: 16px;
	--radius-md: 10px;
	--page-hero-h: 260px; /* inner-page banner height — ONE value for every page (services + About); 260px = the services banner's original height */
}

/* Remove Astra's default page-content gap above the Elementor-built front page, and
   above every other full-bleed "rich design" page (Services, service landing pages, ...)
   whose own hero shortcode replaces Astra's title bar — see irc_is_full_bleed_page(). */
.home #primary, .home #main, .home .ast-container,
.irc-full-bleed #primary, .irc-full-bleed #main, .irc-full-bleed .ast-container { padding-top: 0 !important; margin-top: 0 !important; }
.home .site-content, .irc-full-bleed .site-content { padding-top: 0 !important; }

/* `overflow-x: clip` kills sideways scrolling WITHOUT creating a scroll container, so
   position:sticky (the header) keeps working — `overflow:hidden` on body would break it.
   Needed because Bootstrap's .row negative-margin gutters and Owl Carousel's internal
   (intentionally oversized) stage both bleed past the viewport edge on narrow screens. */
html { max-width: 100%; overflow-x: clip; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
/* Overrides Astra's own Customizer typography setting, which otherwise controls body text
   (nothing in this file was actually applying --font-body to anything before this). */
body { max-width: 100%; overflow-x: hidden; overflow-x: clip; font-family: var(--font-body); }
/* Elementor's global kit CSS sets its own explicit font-family directly on
   .elementor-heading-title (falling back to plain "Sans-serif" since the kit's own
   --e-global-typography-primary-font-family variable is never actually defined) — a
   direct declaration on the element beats the inherited value from body regardless of
   specificity, so every converted heading was silently rendering in the browser's
   default sans-serif instead of Inter. Forcing it directly, site-wide. */
.elementor-heading-title { font-family: var(--font-head) !important; }

/* h3/h4/h5 deliberately excluded: they're reused inside components that need a
   non-default color (white service/blog titles on dark overlays, white footer
   headings on black, etc.) and must be set explicitly per-component instead of
   via this blanket rule — otherwise this !important wins ties against
   equally-specific component rules by source order, which is exactly the bug
   that hit service-card titles and (again) the footer headings. */
body.home h1, body.home h2, body.home .brand-text {
	font-family: var(--font-head);
	color: var(--ink) !important;
	font-weight: 700;
	letter-spacing: -0.01em;
}

/* Same heading treatment as the home page (font, weight, tracking, ink color), extended to
   every other "rich design" page (Services, service landing pages, ...) via the shared
   .irc-full-bleed body class — home itself is untouched, still governed solely by the rule
   above. Deliberately NOT !important (unlike the home rule): component-level overrides for
   headings on colored backgrounds (.svc-section--dark .section-title, .svc-section--brand
   .section-title, .page-hero-title) use 2+ classes, so they still win on real specificity
   without needing an !important arms race — see the history of that bug recurring on this site. */
.irc-full-bleed h1, .irc-full-bleed h2 {
	font-family: var(--font-head);
	color: var(--ink);
	font-weight: 700;
	letter-spacing: -0.01em;
}
/* h3/h4 too (card titles etc.) — placed here at the top of the file, same as the rule
   above, so every later component-specific color (dark sections, red credential band,
   white service-card text, ...) naturally wins on source order without an !important
   fight, since those all come further down this stylesheet. */
.irc-full-bleed h3, .irc-full-bleed h4 {
	font-family: var(--font-head);
	color: var(--ink);
}

.owl-carousel .owl-nav button.owl-next, .owl-carousel .owl-nav button.owl-prev, .owl-carousel button.owl-dot {
    border: #fff solid 1px !important;
}

.eyebrow { display: flex; align-items: center; gap: 0px; text-transform: uppercase; font-size: .9rem; font-weight: 500; letter-spacing: .05em; color: var(--red); margin-bottom: .9rem; }
.eyebrow-light { color: rgba(255,255,255,.9); }
/* !important on font-size/line-height: same Elementor global-default conflict as
   .hero-title — `.elementor-widget-heading h2.elementor-heading-title{line-height:
   1.3em}` has higher specificity (2 classes + element) and loads later. Since
   .section-title is the shared H2 class across every converted section on every
   service page, this one fix corrects all of them at once. */
.section-title { font-size: clamp(1.7rem, 1.2rem + 1.8vw, 2.4rem) !important; line-height: 1.1 !important; margin-bottom: 1.1rem; font-weight: 600; }
/* Native Elementor heading widgets carry .section-title on the WIDGET WRAPPER, not
   the actual <h2 class="elementor-heading-title"> — so the rule above only reaches
   the h2 by inheritance, and Elementor's own global Kit typography sets font-size
   directly on .elementor-heading-title (h2{font-size:1.875rem}), which as a direct
   declaration beats any inherited value regardless of !important on the ancestor.
   Same root cause as the color bugs elsewhere; this targets the h2 directly instead.
   margin-bottom needs the same direct targeting for an even more basic reason:
   margin isn't an inherited CSS property at all, so the wrapper's margin-bottom
   above never reached the h2 to begin with — and Elementor's own Kit CSS sets
   margin:0 directly on .elementor-heading-title, collapsing the gap to the
   widget below it entirely once flex_gap is zeroed on the parent container. */
.section-title .elementor-heading-title { font-size: clamp(1.7rem, 1.2rem + 1.8vw, 2.4rem) !important; line-height: 1.1 !important; margin-bottom: 1.1rem !important; }
.section-text { color: var(--ink); font-size: 1rem; line-height: 1.75; margin-bottom: 1.6rem; }
.link-arrow { color: var(--red); font-weight: 700; font-size: .85rem; text-transform: uppercase; letter-spacing: .06em; display: inline-flex; align-items: center; gap: 6px; transition: color .2s ease; text-decoration: none !important; }
.link-arrow:hover { color: var(--red-dark); }
.link-arrow i { transition: transform .25s ease; }
.link-arrow:hover i { transform: translate(3px, -3px); }

/* ---------- Buttons ---------- */
.btn-red-pill, .btn-light-pill, .btn-outline-pill {
	display: inline-block; padding: .85rem 1.9rem; border-radius: 50px; font-size: .8rem; font-weight: 700;
	text-transform: uppercase; letter-spacing: .06em; border: 2px solid transparent; transition: all .25s ease;
	position: relative; overflow: hidden; text-decoration: none !important;
}
body.home a, body.home a:hover { text-decoration: none !important; }
.btn-red-pill { background: var(--red); color: #fff; border-color: var(--red); }
.btn-red-pill:hover { background: var(--red-dark); border-color: var(--red-dark); color: #fff; }
.btn-light-pill { background: #fff; color: var(--ink); border-color: #fff; }
.btn-light-pill:hover { background: transparent; color: #fff; border-color: rgba(255,255,255,.6); }
.btn-outline-pill { background: transparent; color: #fff; border-color: rgba(255,255,255,.6); }
.btn-outline-pill:hover { background: #fff; color: var(--ink); border-color: #fff; }
.btn-red-pill::before, .btn-light-pill::before, .btn-outline-pill::before {
	content: ""; position: absolute; top: 0; left: -120%; width: 60%; height: 100%;
	background: linear-gradient(120deg, transparent, rgba(255,255,255,.35), transparent);
	transform: skewX(-20deg); transition: left .6s ease; pointer-events: none;
}
.btn-red-pill:hover::before, .btn-light-pill:hover::before, .btn-outline-pill:hover::before { left: 140%; }

/* ---------- Topbar ---------- */
.topbar { background: #fff; color: var(--ink); font-size: .82rem; padding: 8px 0; }
.topbar a { color: var(--ink); }
.topbar a:hover { color: var(--red); }
.topbar-contacts a { margin-right: 6px; }
.topbar-divider { display: inline-block; width: 1px; height: 12px; background: rgb(195 195 195); margin: 0 8px; vertical-align: middle; }
.topbar-social a { margin-left: 13px; font-size: 1rem; }
.topbar-right { display: flex; align-items: center; gap: 22px; }
.topbar-cta.btn-red-pill {
	padding: .38rem .95rem; font-size: .76rem;
	background: #fff; color: var(--red); border-color: var(--red);
}
.topbar-cta.btn-red-pill:hover { background: #fff; color: var(--red-dark); border-color: var(--red-dark); }

/* ---------- Main navbar ---------- */
.main-nav { background: #fff; padding: 14px 0; box-shadow: 0 2px 18px rgba(0,0,0,.06); z-index: 1030; transition: padding .25s ease, box-shadow .25s ease; }
.main-nav.is-scrolled { padding: 8px 0; box-shadow: 0 8px 28px rgba(0,0,0,.12); }
.main-nav.is-scrolled .brand img { height: 36px; }
.brand { display: flex; align-items: center; gap: 12px; }
.brand img { height: 42px; width: auto; max-width: 250px; object-fit: contain; transition: height .25s ease; }
.main-menu { gap: 2px; }
.main-menu .nav-link { color: var(--ink); font-weight: 600; font-size: .95rem; padding: 10px 18px; position: relative; }
/* WP puts current-menu-item/current_page_item on the <li>, not the <a>, so the active
   color has to key off the ancestor — a bare `.nav-link.current-menu-item` never matches. */
.main-menu .nav-link:hover, .main-menu .nav-link.active,
.main-menu li.current-menu-item > .nav-link, .main-menu li.current_page_item > .nav-link,
.main-menu li.current-menu-ancestor > .nav-link, .main-menu li.current-menu-parent > .nav-link,
.main-menu li.current_page_ancestor > .nav-link, .main-menu li.current_page_parent > .nav-link { color: var(--red) !important; }
.nav-actions { gap: 16px; display: flex; align-items: center; }
.nav-actions .btn-red-pill { padding: .6rem 1.5rem; white-space: nowrap; }

/* ---------- Dropdown submenu (e.g. Resources) ---------- */
.main-menu > .menu-item-has-children { position: relative; }
.main-menu .menu-item-has-children .ast-menu-toggle { display: none; }
/* Astra's own theme CSS injects this arrow (absolutely positioned, flush right) only for
   items WordPress itself recognizes as having children (Resources) — not for Services,
   whose "children" only exist via our mega-menu plugin. That mismatch is exactly why the
   two arrows looked inconsistent. Hiding Astra's version and relying solely on our own
   ::after chevron below makes every dropdown trigger behave identically. */
.main-menu .ast-header-navigation-arrow { display: none !important; }

/* Arrow: thin chevron (not Bootstrap's bold triangle) so every dropdown trigger in the
   nav — single-level or the Services mega menu — matches the same light, modern look. */
.main-menu .dropdown-toggle::after {
	display: inline-block; content: ""; width: 7px; height: 7px; margin-left: 6px; margin-bottom: 1px;
	vertical-align: middle; border: 0; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor;
	color: var(--gray-mid, #8a8a8a); transform: rotate(45deg); transition: transform .25s ease, color .2s ease;
}
.main-menu > .menu-item-has-children:hover > .dropdown-toggle::after,
.main-menu > .menu-item-has-children:focus-within > .dropdown-toggle::after,
.mega-dropdown:hover > .dropdown-toggle::after,
.mega-dropdown:focus-within > .dropdown-toggle::after,
.mega-dropdown.open > .dropdown-toggle::after {
	transform: rotate(225deg); color: var(--red);
}
/* Nested items (e.g. Resources > Insights > Test) aren't independently toggled — see below — so they get no arrow. */
.main-menu .sub-menu .dropdown-toggle::after { display: none; }

.main-menu > .menu-item-has-children > .sub-menu {
	list-style: none; margin: 10px 0 0; padding: 10px; position: absolute; top: 100%; left: 0;
	min-width: 210px; background: #fff; border-radius: var(--radius-md, 12px);
	box-shadow: 0 20px 45px rgba(0,0,0,.16); border: 1px solid var(--border-soft, #eee);
	opacity: 0; visibility: hidden; transform: translateY(10px);
	transition: opacity .25s ease, transform .25s ease, visibility .25s ease; z-index: 1050;
}
/* `visibility` (not pointer-events) gates interactivity here: with a transition on visibility,
   the browser keeps it "visible" (hoverable) through the whole close animation and only flips
   to hidden at the very end — that's what lets the mouse travel Resources link -> gap -> panel
   without :hover dropping mid-transit and permanently locking the panel out via pointer-events. */
.main-menu > .menu-item-has-children > .sub-menu::before { content: ""; position: absolute; left: 0; right: 0; top: -10px; height: 10px; }
.main-menu > .menu-item-has-children:hover > .sub-menu,
.main-menu > .menu-item-has-children:focus-within > .sub-menu {
	opacity: 1; visibility: visible; transform: translateY(0);
}
/* See site.js suppressHoverBriefly(): the sticky header compacting on scroll shifts this
   whole row upward, which can leave a stationary cursor newly hovering a dropdown trigger
   with no real mouse movement. This class is applied for ~400ms at the exact moment that
   shift happens, forcing any hover-open dropdown closed through that window. */
body.suppress-hover-open .main-menu > .menu-item-has-children:hover > .sub-menu,
body.suppress-hover-open .main-menu > .menu-item-has-children:focus-within > .sub-menu {
	opacity: 0 !important; visibility: hidden !important; transform: translateY(10px) !important;
}
.main-menu .sub-menu li { list-style: none; }
.main-menu .sub-menu li + li { margin-top: 2px; }
.main-menu .sub-menu .nav-link {
	display: block; padding: 10px 14px !important; border-radius: 8px; font-weight: 600; font-size: .9rem;
	color: var(--ink); white-space: nowrap;
}
.main-menu .sub-menu .nav-link:hover { background: var(--light-bg, #f6f6f6); color: var(--red) !important; }

/* Any menu item nested inside the panel that itself has children (a 3rd label level) renders
   as a static indented group rather than a flyout — keeps it simple and never overflows the
   viewport edge, however many labels get added. */
.main-menu .sub-menu .sub-menu {
	position: static; opacity: 1; visibility: visible; transform: none; pointer-events: auto;
	box-shadow: none; border: none; border-radius: 0; margin: 4px 0 6px; padding: 0 0 0 14px;
	border-left: 2px solid var(--border-soft, #eee);
}
.main-menu .sub-menu .sub-menu::before { display: none; }

@media (min-width: 992px) and (max-width: 1199.98px) {
	.main-menu .nav-link { padding: 10px 12px; font-size: .88rem; }
	.nav-actions .btn-red-pill { padding: .55rem 1.1rem; font-size: .72rem; }
}
@media (max-width: 991.98px) {
	/* Outer mobile nav: full-screen slide-in from the left, same treatment as the
	   mega-menu's own slide-in panel below, so the two nest consistently. Bootstrap's
	   own `.navbar-collapse:not(.show){display:none}` at this breakpoint is overridden
	   to `block` so the panel can transition via transform instead of appearing/vanishing. */
	.navbar-collapse {
		display: block !important; position: fixed; inset: 0; width: 100%; height: 100%;
		background: #fff; z-index: 1900; transform: translateX(-100%); transition: transform .3s ease;
		overflow-y: auto; padding: 0 20px 24px;
	}
	.navbar-collapse.show { transform: translateX(0); }
	.mobile-nav-bar {
		display: flex; align-items: center; justify-content: space-between; padding: 16px 0;
		border-bottom: 1px solid var(--border-soft, #e3e3e3); position: sticky; top: 0; background: #fff; z-index: 2; margin-bottom: 8px;
	}
	.mobile-nav-title { font-weight: 700; font-size: 1.05rem; }
	.mobile-nav-bar button { background: none; border: none; font-size: 22px; color: var(--ink); padding: 4px; }
	.navbar-collapse .main-menu {
		flex-direction: column; align-items: stretch; gap: 0;
		margin-left: 0 !important; margin-right: 0 !important; padding-left: 0 !important;
	}
	/* More prominent mobile list: bigger type, full-bleed tap targets, row dividers —
	   scoped to .navbar-collapse only, so the desktop horizontal nav is untouched. */
	.navbar-collapse .main-menu .nav-link {
		padding: 16px 4px !important; font-size: 1.1rem !important; font-weight: 700;
		border-bottom: 1px solid var(--border-soft, #e3e3e3);
	}
	/* Push the arrow flush to the right edge of the row for BOTH Resources and Services,
	   instead of it sitting immediately after the (variable-length) label text. */
	.navbar-collapse .main-menu > .menu-item-has-children > .nav-link,
	.navbar-collapse .main-menu > .mega-dropdown > .nav-link {
		display: flex; align-items: center; justify-content: space-between;
	}
	.navbar-collapse .main-menu > li:last-of-type > .nav-link { border-bottom: none; }
	.navbar-collapse .nav-actions { margin-top: 20px; flex-direction: column; align-items: stretch; gap: 12px; }
	.navbar-collapse .nav-actions .btn-red-pill { text-align: center; padding: 14px; font-size: .9rem; }

	/* Resources (and any future simple dropdown): tap-to-expand accordion instead of hover.
	   Only the top-level toggle collapses — nested labels (e.g. Insights > Test) stay
	   statically shown underneath it, same as desktop. */
	.navbar-collapse .main-menu > .menu-item-has-children > .sub-menu::before { display: none; }
	.navbar-collapse .main-menu > .menu-item-has-children > .sub-menu {
		position: static; opacity: 1; visibility: visible; transform: none; pointer-events: auto;
		box-shadow: none; border: none; border-radius: 0; padding: 0; margin: 0;
		max-height: 0; overflow: hidden; transition: max-height .3s ease;
	}
	.navbar-collapse .main-menu > .menu-item-has-children.sub-menu-open > .sub-menu { max-height: 1000px; }
	.navbar-collapse .main-menu .sub-menu .nav-link {
		padding: 14px 4px 14px 20px !important; font-size: 1rem !important; font-weight: 600 !important;
		border-bottom: 1px solid var(--border-soft, #e3e3e3) !important;
	}
	.navbar-collapse .main-menu .sub-menu .sub-menu .nav-link { padding-left: 34px !important; font-size: .95rem !important; }
	.navbar-collapse .main-menu > .menu-item-has-children.sub-menu-open > .dropdown-toggle::after { transform: rotate(225deg); color: var(--red); }
}
.icon-btn, .icon-btn:hover, .icon-btn:focus, .icon-btn:active, .icon-btn:focus-visible {
	padding: 10px; border: 0; background: #fff !important; color: var(--ink) !important;
	display: inline-flex; align-items: center; justify-content: center; margin-left: 14px;
	box-shadow: none !important; outline: none !important;
}
.icon-btn:hover, .icon-btn:hover i { color: var(--red) !important; }
.icon-btn i { font-weight: 700; font-size: 20px; }

/* ---------- Header search ---------- */
/* Anchored to the icon's own right edge (not .nav-actions or the container), and — unlike
   the hover-triggered mega/sub menus — this opens on click, so it doesn't need the
   hover-bridge gap; a small fixed offset keeps it visually attached to the icon. */
.nav-search { position: relative; }
.nav-search-panel {
	position: absolute; top: 100%; right: -10px; margin-top: 10px; width: 320px; display: flex; gap: 8px;
	background: #fff; border: 1px solid var(--border-soft); border-radius: var(--radius-md); padding: 10px;
	box-shadow: 0 20px 45px rgba(0,0,0,.16); opacity: 0; visibility: hidden; transform: translateY(6px);
	transition: opacity .2s ease, transform .2s ease, visibility .2s ease; z-index: 1060;
}
.nav-search.is-open .nav-search-panel { opacity: 1; visibility: visible; transform: translateY(0); }
/* Matches #enquiryForm .form-control exactly (same pill shape/padding/focus ring) so the
   header search field looks like it belongs to the same design system as the contact form. */
.nav-search-input {
	flex: 1 1 auto; min-width: 0; background: var(--light-bg); border: none; border-radius: 50px;
	padding: .7rem 1.3rem; font-size: .92rem; font-family: inherit; color: var(--ink); outline: none;
	transition: box-shadow .2s ease; -webkit-appearance: none; appearance: none;
}
.nav-search-input:focus { box-shadow: none; }
.nav-search-input::placeholder { color: #000; opacity: 1; }
.nav-search-input::-webkit-search-cancel-button,
.nav-search-input::-webkit-search-decoration { -webkit-appearance: none; appearance: none; }
.nav-search-submit { flex: 0 0 auto; width: 38px; padding: 0 25px 0; border: 0; border-radius: 8px; background: #222222; color: #fff; display: flex; align-items: center; justify-content: center; transition: background .2s ease; }
.nav-search-submit:hover { background: #000000; }
@media (max-width: 767.98px) {
	.brand img { height: 34px; max-width: 100%; }
	.main-nav.is-scrolled .brand img { height: 30px; }
}

.navbar-toggler {
	background: #fff !important; border: 1.5px solid var(--border-soft, #e3e3e3) !important; border-radius: 8px !important;
	width: 38px; height: 34px; display: flex; align-items: center; justify-content: center;
	box-shadow: none !important; transition: transform .15s ease, border-color .2s ease;
}
.navbar-toggler:hover { border-color: var(--ink) !important; }
.navbar-toggler:active { transform: scale(.94); }
.navbar-toggler:focus { box-shadow: none !important; }
.navbar-toggler i { color: var(--ink); font-size: 18px; }

/* ---------- Hero ---------- */
/* !important throughout: Elementor's own Container element defaults (position, inset,
   overflow, padding) conflict at equal CSS specificity with these theme rules and load
   later — learned the hard way converting the service pages' identical .page-hero
   pattern. Applying it proactively here instead of after the fact. */
/* Standard Home spacing: 50px top and bottom (was clamp(90px,12vw,100px) top / 70px bottom). */
.hero { position: relative !important; color: #fff; overflow: hidden !important; padding-top: 50px !important; padding-bottom: 50px !important; }
.hero-bg { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; overflow: hidden; z-index: 0; }
/* The video's actual containing block is its Elementor widget-wrapper div, not
   .hero-bg directly — so that wrapper needs its own inset:0 first (previously it had
   no explicit size, sized only by its child; once the video below is pulled out of
   flow that wrapper collapses to 0 height, hiding the video entirely — the bug hit
   when .hero-video was first tried as position:absolute on its own without this). */
.hero-bg .elementor-widget-html { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; }
/* Plain 100%/100% now resolves correctly since its immediate parent (the wrapper
   above) has a definite, non-collapsing size — this is what actually fixes the
   mobile short-video bug, without the position:absolute detour that broke rendering
   entirely on both mobile and desktop. */
.hero-video { width: 100% !important; height: 100% !important; object-fit: cover; display: block; }
.hero-overlay { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; background: linear-gradient(180deg, rgba(10,10,10,.55) 0%, rgba(10,10,10,.35) 35%, rgba(5,5,5,.85) 100%); z-index: 1; }
.hero-main, .hero-stats { position: relative !important; z-index: 2; }
.hero-content .eyebrow { animation: heroFadeUp .9s cubic-bezier(.2,.8,.2,1) both; }
/* !important on font-size/line-height: Elementor has a GLOBAL default
   `.elementor-widget-heading h1.elementor-heading-title{line-height:1.4em}` — two
   classes + element = higher specificity than this single-class rule, and it also
   loads later, so it wins without !important. */
.hero-title { animation: heroFadeUp .9s cubic-bezier(.2,.8,.2,1) both; animation-delay: .12s; font-size: clamp(2rem, 1.4rem + 2.4vw, 3.2rem) !important; line-height: 1.12 !important; margin-bottom: 1rem; }
.hero-text { animation: heroFadeUp .9s cubic-bezier(.2,.8,.2,1) both; animation-delay: .24s; color: rgba(255,255,255,.85) !important; max-width: 560px; font-size: 1rem; line-height: 1.7; margin-bottom: 1.8rem; }
body.home .hero-title, body.home .hero .section-title, body.home .industries-banner .section-title.text-white { color: #fff !important; }
/* Direct rule on the h1 itself, not relying on inheritance from the wrapper above:
   Elementor's global kit CSS sets an explicit (non-inherited) color directly on
   .elementor-heading-title — a direct declaration on the element always beats an
   inherited value from an ancestor regardless of !important on that ancestor, so the
   rule above alone wasn't enough. This one targets the h1's own color directly. */
.hero-title .elementor-heading-title { color: #fff !important; font-size: clamp(2rem, 1.4rem + 2.4vw, 3.2rem) !important; line-height: 1.12 !important; margin-bottom: 1rem !important; }
/* Same direct-declaration-beats-inheritance issue as the hero title above, this
   time for the Industries banner heading (dark background, needs white text). */
.industries-banner .elementor-heading-title { color: #fff !important; }
.hero-buttons { animation: heroFadeUp .9s cubic-bezier(.2,.8,.2,1) both; animation-delay: .36s; display: flex; gap: 16px; flex-wrap: wrap; }
@keyframes heroFadeUp { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }

.hero-stats { margin-top: 60px; width: 100%; }
/* !important on margin-left: Elementor's base .e-con class has its own built-in
   fallback (margin-left: var(--margin-left, 0px)) that forces 0 even with no explicit
   per-element override from us — same class of conflict as everywhere else, just via
   a hardcoded fallback instead of an explicit setting this time. */
/* !important across the board here: Elementor's base .e-con class has its own built-in
   fallbacks for border-radius (0), border (none), and overflow (visible) — same
   conflict as margin-left above, just on more properties at once. Fixing them all
   together instead of finding each one individually. */
.stats-row { background: rgba(6,6,6,.5) !important; backdrop-filter: blur(4px); border-radius: var(--radius-md) !important; margin-left: auto !important; max-width: 560px !important; overflow: hidden !important; border: 1px solid rgb(255 255 255 / 25%) !important; }
/* Elementor wraps the widget's raw HTML in its own container div, which sits between
   .stats-row and the .col-4 items — breaking Bootstrap's row/col flex relationship
   (columns need to be DIRECT flex children of .row to sit side by side). Forcing that
   specific wrapper to be flex too, matching Bootstrap's own .row behavior. */
.stats-row .elementor-widget-html { display: flex; width: 100%; }
.stat-item { text-align: center; padding: 18px 8px; border-right: 1px solid rgba(255,255,255,.14); flex: 1 1 0; }
.stat-item:last-child { border-right: none; }
.stat-number { font-family: var(--font-head); font-size: clamp(1.1rem, .9rem + .8vw, 1.6rem); font-weight: 600; color: #fff; display: block; margin-bottom: 2px; }
.stat-label { font-size: .68rem; text-transform: uppercase; letter-spacing: .03em; color: #fff; font-weight: normal; white-space: nowrap; }
/* Mobile only: "Client Satisfaction" (the longest label) has no room to stay on one
   line inside its third of a 3-up row at phone widths — white-space:nowrap above was
   letting it spill past the stat box's own edge instead of wrapping. Desktop/tablet
   keep the single-line nowrap treatment untouched. */
@media (max-width: 575.98px) {
	.stat-item { padding: 14px 6px; }
	.stat-label { white-space: normal; font-size: .62rem; line-height: 1.3; }
	.hero-buttons { gap: 10px; margin-bottom: 28px; }
}

/* ---------- About ---------- */
/* !important: same Elementor base-container padding conflict as everywhere else.
   Home spacing rule: every section below the hero has 50px top and bottom (same as the About page). */
.about-section { padding: 50px 0 !important; }
.about-collage { position: relative; padding: 10px 30px 30px 0; }
.collage-dots { position: absolute; top: -20px; left: -10px; width: 120px; height: 120px; background-image: radial-gradient(var(--red) 1.6px, transparent 1.6px); background-size: 12px 12px; opacity: .35; z-index: 0; }
.collage-main { border-radius: var(--radius-lg); width: 78%; position: relative; z-index: 1; box-shadow: 0 20px 45px rgba(0,0,0,.15); }
.collage-small { position: absolute; border-radius: var(--radius-md); border: 6px solid #fff; box-shadow: 0 15px 30px rgba(0,0,0,.18); z-index: 2; }
.collage-small-1 { width: 46%; bottom: 0; left: 0; }
.collage-small-2 { width: 32%; top: 0; right: 0; }
.collage-small-3 { width: 32%; top: 38%; right: 0; }
.about-collage img, .why-image-wrap > img { transition: transform .5s ease, box-shadow .5s ease; }
.about-collage img:hover, .why-image-wrap > img:hover { transform: translateY(-6px) scale(1.01); box-shadow: 0 30px 60px rgba(0,0,0,.22); }

/* ---------- Services ---------- */
.services-section { background: var(--light-bg); padding: 0px 0 !important; }
.services-flex { display: flex; align-items: stretch; gap: 30px; }
.services-turbine { flex: 0 0 20%; max-width: 20%; display: none; position: relative; }
/* Absolutely positioned so it fills the column top to bottom: the column is only as tall as the text beside it
   (a flex item with no set height), so a plain height:100% on the image had nothing to measure against and the
   photo stopped at its own proportions, short of the section's bottom edge. */
/* Extra class in the selector: Elementor's ".elementor img { height: auto }" has the same specificity and loads later. */
.services-section .services-turbine img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; border-radius: 0; display: block; }
/* The section itself is 0 so the turbine photo runs the full height; the 50px top/bottom lives here. */
.services-content { flex: 1 1 auto; min-width: 0; padding: 50px 0; }
@media (min-width: 992px) { .services-turbine { display: block; } }
.services-carousel-wrap { position: relative; }
.services-owl .service-card { margin: 4px 2px 10px; position: relative; }
.services-owl .owl-stage-outer { overflow: hidden; padding-top: 4px; }
.services-owl .owl-dots { display: flex; justify-content: center; gap: 8px; margin-top: 28px; }
.services-owl .owl-dot span { width: 8px; height: 8px; margin: 0; border-radius: 50%; background: var(--border-soft); display: block; transition: background .2s ease, transform .2s ease; }
.services-owl .owl-dot.active span, .services-owl .owl-dot:hover span { background: var(--red); transform: scale(1.2); }
.service-card { position: relative; background: #fff; border-radius: var(--radius-lg); overflow: hidden; height: 100%; box-shadow: 0 10px 30px rgba(0,0,0,.05); transition: transform .3s ease, box-shadow .3s ease; }
.service-card:hover { transform: translateY(-6px); box-shadow: 0 18px 40px rgba(0,0,0,.1); }
.service-card img { width: 100%; aspect-ratio: 6 / 8; object-fit: cover; position: relative; z-index: 0; transition: transform .7s cubic-bezier(.2,.8,.2,1); will-change: transform; }
.service-card:hover img { transform: scale(1.08); }
.service-card::after { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: linear-gradient(to top, rgba(0,0,0,.88) 0%, rgba(0,0,0,.55) 35%, rgba(0,0,0,.05) 70%, rgba(0,0,0,0) 100%); }
.service-card-body { padding: 22px 24px 26px; position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; }
.service-card-body h3 { color: #fff !important; font-family: var(--font-head); font-size: 1.15rem; margin-bottom: 10px; font-weight: 500; }
.service-divider { display: block; width: 34px; height: 3px; background: #fff; margin-bottom: 12px; }
.service-card-body p { color: rgba(255,255,255,.85); font-size: .9rem; margin-bottom: 0; }
@media (max-width: 991px) { .services-flex { flex-direction: column; } .services-turbine { max-width: 100%; width: 100%; height: 220px; } }

/* ---------- Why choose us ---------- */
.why-section { padding: 50px 0 !important; }
.reason-list { margin-top: 2rem; }
.reason-item { display: flex; align-items: center; gap: 20px; padding: 20px 0; border-bottom: 1px solid var(--border-soft); }
.reason-item:first-child { padding-top: 0; }
.reason-item:last-child { border-bottom: none; padding-bottom: 0; }
.reason-icon { flex: 0 0 78px; width: 78px; height: 78px; border-radius: 50%; background: var(--light-bg); border: 2px solid var(--red); color: var(--ink); display: flex; align-items: center; justify-content: center; text-align: center; font-size: 1.7rem; line-height: 1; transition: transform .3s ease, box-shadow .3s ease; }
.reason-item:hover .reason-icon { transform: scale(1.08) rotate(-4deg); box-shadow: 0 10px 24px rgba(222,0,17,.35); }
.reason-icon img { width: 34px; height: 34px; object-fit: contain; filter: brightness(0); }
.reason-title { flex: 0 0 170px; padding-top: 4px; }
.reason-title h4 { color: var(--ink) !important; font-family: var(--font-head); font-size: 1.3rem; margin-bottom: 0; line-height: 1.4; font-weight: 600; }
.reason-desc { flex: 1 1 auto; min-width: 0; padding-top: 4px; }
.reason-desc p { color: var(--ink); font-size: .92rem; margin-bottom: 0; line-height: 1.6; }
@media (max-width: 767.98px) {
	.reason-item { flex-wrap: wrap; row-gap: 8px; }
	.reason-title { flex: 1 1 auto; padding-top: 8px; }
	.reason-desc { flex: 1 1 100%; padding-top: 0; }
}
.why-image-wrap { position: relative; display: flex; justify-content: center; }
/* overflow:hidden scoped to this inner wrapper only, NOT .why-image-wrap itself — the
   .happy-badge is a sibling that intentionally floats partially below the image's
   bottom edge (bottom:-28px by design); clipping the outer wrapper cut that off. */
.why-image-inner { border-radius: var(--radius-lg); overflow: hidden; width: 100%; }
.why-image-wrap img { border-radius: var(--radius-lg) !important; width: 100%; aspect-ratio: 5 / 7; object-fit: cover; box-shadow: 0 20px 45px rgba(0,0,0,.15); display: block; }
.happy-badge { position: absolute; right: 24px; bottom: -28px; background: var(--yellow-badge); border-radius: var(--radius-md); padding: 20px 30px; flex-direction: column; align-items: center; gap: 10px; box-shadow: 0 12px 30px rgba(0,0,0,.15); text-align: center; }
.happy-avatars { display: flex; align-items: center; justify-content: center; }
/* flex-shrink:0 + !important: inside .happy-avatars' flex row these were being squeezed
   narrower than their fixed height by flex's default shrink behavior, turning the
   border-radius:50% circles into ovals. */
.happy-avatars img { width: 34px !important; height: 34px !important; flex: 0 0 34px; border-radius: 50% !important; border: 2px solid var(--yellow-badge); margin-left: -10px; object-fit: cover; }
.happy-avatars img:first-child { margin-left: 0; }
.happy-avatars-more { width: 34px; height: 34px; flex: 0 0 34px; border-radius: 50%; background: var(--ink); color: #fff; font-size: .8rem; display: flex; align-items: center; justify-content: center; margin-left: -10px; border: 2px solid var(--yellow-badge); }
.happy-text { display: flex; flex-direction: column; line-height: 1.2; }
.happy-text strong { font-size: 1.6rem; font-family: var(--font-head); }
.happy-text span { font-size: 1rem; color: var(--ink); padding: 4px 0 7px; }

/* ---------- Industries banner ---------- */
.industries-banner { background: #222222; padding: 50px 0 !important; color: #fff; }
/* Nav arrows used to be a flex SIBLING of .owl-stage-outer inside this same flex
   row — Owl sizes its items against #industriesTrack's own full width, then CSS
   flex-shrink independently squeezes .owl-stage-outer to make room for the nav,
   AFTER Owl already committed to item widths sized for the full (unshrunk)
   width — so items ended up too wide and the last one bled/clipped past the
   visible edge. Reserving the nav's space with padding instead (and taking the
   nav out of flow via absolute positioning) means Owl's own width measurement
   already reflects the true available space, so items fit exactly. */
/* The text column's heading now wraps to 3 lines, making the row taller than the
   132px boxes need — with the row's align-items:flex-start (needed so the eyebrow
   lines up with the box tops), the extra height sits entirely below the boxes,
   leaving noticeably more gap under them than above. Centering just this column
   (not the whole row) within the row's height fixes that without disturbing the
   text column's top alignment. Elementor's own align-self control didn't
   generate any CSS for this container, so this targets it directly instead. */
.industries-banner .col-lg-9 { align-self: center; }
/* Reserved space = nav button pair (2*34 + 8 gap = 76px) + a deliberate 28px
   breathing gap before the arrows, so the last box never touches them. */
#industriesTrack.industries-owl { position: relative; padding-right: 104px; }
.industries-owl .owl-stage-outer { overflow: hidden; }
.industries-owl .owl-item { display: flex; }
.industry-box { width: 100%; height: 132px; border: 1.5px solid rgba(255,255,255,.65); border-radius: var(--radius-md); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; text-align: center; font-size: .85rem; line-height: 1.1; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; padding: 10px; transition: background .25s ease, transform .25s ease; color: #fff; }
.industry-box:hover { background: rgba(255,255,255,.12); transform: translateY(0px); }
.industry-box:hover, .industry-box:hover span { color: #fff !important; }
.industry-box img { max-width: 100%; width: auto; height: auto; max-height: 46px; object-fit: contain; filter: brightness(0) invert(1); }
/* Mobile only: flex children default to min-width:auto (not 0), which keeps the label
   text at its full unwrapped width instead of letting it wrap inside the narrow
   2-up mobile carousel item — the box clips it top full-width both ends instead
   of wrapping to a second line. Desktop's wider 3/4-up boxes already fit the text
   on one line, so this never mattered there and stays untouched. */
@media (max-width: 575.98px) {
	.industry-box span { min-width: 0; width: 100%; white-space: normal; }
}
/* !important on margin/padding/line-height: owl.theme.default.css adds margin-top:10px to
   .owl-nav (pushing the arrows below the boxes' vertical center) and padding/line-height
   on the buttons (pushing the glyph off-center inside the circle). Arrows are now inline
   SVGs (see owl-init.js), so they center exactly via flex. */
.industries-owl .owl-nav { position: absolute; right: 0; top: 50% !important; transform: translateY(-50%); display: flex; align-items: center; gap: 8px; margin: 0 !important; }
.industries-owl .owl-nav button.owl-prev, .industries-owl .owl-nav button.owl-next { width: 34px; height: 34px; margin: 0 !important; padding: 0 !important; line-height: 1 !important; border-radius: 50%; background: transparent; color: #fff; display: inline-flex; align-items: center; justify-content: center; transition: background .2s ease, color .2s ease; }
.industries-owl .owl-nav button svg { width: 16px; height: 16px; display: block; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.industries-owl .owl-nav button.owl-prev:hover, .industries-owl .owl-nav button.owl-next:hover { background: #fff; color: var(--red); }

/* ---------- Accreditations ---------- */
.accred-section { padding: 50px 0 !important; background: var(--light-bg); }
.accred-title {
	font-family: var(--font-head); font-size: clamp(2rem, 1.5rem + 2vw, 2.8rem); font-weight: 800;
	text-transform: uppercase; letter-spacing: -.01em; color: var(--ink); margin-bottom: 20px !important; line-height: 1.1;
}
/* Unifies Accreditations' heading with every other section title's weight/size
   (was its own bigger/bolder 800-weight, 2.8rem-max clamp — inconsistent with
   .section-title's 600-weight, 2.4rem-max used everywhere else). Direct h2
   targeting for the same reason as the .section-title rule above: Elementor's
   own Kit CSS sets these properties directly on .elementor-heading-title. */
.accred-title.elementor-widget-heading .elementor-heading-title { font-size: var(--fs-h2) !important; font-weight: 600 !important; line-height: 1.1 !important; margin-bottom: 1.1rem !important; }
.accred-section .section-text { font-size: calc(1.1rem - 2px); line-height: 1.85; margin-bottom: 0; }
/* Row uses align-items-stretch so both columns share the same height (the taller one
   wins); the rules below make the carousel/cards/images fill that stretched height
   instead of sitting at a fixed 300px, so the content column and the carousel column
   — and every card's image within the carousel — all line up at equal height. */
.accred-row { --bs-gutter-x: 15px; }
.accred-content-col { display: flex; flex-direction: column; justify-content: center; }
.accred-carousel-col { display: flex; flex-direction: column; }
/* min-height:280px as a guaranteed fallback: the original min-height:0 relies entirely
   on Owl Carousel's JS running to size this via the equal-height flex-stretch trick with
   .accred-content-col — if that JS init is ever delayed/skipped, the section collapses
   to near-zero height instead of showing the cards. This floor keeps it visible either way. */
.accred-carousel-wrap { position: relative; flex: 1 1 auto; min-height: 280px; padding: 0 38px; }
@media (max-width: 991.98px) {
	.accred-carousel-wrap { margin-top: 2rem; }
}
#accreditationsCarousel, #accreditationsCarousel .owl-stage-outer, #accreditationsCarousel .owl-stage,
#accreditationsCarousel .owl-item { height: 100%; }
#accreditationsCarousel .owl-stage { display: flex; }
.accred-slide { padding: 0 14px; height: 100%; display: flex; }
.accred-card {
	background: #fff; border: 1px solid var(--border-soft); border-radius: var(--radius-lg);
	padding: 20px; transition: transform .3s ease, border-color .3s ease;
	width: 100%; display: flex;
}
.accred-card:hover { transform: translateY(-8px); border-color: rgba(222,0,17,.25); }
/* Certificates with a PDF attached wrap the image in a link (opens the full PDF) —
   the anchor needs to behave exactly like the plain img did before it, since
   .accred-card is a flex container sizing its single child to fill the card. */
.accred-card a { display: flex; width: 100%; flex: 1 1 auto; min-width: 0; }
.accred-slide img { width: 100%; height: 100%; min-height: 260px; object-fit: contain; background: #fff; display: block; }
.accred-owl .owl-stage-outer { overflow: hidden; padding: 6px 0 10px; height: 100%; }
/* Arrows sit in the side padding added to .accred-carousel-wrap above, clear of both the
   card edges and the content column's text — dots stay centered below as the only
   below-carousel control. */
.accred-owl .owl-nav {
	/* !important on margin/top: owl.theme.default.css's .owl-theme .owl-nav rule (loads after
	   irc-custom.css) sets margin-top:10px and otherwise wins that tie, nudging the arrows
	   off true-center — same load-order issue already hit elsewhere on this carousel. */
	position: absolute !important; top: 50% !important; left: -16px; right: -16px; transform: translateY(-50%) !important;
	display: flex; justify-content: space-between; margin: 0 !important; pointer-events: none; z-index: 2;
}
.accred-dots { display: flex; justify-content: center; align-items: center; gap: 8px; margin-top: 30px; }
/* #accredDots is a plain standalone div — it never gets Owl's own .owl-carousel.owl-theme
   ancestor classes, so neither Owl's default dot theme CSS nor the .owl-dot span rule below
   (which assumed that structure) ever matched the raw <button class="owl-dot">. Without
   ANY styling, it fell through to Astra's default button chrome (a large blue box). Reset
   the button itself explicitly rather than relying on Owl's theme CSS to have done it. */
.accred-dots button.owl-dot {
	all: unset; cursor: pointer; width: 8px !important; height: 8px !important; border-radius: 50% !important;
	background: var(--border-soft) !important; display: block !important; transition: background .2s ease, width .2s ease;
}
.accred-dots button.owl-dot.active { background: var(--red) !important; width: 22px !important; border-radius: 4px !important; }
.accred-dots button.owl-dot:hover { background: var(--red-dark) !important; }
.accred-owl .owl-nav button.owl-prev, .accred-owl .owl-nav button.owl-next {
	pointer-events: auto; width: 46px; height: 46px; border-radius: 50%; background: #fff !important;
	color: var(--ink) !important; border: 1.5px solid var(--border-soft) !important; box-shadow: 0 8px 20px rgba(0,0,0,.12);
	font-size: 1.1rem; display: inline-flex; align-items: center; justify-content: center; transition: background .2s ease, color .2s ease, border-color .2s ease;
}
.accred-owl .owl-nav button.owl-prev:hover, .accred-owl .owl-nav button.owl-next:hover { background: var(--red) !important; color: #fff !important; border-color: var(--red) !important; }
@media (max-width: 767.98px) {
	.accred-slide img { height: 200px; min-height: 0; }
	.accred-slide { padding: 0 8px; }
	.accred-carousel-wrap { padding: 0 30px; min-height: 0; }
	.accred-owl .owl-nav { left: -14px; right: -14px; }
	.accred-owl .owl-nav button.owl-prev, .accred-owl .owl-nav button.owl-next { width: 38px; height: 38px; }
}

/* ---------- Blog ---------- */
.blog-section { padding: 50px 0 !important; }
.blog-card { border-radius: var(--radius-lg); overflow: hidden; height: 100%; }
.blog-thumb { width: 100%; aspect-ratio: 4 / 3; position: relative; overflow: hidden; border-radius: 20px; }
.blog-thumb img { aspect-ratio: 4 / 3; border-radius:20px !important; width: 100%; height: 100%; object-fit: cover; transition: transform .7s cubic-bezier(.2,.8,.2,1); }
.blog-card:hover .blog-thumb img { transform: scale(1.08); }
.blog-card-body { padding: 20px 4px; }
.blog-date { display: block; font-size: .78rem; color: var(--gray-mid); text-transform: uppercase; letter-spacing: .06em; margin-bottom: 10px; }
/* Title: capped at two lines (longer ones end in "…"). min-height reserves two lines even for a short title so
   every card's "Read more" sits at the same height. */
.blog-card-body h3 { color: var(--ink) !important; font-family: var(--font-head); font-size: 1.08rem; line-height: 1.4; font-weight: 600; transition: color .25s ease;
	display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; min-height: 2.8em; margin: 0 0 14px; }
.blog-card:hover .blog-card-body h3 { color: var(--red); }
/* Same look as the "View All Blog" link; the whole card is already one link, so this is just a label. */
.blog-more { display: inline-flex; align-items: center; gap: 6px; color: var(--red); font-weight: 700; font-size: .85rem; text-transform: uppercase; letter-spacing: .06em; transition: color .2s ease; }
.blog-more i { transition: transform .25s ease; }
.blog-card:hover .blog-more { color: var(--red-dark); }
.blog-card:hover .blog-more i { transform: translateX(4px); }

/* ---------- Clients ---------- */
.clients-section { padding: 50px 0 !important; }
.clients-heading-row { display: flex; align-items: center; gap: 24px; margin-bottom: 30px; }
.clients-heading { text-transform: uppercase; font-size: 1rem; font-weight: 500; letter-spacing: .02em; color: var(--red); margin-bottom: 0; white-space: nowrap; }
.clients-rule { flex: 1 1 auto; height: 1px; background: var(--border-soft); min-width: 40px; }
/* Mobile only: white-space:nowrap above pushed this full sentence off the right edge
   of narrow screens instead of wrapping — desktop's wider row has room for it on one
   line, so this stays untouched there. */
@media (max-width: 575.98px) {
	.clients-heading-row { flex-wrap: wrap; }
	.clients-heading { white-space: normal; font-size: .82rem; }
}
/* the 2px side padding (pulled back by the negative margin) keeps Owl's sub-pixel rounding from shaving the edge off the first and last card */
.clients-owl .owl-stage-outer { overflow: hidden; padding: 10px 2px; margin: 0 -2px; }
/* Logo cards: the same white bordered card as About > Our Clients. Equal-height cards come from the flex stage. */
.clients-owl .owl-stage { display: flex; }
.clients-owl .owl-item { display: flex; }
.client-logo-slide { display: flex; align-items: center; justify-content: center; width: 100%; min-height: 150px; padding: 22px 14px; border: 1px solid var(--ab-line); border-radius: 16px; background: #fff; transition: border-color .3s ease, box-shadow .3s ease; }
.client-logo-slide img { display: block; width: auto; height: auto; max-width: 128px; max-height: 96px; object-fit: contain; transition: transform .3s ease; }
.client-logo-slide:hover { border-color: #c9ced4; box-shadow: 0 14px 30px rgba(20,24,31,.09); }
.client-logo-slide:hover img { transform: scale(1.06); }
/* Arrows sit in 56px side gutters, vertically centred on the logos; the dots are centred underneath (owl-init.js switches nav and dots on).
   Owl sizes its items from the carousel's content width, so the gutters are plain padding. Owl's own theme CSS loads later, hence the !important. */
.clients-owl { padding: 0 56px; }
.clients-owl.owl-loaded { display: grid !important; grid-template-columns: minmax(0, 1fr); row-gap: 20px; }
.clients-owl .owl-stage-outer { grid-column: 1; grid-row: 1; min-width: 0; }
.clients-owl .owl-nav { display: contents !important; margin: 0 !important; }
.clients-owl .owl-nav.disabled, .clients-owl .owl-dots.disabled { display: none !important; }
.clients-owl .owl-nav button.owl-prev, .clients-owl .owl-nav button.owl-next { grid-column: 1; grid-row: 1; align-self: center; z-index: 2; width: 40px; height: 40px; padding: 0 !important; display: inline-grid !important; place-items: center; border-radius: 50% !important; border: 1.5px solid var(--border-soft) !important; background: #fff !important; color: var(--ink) !important; box-shadow: 0 6px 16px rgba(0,0,0,.08); transition: background .2s ease, color .2s ease, border-color .2s ease; }
.clients-owl .owl-nav button.owl-prev { justify-self: start; margin: 0 0 0 -56px !important; }
.clients-owl .owl-nav button.owl-next { justify-self: end; margin: 0 -56px 0 0 !important; }
.clients-owl .owl-nav button svg { width: 15px; height: 15px; display: block; fill: none; stroke: currentColor; stroke-width: 3; stroke-linecap: round; stroke-linejoin: round; }
.clients-owl .owl-nav button.owl-prev:hover, .clients-owl .owl-nav button.owl-next:hover { background: var(--red) !important; border-color: var(--red) !important; color: #fff !important; }
.clients-owl .owl-dots { grid-column: 1; grid-row: 2; justify-self: center; display: flex !important; align-items: center; justify-content: center; gap: 8px; margin: 0 !important; }
.clients-owl .owl-dots button.owl-dot { all: unset; cursor: pointer; display: block; width: 8px !important; height: 8px !important; border-radius: 50% !important; background: var(--border-soft) !important; transition: background .2s ease, width .2s ease; }
.clients-owl .owl-dots button.owl-dot span { display: none !important; }
.clients-owl .owl-dots button.owl-dot.active { width: 22px !important; border-radius: 4px !important; background: var(--red) !important; }
@media (max-width: 575.98px) {
	.clients-owl { padding: 0 44px; }
	.clients-owl .owl-nav button.owl-prev, .clients-owl .owl-nav button.owl-next { width: 34px; height: 34px; }
	.clients-owl .owl-nav button.owl-prev { margin-left: -44px !important; }
	.clients-owl .owl-nav button.owl-next { margin-right: -44px !important; }
}

/* ---------- Enquiry ---------- */
/* #contact is always the last section before the footer (see [irc_enquiry_form]) — a
   fixed bottom margin here guarantees breathing room before the footer's dark background
   on every page that uses it, independent of whatever padding the surrounding Astra
   containers resolve to. */
#contact { margin-bottom: 0; }
/* Standard 50px spacing (Home + every service page, the only pages with this form): the grey box has no
   padding of its own, so the space inside it is just the card's 50px (it used to be 60px box + 50px card =
   110px); the gap between the box and the footer is 50px (the theme's #primary bottom margin is 64px). */
.enquiry-section { background: var(--gray-bg); padding: 0; border-radius: 20px; }
.enquiry-card { background: var(--gray-bg); border-radius: var(--radius-lg); padding: 50px; }
@media (max-width: 575.98px) {
	.enquiry-card { padding: 50px 20px; }
}
body:has(#contact) #primary { margin-bottom: 50px; }
/* The Elementor container holding the form must add no padding of its own — one page lacked the explicit
   "padding: 0" setting and fell back to Elementor's 10px container default. */
.elementor > .e-con:has(#contact) { padding-top: 0 !important; padding-bottom: 0 !important; }
.enquiry-intro { color: var(--ink); font-size: 1.2rem; font-weight: 600; margin-bottom: 1.6rem; }
.enquiry-call { display: flex; align-items: center; gap: 16px; margin-top: 1.8rem; }
.enquiry-call-icon { width: 52px; height: 52px; border-radius: 50%; background: var(--red); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 1.1rem; flex: 0 0 auto; }
.enquiry-call-icon img { width: 22px; height: 22px; object-fit: contain; filter: brightness(0) invert(1); }
.enquiry-call span { display: block; font-size: 1rem; text-transform: uppercase; color: var(--gray-text); font-weight: 500; }
.enquiry-call a { color: var(--ink); font-weight: 700; font-size: 1.5rem; }
#enquiryForm .form-control, #enquiryForm .form-select { border: none; border-radius: 50px; padding: .7rem 1.3rem; font-size: .92rem; color: var(--ink); }
#enquiryForm .form-control:focus, #enquiryForm .form-select:focus { box-shadow: 0 0 0 3px rgba(222,0,17,.15); }
.enquiry-section form input, .enquiry-section form select {
	border: 0;
	border-radius: 50px;
	padding: 10px 20px;
	height: unset;
}
.enquiry-section form input:focus, .enquiry-section form select:focus {
	border: 0;
	outline: none;
	box-shadow: none;
}
.irc-form-success { color: #1a7f37; font-weight: 600; margin-top: 12px; }

/* ---------- Footer ---------- */
.site-footer { position: relative; background: #1a1a1a; color: rgba(255,255,255,.68); padding: 84px 0 0; }
/* Thin brand-red accent line across the very top edge, echoing the eyebrow-bar red
   accents used throughout the rest of the site so the footer reads as part of the
   same design system rather than a plain dark box. */
.site-footer::before {
	content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px;
	background: linear-gradient(90deg, var(--red), var(--red-dark) 60%, rgba(222,0,17,0));
}
.site-footer h5 {
	position: relative; color: #fff !important; font-size: calc(1.05rem + 1px); margin-bottom: 26px; padding-bottom: 16px;
	text-transform: uppercase; letter-spacing: .06em; font-family: var(--font-head); font-weight: 700;
}
.site-footer h5::after {
	content: ""; position: absolute; left: 0; bottom: 0; width: 32px; height: 3px; border-radius: 2px; background: var(--red);
}
.site-footer ul { list-style: none; padding: 0; margin: 0; }
.site-footer ul li {
	margin-bottom: 13px; font-size: .92rem; line-height: 1.4;
}
.site-footer ul li a {
	color: rgba(255,255,255,.68) !important; font-size: inherit; line-height: inherit; font-weight: 400;
	display: inline-block; transition: color .2s ease, transform .2s ease;
}
.site-footer ul li a:hover { color: #fff !important; transform: translateX(4px); }
.footer-contact li a { display: inline-flex !important; align-items: center; gap: 10px; }
.footer-contact li a i { color: var(--red); font-size: 1rem; }
.footer-social { display: flex; gap: 12px; margin-top: 22px; }
.footer-social a {
	width: 38px; height: 38px; border-radius: 50%; border: 1px solid rgba(255,255,255,.25); color: #fff;
	display: inline-flex; align-items: center; justify-content: center; transition: background .2s ease, border-color .2s ease, transform .2s ease;
}
.footer-social a:hover { background: var(--red); border-color: var(--red); transform: translateY(-3px); }
.footer-bottom { margin-top: 56px; border-top: 1px solid rgba(255,255,255,.12); padding: 22px 0; font-size: calc(.85rem + 1px); color: rgba(255,255,255,.5); }
.footer-bottom a { color: rgba(255,255,255,.8); font-weight: 600; }
.footer-bottom a:hover { color: var(--red); }

/* ---------- Back to top ---------- */
.back-to-top {
	position: fixed; right: 24px; bottom: 24px; width: 46px; height: 46px; border-radius: 50%;
	background: var(--red); color: #fff; display: flex; align-items: center; justify-content: center;
	opacity: 0; visibility: hidden; transform: translateY(10px); transition: all .3s ease; z-index: 1000;
	box-shadow: 0 8px 20px rgba(0,0,0,.2);
}
.back-to-top.show { opacity: 1; visibility: visible; transform: translateY(0); }
.back-to-top:hover { background: var(--red-dark); color: #fff; }
/* Astra's own scroll-to-top button (blue) would sit on top of this one; the theme already ships its own. */
#ast-scroll-top { display: none !important; }

/* ---------- Scroll reveal ---------- */
.reveal-up { opacity: 0; transform: translateY(28px); transition: opacity .7s cubic-bezier(.25,.8,.25,1), transform .7s cubic-bezier(.25,.8,.25,1); }
.reveal-up.is-visible { opacity: 1; transform: translateY(0); }
.reveal-img { opacity: 0; transform: translateY(20px) scale(.97); transition: opacity .75s cubic-bezier(.25,.8,.25,1), transform .75s cubic-bezier(.25,.8,.25,1); }
.reveal-img.is-visible { opacity: 1; transform: translateY(0) scale(1); }
.reveal-block { opacity: 0; transform: translateY(24px); transition: opacity .7s cubic-bezier(.25,.8,.25,1), transform .7s cubic-bezier(.25,.8,.25,1); }
.reveal-block.is-visible { opacity: 1; transform: translateY(0); }
.reveal-left { opacity: 0; transform: translateX(-42px); transition: opacity .8s cubic-bezier(.2,.8,.2,1), transform .8s cubic-bezier(.2,.8,.2,1); }
.reveal-right { opacity: 0; transform: translateX(42px); transition: opacity .8s cubic-bezier(.2,.8,.2,1), transform .8s cubic-bezier(.2,.8,.2,1); }
.reveal-left.is-visible, .reveal-right.is-visible { opacity: 1; transform: none; }
.stagger > * { opacity: 0; transform: translateY(22px); transition: opacity .6s ease, transform .6s ease; }
.stagger.is-visible > * { opacity: 1; transform: none; }
.stagger.is-visible > *:nth-child(1) { transition-delay: .05s; }
.stagger.is-visible > *:nth-child(2) { transition-delay: .13s; }
.stagger.is-visible > *:nth-child(3) { transition-delay: .21s; }
.stagger.is-visible > *:nth-child(4) { transition-delay: .29s; }
.stagger.is-visible > *:nth-child(n+5) { transition-delay: .37s; }
@media (prefers-reduced-motion: reduce) {
	.reveal-up, .reveal-img, .reveal-block, .reveal-left, .reveal-right, .stagger, .stagger > * { opacity: 1 !important; transform: none !important; transition: none !important; }
}

/* ---------- Services mega menu: tab layout (left rail of labels, right content panel
   that swaps on hover/tap) — modelled on enablex.io's Products dropdown. ---------- */
/* Positioned relative to the nav's own container (not the full-bleed <nav>), so the panel's
   edges line up with the logo/menu/CTA row instead of hanging off the left of the viewport. */
.main-nav .container-xl { position: relative; }
/* !important: Elementor's own .e-con base CSS sets margin-left/right via a
   var(--margin-left/right, 0px) fallback that applies even when no per-element
   override is set on the container. Same specificity as Bootstrap's own
   .container-xl{margin:0 auto} rule, and Elementor's loads later — so without
   this the section's content sits flush against the left edge instead of
   centered, same bug already hit and fixed elsewhere (stats-row, hero, etc). */
.container-xl { margin-left: auto !important; margin-right: auto !important; }
/* !important on padding: same Elementor .e-con base-CSS conflict as the margin rule
   above — its var(--padding-left/right, 0px) fallback zeroes Bootstrap's own gutter
   at equal specificity, loading later. Without this, content sits flush against the
   viewport edge on mobile (no left/right breathing room) since Bootstrap's own
   calc(var(--bs-gutter-x)*.5) padding never wins the cascade. */
@media (max-width: 767.98px) {
	.container-xl { padding-left: 20px !important; padding-right: 20px !important; }
}
/* Same fix, tablet range (iPad portrait/landscape and similar, 768–991px) — the
   phone-only breakpoint above left this band uncovered, so content still sat flush
   against the edge on tablets. Desktop (992px+) is untouched. */
@media (min-width: 768px) and (max-width: 991.98px) {
	.container-xl { padding-left: 32px !important; padding-right: 32px !important; }
}
/* Centered on the viewport via left:50%+translateX (not left:0/right:0 against the nav
   container) — that way it's always dead-center on the actual screen, independent of
   where the "Services" trigger sits in the nav or how any ancestor happens to be sized. */
.mega-dropdown .dropdown-menu.mega-menu {
	display: block; position: absolute; left: 50%; top: 100%; margin-top: 14px;
	width: calc(100% - 48px); max-width: 1140px;
	background: #fff; border: 1px solid var(--border-soft); border-radius: var(--radius-lg);
	box-shadow: 0 30px 70px rgba(0,0,0,.16); opacity: 0; visibility: hidden;
	transform: translateX(-50%) translateY(12px);
	transition: opacity .25s ease, transform .25s ease, visibility .25s ease;
	z-index: 1050; padding: 0;
}
/* See the matching comment on .sub-menu above: visibility (not pointer-events) gates
   interactivity, so the hover chain survives the gap between the trigger and the panel. */
.mega-dropdown .dropdown-menu.mega-menu::before { content: ""; position: absolute; left: 0; right: 0; top: -14px; height: 14px; }
.mega-dropdown:hover .dropdown-menu.mega-menu,
.mega-dropdown:focus-within .dropdown-menu.mega-menu,
.mega-dropdown.open .dropdown-menu.mega-menu {
	opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0);
}
/* Same scroll-shift hover-suppression as the Resources dropdown above — deliberately NOT
   targeting .mega-dropdown.open, since that's a real mobile tap toggle, not a hover artifact. */
body.suppress-hover-open .mega-dropdown:hover .dropdown-menu.mega-menu,
body.suppress-hover-open .mega-dropdown:focus-within .dropdown-menu.mega-menu {
	opacity: 0 !important; visibility: hidden !important; transform: translateX(-50%) translateY(12px) !important;
}
.mega-mobile-bar { display: none; }
.mega-menu-inner { padding: 30px 32px; }
.mega-tabs-heading { font-size: .76rem; text-transform: uppercase; letter-spacing: .06em; color: var(--red); font-weight: 700; margin: 0 0 16px; }
.mega-tabs-layout { display: flex; gap: 28px; align-items: flex-start; }

.mega-tabs-list { flex: 0 0 250px; display: flex; flex-direction: column; gap: 6px; }
.mega-tab {
	display: flex; align-items: center; justify-content: space-between; gap: 8px;
	width: 100%; text-align: left; background: #fff; border: 1px solid var(--border-soft);
	border-radius: 8px; padding: 10px 12px; font-weight: 600; font-size: .95rem;
	font-family: inherit; color: var(--ink); cursor: pointer;
	transition: background .2s ease, border-color .2s ease, color .2s ease;
}
.mega-tab-arrow { display: inline-flex; color: var(--gray-mid); transition: color .2s ease, transform .2s ease; flex: 0 0 auto; }
.mega-tab:hover, .mega-tab.is-active { background: rgba(222,0,17,.05); border-color: rgba(222,0,17,.3); color: var(--red); }
.mega-tab:hover .mega-tab-arrow, .mega-tab.is-active .mega-tab-arrow { color: var(--red); transform: translateX(2px); }
.mega-tab-highlight { border-color: rgba(222,0,17,.25); }

/* Scrollbar hidden but still fully scrollable (wheel/touch/keyboard) — since it never
   paints, it can't reserve/release layout space either, so switching between a short tab
   and a tall one never nudges the panel's content width side to side. */
.mega-tabs-panels {
	flex: 1 1 auto; min-width: 0; max-height: 460px; overflow-y: auto; padding-right: 6px;
	scrollbar-width: none; -ms-overflow-style: none;
}
.mega-tabs-panels::-webkit-scrollbar { display: none; }
.mega-tab-panel { display: none; }
.mega-tab-panel.is-active { display: block; animation: megaPanelIn .2s ease; }
@keyframes megaPanelIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.mega-panel-heading { font-size: .76rem; text-transform: uppercase; letter-spacing: .06em; color: var(--gray-mid); font-weight: 700; margin: 0 0 14px; }

.mega-items-grid { column-count: unset !important; list-style: none !important; margin: 0 !important; padding: 0 !important; display: grid !important; grid-template-columns: repeat(3, 1fr) !important; gap: 2px 14px; width: 100%; }
.mega-items-grid li { list-style: none !important; width: auto !important; break-inside: avoid; }
.mega-items-grid a { display: flex !important; width: auto !important; align-items: center; gap: 12px; padding: 9px 10px; border-radius: 8px; color: var(--ink); font-size: 1rem; font-weight: 500; line-height: 1.3; transition: background .2s ease, color .2s ease; }
.mega-items-grid a:hover { background: var(--light-bg); color: var(--red); }
.mega-item-icon { flex: 0 0 32px; width: 32px; height: 32px; border-radius: 9px; background: rgba(222,0,17,.08); display: flex; align-items: center; justify-content: center; color: var(--red); font-size: .95rem; transition: background .2s ease, color .2s ease; }
.mega-item-icon i { color: inherit; }
.mega-items-grid a:hover .mega-item-icon,
.mega-items-grid a:hover .mega-item-icon i { background: var(--red); color: #fff !important; }

@media (max-width: 1199.98px) {
	.mega-tabs-list { flex: 0 0 210px; }
}
@media (max-width: 991.98px) {
	/* Mobile: the panel becomes the full-screen slide-in (site.js toggles .open); tabs
	   stack as a simple tap accordion — one panel open at a time, no hover. */
	.mega-dropdown .dropdown-menu.mega-menu {
		position: static; opacity: 1; visibility: visible; transform: none; pointer-events: auto;
		box-shadow: none; border: none; border-radius: 0; margin: 0; max-height: none; overflow: visible;
		width: auto; max-width: none;
		display: none;
	}
	.mega-dropdown.open .dropdown-menu.mega-menu { display: block; }
	.mega-dropdown:hover .dropdown-menu.mega-menu,
	.mega-dropdown:focus-within .dropdown-menu.mega-menu,
	.mega-dropdown.open .dropdown-menu.mega-menu { transform: none; }
	.mega-mobile-bar {
		display: flex; align-items: center; gap: 12px; padding: 16px 20px;
		border-bottom: 1px solid var(--border-soft); position: sticky; top: 0; background: #fff; z-index: 2;
	}
	.mega-mobile-back { display: flex; align-items: center; gap: 6px; background: none; border: 0; color: var(--ink); font-weight: 600; padding: 4px; }
	.mega-mobile-title { font-weight: 700; }
	.mega-menu-inner { padding: 16px 20px 24px; max-width: none; }
	.mega-tabs-layout { flex-direction: column; gap: 0; }
	.mega-tabs-list { display: flex; flex-direction: column; flex: 0 0 auto; width: 100%; gap: 0; }
	.mega-tab { border-radius: 0; border: 0; border-bottom: 1px solid var(--border-soft); padding: 15px 4px; font-size: 1rem; }
	.mega-tab.is-active { background: none; color: var(--red); }
	.mega-tab.is-active .mega-tab-arrow { transform: rotate(90deg); }
	.mega-tabs-panels { max-height: none; overflow: visible; padding-right: 0; width: 100%; }
	.mega-tab-panel { display: none; padding: 14px 4px 6px; }
	.mega-tab-panel.is-active { display: block; }
	/* The inline style on the <ul> reads var(--mega-cols) inside its own !important
	   grid-template-columns, so redeclaring the variable here is what actually wins on
	   mobile — an !important inline rule can't be beaten directly by any stylesheet,
	   but the custom property it reads from still resolves through the normal cascade. */
	.mega-items-grid { --mega-cols: 1; gap: 2px; }
}

/* ---------- Inner page banner (Services, individual service pages, ...) ----------
   Deliberately minimal and IDENTICAL on every inner page: a background photo, a dark
   overlay, a breadcrumb, and the page title — nothing else. Fixed height (capped at
   300px), not viewport-relative, so it reads as a consistent "you are here" strip
   rather than a second hero competing with the page's own content sections. */
.page-hero {
	position: relative; color: #fff; overflow: hidden !important;
	height: var(--page-hero-h); display: flex; align-items: center !important;
}
/* Elementor's .e-flex base class hard-codes align-items:normal directly (not through a
   custom property here, since there's no .e-con-inner wrapper to consume one) at equal
   specificity, loading after this stylesheet — hence !important to keep hero content
   vertically centered instead of pinned to the top. */
/* !important on position/inset: Elementor's own Container element generates its own
   position/top/left/right rule (at equal CSS specificity, loading after this
   stylesheet) for any element given an Elementor "Position: Absolute" setting — and it
   only ever sets top+left+right, never bottom, so without !important here these divs
   stop short of the container's bottom edge instead of fully covering it. */
/* background-color (not the `background` shorthand): same reasoning as
   .svc-section--photo-dark above — the shorthand also resets background-image
   to none, which would block a real background-image set via Elementor's own
   native Background control on this container. */
.page-hero-bg { position: absolute !important; inset: 0 !important; z-index: 0; background-color: #14181f; }
.page-hero-bg img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* Flat variant: modelled on ircengg.com's actual inner-page title band — solid brand
   color, no photo, no overlay, compact height. Used for the document/editorial-style
   inner pages (real photo + running text + sidebar) rather than the marketing hero. */
.page-hero--flat { height: auto; display: block; padding: 44px 0; background: var(--red); overflow: visible; }
.page-hero--flat .page-breadcrumb, .page-hero--flat .page-breadcrumb a { color: rgba(255,255,255,.8); }
.page-hero--flat .page-breadcrumb a:hover { color: #fff; }
.page-hero--flat .page-breadcrumb .current { color: #fff; }
.page-hero--flat .page-hero-title { border-left: none; padding-left: 0; color: #fff; text-shadow: none; }
/* One shared hero-banner overlay (About + every inner page): darkest behind the title on the left, fading out
   to the right so the photo stays bright. Tune the look here — alpha values only; keep the left side high
   enough that the white title and breadcrumb stay readable on light photos. */
:root { --hero-overlay: linear-gradient(90deg, rgba(8,8,8,.6) 0%, rgba(8,8,8,.5) 45%, rgba(8,8,8,.25) 75%, rgba(8,8,8,.12) 100%); }
.page-hero-overlay {
	position: absolute !important; inset: 0 !important; z-index: 1;
	background: var(--hero-overlay);
}
.page-hero-inner { position: relative; z-index: 2; width: 100%; }
.page-breadcrumb { display: flex; align-items: center; gap: 10px; font-size: .82rem; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: rgba(255,255,255,.65); margin-bottom: 12px; }
.page-breadcrumb a { color: rgba(255,255,255,.65); text-decoration: none; transition: color .2s ease; }
.page-breadcrumb a:hover { color: #fff; }
.page-breadcrumb .sep { opacity: .5; }
.page-breadcrumb .current { color: #fff; opacity: .9; }
/* font-size/line-height !important: same Elementor global H1 default (line-height:
   1.4em, higher specificity) conflict as .hero-title/.section-title. */
.page-hero-title {
	position: relative; font-family: var(--font-head); font-size: clamp(1.9rem, 1.5rem + 1.6vw, 2.6rem) !important; font-weight: 800;
	line-height: 1.15 !important; margin: 0 0 14px; padding-left: 18px; color: #fff !important; text-shadow: 0 2px 12px rgba(0,0,0,.4);
	border-left: 4px solid var(--red);
}
/* Same direct-h1-targeting fix as .hero-title/.section-title: Elementor's own Kit
   CSS sets font-size/font-weight/margin directly on .elementor-heading-title,
   which beats the (inherited-only) properties above regardless of !important. */
.page-hero-title .elementor-heading-title { font-size: clamp(1.9rem, 1.5rem + 1.6vw, 2.6rem) !important; font-weight: 800 !important; line-height: 1.15 !important; margin: 0 !important; color: #fff !important; }

/* ---------- Conventional NDT accordion ---------- */
.ndt-section { padding: 90px 0; }
.ndt-accordion { margin-top: 2.6rem; --bs-accordion-btn-focus-box-shadow: none; }
.ndt-accordion .accordion-item {
	border: 1px solid var(--border-soft); border-radius: var(--radius-lg) !important; overflow: hidden;
	margin-bottom: 18px; box-shadow: 0 6px 20px rgba(0,0,0,.03);
	transition: box-shadow .3s ease, border-color .3s ease;
}
.ndt-accordion .accordion-item:last-child { margin-bottom: 0; }
.ndt-accordion .accordion-button {
	display: flex; align-items: center; gap: 20px; padding: 26px 28px;
	font-family: var(--font-head); font-size: 1.15rem; font-weight: 600; color: var(--ink);
	background: #fff; box-shadow: none;
}
.ndt-accordion .accordion-button:focus { box-shadow: none; }
.ndt-accordion .accordion-button:not(.collapsed) { color: var(--red); background: #fff; }
.ndt-accordion .accordion-button::after { display: none; content: none; }
.ndt-accordion .accordion-item:has(.accordion-button:not(.collapsed)) { border-color: rgba(222,0,17,.28); box-shadow: 0 16px 36px rgba(0,0,0,.08); }
.ndt-item-num { flex: 0 0 auto; font-family: var(--font-head); font-size: .82rem; font-weight: 700; color: var(--gray-mid); width: 26px; }
.ndt-item-icon {
	flex: 0 0 auto; width: 54px; height: 54px; border-radius: 50%; background: var(--red);
	color: #fff; display: flex; align-items: center; justify-content: center; font-size: 1.35rem;
	transition: background .3s ease, transform .3s ease;
}
.ndt-accordion .accordion-button:not(.collapsed) .ndt-item-icon { background: var(--red-dark); transform: rotate(-6deg) scale(1.05); }
.ndt-item-title { flex: 1 1 auto; }
.ndt-item-chevron {
	flex: 0 0 auto; width: 32px; height: 32px; border-radius: 50%; border: 1.5px solid var(--border-soft);
	display: flex; align-items: center; justify-content: center; color: var(--gray-mid); font-size: .85rem;
	transition: transform .3s ease, background .3s ease, color .3s ease, border-color .3s ease;
}
.ndt-accordion .accordion-button:not(.collapsed) .ndt-item-chevron { background: var(--red); border-color: var(--red); color: #fff; transform: rotate(180deg); }
.ndt-accordion .accordion-body { padding: 0 28px 32px 102px; color: var(--gray-text); font-size: .96rem; line-height: 1.85; }
.ndt-accordion .accordion-body p { margin-bottom: 1.1rem; }
.ndt-accordion .accordion-body p:last-child { margin-bottom: 0; }

@media (max-width: 767.98px) {
	.ndt-accordion .accordion-button { padding: 18px; gap: 12px; font-size: 1rem; }
	.ndt-item-num { display: none; }
	.ndt-item-icon { width: 42px; height: 42px; font-size: 1.1rem; }
	.ndt-accordion .accordion-body { padding: 0 18px 24px 18px; }
}

/* ---------- Individual service landing pages ---------- */
/* !important: Elementor's own .e-con base class applies a default ~10px padding to
   every container regardless of any per-element setting, at the same specificity as
   this rule, loading after it — without !important these sections lose their intended
   breathing room and content sits cramped against the section boundary.
   Standard spacing on every service-page section (incl. the one right after the hero): 50px top and bottom. */
.svc-section { padding: 50px 0 !important; }
/* Equal space above and below the content of every section. Two things used to add space only at the bottom
   (or unevenly from page to page):
   1. Elementor's inner wrapper (.e-con-inner) carries a default 10px top/bottom padding on some pages and 0 on
      others — the same section read 52px from the top edge to its heading on one page and 62px on another.
   2. The last element in a section kept its own bottom margin (16-26px). Elementor containers are flex boxes, so
      that margin doesn't collapse and stacked on top of the 50px padding, making the bottom bigger than the top.
   Scoped to the section's trailing path (last container > last container > last widget > the element), up to
   three containers deep, so spacing between elements in the middle of a section is untouched. */
.svc-section > .e-con-inner { padding-top: 0 !important; padding-bottom: 0 !important; }
.svc-section .container-xl > .elementor-widget:last-child > :is(.credential-note, .svc-strip-list, .section-text):last-child,
.svc-section .container-xl > .e-con:last-child > .elementor-widget:last-child > :is(.credential-note, .svc-strip-list, .section-text):last-child,
.svc-section .container-xl > .e-con:last-child > .e-con:last-child > .elementor-widget:last-child > :is(.credential-note, .svc-strip-list, .section-text):last-child,
.svc-section .container-xl > .e-con:last-child > .e-con:last-child > .e-con:last-child > .elementor-widget:last-child > :is(.credential-note, .svc-strip-list, .section-text):last-child,
.why-helium-content > .elementor-widget:last-child > :is(.credential-note, .svc-strip-list, .section-text):last-child { margin-bottom: 0; }
.svc-section--muted { background: var(--light-bg); }

.svc-tags-card { background: #fff; border: 1px solid var(--border-soft); border-left: 4px solid var(--red); border-radius: var(--radius-lg); padding: 30px; box-shadow: 0 10px 30px rgba(0,0,0,.05); }
.svc-tags-card h3 { font-family: var(--font-head); font-size: 1.05rem; margin-bottom: 18px; }
.svc-tag-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 13px; }
.svc-tag-list li { display: flex; align-items: center; gap: 10px; font-size: .95rem; color: var(--ink); font-weight: 500; }
.svc-tag-list li i { color: var(--red); font-size: 1.05rem; flex: 0 0 auto; }

.feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 24px; margin-top: 2.4rem; }
.feature-grid--5 { grid-template-columns: repeat(5, 1fr); }
@media (max-width: 1199.98px) { .feature-grid--5 { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 767.98px) { .feature-grid--5 { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) { .feature-grid--5 { grid-template-columns: 1fr; } }
.feature-card {
	position: relative; background: #fff; border: 1px solid var(--border-soft); border-top: 4px solid var(--red);
	border-radius: var(--radius-lg); padding: 34px 26px 30px; text-align: center; overflow: hidden;
	transition: transform .3s ease, box-shadow .3s ease;
}
.feature-card:hover { transform: translateY(-6px); box-shadow: 0 18px 40px rgba(0,0,0,.08); }
.feature-card-num {
	position: absolute; top: 6px; right: 16px; font-family: var(--font-head); font-weight: 800;
	font-size: 2.6rem; line-height: 1; color: rgba(28,28,28,.05); pointer-events: none;
}
.feature-icon { position: relative; width: 60px; height: 60px; border-radius: 50%; background: var(--red); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; margin: 0 auto 18px; }
.feature-card h3 { position: relative; font-family: var(--font-head); font-size: 1.05rem; margin-bottom: 10px; }
.feature-card p { position: relative; color: var(--gray-text); font-size: .9rem; line-height: 1.65; margin: 0; }

.process-timeline { position: relative; margin-top: 2.6rem; padding-left: 74px; }
.process-timeline::before { content: ""; position: absolute; left: 27px; top: 8px; bottom: 8px; width: 2px; background: var(--border-soft); }
.process-step { position: relative; padding-bottom: 36px; }
.process-step:last-child { padding-bottom: 0; }
.process-step-num {
	position: absolute; left: -74px; top: 0; width: 56px; height: 56px; border-radius: 50%;
	background: var(--red); color: #fff; display: flex; align-items: center; justify-content: center;
	font-family: var(--font-head); font-weight: 700; font-size: 1.05rem; box-shadow: 0 8px 18px rgba(222,0,17,.3);
}
.process-step h3 { font-family: var(--font-head); font-size: 1.08rem; margin: 13px 0 6px; }
.process-step p { color: var(--gray-text); font-size: .92rem; line-height: 1.7; margin: 0; }

.info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 22px; margin-top: 2.4rem; }
.info-card { background: #fff; border-radius: var(--radius-lg); padding: 26px 22px; border: 1px solid var(--border-soft); transition: transform .3s ease, box-shadow .3s ease; }
.info-card:hover { transform: translateY(-4px); box-shadow: 0 14px 30px rgba(0,0,0,.06); }
.svc-section--muted .info-card { background: #fff; }
.info-card-icon { width: 46px; height: 46px; border-radius: 12px; background: var(--red); color: #fff; display: flex; align-items: center; justify-content: center; font-size: 1.2rem; margin-bottom: 16px; }
.info-card h3 { font-family: var(--font-head); font-size: .98rem; margin-bottom: 8px; }
.info-card p { color: var(--gray-text); font-size: .87rem; line-height: 1.6; margin: 0; }

/* Dark contrast band (mirrors the homepage industries-banner treatment) */
.svc-section--dark { background: #1c1c1c; }
.svc-section--dark .section-title { color: #fff; }
.svc-section--dark .info-card { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.14); }
.svc-section--dark .info-card:hover { background: rgba(255,255,255,.08); box-shadow: 0 14px 30px rgba(0,0,0,.3); }
.svc-section--dark .info-card h3 { color: #fff; }
.svc-section--dark .info-card p { color: rgba(255,255,255,.6); }
.svc-section--dark .section-text { color: rgba(255,255,255,.7); }

/* "Why IRC" credential band: a dark charcoal section (matches the "Our Toolkit" dark band
   elsewhere on the page) with one unified translucent bar divided into panes — deliberately
   different from the feature-grid/info-grid card patterns used elsewhere on the page, so
   this closing trust section reads as its own distinct, premium moment rather than a repeat.
   Previously solid red — the page reads as too red overall with a second full-red band, so
   this one carries the same brand red only via the icon accent, not the whole background. */
.svc-section--brand { background: linear-gradient(135deg, #1c1c1c 0%, #0e0e0e 100%); }
.svc-section--brand .section-title { color: #fff; }
/* White-on-red (unlike white-on-charcoal elsewhere) is naturally lower-contrast, so this
   eyebrow gets a fully-opaque color plus a soft shadow instead of the shared 90%-opacity
   .eyebrow-light default, which was tuned for dark, not saturated-red, backgrounds. */
.svc-section--brand .eyebrow-light { color: #fff; text-shadow: 0 1px 3px rgba(0,0,0,.25); }
.credential-row {
	display: flex; flex-wrap: wrap; margin-top: 2.6rem; border-radius: var(--radius-lg);
	overflow: hidden; background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.2);
	backdrop-filter: blur(6px);
}
.credential-item {
	flex: 1 1 0; min-width: 200px; text-align: center; padding: 38px 22px;
	border-right: 1px solid rgba(255,255,255,.18); transition: background .3s ease;
}
.credential-item:last-child { border-right: none; }
.credential-item:hover { background: rgba(255,255,255,.06); }
.credential-icon {
	width: 74px; height: 74px; border-radius: 50%; background: transparent; color: var(--red);
	display: flex; align-items: center; justify-content: center; font-size: 1.7rem; margin: 0 auto 18px;
	border: 1.5px solid rgba(255,255,255,.3); transition: border-color .25s ease, transform .25s ease;
}
.credential-item:hover .credential-icon { border-color: var(--red); transform: scale(1.06); }
.credential-item h3 { color: #fff; font-family: var(--font-head); font-size: 1.02rem; margin-bottom: 8px; }
.credential-item p { color: rgba(255,255,255,.8); font-size: .85rem; line-height: 1.6; margin: 0; }
.credential-note { text-align: center; color: rgba(255,255,255,.85); font-size: .95rem; margin: 2.2rem 0 0; }
/* Flat variant: same divided-column idea, but no outer glass box — items sit directly on
   the red gradient, separated only by hairlines, so nothing here reads as a "card." */
.credential-row--flat { background: none; border: none; backdrop-filter: none; border-top: 1px solid rgba(255,255,255,.22); border-bottom: 1px solid rgba(255,255,255,.22); border-radius: 0; }
.credential-row--flat .credential-item:hover { background: none; }
.credential-row--flat .credential-icon { background: transparent; border-color: rgba(255,255,255,.4); }

/* ---------- Editorial bleed images: break out of the grid column to the viewport edge
   instead of sitting in a neat contained rectangle — the deliberate anti-"boxy" move. ---------- */
/* overflow-x only (not overflow-y) — the bleed images must not cause horizontal scroll,
   but the oversized ghost numeral is meant to spill past the section's bottom edge; clipping
   both axes was flush-cutting it off instead of letting it fade past the boundary. */
.svc-editorial { overflow-x: hidden; }
.svc-editorial .section-text { margin-bottom: 0rem; }
/* Paragraphs here sit flush (margin-bottom:0 above), so any visual gap between
   them is just incidental leftover from line-height — inconsistent depending on
   how each paragraph happens to wrap. The CTA button needs its own explicit,
   consistent gap instead of relying on that, matching the 1.6rem rhythm used
   for paragraph spacing everywhere else on the site. */
.svc-editorial .btn-red-pill { margin-top: 1.6rem; }
.bleed-img { position: relative; }
.bleed-img img { width: 100% !important; aspect-ratio: 4/3 !important; object-fit: cover !important; display: block; border-radius: var(--radius-lg) !important; }
/* Capped variant: a fixed, modest height (not tied to the sibling text column's height,
   which made it too tall) — centered against the text column via align-items-center. */
.bleed-img--fill { height: auto; }
.bleed-img--fill img { height: 300px; max-height: 300px; aspect-ratio: auto; }

/* ---------- Why Choose Helium: true 50/50 split-screen ----------
   Exact spec: image flush to the left edge (0/0/0), full section height, 50% of the
   viewport wide; content sits at 45% width inside the normal container gutter. Built with
   plain absolute positioning (not the Bootstrap grid) since it needs to bleed past the
   container on the left while staying edge-aligned on the right. */
/* !important on overflow/position: same Elementor-container-vs-theme-CSS conflict as
   .page-hero and .svc-section--photo-dark — without it the absolutely-positioned
   .why-helium-media image bleeds past this section's boundary into the next one. */
.why-helium-split { position: relative !important; overflow: hidden !important; padding: 0 !important; min-height: 560px; display: flex; align-items: center; }
/* !important on these: needed only for pages where this became a real Elementor
   container (native image widget) instead of plain HTML — Elementor's own .e-con
   default (position:relative) has equal specificity and loads later, so without
   it the "absolute, 40%-wide left panel" layout collapses to a normal full-width
   block. Harmless on pages still using the plain-HTML version of this section,
   since there's no competing Elementor container rule there to override. */
.why-helium-media { position: absolute !important; left: 0 !important; top: 0 !important; bottom: 0 !important; width: 40% !important; z-index: 0; }
.why-helium-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Elementor-built pages: the image sits inside an .elementor-widget-image wrapper whose height is
   auto, so the img's height:100% has nothing to resolve against and the photo stops at its own
   natural height — leaving a gap whenever the text column is taller than the photo. Make the
   wrapper fill the panel (which is pinned top:0/bottom:0) and let object-fit:cover crop to fit,
   so the image always touches the section's top and bottom whatever the content length. Desktop
   only: below 992px the panel is a fixed-height band (see the media query below). */
@media (min-width: 992px) {
	.why-helium-split .why-helium-media > .elementor-widget-image { width: 100%; height: 100%; }
	.why-helium-split .why-helium-media > .elementor-widget-image img { width: 100%; height: 100%; object-fit: cover; }
}
.why-helium-content { position: relative; z-index: 1; margin-left: 40% !important; width: 55% !important; padding: 50px clamp(24px, 4vw, 64px) 50px clamp(32px, 5vw, 72px) !important; }

@media (max-width: 991.98px) {
	.why-helium-split { display: block; min-height: 0; padding: 0; }
	/* !important on all four here: the desktop rule above sets position/left/top/
	   bottom/width with !important too, and !important always wins over a plain
	   declaration regardless of source order or which media query comes later — so
	   without matching !important here, the desktop absolute/40%-width layout kept
	   winning even on mobile, leaving the image squeezed narrow beside the text
	   instead of stacking full-width on top of it. */
	/* position:static (not relative) — static elements ignore top/left/right/bottom
	   entirely regardless of what anything else sets on them, a stronger guarantee
	   than relative against whatever kept pulling this out of normal flow before. */
	.why-helium-media { position: static !important; width: 100% !important; height: 220px !important; overflow: hidden; }
	/* !important: WordPress core's responsive-image default (img{height:auto}) otherwise
	   beats this at equal/lower specificity and the photo renders at its natural (much
	   taller) aspect ratio instead of the fixed 320px band, spilling over the text below. */
	.why-helium-media img { width: 100% !important; height: 100% !important; object-fit: cover; }
	/* !important: same reasoning as .why-helium-media above — the desktop
	   margin-left:40% !important / width:55% !important otherwise keeps winning. */
	/* !important on padding too — same reasoning as margin-left/width above: the
	   desktop rule's padding is also !important, so without matching !important here
	   it kept winning at 70px top instead of visibly correct desktop-vs-mobile
	   spacing, or in practice landed inconsistently depending on what else the page's
	   own Elementor per-element padding settings resolved to. Explicit and guaranteed
	   either way now. */
	.why-helium-content { margin-left: 0 !important; width: 100% !important; padding: 50px 32px 50px !important; }
}
/* Phone only — same 50px top as tablet; kept as its own rule so the phone value can be tuned separately. */
@media (max-width: 767.98px) {
	/* Hidden on phones entirely — every attempt at keeping it (full-width band,
	   200x200 square) ran into the same overlap issue, so it's removed outright.
	   Tablet (768-991.98px) still shows it via the shared rule above. */
	.why-helium-media { display: none !important; }
	.why-helium-content { padding-top: 50px !important; }
}
.bleed-right { margin-right: calc(50% - 50vw); }
.bleed-right img { border-radius: var(--radius-lg) 0 0 var(--radius-lg) !important; }
.bleed-left { margin-left: calc(50% - 50vw); }
.bleed-left img { border-radius: 0 var(--radius-lg) var(--radius-lg) 0 !important; }
.bleed-badge {
	position: absolute; left: 28px; bottom: 28px; background: #fff; color: var(--ink);
	font-weight: 700; font-size: .88rem; padding: 14px 22px; border-radius: 999px;
	box-shadow: 0 16px 34px rgba(0,0,0,.22); display: flex; align-items: center; gap: 10px;
}
.bleed-badge i { color: var(--red); font-size: 1.1rem; }
.bleed-ghost-num {
	/* Positioned to stay within .bleed-img's own box (not spilling past the section's
	   padding) — an earlier version bled past the section edge and got flush-clipped by
	   the next section's opaque background painting over it. */
	position: absolute; right: 6%; bottom: 6%; font-family: var(--font-head); font-weight: 800;
	font-size: 6rem; line-height: 1; color: var(--red); opacity: .14; pointer-events: none; letter-spacing: -.02em;
}
@media (max-width: 991.98px) {
	.bleed-right, .bleed-left { margin-left: 0; margin-right: 0; }
	.bleed-right img, .bleed-left img { border-radius: var(--radius-lg) !important; }
	.bleed-ghost-num { font-size: 4.5rem; }
}

/* ---------- Float list: icon+text directly on a photo, no card/panel behind it ---------- */
.float-list { display: grid; grid-template-columns: repeat(2, 1fr); gap: 30px 48px; margin-top: 2.8rem; }
.float-list-item { display: flex; align-items: flex-start; gap: 16px; }
.float-list-item i { font-size: 1.35rem; color: #fff; flex: 0 0 auto; margin-top: 2px; text-shadow: 0 2px 10px rgba(0,0,0,.5); }
.float-list-item h3 { color: #fff; font-family: var(--font-head); font-size: 1.02rem; margin-bottom: 6px; text-shadow: 0 2px 10px rgba(0,0,0,.4); }
.float-list-item p { color: rgba(255,255,255,.78); font-size: .88rem; line-height: 1.6; margin: 0; text-shadow: 0 1px 8px rgba(0,0,0,.4); }
@media (max-width: 767.98px) { .float-list { grid-template-columns: 1fr; } }

/* ---------- Flat checklist strip (replaces a boxed card under "What Is It") ---------- */
.svc-strip-lead { margin-top: 2.8rem; padding-top: 1.8rem; border-top: 1px solid var(--border-soft); font-weight: 600; color: var(--ink); font-size: 1rem; margin-bottom: 1.2rem; }
.svc-strip-list { list-style: none; display: flex; flex-wrap: wrap; gap: 14px 34px; padding: 0; margin: 0; }
.svc-strip-list li { display: flex; align-items: center; gap: 8px; color: var(--gray-text); font-size: .92rem; font-weight: 500; }
.svc-strip-list li i { color: var(--red); font-size: 1rem; }

/* ---------- Photo-backed dark section (equipment) — a real image instead of flat charcoal ---------- */
/* background-color (not the `background` shorthand): a fallback so the section
   never shows blank/gray if no photo layer renders, but the shorthand also
   resets background-image to none — which blocks a real background-image set
   via Elementor's own native Background control (needed for pages where that
   control now drives the actual visible photo, not just the plain <img> layer). */
.svc-section--photo-dark { position: relative; color: #fff; overflow: hidden !important; padding: 50px 0 !important; background-color: #14181f !important; }
/* !important on position/inset here too — see the matching comment on .page-hero-bg
   above: Elementor's own Container "Position: Absolute" setting generates a same-
   specificity, later-loading rule that only sets top/left/right, never bottom. */
.svc-photo-bg { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; z-index: 0; }
.svc-photo-bg img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Lighter than a typical text-on-photo overlay: the equipment list sits inside its own
   .glass-panel (which supplies its own translucent backing + blur for legibility), so this
   only needs to mute the photo enough for the white heading/eyebrow above it to read. */
.svc-photo-overlay { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; background: linear-gradient(180deg, rgba(8,8,8,.62) 0%, rgba(8,8,8,.72) 100%); }
/* Keeps this duplicate image widget in the layout (so nothing collapses) but
   invisible, so the section's OWN background-image — set to the identical
   photo and editable from the section's own Background panel in Elementor —
   is what's actually seen. Consolidates two images that used to require
   editing in two different places down to one that works from either. */
.irc-visually-hidden-image { opacity: 0; }
.svc-photo-inner { position: relative; z-index: 2; }
.svc-section--photo-dark .section-title { color: #fff; }
.svc-section--photo-dark .section-text { color: rgba(255,255,255,.75); }

/* One glass panel holding all 4 items (icon rows divided by hairlines), not 4 separate boxes */
.glass-panel {
	margin-top: 2.6rem; background: rgba(10,10,10,.42); border: 1px solid rgba(255,255,255,.18);
	backdrop-filter: blur(10px); border-radius: var(--radius-lg); display: grid; grid-template-columns: repeat(2, 1fr);
	padding: 0 36px; box-shadow: 0 20px 45px rgba(0,0,0,.25);
}
.glass-panel-item { display: flex; align-items: flex-start; gap: 16px; padding: 26px 0; }
.glass-panel-item:nth-child(odd) { border-right: 1px solid rgba(255,255,255,.16); padding-right: 28px; }
.glass-panel-item:nth-child(even) { padding-left: 28px; }
.glass-panel-item:nth-child(-n+2) { border-bottom: 1px solid rgba(255,255,255,.16); }
.glass-panel-icon {
	width: 44px; height: 44px; border-radius: 10px; background: rgba(255,255,255,.14); color: #fff;
	display: flex; align-items: center; justify-content: center; font-size: 1.1rem; flex: 0 0 auto;
}
.glass-panel-item h3 { color: #fff; font-family: var(--font-head); font-size: .98rem; margin-bottom: 6px; }
.glass-panel-item p { color: rgba(255,255,255,.65); font-size: .85rem; line-height: 1.6; margin: 0; }

/* ---------- Applications list: bigger icons, numbered rows, hover highlight ---------- */
.apply-list { margin-top: 2.6rem; }
.apply-item {
	display: flex; align-items: center; gap: 22px; padding: 22px 16px;
	border-bottom: 1px solid var(--border-soft); border-radius: var(--radius-md);
	transition: background .25s ease;
}
.apply-item:first-child { padding-top: 0; }
.apply-item:last-child { border-bottom: none; padding-bottom: 0; }
.apply-item:hover { background: rgba(222,0,17,.04); }
.apply-item-num { flex: 0 0 auto; font-family: var(--font-head); font-weight: 700; font-size: .82rem; color: var(--gray-mid); width: 22px; }
.apply-item-icon {
	flex: 0 0 auto; width: 60px; height: 60px; border-radius: 16px; background: var(--red); color: #fff;
	display: flex; align-items: center; justify-content: center; font-size: 1.4rem;
	transition: transform .25s ease;
}
.apply-item:hover .apply-item-icon { transform: rotate(-4deg) scale(1.05); }
.apply-item-body h3 { font-family: var(--font-head); font-size: 1.1rem; font-weight: 700; color: var(--ink); margin-bottom: 4px; }
.apply-item-body p { color: var(--gray-text); font-size: .92rem; line-height: 1.6; margin: 0; }
@media (max-width: 575.98px) {
	.apply-item { flex-wrap: wrap; gap: 12px 16px; }
	.apply-item-num { display: none; }
}

/* ---------- Plain icon+text list (applications) — no card borders at all ---------- */
.plain-list-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 32px 42px; margin-top: 2.6rem; }
.plain-list-item { display: flex; align-items: flex-start; gap: 18px; }
.plain-list-icon {
	width: 50px; height: 50px; border-radius: 12px; background: var(--red); color: #fff;
	display: flex; align-items: center; justify-content: center; font-size: 1.2rem; flex: 0 0 auto;
}
.plain-list-item h3 { font-family: var(--font-head); font-size: 1.02rem; color: var(--ink); margin-bottom: 6px; }
.plain-list-item p { color: var(--gray-text); font-size: .89rem; line-height: 1.6; margin: 0; }

/* ---------- Editorial pull-quotes (testimonials) — accent line, no card box ---------- */
.pullquote-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 50px; margin-top: 2.6rem; }
.pullquote { border-left: 3px solid var(--red); padding-left: 26px; }
.pullquote-icon { color: rgba(222,0,17,.25); font-size: 2.4rem; line-height: 1; display: block; margin-bottom: 6px; }
.pullquote-text { font-size: 1.15rem; color: var(--ink); line-height: 1.6; font-style: italic; font-weight: 500; margin-bottom: 16px; }
.pullquote-author { font-weight: 700; font-size: .92rem; color: var(--ink); }
.pullquote-author span { display: block; font-weight: 500; color: var(--gray-mid); font-size: .82rem; margin-top: 2px; }

/* ---------- Testimonial carousel (Bootstrap Carousel, restyled to match the pullquote look) ---------- */
.pullquote-carousel .carousel-item { transition: opacity .5s ease; }
.pullquote-centered { border-left: none; padding-left: 0; text-align: center; max-width: 640px; margin: 0 auto; }
.pullquote-centered .pullquote-icon { color: rgba(222,0,17,.22); font-size: 2.8rem; }
.pullquote-centered .pullquote-text { font-size: 1.3rem; }
.pullquote-centered .pullquote-author { font-size: .95rem; }
.pullquote-dots { position: static; margin: 20px 0 0 !important; gap: 8px; }
.pullquote-dots [data-bs-target] {
	width: 8px; height: 8px; border-radius: 50%; background: var(--border-soft); opacity: 1;
	border: none; text-indent: -9999px; transition: background .2s ease, transform .2s ease;
}
.pullquote-dots [data-bs-target].active { background: var(--red); transform: scale(1.2); }

@media (max-width: 767.98px) {
	.glass-panel { grid-template-columns: 1fr; padding: 0 24px; }
	.glass-panel-item, .glass-panel-item:nth-child(even) { border-right: none; padding-left: 0; padding-right: 0; }
	.glass-panel-item:nth-child(-n+2) { border-bottom: 1px solid rgba(255,255,255,.16); }
	.glass-panel-item:last-child { border-bottom: none; }
	.plain-list-grid { grid-template-columns: 1fr; gap: 26px; }
}

@media (max-width: 991.98px) {
	.credential-item { flex: 1 1 50%; border-right: none; border-bottom: 1px solid rgba(255,255,255,.18); }
	.credential-item:nth-child(odd) { border-right: 1px solid rgba(255,255,255,.18); }
}
@media (max-width: 575.98px) {
	.credential-item { flex: 1 1 100%; border-right: none !important; }
}

/* ---------- Editorial inner-page layout (modelled on ircengg.com's real service pages):
   one plain photo, running text with subheadings, a plain sidebar — no cards anywhere. ---------- */
.editorial-wrap { padding: 56px 0; }
.editorial-photo { width: 100%; height: auto; display: block; margin-bottom: 32px; border-radius: 0; box-shadow: none; }
.editorial-lead {
	font-size: 1.15rem; font-weight: 500; color: var(--ink); line-height: 1.7;
	margin-bottom: 2rem; padding-bottom: 2rem; border-bottom: 1px solid var(--border-soft);
}
.editorial-main h3 { font-family: var(--font-head); font-size: 1.35rem; font-weight: 700; color: var(--ink); margin: 2.4rem 0 1rem; }
.editorial-main h3:first-child { margin-top: 0; }
.editorial-main p { color: var(--gray-text); font-size: 1rem; line-height: 1.8; margin-bottom: 1.2rem; }
.editorial-main ul, .editorial-main ol { margin: 0 0 1.2rem; padding-left: 1.4rem; color: var(--gray-text); font-size: 1rem; line-height: 1.8; }
.editorial-main li { margin-bottom: .5rem; }
.editorial-main li strong { color: var(--ink); }
.editorial-main blockquote {
	margin: 0 0 1.4rem; padding: 18px 24px; border-left: 3px solid var(--red);
	background: var(--light-bg); border-radius: 0 8px 8px 0;
}
.editorial-main blockquote p { font-style: italic; color: var(--ink); margin-bottom: 8px; }
.editorial-main blockquote cite { font-style: normal; font-size: .85rem; color: var(--gray-mid); font-weight: 600; }

.editorial-sidebar-block { margin-bottom: 2.2rem; }
.editorial-sidebar-block h4 {
	font-family: var(--font-head); font-size: 1rem; font-weight: 700; color: var(--ink);
	margin: 0 0 14px; padding-bottom: 10px; border-bottom: 2px solid var(--red); display: inline-block;
}
.editorial-sidebar-block ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.editorial-sidebar-block a { color: var(--red); font-size: .92rem; font-weight: 500; }
.editorial-sidebar-block a:hover { color: var(--red-dark); text-decoration: underline; }
.editorial-cta { background: var(--light-bg); border-radius: var(--radius-lg); padding: 24px; }
.editorial-cta p { font-weight: 600; color: var(--ink); margin-bottom: 12px; font-size: .92rem; }
.editorial-cta-phone { display: flex; align-items: center; gap: 8px; color: var(--red); font-weight: 700; font-size: 1.05rem; margin-bottom: 16px; }

/* Full-bleed gray band wrapping the second half of the article — matches the reference
   site's habit of alternating white/gray bands to break up a long text-heavy page. */
.editorial-band { background: var(--light-bg); }

@media (max-width: 991.98px) {
	.editorial-sidebar { margin-top: 40px; }
}

/* Applications: icon-left row cards (2-up), distinct from the equipment icon grid above */
.info-row-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 20px; margin-top: 2.4rem; }
.info-row-card {
	display: flex; align-items: flex-start; gap: 18px; background: #fff; border: 1px solid var(--border-soft);
	border-radius: var(--radius-lg); padding: 26px; transition: transform .3s ease, box-shadow .3s ease;
}
.info-row-card:hover { transform: translateY(-4px); box-shadow: 0 14px 30px rgba(0,0,0,.06); }
.info-row-card .info-card-icon { margin-bottom: 0; flex: 0 0 auto; }
.info-row-card h3 { font-family: var(--font-head); font-size: .98rem; margin-bottom: 6px; }
.info-row-card p { color: var(--gray-text); font-size: .87rem; line-height: 1.6; margin: 0; }

.testimonial-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 24px; margin-top: 2.4rem; }
.testimonial-card { background: #fff; border: 1px solid var(--border-soft); border-radius: var(--radius-lg); padding: 32px; }
.testimonial-quote-icon { color: rgba(222,0,17,.2); font-size: 2.3rem; line-height: 1; margin-bottom: 8px; }
.testimonial-card p.quote { font-size: 1rem; color: var(--ink); line-height: 1.7; font-style: italic; margin-bottom: 18px; }
.testimonial-author { font-weight: 700; font-size: .92rem; color: var(--ink); }
.testimonial-author span { display: block; font-weight: 500; color: var(--gray-mid); font-size: .82rem; margin-top: 2px; }

@media (max-width: 767.98px) {
	.process-timeline { padding-left: 60px; }
	.process-step-num { left: -60px; width: 46px; height: 46px; font-size: .92rem; }
}

/* Certificate name under each accreditation image */
.accred-card { flex-direction: column; }
.accred-card > a, .accred-card > img { flex: 1 1 auto; min-height: 0; }
.accred-caption { margin: 14px 0 0; text-align: center; font-size: .95rem; font-weight: 600; line-height: 1.35; color: var(--ink); }
.accred-card { padding-bottom: 10px; }
.accred-caption { margin-bottom: 0; }
.accred-card { padding: 8px 20px 2px; }
.accred-caption { margin-top: 6px; line-height: 1.25; }

/* =========================================================
   SERVICE PAGES — SHARED POLISH. These rules live on classes every one of the 55 service pages
   uses (page-hero, svc-editorial, bleed-img, reason-list), so they fix all of them at once.
   Goal: layouts that stay balanced when a page has more (or longer) copy than the sample page.
   ========================================================= */

/* Titles that wrap should wrap evenly (no one-word last lines) */
.svc-section .section-title .elementor-heading-title, .page-hero-title .elementor-heading-title { text-wrap: balance; }

/* Inner-page banner: identical height on every page (the value is --page-hero-h = 260px, the services banner's original height). Each service page also stores its own
   "min height: 260px" inside Elementor, so the shared value has to win over that. On small phones the banner may grow,
   but only as far as a long title needs. */
.page-hero { height: var(--page-hero-h) !important; min-height: var(--page-hero-h) !important; }
@media (max-width: 575.98px) {
	.page-hero, .ab-hero { height: auto !important; min-height: var(--page-hero-h) !important; max-height: none !important; padding-top: 28px !important; padding-bottom: 28px !important; }
}

/* small phones (<= 374px): slightly smaller banner text so even the longest title fits the same banner */
@media (max-width: 374.98px) {
	.page-hero-title .elementor-heading-title { font-size: 1.45rem !important; line-height: 1.15 !important; }
	.page-hero .page-breadcrumb, .ab-hero .page-breadcrumb { font-size: .7rem; margin-bottom: 8px; }
	.page-hero-title { padding-left: 12px; }
}

/* ---------- "What is it" (svc-editorial): copy | photo ---------- */
/* a long headline is a sentence, not a title — smaller, balanced, easier to read */
.svc-editorial .section-title .elementor-heading-title { font-size: var(--fs-h2) !important; line-height: 1.15 !important; letter-spacing: -.01em; }
/* two paragraphs used to sit flush against each other */
.svc-editorial .section-text { margin-bottom: 1.1rem !important; }
.svc-editorial .elementor-widget:last-child .section-text { margin-bottom: 0 !important; }
.svc-editorial .btn-red-pill { margin-top: .6rem; }
@media (min-width: 992px) {
	/* equal columns (was 5 / 7) so long copy has room, and both columns stretch to the same height */
	.svc-editorial .row.align-items-center { align-items: stretch !important; }
	.svc-editorial .row > .col-lg-5, .svc-editorial .row > .col-lg-7 { width: 50% !important; }
	.svc-editorial .row > .col-lg-5 { justify-content: center !important; }
	/* the photo fills the column, so it is never shorter than the copy beside it */
	.svc-editorial .row > .col-lg-7 { display: flex !important; flex-direction: column !important; justify-content: center !important; }
	.svc-editorial .bleed-img:not(.bleed-img--fill) { flex: 1 1 auto; display: flex; flex-direction: column; max-height: 640px; }
	.svc-editorial .bleed-img:not(.bleed-img--fill) .elementor-widget-image { flex: 1 1 auto; min-height: 0; display: flex; }
	.svc-editorial .bleed-img:not(.bleed-img--fill) img { flex: 1 1 auto; height: 100% !important; min-height: 380px; aspect-ratio: auto !important; }
}

/* ---------- "Why" list (reason-list): icon | title above description ----------
   The old 3-column row gave the title a fixed 170px, so longer titles broke mid-word
   ("Follow-/Up") and descriptions were squeezed. Title and description now share one column. */
.why-helium-split .reason-item { display: grid; grid-template-columns: 78px minmax(0, 1fr); column-gap: 22px; row-gap: 4px; align-items: center; }
.why-helium-split .reason-icon { grid-row: 1 / span 2; }
.why-helium-split .reason-title { grid-column: 2; align-self: end; flex: none; padding-top: 0 !important; }
.why-helium-split .reason-desc { grid-column: 2; align-self: start; padding-top: 0 !important; }
.why-helium-split .reason-title h4 { font-size: 1.15rem; line-height: 1.3; text-wrap: balance; }
.why-helium-split .reason-desc p { font-size: .95rem; line-height: 1.65; }
@media (max-width: 575.98px) {
	.why-helium-split .reason-item { grid-template-columns: 60px minmax(0, 1fr); column-gap: 16px; }
	.why-helium-split .reason-icon { width: 60px; height: 60px; }
}

/* ---------- Icons that rendered as an empty circle ----------
   Two service pages use icon names that exist in Font Awesome but NOT in Bootstrap Icons 1.11.3 (the set this
   site loads), so the glyph never appeared. They are mapped here to the closest real Bootstrap glyph, which fixes
   every place they are used (Third Party Inspection, Failure Investigation) without editing any page. */
.bi-balance-scale::before { content: "\f52f"; } /* shield-check: independent / unbiased assurance */
.bi-flask::before { content: "\f30c"; } /* droplet-half: laboratory (same icon the old About page used for the lab) */

/* Safety net: an icon name that does not exist in Bootstrap Icons draws an empty circle. Every real name has a
   .bi-xxx::before rule of higher specificity, so it always wins over this :where() rule (specificity 0); only unknown
   names fall back to a neutral check-circle instead of nothing. */
:where(i.bi)::before { content: "\f270"; } /* check2-circle */

/* =========================================================
   ABOUT US — built from native Elementor widgets (Heading, Text Editor, Image, Counter,
   Icon Box, Button, Nested Tabs, Accordion). Every selector is ab-* / scoped to a class
   used only on that page, so nothing here reaches Home or the service pages.
   All copy, images, icons, links and numbers are edited in the Elementor editor; this CSS
   only supplies the look. Decoration is CSS-only (no extra text or images).
   Look: charcoal + white + light grey bands. Brand red is used sparingly — the short bar above
   headings, the icon circles in the facts and services, one small bar on the featured reason, hover lines, button hover. Section rhythm:
   dark hero > white intro > light-grey facts band > white services > dark why > white values > grey FAQ.
   ========================================================= */
:root {
	--ab-ink: #14181f;
	--ab-text: #3d434b;
	--ab-soft: #f4f5f6;
	--ab-line: #e4e6e9;
	--ab-mid: #5b616b;
	--ab-tint: #eceef1;
}

/* footer/menu links jump to these sections; keep their headings clear of the sticky header */
.ab-intro, .ab-services, .ab-why, .ab-values, .ab-faq { scroll-margin-top: 90px; }

/* Elementor gives every flex container its own gap/padding/width; these full-width bands and
   the Bootstrap .container-xl wrapper inside them must stay exactly as laid out here. */
.ab-hero, .ab-intro, .ab-facts, .ab-services, .ab-why, .ab-values, .ab-faq { width: 100% !important; max-width: 100% !important; }
/* The inner .container-xl must line up with the header/footer container at EVERY width, so it follows
   Bootstrap's own breakpoints exactly: fluid below 1200px, 1140px from 1200px, 1320px from 1400px.
   Side padding below 992px comes from the site-wide .container-xl rules (20px / 32px). */
.ab-hero > .container-xl, .ab-intro > .container-xl, .ab-facts > .container-xl, .ab-services > .container-xl,
.ab-why > .container-xl, .ab-values > .container-xl, .ab-faq > .container-xl { width: 100% !important; max-width: none !important; }
@media (min-width: 992px) {
	.ab-hero > .container-xl, .ab-intro > .container-xl, .ab-facts > .container-xl, .ab-services > .container-xl,
	.ab-why > .container-xl, .ab-values > .container-xl, .ab-faq > .container-xl { padding-left: 12px !important; padding-right: 12px !important; }
}
@media (min-width: 1200px) {
	.ab-hero > .container-xl, .ab-intro > .container-xl, .ab-facts > .container-xl, .ab-services > .container-xl,
	.ab-why > .container-xl, .ab-values > .container-xl, .ab-faq > .container-xl { max-width: 1140px !important; }
}
@media (min-width: 1400px) {
	.ab-hero > .container-xl, .ab-intro > .container-xl, .ab-facts > .container-xl, .ab-services > .container-xl,
	.ab-why > .container-xl, .ab-values > .container-xl, .ab-faq > .container-xl { max-width: 1320px !important; }
}
/* One font family for every widget in these sections (Elementor's kit default is Roboto; the site uses Inter). */
.ab-hero *, .ab-intro *, .ab-facts *, .ab-services *, .ab-why *, .ab-values *, .ab-faq * { font-family: var(--font-body) !important; }
/* the e-con default widget spacing would add gaps inside our own spacing system */
.ab-hero .elementor-widget, .ab-intro .elementor-widget, .ab-facts .elementor-widget, .ab-services .elementor-widget,
.ab-why .elementor-widget, .ab-values .elementor-widget, .ab-faq .elementor-widget { margin-block-end: 0 !important; }

/* ---------- Shared type ---------- */
.ab-head { margin-bottom: 3rem !important; max-width: 760px; }
.ab-title .elementor-heading-title { margin: 0 !important; color: var(--ab-ink) !important; font-size: clamp(1.9rem, 1.35rem + 1.9vw, 2.7rem) !important; font-weight: 700 !important; line-height: 1.12 !important; letter-spacing: -.02em; text-wrap: balance; }
.ab-title .elementor-heading-title::before { content: ""; display: block; width: 44px; height: 4px; border-radius: 4px; background: var(--red); margin-bottom: 18px; }
.ab-kicker .elementor-heading-title, .ab-eyebrow .elementor-heading-title { display: flex; align-items: center; gap: 12px; margin: 0 0 1.1rem !important; color: var(--ab-mid) !important; font-size: .82rem !important; font-weight: 700 !important; line-height: 1.5 !important; letter-spacing: .16em; text-transform: uppercase; }
.ab-kicker .elementor-heading-title::before, .ab-eyebrow .elementor-heading-title::before { content: ""; flex: none; width: 34px; height: 2px; background: var(--red); }

/* ---------- Hero: photo (Elementor background), breadcrumb + title. Same banner as every service page:
   height comes from --page-hero-h, overlay / title / breadcrumb styles from the shared .page-hero rules. ---------- */
.ab-hero { position: relative; height: var(--page-hero-h) !important; display: flex !important; flex-direction: column !important; align-items: center !important; justify-content: center !important; color: #fff; overflow: hidden !important; background-color: #101318; }
.ab-hero::after { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: var(--hero-overlay); }
.ab-hero-inner { position: relative !important; z-index: 2 !important; }
.ab-hero .page-breadcrumb { display: flex !important; align-items: center; gap: 10px; margin: 0 0 12px !important; color: rgba(255,255,255,.65) !important; }
.ab-hero .page-breadcrumb p { margin: 0; display: contents; }
.ab-hero .page-breadcrumb a { color: rgba(255,255,255,.65) !important; }
.ab-hero .page-breadcrumb a:hover, .ab-hero .page-breadcrumb .current { color: #fff !important; }

/* ---------- Introduction (white): statement + copy | photo ----------
   The photo is a finished collage on a white background (its own cards and dots), so it sits
   on the page as-is: no frame, shadow or radius on top of it. */
.ab-intro { background: #fff !important; padding: 50px 0 !important; }
.ab-split { display: grid !important; grid-template-columns: 1fr 1fr; gap: 4rem !important; align-items: center; }
.ab-intro-media { display: flex !important; flex-direction: column !important; justify-content: center !important; align-self: stretch; }
.ab-lead, .ab-lead p { font-size: clamp(1.2rem, 1rem + .75vw, 1.55rem); font-weight: 700; line-height: 1.42; letter-spacing: -.01em; color: var(--ab-ink); }
.ab-lead p { margin: 0 0 1.6rem; padding-left: 20px; border-left: 3px solid #c9ced4; }
.ab-body, .ab-body p { font-size: 1.02rem; line-height: 1.8; color: var(--ab-text); }
.ab-body p { margin: 0 0 1.1rem; }
.ab-body p:last-child { margin-bottom: 0; }
.ab-photo img { display: block; width: 100%; height: auto; }

/* ---------- Key facts (light grey band): red icon in a soft-red circle, dark number, grey label,
   left-aligned, thin vertical dividers. The icon is a native Icon widget in each .ab-fact. ---------- */
.ab-facts { background: var(--ab-tint) !important; padding: 50px 0 !important; }
.ab-facts-row { display: grid !important; grid-template-columns: repeat(4, 1fr); }
.ab-fact { padding: 6px 28px 6px 32px !important; text-align: left; border-right: 1px solid #d3d7dd; justify-content: flex-start !important; }
.ab-fact:first-child { padding-left: 0 !important; }
.ab-fact:last-child { border-right: 0; }
/* .elementor-widget is zeroed by the "margin-block-end: 0 !important" rule near the top of this block,
   so the icon's spacing needs the same specificity to win. */
.ab-facts .ab-fact-icon.elementor-widget { margin-block-end: 10px !important; }
.ab-fact-icon .elementor-icon-wrapper { text-align: left; }
.ab-fact-icon .elementor-icon { width: 54px !important; height: 54px !important; border-radius: 50%; background: rgba(222,0,17,.1) !important; color: var(--red) !important; fill: var(--red) !important; display: inline-flex !important; align-items: center; justify-content: center; padding: 0 !important; }
.ab-fact-icon .elementor-icon svg { width: 1.5rem !important; height: 1.5rem !important; fill: currentColor !important; }
.ab-fact .elementor-counter { display: flex; flex-direction: column-reverse; align-items: flex-start; }
.ab-fact .elementor-counter-number-wrapper, .ab-fact-text .elementor-heading-title { display: flex; justify-content: flex-start; white-space: nowrap; font-size: clamp(1.6rem, 1.2rem + 1.1vw, 2.15rem) !important; font-weight: 800 !important; line-height: 1.1 !important; letter-spacing: -.02em; color: var(--ab-ink) !important; margin: 0 !important; }
/* "NABL + IBR" is text, not a number, so it is set a touch smaller to fit the column — but its line box
   is kept as tall as the counters' (same clamp x line-height) so the labels below all start at one height. */
.ab-fact-text .elementor-heading-title { font-size: clamp(1.4rem, 1rem + 1vw, 1.9rem) !important; align-items: center; min-height: calc(clamp(1.6rem, 1.2rem + 1.1vw, 2.15rem) * 1.1); }
.ab-fact .elementor-counter-title, .ab-fact-label, .ab-fact-label p { display: block; max-width: 230px; margin: 10px 0 0 !important; font-size: .92rem !important; font-weight: 400 !important; line-height: 1.55 !important; text-align: left; text-transform: none; color: var(--ab-text) !important; }
/* the label <p> sits inside .ab-fact-label, which already carries the 10px gap — don't double it */
.ab-fact-label p { margin: 0 !important; }

/* ---------- What We Do (white): soft-shadow cards, red icon in a light-red circle ---------- */
.ab-services { background: #fff !important; padding: 50px 0 !important; }
.ab-title .ab-accent { color: var(--red) !important; }
.ab-sub, .ab-sub p { font-size: 1.08rem; line-height: 1.6; color: var(--ab-text); }
.ab-sub p { margin: 14px 0 0; }
.ab-grid { display: grid !important; gap: 24px !important; }
.ab-grid-3 { grid-template-columns: repeat(3, 1fr); }
.ab-svc { position: relative; height: 100%; padding: 30px 28px 30px; border-radius: 14px; background: #fff; border: 1px solid var(--ab-line); box-shadow: 0 8px 28px rgba(20,24,31,.06); }
/* Red top bar: a card-shaped overlay clipped to its top 4px, so it follows the rounded corners without
   overflow:hidden on the card (which would also clip the hover bridge below). Wipes in left to right on hover. */
.ab-svc::after { content: ""; position: absolute; inset: -1px; border-radius: inherit; background: var(--red); pointer-events: none; clip-path: inset(0 100% calc(100% - 4px) 0); transition: clip-path .4s cubic-bezier(.22,.61,.36,1); }
.ab-svc:hover::after { clip-path: inset(0 0 calc(100% - 4px) 0); }
/* Hover bridge: the cards lift on hover, so without this the pointer resting near a card's bottom edge ends up
   outside it the moment it moves up — the card drops, re-hovers, lifts again, and flickers. This invisible strip
   under the card moves with it and keeps the pointer inside for the whole lift. */
.ab-svc::before, .ab-value::before { content: ""; position: absolute; left: 0; right: 0; top: 100%; height: 12px; }
.ab-svc .elementor-icon-box-wrapper, .ab-svc .elementor-icon-box-content { display: block !important; text-align: left !important; }
.ab-svc .elementor-icon-box-icon { margin: 0 !important; display: inline-flex; }
.ab-svc .elementor-icon { width: 56px !important; height: 56px !important; border-radius: 50% !important; background: rgba(222,0,17,.1) !important; color: var(--red) !important; fill: var(--red) !important; display: inline-flex !important; align-items: center; justify-content: center; padding: 0 !important; transition: background-color .3s ease, color .3s ease; }
.ab-svc .elementor-icon svg { width: 1.4rem !important; height: 1.4rem !important; fill: currentColor !important; }
.ab-svc .elementor-icon-box-title { margin: 20px 0 10px !important; font-size: 1.15rem !important; font-weight: 700 !important; line-height: 1.3 !important; color: var(--ab-ink) !important; }
.ab-svc .elementor-icon-box-title span { color: inherit !important; font: inherit !important; }
.ab-svc .elementor-icon-box-description { margin: 0 !important; font-size: .95rem !important; line-height: 1.7 !important; color: var(--ab-text) !important; }
.ab-svc:hover { translate: 0 -7px; box-shadow: 0 24px 48px rgba(20,24,31,.13); }
.ab-svc:hover .elementor-icon { background: var(--red) !important; color: #fff !important; fill: #fff !important; }

/* Cards are themselves the scroll-reveal ("stagger") children, so hover (translate, colours) must
   not share the reveal's transform/opacity timing + staggered delay. */
/* ".elementor-element" is in the selector on purpose: Elementor's own default for widgets without a container
   wrapper (transition: background, border, border-radius, box-shadow, transform) has specificity 0,2,0 and loads
   later, so a plain ".stagger > *" rule lost to it — leaving "translate" (the hover lift) with NO transition,
   so cards snapped up instead of gliding. One class more makes this list win. */
.ab-grid.stagger > .elementor-element, .ab-values-grid.stagger > .elementor-element { transition: opacity .6s ease var(--d, 0s), transform .6s ease var(--d, 0s), translate .4s cubic-bezier(.22,.61,.36,1), background-color .3s ease, border-color .3s ease, box-shadow .4s cubic-bezier(.22,.61,.36,1); }
.ab-grid.stagger.is-visible > .elementor-element, .ab-values-grid.stagger.is-visible > .elementor-element { transition-delay: var(--d, 0s), var(--d, 0s), 0s, 0s, 0s, 0s; }
@media (prefers-reduced-motion: reduce) { .ab-svc:hover, .ab-value:hover { translate: none; } }
.stagger.is-visible > :nth-child(1) { --d: .05s; }
.stagger.is-visible > :nth-child(2) { --d: .13s; }
.stagger.is-visible > :nth-child(3) { --d: .21s; }
.stagger.is-visible > :nth-child(4) { --d: .29s; }
.stagger.is-visible > :nth-child(n+5) { --d: .37s; }

/* ---------- Why clients choose IRC (dark): heading, one featured red card + the rest, CTA ---------- */
.ab-why { position: relative; background: var(--ab-ink) !important; color: #fff; padding: 50px 0 !important; overflow: hidden; }
.ab-why::after { content: ""; position: absolute; inset: 0; pointer-events: none;
	background: radial-gradient(circle at 8% 0%, rgba(255,255,255,.08), transparent 40%), radial-gradient(rgba(255,255,255,.05) 1.2px, transparent 1.2px); background-size: auto, 26px 26px; }
.ab-why > .container-xl { position: relative; z-index: 1; }
.ab-why .ab-title .elementor-heading-title { color: #fff !important; }
.ab-why-split { display: flex !important; flex-direction: column !important; gap: 3rem !important; }
/* The reasons are one Text Editor list; the first is the featured card, the rest fill the grid beside it.
   Any number of reasons still lays out cleanly (rows are added automatically). */
.ab-why-list ol { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1.15fr 1fr 1fr; gap: 20px; counter-reset: abwhy; }
.ab-why-list li { position: relative; display: flex; flex-direction: column; gap: 16px; margin: 0; padding: 30px 28px 32px; border: 1px solid rgba(255,255,255,.14); border-radius: 16px; background: rgba(255,255,255,.05); font-size: 1rem; font-weight: 400; line-height: 1.65; color: rgba(255,255,255,.88); counter-increment: abwhy; overflow: hidden; transition: translate .3s ease, background-color .3s ease, border-color .3s ease; -webkit-font-smoothing: antialiased; }
.ab-why-list li::before { content: counter(abwhy, decimal-leading-zero); font-size: 2.1rem; font-weight: 800; line-height: 1; letter-spacing: -.02em; color: rgba(255,255,255,.9); }
.ab-why-list li:first-child { grid-row: span 2; justify-content: space-between; border-color: rgba(255,255,255,.24); background: linear-gradient(150deg, #2c343f 0%, #1b2027 100%); box-shadow: 0 22px 46px rgba(0,0,0,.35); font-size: 1.28rem; font-weight: 600; line-height: 1.5; color: #fff; }
.ab-why-list li:first-child::before { font-size: 3.4rem; color: #fff; }
.ab-why-list li:first-child::after { content: ""; position: absolute; left: 28px; top: 0; width: 56px; height: 4px; background: var(--red); }
.ab-why-list li:hover { translate: 0 -5px; }
.ab-why-list li:not(:first-child):hover { background: rgba(255,255,255,.09); border-color: rgba(255,255,255,.4); }
.ab-cta { margin-top: 3.5rem !important; border-radius: 16px; padding: 34px 40px !important; background: #fff; color: var(--ab-ink); display: flex !important; flex-direction: row !important; flex-wrap: wrap; gap: 24px !important; align-items: center !important; justify-content: space-between !important; }
.ab-cta-text, .ab-cta-text p { margin: 0; max-width: 680px; font-size: 1.25rem; font-weight: 700; line-height: 1.45; letter-spacing: -.01em; color: var(--ab-ink); }
.ab-cta-btn .elementor-button { position: relative; overflow: hidden; display: inline-flex; padding: .9rem 2rem !important; border-radius: 50px !important; background: var(--ab-ink) !important; border: 2px solid var(--ab-ink) !important; color: #fff !important; fill: #fff !important; font-family: var(--font-body) !important; font-size: .8rem !important; font-weight: 700 !important; text-transform: uppercase; letter-spacing: .08em; line-height: 1.5 !important; text-decoration: none !important; transition: all .25s ease; box-shadow: none !important; }
.ab-cta-btn .elementor-button:hover, .ab-cta-btn .elementor-button:focus { background: var(--red) !important; border-color: var(--red) !important; color: #fff !important; }
.ab-cta-btn .elementor-button-content-wrapper { gap: 8px; }
.ab-cta-btn .elementor-button-icon svg { width: 1em; height: 1em; fill: currentColor; }

/* ---------- Core values (white): header row (heading | copy), then a full-width card grid ---------- */
.ab-values { background: #fff !important; padding: 50px 0 !important; }
.ab-values-split { display: flex !important; flex-direction: column !important; gap: 3.5rem !important; }
.ab-values-intro { display: grid !important; grid-template-columns: 1fr 1fr; gap: 4rem !important; align-items: end; }
.ab-values .section-title .elementor-heading-title { margin: 0 !important; color: var(--ab-ink) !important; font-size: clamp(1.9rem, 1.35rem + 1.9vw, 2.7rem) !important; font-weight: 700 !important; line-height: 1.12 !important; letter-spacing: -.02em; text-wrap: balance; }
.ab-values-sub, .ab-values-sub p { font-size: 1.15rem; font-weight: 600; line-height: 1.5; color: var(--ab-ink); text-wrap: balance; }
.ab-values-sub p { margin: 0 0 12px; }
.ab-values-intro .section-text, .ab-values-intro .section-text p { margin: 0; font-size: 1rem; line-height: 1.8; color: var(--ab-text); }
.ab-values-grid { display: grid !important; grid-template-columns: repeat(2, 1fr); gap: 20px !important; }
.ab-value { position: relative; padding: 30px 30px 32px; border: 1px solid transparent; border-radius: 16px; background: var(--ab-soft); }
.ab-value:last-child:nth-child(odd) { grid-column: span 2; } /* an odd count ends on one full-width card */
.ab-value .elementor-icon-box-wrapper { display: flex !important; align-items: flex-start; gap: 22px; text-align: left !important; }
.ab-value .elementor-icon-box-icon { margin: 0 !important; flex: none; }
.ab-value .elementor-icon-box-content { flex: 1; min-width: 0; text-align: left !important; }
.ab-value .elementor-icon { width: 62px !important; height: 62px !important; border-radius: 50% !important; background: #fff !important; color: var(--ab-ink) !important; fill: var(--ab-ink) !important; display: inline-flex !important; align-items: center; justify-content: center; padding: 0 !important; transition: background-color .3s ease, color .3s ease; }
.ab-value .elementor-icon svg { width: 1.5rem !important; height: 1.5rem !important; fill: currentColor !important; }
.ab-value .elementor-icon-box-title { margin: 2px 0 8px !important; font-size: 1.15rem !important; font-weight: 700 !important; line-height: 1.3 !important; color: var(--ab-ink) !important; }
.ab-value .elementor-icon-box-title span { color: inherit !important; font: inherit !important; }
.ab-value .elementor-icon-box-description { margin: 0 !important; font-size: .97rem !important; line-height: 1.75 !important; color: var(--ab-text) !important; }
.ab-value:hover { translate: 0 -5px; background: #fff; border-color: var(--ab-line); box-shadow: 0 20px 42px rgba(20,24,31,.1); }
.ab-value:hover .elementor-icon { background: var(--ab-ink) !important; color: #fff !important; fill: #fff !important; }

/* ---------- FAQ (grey): Nested Tabs (categories) > Accordion (questions) ---------- */
.ab-faq { background: var(--ab-soft) !important; padding: 50px 0 !important; }
.ab-faq-tabs { counter-reset: abq; }
.ab-faq-tabs .e-n-tabs { gap: 3rem !important; align-items: flex-start; }
.ab-faq-tabs .e-n-tabs-heading { flex: 0 0 calc(33.333% - 2rem) !important; max-width: calc(33.333% - 2rem); display: flex !important; flex-direction: column !important; justify-content: flex-start !important; gap: 10px !important; position: sticky; top: 120px; align-self: flex-start; background: none !important; }
.ab-faq-tabs .e-n-tabs-content { flex: 1 1 0; min-width: 0; }
.ab-faq-tabs .e-n-tabs-content > .e-con { padding: 0 !important; }
.ab-faq-tabs .e-n-tab-icon { display: none !important; } /* tabs are text-only */
.ab-faq-tabs .e-n-tab-title { display: flex !important; align-items: center; justify-content: flex-start; width: 100%; text-align: left; padding: 16px 20px !important; border-radius: 12px !important; background: #fff !important; border: 1px solid var(--ab-line) !important; color: var(--ab-ink) !important; font-weight: 600; font-size: .97rem; cursor: pointer; box-shadow: none !important; transition: all .25s ease; }
.ab-faq-tabs .e-n-tab-title .e-n-tab-title-text { color: inherit; font: inherit; flex: 1; text-align: left; }
.ab-faq-tabs .e-n-tab-title:hover, .ab-faq-tabs .e-n-tab-title:focus { background: #fff !important; border-color: #8f96a0 !important; color: var(--ab-ink) !important; outline: 0; box-shadow: none !important; }
.ab-faq-tabs .e-n-tab-title:focus-visible { outline: 2px solid var(--ab-ink); outline-offset: 2px; }
.ab-faq-tabs .e-n-tab-title[aria-selected="true"], .ab-faq-tabs .e-n-tab-title[aria-selected="true"]:hover, .ab-faq-tabs .e-n-tab-title[aria-selected="true"]:focus { background: var(--ab-ink) !important; border-color: var(--ab-ink) !important; color: #fff !important; box-shadow: 0 12px 26px rgba(20,24,31,.22) !important; }

.ab-accordion .elementor-accordion .elementor-accordion-item { border: 1px solid var(--ab-line) !important; border-radius: 14px; margin-bottom: 12px; overflow: hidden; background: #fff; transition: border-color .25s ease, box-shadow .25s ease; }
.ab-accordion .elementor-accordion .elementor-accordion-item:has(.elementor-active) { border-color: rgba(20,24,31,.55) !important; box-shadow: 0 14px 30px rgba(20,24,31,.08); }
.ab-accordion .elementor-tab-title { display: flex; align-items: center; gap: 16px; margin: 0; padding: 1.05rem 1.3rem !important; border: 0 !important; background: transparent !important; cursor: pointer; counter-increment: abq; }
.ab-accordion .elementor-tab-title::before { content: counter(abq); flex: none; width: 34px; height: 34px; border-radius: 50%; background: var(--ab-tint); color: var(--ab-ink); font-size: .8rem; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; transition: all .25s ease; }
.ab-accordion .elementor-tab-title.elementor-active::before { background: var(--ab-ink); color: #fff; }
.ab-accordion .elementor-accordion-title { font-family: var(--font-body) !important; order: 1; flex: 1; font-weight: 600 !important; font-size: 1rem !important; line-height: 1.4 !important; color: var(--ab-ink) !important; text-decoration: none !important; }
.ab-accordion .elementor-tab-title.elementor-active .elementor-accordion-title { color: var(--ab-ink) !important; }
.ab-accordion .elementor-accordion-icon { order: 2; display: inline-flex; align-items: center; justify-content: center; margin: 0 !important; width: 1rem !important; height: 1rem; font-size: .7rem !important; color: var(--ab-mid); }
.ab-accordion .elementor-accordion-icon svg { width: .7rem !important; height: .7rem !important; fill: currentColor !important; }
.ab-accordion .elementor-tab-content { border: 0 !important; padding: 0 1.4rem 1.6rem calc(1.3rem + 50px) !important; font-size: .97rem; line-height: 1.8; color: var(--ab-text); }
.ab-accordion .elementor-tab-content p { margin: 0; }
.ab-faq-link, .ab-accordion .elementor-tab-content a { font-weight: 600; color: var(--ab-ink) !important; text-decoration: none !important; border-bottom: 2px solid var(--red); }
.ab-faq-link:hover, .ab-accordion .elementor-tab-content a:hover { color: var(--red) !important; }

/* ---------- Responsive ---------- */
@media (max-width: 1199.98px) {
	.ab-why-list ol { grid-template-columns: 1fr 1fr; }
	.ab-why-list li:first-child { grid-column: span 2; grid-row: auto; justify-content: flex-start; }
}
@media (max-width: 991.98px) {
	.ab-split { grid-template-columns: 1fr !important; gap: 2.5rem !important; }
	.ab-values-intro { grid-template-columns: 1fr; gap: 1.6rem !important; align-items: start; }
	.ab-facts-row { grid-template-columns: repeat(2, 1fr); row-gap: 34px; }
	.ab-fact:nth-child(2n) { border-right: 0; }
	.ab-fact:nth-child(odd) { padding-left: 0 !important; }
	.ab-grid-3 { grid-template-columns: repeat(2, 1fr) !important; }
	.ab-faq-tabs .e-n-tabs { flex-direction: column !important; gap: 1.5rem !important; }
	/* tabs become an even grid of equal-size chips (4 across on tablets, 2 x 2 on phones) */
	.ab-faq-tabs .e-n-tabs-heading { flex: none !important; max-width: 100%; width: 100%; position: static; display: grid !important; grid-template-columns: repeat(4, 1fr); flex-direction: initial !important; overflow: visible; padding: 0; gap: 10px !important; }
	.ab-faq-tabs .e-n-tab-title { width: 100% !important; min-height: 58px; margin: 0 !important; justify-content: center; text-align: center; white-space: normal; line-height: 1.3; padding: 12px 14px !important; }
	.ab-faq-tabs .e-n-tab-title { justify-content: center !important; text-align: center !important; }
	.ab-faq-tabs .e-n-tab-title .e-n-tab-title-text { flex: 0 1 auto !important; text-align: center !important; }
	.ab-faq-tabs .e-n-tab-title[aria-selected="true"], .ab-faq-tabs .e-n-tab-title[aria-selected="true"]:hover, .ab-faq-tabs .e-n-tab-title[aria-selected="true"]:focus { box-shadow: none !important; }
}
@media (max-width: 767.98px) {
	.ab-faq-tabs .e-n-tabs-heading { grid-template-columns: repeat(2, 1fr); }
	.ab-grid-3, .ab-values-grid { grid-template-columns: 1fr !important; }
	.ab-value:last-child:nth-child(odd) { grid-column: auto; }
	.ab-why-list ol { grid-template-columns: 1fr; }
	.ab-why-list li:first-child { grid-column: auto; font-size: 1.15rem; }
	.ab-why-list li:first-child::before { font-size: 2.6rem; }
	.ab-cta { padding: 30px 24px !important; }
	.ab-value { padding: 24px 20px; }
	.ab-value .elementor-icon-box-wrapper { gap: 16px; }
	.ab-value .elementor-icon { width: 52px !important; height: 52px !important; }
	.ab-value .elementor-icon svg { width: 1.3rem !important; height: 1.3rem !important; }
	.ab-accordion .elementor-tab-content { padding-left: 1.3rem !important; }
}
@media (max-width: 575.98px) {
	.ab-fact { padding: 6px 12px 6px 16px !important; }
	.ab-accordion .elementor-tab-title::before { display: none; }
}

/* =========================================================
   CONTACT US + "UNDER CONSTRUCTION" PAGES — native Elementor widgets (Heading, Text Editor, Icon,
   Social Icons, Shortcode [Contact Form 7], Google Maps, Button, Icon Box). Selectors are ct-* / uc-*,
   plus the shared inner-page classes (ab-hero banner, ab-svc cards, ab-head / ab-title) so every inner page matches.
   Look: charcoal / white / light-grey system, brand red for icons, buttons and accents.
   ========================================================= */

/* Request a Quote (header) lands on the enquiry form: keep it clear of the sticky header */
#contact, #contact-form, #ct-map { scroll-margin-top: 100px; }

.ct-main, .ct-map, .uc-main, .uc-related { width: 100% !important; max-width: 100% !important; }
/* inner .container-xl follows Bootstrap's own breakpoints, exactly like the About sections */
.ct-main > .container-xl, .ct-map > .container-xl, .uc-main > .container-xl, .uc-related > .container-xl { width: 100% !important; max-width: none !important; }
@media (min-width: 992px) {
	.ct-main > .container-xl, .ct-map > .container-xl, .uc-main > .container-xl, .uc-related > .container-xl { padding-left: 12px !important; padding-right: 12px !important; }
}
@media (min-width: 1200px) {
	.ct-main > .container-xl, .ct-map > .container-xl, .uc-main > .container-xl, .uc-related > .container-xl { max-width: 1140px !important; }
}
@media (min-width: 1400px) {
	.ct-main > .container-xl, .ct-map > .container-xl, .uc-main > .container-xl, .uc-related > .container-xl { max-width: 1320px !important; }
}
.ct-main *, .ct-map *, .uc-main *, .uc-related * { font-family: var(--font-body) !important; }
.ct-main .elementor-widget, .ct-map .elementor-widget, .uc-main .elementor-widget, .uc-related .elementor-widget { margin-block-end: 0 !important; }

/* ---------- shared headings + pill buttons ---------- */
.ct-title .elementor-heading-title { margin: 0 0 14px !important; color: var(--ab-ink) !important; font-size: clamp(1.7rem, 1.25rem + 1.6vw, 2.35rem) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em; text-wrap: balance; }
.ct-btn .elementor-button { position: relative; display: inline-flex; padding: .9rem 1.9rem !important; border-radius: 50px !important; font-family: var(--font-body) !important; font-size: .78rem !important; font-weight: 700 !important; text-transform: uppercase; letter-spacing: .08em; line-height: 1.5 !important; text-decoration: none !important; box-shadow: none !important; transition: all .25s ease; }
.ct-btn .elementor-button-content-wrapper { gap: 9px; }
.ct-btn .elementor-button-icon svg { width: 1em; height: 1em; fill: currentColor; }
.ct-btn--dark .elementor-button { background: var(--ab-ink) !important; border: 2px solid var(--ab-ink) !important; color: #fff !important; fill: #fff !important; }
.ct-btn--dark .elementor-button:hover, .ct-btn--dark .elementor-button:focus { background: var(--red) !important; border-color: var(--red) !important; color: #fff !important; }
.ct-btn--light .elementor-button { background: transparent !important; border: 2px solid var(--ab-ink) !important; color: var(--ab-ink) !important; fill: var(--ab-ink) !important; }
.ct-btn--light .elementor-button:hover, .ct-btn--light .elementor-button:focus { background: var(--ab-ink) !important; color: #fff !important; fill: #fff !important; }

/* ---------- Contact: details card (dark) | form card (white) ---------- */
.ct-main { background: var(--ab-soft) !important; padding: 70px 0 !important; }
.ct-split { display: grid !important; grid-template-columns: 5fr 7fr; gap: 28px !important; align-items: stretch; }
.ct-info, .ct-form-card { border-radius: 22px !important; padding: 46px 42px !important; min-width: 0; }

.ct-info { position: relative; overflow: hidden !important; background-color: #12161c !important; background-size: cover !important; background-position: center !important; color: #fff; box-shadow: 0 30px 60px rgba(20,24,31,.22); }
.ct-info::after { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
	background: linear-gradient(180deg, rgba(13,16,21,.80) 0%, rgba(13,16,21,.86) 50%, rgba(13,16,21,.95) 100%), radial-gradient(circle at 0% 100%, rgba(222,0,17,.3), transparent 48%); }
.ct-info > * { position: relative; z-index: 1 !important; }
.ct-info .ab-eyebrow .elementor-heading-title { color: rgba(255,255,255,.72) !important; }
.ct-info .ct-title .elementor-heading-title { color: #fff !important; }
.ct-intro, .ct-intro p { margin: 0 0 26px; font-size: 1.02rem; line-height: 1.75; color: rgba(255,255,255,.84) !important; }

.ct-list { display: flex !important; flex-direction: column !important; }
.ct-item { display: grid !important; grid-template-columns: 52px 1fr; gap: 18px !important; align-items: center; padding: 15px 0 !important; border-top: 1px solid rgba(255,255,255,.12); }
.ct-item:first-child { border-top: 0; }
.ct-item-icon .elementor-icon { width: 52px !important; height: 52px !important; border-radius: 50% !important; background: var(--red) !important; color: #fff !important; fill: #fff !important; display: inline-flex !important; align-items: center; justify-content: center; padding: 0 !important; box-shadow: none; transition: transform .3s ease; }
.ct-item-icon .elementor-icon svg { width: 1.1rem !important; height: 1.1rem !important; fill: currentColor !important; }
.ct-item:hover .ct-item-icon .elementor-icon { transform: scale(1.08); }
.ct-item-body { min-width: 0; }
.ct-item-label .elementor-heading-title { margin: 0 0 3px !important; font-size: .74rem !important; font-weight: 700 !important; line-height: 1.4 !important; letter-spacing: .14em; text-transform: uppercase; color: rgba(255,255,255,.55) !important; }
.ct-item-value .elementor-heading-title { margin: 0 !important; font-size: 1.04rem !important; font-weight: 500 !important; line-height: 1.55 !important; color: #fff !important; overflow-wrap: anywhere; }
.ct-item-value a { color: #fff !important; text-decoration: none !important; border-bottom: 1px solid rgba(255,255,255,.3); transition: border-color .2s ease; }
.ct-item-value a:hover { color: #fff !important; border-bottom-color: var(--red); }

.ct-follow { display: flex !important; flex-direction: row !important; align-items: center !important; flex-wrap: wrap; gap: 18px !important; margin-top: 22px !important; padding-top: 26px !important; border-top: 1px solid rgba(255,255,255,.12); }
.ct-follow-label .elementor-heading-title { margin: 0 !important; font-size: .74rem !important; font-weight: 700 !important; letter-spacing: .14em; text-transform: uppercase; color: rgba(255,255,255,.55) !important; }
.ct-social .elementor-social-icons-wrapper { display: flex; gap: 12px; }
.ct-social .elementor-grid-item { margin: 0 !important; }
.ct-social .elementor-social-icon { width: 46px !important; height: 46px !important; border-radius: 50% !important; background: rgba(255,255,255,.08) !important; border: 1px solid rgba(255,255,255,.28); color: #fff !important; display: inline-flex !important; align-items: center; justify-content: center; font-size: 1rem !important; transition: background-color .25s ease, border-color .25s ease, transform .25s ease; }
.ct-social .elementor-social-icon svg { width: 1.05rem !important; height: 1.05rem !important; fill: #fff !important; }
.ct-social .elementor-social-icon:hover { background: var(--red) !important; border-color: var(--red); transform: translateY(-3px); }

.ct-form-card { background: #fff !important; border: 1px solid var(--ab-line); box-shadow: 0 24px 56px rgba(20,24,31,.1); }
.ct-form-sub, .ct-form-sub p { margin: 0 0 28px; font-size: .98rem; line-height: 1.65; color: var(--ab-text); }

/* ---------- Contact Form 7 inside the form card ---------- */
.ct-form .wpcf7 form { margin: 0; }
.ct-form .wpcf7 p { margin: 0 0 20px; }
.ct-cf-grid { display: grid; grid-template-columns: 1fr 1fr; column-gap: 20px; }
.ct-form label, .ct-cf-label { display: block; margin: 0; font-size: .84rem; font-weight: 600; letter-spacing: .02em; color: var(--ab-ink); }
.ct-form .ct-req { color: var(--red); margin-left: 2px; }
.ct-form .wpcf7-form-control-wrap { display: block; margin-top: 8px; }
.ct-form .wpcf7 input[type="text"], .ct-form .wpcf7 input[type="email"], .ct-form .wpcf7 input[type="tel"], .ct-form .wpcf7 textarea {
	display: block; width: 100%; max-width: 100%; box-sizing: border-box; min-height: 52px; padding: 14px 18px; border: 1px solid var(--ab-line) !important; border-radius: 12px !important;
	background: var(--ab-soft) !important; color: var(--ab-ink) !important; font-size: .97rem; line-height: 1.4; box-shadow: none !important; outline: 0; transition: border-color .2s ease, background-color .2s ease, box-shadow .2s ease;
}
.ct-form .wpcf7 textarea { min-height: 112px; height: 112px; resize: vertical; }
.ct-form .wpcf7 input::placeholder, .ct-form .wpcf7 textarea::placeholder { color: #8b919a; opacity: 1; }
.ct-form .wpcf7 input[type="text"]:focus, .ct-form .wpcf7 input[type="email"]:focus, .ct-form .wpcf7 input[type="tel"]:focus, .ct-form .wpcf7 textarea:focus {
	background: #fff !important; border-color: var(--ab-ink) !important; box-shadow: 0 0 0 4px rgba(20,24,31,.08) !important;
}
.ct-form .wpcf7-not-valid { border-color: var(--red) !important; }
.ct-form .wpcf7-not-valid-tip { display: block; margin-top: 6px; font-size: .82rem; font-weight: 500; color: var(--red); }
/* "Prove You're Human": the quiz renders its own <label> (question) + input — question above a compact field */
.ct-cf-human .ct-cf-label { margin-bottom: 8px; }
.ct-form .wpcf7-quiz-label { display: block; margin-bottom: 8px; font-size: 1rem; font-weight: 700; color: var(--ab-ink); }
.ct-cf-human .wpcf7-form-control-wrap { margin-top: 0; }
.ct-form .ct-cf-human input[type="text"] { max-width: 240px; }
.ct-form .wpcf7-submit {
	display: inline-flex; align-items: center; justify-content: center; padding: 15px 38px; border: 2px solid var(--red) !important; border-radius: 50px !important; background: var(--red) !important; color: #fff !important;
	font-size: .8rem; font-weight: 700; text-transform: uppercase; letter-spacing: .1em; cursor: pointer; box-shadow: none !important; transition: all .25s ease;
}
.ct-form .wpcf7-submit:hover, .ct-form .wpcf7-submit:focus { background: var(--ab-ink) !important; border-color: var(--ab-ink) !important; }
.ct-form .ct-cf-submit { display: flex; align-items: center; gap: 12px; margin-bottom: 0 !important; }
.ct-form .wpcf7-spinner { margin: 0; }
.ct-form .wpcf7 form .wpcf7-response-output { margin: 22px 0 0; padding: 14px 18px; border-width: 1px; border-radius: 12px; font-size: .93rem; line-height: 1.5; }
.ct-form .wpcf7 form.sent .wpcf7-response-output { border-color: #1a7f37; background: #eaf7ee; color: #14602a; }
.ct-form .wpcf7 form.invalid .wpcf7-response-output, .ct-form .wpcf7 form.failed .wpcf7-response-output, .ct-form .wpcf7 form.unaccepted .wpcf7-response-output { border-color: var(--red); background: #fdecee; color: #8a0a14; }

/* ---------- Contact: map (last section before the footer) ---------- */
.ct-map { background: #fff !important; padding: 70px 0 0 !important; }
.ct-map-head { display: flex !important; flex-direction: row !important; flex-wrap: wrap; align-items: flex-end !important; justify-content: space-between !important; gap: 24px !important; margin-bottom: 34px !important; }
.ct-map-copy { min-width: 0; max-width: 640px; }
.ct-map-title .elementor-heading-title { margin: 0 0 10px !important; }
.ct-map-address, .ct-map-address p { margin: 0; font-size: 1.02rem; line-height: 1.6; color: var(--ab-text); }
.ct-map-btns { display: flex !important; flex-direction: row !important; flex-wrap: wrap; gap: 12px !important; }
.ct-map .ab-eyebrow .elementor-heading-title { margin: 0 0 .9rem !important; }
.ct-map-frame { width: 100%; background: var(--ab-tint); }
.ct-map-frame .elementor-custom-embed, .ct-map-frame iframe { display: block; width: 100%; border: 0; }

/* ---------- Under construction ---------- */
.uc-main { background: #fff !important; padding: 80px 0 !important; }
.uc-card { position: relative; overflow: hidden; max-width: 860px; margin: 0 auto !important; padding: 58px 48px 54px !important; align-items: center !important; text-align: center; background: #fff; border: 1px solid var(--ab-line); border-radius: 24px !important; box-shadow: 0 24px 56px rgba(20,24,31,.08); }
.uc-card::before { content: ""; position: absolute; left: 50%; top: 0; width: 84px; height: 4px; transform: translateX(-50%); background: var(--red); border-radius: 0 0 4px 4px; }
.uc-icon .elementor-icon-wrapper { text-align: center; }
.uc-icon .elementor-icon { position: relative; width: 96px !important; height: 96px !important; border-radius: 50% !important; background: rgba(222,0,17,.1) !important; color: var(--red) !important; fill: var(--red) !important; display: inline-flex !important; align-items: center; justify-content: center; padding: 0 !important; margin-bottom: 26px; }
.uc-icon .elementor-icon::after { content: ""; position: absolute; inset: -9px; border-radius: 50%; border: 2px solid rgba(222,0,17,.22); animation: ucPulse 2.4s ease-out infinite; }
.uc-icon .elementor-icon svg { width: 2.4rem !important; height: 2.4rem !important; fill: currentColor !important; }
@keyframes ucPulse { 0% { transform: scale(.92); opacity: .9; } 100% { transform: scale(1.22); opacity: 0; } }
@media (prefers-reduced-motion: reduce) { .uc-icon .elementor-icon::after { animation: none; } }
.uc-badge .elementor-heading-title { display: inline-flex; margin: 0 0 18px !important; padding: 8px 18px; border-radius: 50px; background: rgba(222,0,17,.08); color: var(--red) !important; font-size: .76rem !important; font-weight: 700 !important; line-height: 1.4 !important; letter-spacing: .16em; text-transform: uppercase; }
.uc-title .elementor-heading-title { margin-bottom: 16px !important; }
.uc-text, .uc-text p { max-width: 620px; margin: 0 auto 32px; text-align: center; font-size: 1.05rem; line-height: 1.8; color: var(--ab-text); }
.uc-actions { display: flex !important; flex-direction: row !important; flex-wrap: wrap; justify-content: center !important; gap: 14px !important; }
.uc-related { background: var(--ab-soft) !important; padding: 60px 0 !important; }
.uc-related .ab-head { max-width: 100%; margin-bottom: 2.2rem !important; }
.uc-svc .elementor-icon-box-title a { color: inherit !important; text-decoration: none !important; transition: color .2s ease; }
.uc-svc .elementor-icon-box-title a:hover { color: var(--red) !important; }

/* ---------- Responsive ---------- */
@media (max-width: 991.98px) {
	.ct-main { padding: 50px 0 !important; }
	.ct-split { grid-template-columns: 1fr; gap: 24px !important; }
	.ct-info, .ct-form-card { padding: 38px 32px !important; }
	.ct-map { padding-top: 50px !important; }
	.uc-main { padding: 56px 0 !important; }
}
@media (max-width: 767.98px) {
	.ct-info, .ct-form-card { padding: 30px 22px !important; border-radius: 18px !important; }
	.ct-item { grid-template-columns: 44px 1fr; gap: 14px !important; }
	.ct-item-icon .elementor-icon { width: 44px !important; height: 44px !important; }
	.ct-item-icon .elementor-icon svg { width: .95rem !important; height: .95rem !important; }
	.ct-item-value .elementor-heading-title { font-size: .98rem !important; }
	.ct-cf-grid { grid-template-columns: 1fr; }
	.ct-map-head { align-items: flex-start !important; margin-bottom: 26px !important; }
	.ct-map-btns, .ct-map-btns .elementor-widget { width: 100%; }
	.ct-map-btns .elementor-button { width: 100%; justify-content: center; }
	.uc-card { padding: 44px 22px 40px !important; border-radius: 18px !important; }
	.uc-icon .elementor-icon { width: 80px !important; height: 80px !important; }
	.uc-icon .elementor-icon svg { width: 2rem !important; height: 2rem !important; }
	.uc-actions, .uc-actions .elementor-widget { width: 100%; }
	.uc-actions .elementor-button { width: 100%; justify-content: center; }
}
@media (max-width: 575.98px) {
	.ct-form .wpcf7-submit { width: 100%; }
	.ct-form .ct-cf-submit { flex-direction: column; align-items: stretch; }
	.ct-form .ct-cf-human input[type="text"] { max-width: none; }
}


/* =========================================================
   ABOUT US — REDESIGN v2 (abt-* classes). Native Elementor widgets; this CSS only supplies the look.
   Section rhythm: banner > intro (white, overlapping photos) > stats (photo band) > what we do (photo cards)
   > why (grey) > core values (dark) > clients (white) > FAQ (grey) > call-to-action (brand red).
   Photos are IRC's own field photography (assets/images/about/*) — swap them in the Elementor editor.
   ========================================================= */
:root { --abt-pad: clamp(64px, 3rem + 4vw, 112px); }

.abt-intro, .abt-stats, .abt-services, .abt-why, .abt-values, .abt-clients, .abt-cta { width: 100% !important; max-width: 100% !important; position: relative; }
/* inner .container-xl follows Bootstrap's own breakpoints (fluid < 1200, 1140, 1320 from 1400) like every other section */
.abt-intro > .container-xl, .abt-stats > .container-xl, .abt-services > .container-xl, .abt-why > .container-xl,
.abt-values > .container-xl, .abt-clients > .container-xl, .abt-cta > .container-xl { width: 100% !important; max-width: none !important; position: relative; z-index: 1; }
@media (min-width: 992px) {
	.abt-intro > .container-xl, .abt-stats > .container-xl, .abt-services > .container-xl, .abt-why > .container-xl,
	.abt-values > .container-xl, .abt-clients > .container-xl, .abt-cta > .container-xl { padding-left: 12px !important; padding-right: 12px !important; }
}
@media (min-width: 1200px) {
	.abt-intro > .container-xl, .abt-stats > .container-xl, .abt-services > .container-xl, .abt-why > .container-xl,
	.abt-values > .container-xl, .abt-clients > .container-xl, .abt-cta > .container-xl { max-width: 1140px !important; }
}
@media (min-width: 1400px) {
	.abt-intro > .container-xl, .abt-stats > .container-xl, .abt-services > .container-xl, .abt-why > .container-xl,
	.abt-values > .container-xl, .abt-clients > .container-xl, .abt-cta > .container-xl { max-width: 1320px !important; }
}
.abt-intro *, .abt-stats *, .abt-services *, .abt-why *, .abt-values *, .abt-clients *, .abt-cta * { font-family: var(--font-body) !important; }
.abt-intro .elementor-widget, .abt-stats .elementor-widget, .abt-services .elementor-widget, .abt-why .elementor-widget,
.abt-values .elementor-widget, .abt-clients .elementor-widget, .abt-cta .elementor-widget { margin-block-end: 0 !important; }
.abt-intro, .abt-services, .abt-why, .abt-values { scroll-margin-top: 90px; }

/* ---------- shared type ---------- */
.abt-eyebrow .elementor-heading-title { display: flex; align-items: center; gap: 14px; margin: 0 0 1.25rem !important; color: var(--ab-mid) !important; font-size: .8rem !important; font-weight: 700 !important; line-height: 1.4 !important; letter-spacing: .2em; text-transform: uppercase; }
.abt-eyebrow .elementor-heading-title::before { content: ""; flex: none; width: 36px; height: 2px; background: var(--red); }
.abt-title .elementor-heading-title { margin: 0 !important; color: var(--ab-ink) !important; font-size: clamp(2rem, 1.4rem + 2.3vw, 3.2rem) !important; font-weight: 700 !important; line-height: 1.1 !important; letter-spacing: -.025em; text-wrap: balance; }
.abt-title--sm .elementor-heading-title { font-size: clamp(1.6rem, 1.3rem + 1vw, 2.15rem) !important; }
.abt-title-row { display: flex !important; flex-direction: row !important; flex-wrap: wrap; align-items: baseline !important; column-gap: .28em !important; }
.abt-title.abt-accent .elementor-heading-title { color: var(--red) !important; }
.abt-head { display: grid !important; grid-template-columns: 1.1fr .9fr; gap: clamp(24px, 5vw, 80px) !important; align-items: end; margin-bottom: clamp(36px, 4.5vw, 60px) !important; }
.abt-sub, .abt-sub p { margin: 0; font-size: 1.1rem; line-height: 1.7; color: var(--ab-text); }

/* breadcrumb in the banner: Heading widget (with its Link field) / separator / current page */
.abt-crumbs { display: flex !important; flex-direction: row !important; flex-wrap: wrap; align-items: center !important; gap: 10px !important; margin: 0 0 12px !important; }
.abt-crumb .elementor-heading-title { margin: 0 !important; font-size: .82rem !important; font-weight: 600 !important; line-height: 1.4 !important; letter-spacing: .04em; text-transform: uppercase; color: rgba(255,255,255,.65) !important; font-family: var(--font-body) !important; }
.abt-crumb a { color: rgba(255,255,255,.65) !important; text-decoration: none !important; transition: color .2s ease; }
.abt-crumb a:hover { color: #fff !important; }
.abt-crumb-sep .elementor-heading-title { opacity: .5; }
.abt-crumb-current .elementor-heading-title { color: #fff !important; }
@media (max-width: 575.98px) { .abt-crumbs { gap: 8px !important; margin-bottom: 8px !important; } .abt-crumb .elementor-heading-title { font-size: .7rem !important; } }

/* ---------- 1. Introduction: statement + copy | overlapping photos ---------- */
.abt-intro { background: #fff !important; padding: var(--abt-pad) 0 !important; overflow: hidden !important; }
.abt-intro-grid { display: grid !important; grid-template-columns: 1.05fr .95fr; gap: clamp(48px, 7vw, 110px) !important; align-items: center; }
.abt-lead .elementor-heading-title { margin: 0 0 28px !important; font-size: clamp(1.5rem, 1.15rem + 1.3vw, 2.2rem) !important; font-weight: 700 !important; line-height: 1.3 !important; letter-spacing: -.02em; color: var(--ab-ink) !important; }
.abt-body, .abt-body p { font-size: 1.05rem; line-height: 1.85; color: var(--ab-text); }
.abt-body p { margin: 0 0 1.15rem; }
.abt-body p:last-child { margin-bottom: 0; }

.abt-intro-media { position: relative !important; padding: 0 0 clamp(64px, 9vw, 120px) !important; }
.abt-intro-media::after { content: ""; position: absolute; z-index: 0; top: -26px; right: -22px; width: 44%; height: 42%; background-image: radial-gradient(#c3c8cf 1.6px, transparent 1.6px); background-size: 18px 18px; }
.abt-photo-a { position: relative; z-index: 1 !important; width: 76%; margin-left: auto; }
.abt-photo-a img { display: block; width: 100% !important; height: auto !important; aspect-ratio: 4 / 5; object-fit: cover; border-radius: 24px !important; box-shadow: 0 32px 64px rgba(20,24,31,.2) !important; }
.abt-photo-b { position: absolute !important; z-index: 2 !important; left: 0; bottom: 0; width: 56%; }
.abt-photo-b img { display: block; width: 100% !important; height: auto !important; aspect-ratio: 4 / 3; object-fit: cover; border-radius: 20px !important; border: 8px solid #fff !important; box-shadow: 0 26px 52px rgba(20,24,31,.24) !important; }
.abt-badge { position: absolute !important; z-index: 5 !important; top: 8%; left: 2%; width: 132px !important; min-width: 132px !important; max-width: 132px !important; height: 132px !important; min-height: 132px !important; flex: none !important; box-sizing: border-box !important; display: flex !important; flex-direction: column !important; align-items: center !important; justify-content: center !important; gap: 4px !important; padding: 0 !important; border-radius: 50% !important; background: var(--red); border: 6px solid #fff !important; box-shadow: 0 18px 40px rgba(222,0,17,.38); text-align: center; }
.abt-badge-label .elementor-heading-title { margin: 0 !important; font-size: .7rem !important; font-weight: 700 !important; line-height: 1 !important; letter-spacing: .22em; text-transform: uppercase; opacity: .92; color: #fff !important; }
.abt-badge-year .elementor-heading-title { margin: 0 !important; font-size: 1.9rem !important; font-weight: 800 !important; line-height: 1 !important; letter-spacing: -.02em; color: #fff !important; }

/* ---------- 2. Key facts: photo band, four big numbers ---------- */
.abt-stats { padding: clamp(56px, 7vw, 92px) 0 !important; overflow: hidden !important; color: #fff; }
.abt-stats::after { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; background: linear-gradient(180deg, rgba(12,15,20,.88) 0%, rgba(12,15,20,.8) 100%); }
.abt-stats-row { display: grid !important; grid-template-columns: repeat(4, 1fr); }
.abt-stat { position: relative; padding: 6px 28px 6px 36px !important; border-left: 1px solid rgba(255,255,255,.2); align-items: flex-start !important; justify-content: flex-start !important; }
.abt-stat:first-child { padding-left: 0 !important; border-left: 0; }
.abt-stat::after { order: -1; content: ""; display: block; width: 38px; height: 3px; margin-bottom: 20px; background: var(--red); }
.abt-stat .elementor-counter { display: flex; flex-direction: column-reverse; align-items: flex-start; text-align: left; }
.abt-stat .elementor-counter-number-wrapper, .abt-stat-text .elementor-heading-title { display: flex; justify-content: flex-start; align-items: baseline; white-space: nowrap; margin: 0 !important; font-size: clamp(2.5rem, 1.7rem + 2.7vw, 4.2rem) !important; font-weight: 800 !important; line-height: 1 !important; letter-spacing: -.03em; color: #fff !important; }
.abt-stat-text .elementor-heading-title { font-size: clamp(2rem, 1.4rem + 2.1vw, 3.4rem) !important; min-height: clamp(2.5rem, 1.7rem + 2.7vw, 4.2rem); display: flex; align-items: center; }
.abt-stat .elementor-counter-title, .abt-stat-label, .abt-stat-label p { display: block; max-width: 240px; margin: 14px 0 0 !important; font-size: .98rem !important; font-weight: 400 !important; line-height: 1.55 !important; text-align: left; text-transform: none; color: rgba(255,255,255,.8) !important; }
.abt-stat-label p { margin: 0 !important; }

/* ---------- 3. What We Do: six photo cards ---------- */
.abt-services { background: #fff !important; padding: var(--abt-pad) 0 !important; }
.abt-svc-grid { display: grid !important; grid-template-columns: repeat(3, 1fr); gap: 24px !important; }
.abt-svc { position: relative !important; isolation: isolate; display: flex !important; flex-direction: column !important; justify-content: flex-end !important; min-height: 470px !important; padding: 32px 30px 34px !important; border-radius: 22px !important; background: var(--ab-ink); overflow: hidden !important; box-shadow: 0 18px 40px rgba(20,24,31,.14); }
.abt-svc-photo { position: absolute !important; inset: 0; z-index: 0; width: 100%; height: 100%; }
.abt-svc-photo .elementor-widget-container, .abt-svc-photo img { display: block; width: 100% !important; height: 100% !important; }
.abt-svc-photo img { object-fit: cover !important; border-radius: 0 !important; transition: transform .9s cubic-bezier(.2,.7,.2,1); }
.abt-svc:nth-child(2) .abt-svc-photo img { object-position: 30% center; }
.abt-svc:nth-child(5) .abt-svc-photo img { object-position: 36% center; }
.abt-svc:hover .abt-svc-photo img { transform: scale(1.08); }
.abt-svc::after { content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none; background: linear-gradient(180deg, rgba(9,11,15,.08) 0%, rgba(9,11,15,.38) 36%, rgba(9,11,15,.92) 100%); }
.abt-svc-icon { position: absolute !important; z-index: 3; top: 26px; left: 28px; }
.abt-svc-icon .elementor-icon { width: 54px !important; height: 54px !important; border-radius: 50% !important; background: rgba(255,255,255,.16) !important; border: 1px solid rgba(255,255,255,.3); color: #fff !important; fill: #fff !important; display: inline-flex !important; align-items: center; justify-content: center; padding: 0 !important; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); transition: background-color .3s ease, border-color .3s ease; }
.abt-svc-icon .elementor-icon svg { width: 1.3rem !important; height: 1.3rem !important; fill: currentColor !important; }
.abt-svc:hover .abt-svc-icon .elementor-icon { background: var(--red) !important; border-color: var(--red); }
.abt-svc-body { position: relative; z-index: 3 !important; }
.abt-svc-body::after { order: -1; content: ""; display: block; width: 44px; height: 3px; margin-bottom: 18px; background: var(--red); transition: width .4s cubic-bezier(.2,.7,.2,1); }
.abt-svc:hover .abt-svc-body::after { width: 88px; }
.abt-svc-title .elementor-heading-title { margin: 0 0 10px !important; font-size: 1.4rem !important; font-weight: 700 !important; line-height: 1.25 !important; letter-spacing: -.01em; color: #fff !important; }
.abt-svc-text, .abt-svc-text p { margin: 0; font-size: .96rem; line-height: 1.65; color: rgba(255,255,255,.84); }
/* cards are themselves the "stagger" children: hover (lift, zoom) must not share the reveal's transform timing */
.abt-svc-grid.stagger > .elementor-element { transition: opacity .6s ease var(--d, 0s), transform .6s ease var(--d, 0s), box-shadow .4s ease; }
.abt-svc-grid.stagger.is-visible > .elementor-element { transition-delay: var(--d, 0s), var(--d, 0s), 0s; }
.abt-svc:hover { box-shadow: 0 28px 56px rgba(20,24,31,.26); }

/* ---------- 4. Why clients choose IRC: heading + photo | numbered reasons ---------- */
.abt-why { background: var(--ab-soft) !important; padding: var(--abt-pad) 0 !important; }
.abt-why-grid { display: grid !important; grid-template-columns: .85fr 1.15fr; gap: clamp(40px, 6vw, 100px) !important; align-items: start; }
.abt-why-left { position: sticky !important; top: 120px; align-self: start; }
.abt-why-left .abt-title { margin-bottom: 34px !important; }
.abt-why-photo img { display: block; width: 100% !important; max-width: 400px; height: auto !important; aspect-ratio: 1 / 1; object-fit: cover; border-radius: 22px !important; box-shadow: 0 28px 56px rgba(20,24,31,.18) !important; }
.abt-why-list .elementor-icon-list-items { list-style: none !important; margin: 0 !important; padding: 0 !important; counter-reset: abtwhy; }
.abt-why-list .elementor-icon-list-item { counter-increment: abtwhy; display: grid !important; grid-template-columns: 78px 1fr !important; gap: 20px !important; align-items: baseline !important; margin: 0 !important; padding: 30px 0 !important; border-top: 1px solid #d5d9de; font-size: 1.15rem !important; font-weight: 500 !important; line-height: 1.55 !important; color: var(--ab-ink) !important; transition: padding .3s ease; }
.abt-why-list .elementor-icon-list-text { display: block; padding: 0 !important; margin: 0 !important; color: inherit !important; font: inherit !important; }
.abt-why-list .elementor-icon-list-item:last-child { border-bottom: 1px solid #d5d9de; }
.abt-why-list .elementor-icon-list-item::before { content: counter(abtwhy, decimal-leading-zero); font-size: 2.4rem; font-weight: 800; line-height: 1; letter-spacing: -.03em; color: var(--red); }
.abt-why-list .elementor-icon-list-item:first-child { font-size: 1.5rem !important; font-weight: 700 !important; line-height: 1.4 !important; letter-spacing: -.01em; }
.abt-why-list .elementor-icon-list-item:hover { padding-left: 14px !important; }

/* ---------- 5. Core values: dark band, intro | seven rows ---------- */
/* overflow:clip, not hidden — hidden makes this band a scroll container and the sticky intro column never sticks. */
.abt-values { background: #0f1319 !important; padding: var(--abt-pad) 0 !important; overflow: clip !important; }
.abt-values::after { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; background: radial-gradient(circle at 0% 0%, rgba(222,0,17,.2), transparent 38%), radial-gradient(rgba(255,255,255,.045) 1.2px, transparent 1.2px); background-size: auto, 26px 26px; }
/* align-self/align-items need !important: Elementor's .e-con rule otherwise stretches the intro to the full row height, leaving sticky no room to travel. */
.abt-values-grid { display: grid !important; grid-template-columns: .8fr 1.2fr; gap: clamp(40px, 6vw, 100px) !important; align-items: start !important; }
.abt-values-intro { position: sticky !important; top: 96px; align-self: start !important; }
.abt-values .abt-eyebrow .elementor-heading-title { color: rgba(255,255,255,.66) !important; }
.abt-values .abt-title .elementor-heading-title { color: #fff !important; }
.abt-values-sub, .abt-values-sub p { margin: 28px 0 14px; font-size: 1.2rem; font-weight: 600; line-height: 1.5; color: #fff; text-wrap: balance; }
.abt-values-copy, .abt-values-copy p { margin: 0; font-size: 1rem; line-height: 1.8; color: rgba(255,255,255,.7); }
.abt-values-photo { margin-top: 38px; }
.abt-values-photo img { display: block; width: 100% !important; height: auto !important; aspect-ratio: 16 / 10; object-fit: cover; object-position: 38% center; border-radius: 20px !important; border: 1px solid rgba(255,255,255,.14) !important; box-shadow: 0 24px 50px rgba(0,0,0,.4) !important; }
.abt-values-list { display: flex !important; flex-direction: column !important; }
.abt-value { padding: 30px 0; border-top: 1px solid rgba(255,255,255,.14); }
.abt-value:last-child { border-bottom: 1px solid rgba(255,255,255,.14); }
.abt-value .elementor-icon-box-wrapper { display: flex !important; align-items: flex-start; gap: 24px; text-align: left !important; }
.abt-value .elementor-icon-box-icon { margin: 0 !important; flex: none; }
.abt-value .elementor-icon-box-content { flex: 1; min-width: 0; text-align: left !important; }
.abt-value .elementor-icon { width: 58px !important; height: 58px !important; border-radius: 50% !important; background: transparent !important; border: 1px solid rgba(255,255,255,.28); color: #fff !important; fill: #fff !important; display: inline-flex !important; align-items: center; justify-content: center; padding: 0 !important; transition: background-color .3s ease, border-color .3s ease; }
.abt-value .elementor-icon svg { width: 1.3rem !important; height: 1.3rem !important; fill: currentColor !important; }
.abt-value:hover .elementor-icon { background: var(--red) !important; border-color: var(--red); }
.abt-value .elementor-icon-box-title { margin: 2px 0 10px !important; font-size: 1.22rem !important; font-weight: 700 !important; line-height: 1.3 !important; letter-spacing: -.01em; color: #fff !important; }
.abt-value .elementor-icon-box-title span { color: inherit !important; font: inherit !important; }
.abt-value .elementor-icon-box-description { margin: 0 !important; font-size: .98rem !important; line-height: 1.75 !important; color: rgba(255,255,255,.72) !important; }

/* ---------- 6. Clients ---------- */
.abt-clients { background: #fff !important; padding: clamp(56px, 6vw, 88px) 0 !important; }
.abt-clients-head { display: flex !important; flex-direction: column !important; align-items: center !important; text-align: center; margin-bottom: 40px !important; }
.abt-clients-head .abt-eyebrow .elementor-heading-title { justify-content: center; }
/* Clients: Elementor's native Image Carousel (class abt-logo-carousel). Slides are white logo cards; the arrows sit in 56px side gutters, vertically centred on the cards,
   and the dots are centred underneath. Swiper sizes its slides from the wrapper's content box, so the gutters are plain padding. */
.abt-logo-carousel .elementor-image-carousel-wrapper { position: relative; display: grid; grid-template-columns: minmax(0, 1fr); row-gap: 14px; padding: 0 56px !important; }
.abt-logo-carousel .elementor-image-carousel-wrapper::before, .abt-logo-carousel .elementor-image-carousel-wrapper::after { content: ""; position: absolute; z-index: 2; top: 0; bottom: 0; width: 56px; background: #fff; }
.abt-logo-carousel .elementor-image-carousel-wrapper::before { left: 0; }
.abt-logo-carousel .elementor-image-carousel-wrapper::after { right: 0; }
.abt-logo-carousel .elementor-image-carousel { grid-column: 1; grid-row: 1; align-self: center; min-width: 0; padding: 10px 0; }
.abt-logo-carousel .swiper-slide { height: auto; }
.abt-logo-carousel .swiper-slide-inner { display: flex; align-items: center; justify-content: center; height: 100%; min-height: 150px; margin: 0; padding: 22px 14px; border: 1px solid var(--ab-line); border-radius: 16px; background: #fff; transition: border-color .3s ease, box-shadow .3s ease; }
.abt-logo-carousel .swiper-slide-image { display: block; width: 100% !important; max-width: 128px; height: auto !important; border-radius: 0 !important; box-shadow: none !important; transition: transform .3s ease; }
.abt-logo-carousel .swiper-slide-inner:hover { border-color: #c9ced4; box-shadow: 0 14px 30px rgba(20,24,31,.09); }
.abt-logo-carousel .swiper-slide-inner:hover .swiper-slide-image { transform: scale(1.06); }
.abt-logo-carousel .elementor-swiper-button { position: relative !important; inset: auto !important; transform: none !important; z-index: 3 !important; grid-column: 1; grid-row: 1; align-self: center; width: 40px; height: 40px; display: grid !important; place-items: center; border-radius: 50%; border: 1.5px solid var(--ab-line); background: #fff; color: var(--ab-ink) !important; box-shadow: 0 6px 16px rgba(20,24,31,.08); cursor: pointer; opacity: 1; transition: background .2s ease, color .2s ease, border-color .2s ease; }
.abt-logo-carousel .elementor-swiper-button-prev { justify-self: start; margin: 0 0 0 -56px !important; }
.abt-logo-carousel .elementor-swiper-button-next { justify-self: end; margin: 0 -56px 0 0 !important; }
.abt-logo-carousel .elementor-swiper-button svg { width: 15px; height: 15px; fill: currentColor !important; color: inherit !important; }
.abt-logo-carousel .elementor-swiper-button:hover { background: var(--red); border-color: var(--red); color: #fff !important; }
.abt-logo-carousel .swiper-pagination { position: static !important; grid-column: 1; grid-row: 2; justify-self: center; display: flex; align-items: center; justify-content: center; gap: 8px; width: auto !important; margin: 0 !important; transform: none !important; }
.abt-logo-carousel .swiper-pagination-bullet { width: 8px !important; height: 8px !important; margin: 0 !important; border-radius: 50%; background: #cfd3d8; opacity: 1; transition: background .2s ease, width .2s ease; }
.abt-logo-carousel .swiper-pagination-bullet-active { width: 22px !important; border-radius: 4px; background: var(--red); }

/* ---------- 8. Call to action: brand-red band ---------- */
.abt-cta { overflow: hidden !important; background: linear-gradient(115deg, #e3000f 0%, #b5000e 100%) !important; padding: clamp(52px, 6vw, 84px) 0 !important; color: #fff; }
.abt-cta::after { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; background: radial-gradient(circle 260px at calc(100% - 140px) -20px, rgba(255,255,255,.1) 0, rgba(255,255,255,.1) 99%, transparent 100%), radial-gradient(circle 190px at calc(100% - 340px) 100%, rgba(0,0,0,.1) 0, rgba(0,0,0,.1) 99%, transparent 100%); }
.abt-cta-inner { position: relative; z-index: 1; display: flex !important; flex-direction: row !important; flex-wrap: wrap; align-items: center !important; justify-content: space-between !important; gap: 28px 56px !important; }
.abt-cta-text { flex: 1 1 380px; min-width: 0; }
.abt-cta-btn { flex: none; }
.abt-cta-text, .abt-cta-text p { margin: 0; max-width: 780px; font-size: clamp(1.4rem, 1.05rem + 1.3vw, 2.15rem); font-weight: 700; line-height: 1.3; letter-spacing: -.015em; color: #fff; text-wrap: balance; }
.abt-cta-btn .elementor-button { white-space: nowrap; position: relative; display: inline-flex; padding: 1.05rem 2.4rem !important; border-radius: 50px !important; background: #fff !important; border: 2px solid #fff !important; color: var(--red) !important; fill: var(--red) !important; font-size: .82rem !important; font-weight: 700 !important; text-transform: uppercase; letter-spacing: .1em; line-height: 1.5 !important; text-decoration: none !important; box-shadow: 0 14px 30px rgba(0,0,0,.2) !important; transition: all .25s ease; }
.abt-cta-btn .elementor-button:hover, .abt-cta-btn .elementor-button:focus { background: var(--ab-ink) !important; border-color: var(--ab-ink) !important; color: #fff !important; fill: #fff !important; }
.abt-cta-btn .elementor-button-content-wrapper { gap: 10px; }
.abt-cta-btn .elementor-button-icon svg { width: 1em; height: 1em; fill: currentColor; }

/* ---------- Responsive ---------- */
@media (max-width: 1199.98px) {
}
@media (max-width: 991.98px) {
	.abt-head { grid-template-columns: 1fr; gap: 16px !important; align-items: start; }
	.abt-intro-grid { grid-template-columns: 1fr; gap: 56px !important; }
	.abt-intro-media { width: 100%; max-width: 560px; margin: 0 auto; }
	.abt-stats-row { grid-template-columns: repeat(2, 1fr); row-gap: 40px; }
	.abt-stat:nth-child(odd) { padding-left: 0 !important; border-left: 0; }
	.abt-svc-grid { grid-template-columns: repeat(2, 1fr); }
	.abt-why-grid, .abt-values-grid { grid-template-columns: 1fr; gap: 40px !important; }
	.abt-why-left, .abt-values-intro { position: static !important; }
	.abt-why-photo img { max-width: 340px; }
}
@media (max-width: 767.98px) {
	.abt-svc-grid { grid-template-columns: 1fr; }
	.abt-svc { min-height: 420px; padding: 28px 24px 30px !important; }
	.abt-svc-icon { left: 24px; }
	.abt-why-list .elementor-icon-list-item { grid-template-columns: 58px 1fr !important; gap: 14px !important; padding: 24px 0 !important; font-size: 1.05rem !important; }
	.abt-why-list .elementor-icon-list-item::before { font-size: 1.9rem; }
	.abt-why-list .elementor-icon-list-item:first-child { font-size: 1.25rem !important; }
	.abt-why-list .elementor-icon-list-item:hover { padding-left: 0 !important; }
	.abt-value { padding: 26px 0; }
	.abt-value .elementor-icon-box-wrapper { gap: 16px; }
	.abt-value .elementor-icon { width: 48px !important; height: 48px !important; }
	.abt-value .elementor-icon svg { width: 1.1rem !important; height: 1.1rem !important; }
	.abt-cta-inner { flex-direction: column !important; align-items: flex-start !important; }
	.abt-badge { width: 108px !important; min-width: 108px !important; max-width: 108px !important; height: 108px !important; min-height: 108px !important; top: 5%; }
	.abt-badge-year .elementor-heading-title { font-size: 1.55rem !important; }
	.abt-intro-media::after { right: -8px; }
}
@media (max-width: 575.98px) {
	.abt-stat { padding: 6px 12px 6px 18px !important; }
	.abt-stat .elementor-counter-title, .abt-stat-label, .abt-stat-label p { font-size: .88rem !important; }
	.abt-photo-a { width: 82%; }
	.abt-photo-b { width: 60%; }
	.abt-photo-b img { border-width: 6px; }
	.abt-cta-btn, .abt-cta-btn .elementor-button { width: 100%; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) { .abt-svc-photo img, .abt-svc:hover .abt-svc-photo img { transition: none; transform: none; } }

/* In the Elementor editor the scroll-reveal script does not run, so never leave content faded out there */
.elementor-editor-active .reveal-up, .elementor-editor-active .reveal-img, .elementor-editor-active .reveal-block,
.elementor-editor-active .reveal-left, .elementor-editor-active .reveal-right, .elementor-editor-active .stagger > * { opacity: 1 !important; transform: none !important; }

/* =========================================================
   SPACING SYSTEM — inner pages (About, Contact, Ferromagnetic Materials).
   ONE place that sets every gap, so sections, rows, columns, cards and form fields all follow the same scale.
   Change a value here and it changes everywhere. (Declared last on purpose: it has the final word.)
   ========================================================= */
:root {
	--sec-pad: clamp(56px, 3rem + 3.4vw, 96px);     /* top and bottom padding of every section */
	--head-gap: clamp(32px, 1.6rem + 1.8vw, 52px);  /* section heading block -> the content under it */
	--gutter: 24px;                                  /* gap between neighbouring cards / grid cells / logos */
	--split-gap: clamp(40px, 6vw, 96px);             /* gap between the two halves of a text | photo split */
	--card-pad: clamp(24px, 1rem + 2vw, 44px);       /* inner padding of the large cards (details, form, under-construction) */
	--field-gap: 20px;                               /* between form rows and between form columns */
	--title-gap: 16px;                               /* heading -> the paragraph under it */
	--eyebrow-gap: 20px;                             /* small label -> the heading under it */
}
@media (max-width: 575.98px) { :root { --gutter: 16px; --field-gap: 18px; } }

/* sections */
.abt-intro, .abt-stats, .abt-services, .abt-why, .abt-values, .abt-clients, .abt-cta, .ab-faq,
.ct-main, .uc-main, .uc-related { padding-top: var(--sec-pad) !important; padding-bottom: var(--sec-pad) !important; }
.ct-map { padding-top: var(--sec-pad) !important; padding-bottom: 0 !important; }  /* map runs flush into the footer */

/* heading block -> content */
.abt-head, .abt-clients-head, .ct-map-head, .uc-related .ab-head, .ab-faq .ab-head { margin-bottom: var(--head-gap) !important; }

/* grids and splits */
.abt-svc-grid, .ab-grid, .ct-split { gap: var(--gutter) !important; }
.abt-intro-grid, .abt-why-grid, .abt-values-grid { gap: var(--split-gap) !important; }
.abt-intro-media { padding-bottom: var(--split-gap) !important; }

/* large cards */
.ct-info, .ct-form-card, .uc-card { padding: var(--card-pad) !important; }

/* small label -> heading -> paragraph */
.abt-eyebrow .elementor-heading-title, .ab-eyebrow .elementor-heading-title { margin-bottom: var(--eyebrow-gap) !important; }
.ct-title .elementor-heading-title { margin-bottom: var(--title-gap) !important; }
.ct-intro, .ct-intro p { margin-bottom: 28px; }
.ct-follow { margin-top: 20px !important; padding-top: 28px !important; }

/* contact form: every row, and the Name/Email columns, use the same --field-gap (the two-column wrapper used to add its own extra margin) */
.ct-cf-grid { margin: 0 !important; column-gap: var(--field-gap) !important; }
.ct-form .wpcf7 p { margin: 0 0 var(--field-gap) !important; }
.ct-form .wpcf7 p.ct-cf-submit { margin-bottom: 0 !important; }


/* =========================================================
   MOTION SYSTEM — every page. Pairs with assets/js/irc-motion.js and the Elementor tagging in functions.php.
   Only opacity / transform / clip-path are animated (cheap, no layout shift). Declared last on purpose.
   Hooks for editors (Advanced > CSS Classes): no-anim | anim-up | anim-left | anim-right | anim-zoom | anim-pop | anim-img
   ========================================================= */
:root { --ease-out: cubic-bezier(.22, .8, .24, 1); --ease-wipe: cubic-bezier(.65, .05, .2, 1); }

@keyframes irc-up    { from { opacity: 0; transform: translate3d(0, 38px, 0); } to { opacity: 1; transform: none; } }
@keyframes irc-left  { from { opacity: 0; transform: translate3d(-56px, 0, 0); } to { opacity: 1; transform: none; } }
@keyframes irc-right { from { opacity: 0; transform: translate3d(56px, 0, 0); } to { opacity: 1; transform: none; } }
@keyframes irc-zoom  { from { opacity: 0; transform: scale(.94); } to { opacity: 1; transform: none; } }
@keyframes irc-pop   { from { opacity: 0; transform: translate3d(0, 20px, 0) scale(.92); } to { opacity: 1; transform: none; } }
@keyframes irc-wipe  { from { opacity: 1; clip-path: inset(0 0 100% 0); } to { opacity: 1; clip-path: inset(0 0 0 0); } }
@keyframes irc-settle { from { transform: scale(1.2); } to { transform: scale(1); } }
@keyframes irc-title { from { opacity: 0; transform: translate3d(0, 34px, 0); clip-path: inset(0 0 100% 0); } to { opacity: 1; transform: none; clip-path: inset(0 0 -20% 0); } }
@keyframes irc-kenburns { from { scale: 1.1; } to { scale: 1; } }
@keyframes irc-failsafe { to { opacity: 1; } }

/* ----- 1. scroll reveals (blocks tagged .irc-a; hidden only while the animation layer is switched on) ----- */
html.irc-anim .irc-a:not(.is-in) { opacity: 0; }
html.irc-anim:not(.irc-ready) .irc-a:not(.is-in) { animation: irc-failsafe .5s ease 3.5s forwards; } /* script failed to load: show everything */
html.irc-anim .irc-a.is-in { animation: irc-up .95s var(--ease-out) var(--d, 0s) both; }
html.irc-anim .irc-a--left.is-in  { animation-name: irc-left; }
html.irc-anim .irc-a--right.is-in { animation-name: irc-right; }
html.irc-anim .irc-a--zoom.is-in  { animation-name: irc-zoom; }
html.irc-anim .irc-a--pop.is-in   { animation-name: irc-pop; animation-duration: .8s; }
/* photos: the frame wipes open while the picture settles from a slight zoom (same length, so they finish together) */
html.irc-anim .irc-a--img.is-in { animation: irc-wipe 1.2s var(--ease-wipe) var(--d, 0s) both; }
html.irc-anim .irc-a--img.is-in img { animation: irc-settle 1.2s var(--ease-out) var(--d, 0s) both; }
html.irc-anim .irc-a--img.is-done img { animation: none; }
/* finished: give the element back to its own styles so hover lifts / transitions work again */
html.irc-anim .irc-a.is-done { animation: none; opacity: 1; transform: none; clip-path: none; }
/* small red line before an eyebrow label draws itself in */
.abt-eyebrow .elementor-heading-title::before, .ab-eyebrow .elementor-heading-title::before { transform-origin: left center; transition: transform .9s var(--ease-out) .3s; }
html.irc-anim .abt-eyebrow.irc-a:not(.is-in) .elementor-heading-title::before, html.irc-anim .ab-eyebrow.irc-a:not(.is-in) .elementor-heading-title::before { transform: scaleX(0); }

/* ----- the existing hand-placed reveal classes (Home, service pages, About, Contact): same feel, a little more travel ----- */
.reveal-up { transform: translateY(40px); transition-duration: .95s; transition-timing-function: var(--ease-out); }
.reveal-block { transform: translateY(36px); transition-duration: .95s; transition-timing-function: var(--ease-out); }
.reveal-left { transform: translateX(-60px); transition-duration: 1s; transition-timing-function: var(--ease-out); }
.reveal-right { transform: translateX(60px); transition-duration: 1s; transition-timing-function: var(--ease-out); }
.reveal-img { transform: translateY(28px) scale(.95); transition-duration: 1.1s; transition-timing-function: var(--ease-out); }
.reveal-up.is-visible, .reveal-block.is-visible, .reveal-img.is-visible { transform: none; }
.stagger > * { transform: translateY(32px); transition-duration: .8s; transition-timing-function: var(--ease-out); }
.stagger.is-visible > * { transform: none; }

/* ----- 2. banner intro (About, Contact, Ferromagnetic Materials, every service page): plays once on load ----- */
html.irc-anim .ab-hero .abt-crumbs, html.irc-anim .page-hero .page-breadcrumb { animation: irc-up .9s var(--ease-out) .05s both; }
html.irc-anim .ab-hero .page-hero-title, html.irc-anim .page-hero .page-hero-title { animation: irc-title 1.1s var(--ease-out) .22s both; }
/* service-page banner photo: slow cinematic zoom-out on load (the container scales inside the clipped banner); the
   parallax drift on scroll is added by irc-motion.js */
html.irc-anim .page-hero-bg { animation: irc-kenburns 2.6s var(--ease-out) both; }

/* ----- 3. hover polish, site-wide ----- */
.elementor-button, .btn-red-pill, .btn-light-pill, .btn-outline-pill { transition: transform .3s var(--ease-out), box-shadow .3s ease, background-color .25s ease, border-color .25s ease, color .25s ease; }
.elementor-button:hover, .btn-red-pill:hover, .btn-light-pill:hover, .btn-outline-pill:hover { transform: translateY(-3px); box-shadow: 0 14px 28px rgba(20,24,31,.2); }
.elementor-button .elementor-button-icon { transition: transform .3s var(--ease-out); }
.elementor-button:hover .elementor-button-icon { transform: translateX(5px); }
.elementor-widget-icon-box .elementor-icon { transition: transform .35s var(--ease-out), background-color .3s ease, color .3s ease; }
.elementor-widget-icon-box:hover .elementor-icon { transform: translateY(-4px) scale(1.06); }
.site-footer ul li a { display: inline-block; transition: transform .25s var(--ease-out), color .25s ease; }
.site-footer ul li a:hover { transform: translateX(6px); }
.topbar-social a, .footer-social a { transition: transform .3s var(--ease-out), background-color .25s ease, color .25s ease; }
.topbar-social a:hover, .footer-social a:hover { transform: translateY(-3px); }
/* main menu: red underline slides in from the left on hover and under the current page (desktop) */
@media (min-width: 992px) {
	.main-menu > li > .nav-link::before { content: ""; position: absolute; left: 18px; right: 18px; bottom: 2px; height: 2px; background: var(--red); transform: scaleX(0); transform-origin: left center; transition: transform .4s var(--ease-out); }
	.main-menu > li > .nav-link:hover::before, .main-menu > li.current-menu-item > .nav-link::before, .main-menu > li.current_page_item > .nav-link::before { transform: scaleX(1); }
}

/* ----- 4. scroll progress bar (created by irc-motion.js) ----- */
.irc-progress { position: fixed; top: 0; left: 0; width: 100%; height: 3px; z-index: 3000; pointer-events: none; transform: scaleX(0); transform-origin: 0 50%; background: linear-gradient(90deg, var(--red), #ff5a66); will-change: transform; }
body.admin-bar .irc-progress { top: 32px; }
@media (max-width: 782px) { body.admin-bar .irc-progress { top: 46px; } }

/* ----- safety: the Elementor editor, and visitors who ask for reduced motion, never get hidden or moving content ----- */
.elementor-editor-active .irc-a, .elementor-editor-active .irc-a img { opacity: 1 !important; animation: none !important; transform: none !important; clip-path: none !important; }
.elementor-editor-active .irc-progress { display: none; }
@media (prefers-reduced-motion: reduce) {
	.irc-a, .irc-a img, .ab-hero .abt-crumbs, .page-hero .page-breadcrumb, .page-hero-title, .page-hero-bg { opacity: 1 !important; animation: none !important; transform: none !important; clip-path: none !important; }
	.irc-progress { display: none; }
	.elementor-button:hover, .btn-red-pill:hover, .btn-light-pill:hover, .btn-outline-pill:hover, .elementor-widget-icon-box:hover .elementor-icon { transform: none; }
}


/* =========================================================
   TYPE SCALE — inner pages (About, Contact, Ferromagnetic Materials). One scale for every font size, in step with the
   rest of the site (its section titles are 2.4rem at most). Change a token here and it changes everywhere.
   Declared last on purpose: it has the final word over the per-section sizes above.
   ========================================================= */
:root {
	--fs-h2: clamp(1.7rem, 1.2rem + 1.8vw, 2.4rem);      /* section titles (same as the site's .section-title) */
	--fs-h2-sm: clamp(1.45rem, 1.15rem + 1.1vw, 1.9rem); /* secondary section titles (e.g. client logos) */
	--fs-lead: clamp(1.2rem, 1.02rem + .8vw, 1.55rem);   /* statement lines: introduction, call to action */
	--fs-h3: 1.2rem;                                     /* card and row titles */
	--fs-body: 1rem;                                     /* paragraphs */
	--fs-small: .94rem;                                  /* card text, labels under figures */
	--fs-label: .78rem;                                  /* small capital labels (eyebrows) */
	--fs-num: clamp(2rem, 1.5rem + 2vw, 3rem);           /* big figures */
}

/* titles */
.abt-title .elementor-heading-title, .ab-faq .ab-title .elementor-heading-title, .ct-title .elementor-heading-title { font-size: var(--fs-h2) !important; line-height: 1.15 !important; }
.abt-title--sm .elementor-heading-title { font-size: var(--fs-h2-sm) !important; }
.abt-eyebrow .elementor-heading-title, .ab-eyebrow .elementor-heading-title { font-size: var(--fs-label) !important; }

/* statements */
.abt-lead .elementor-heading-title { font-size: var(--fs-lead) !important; line-height: 1.4 !important; }
.abt-cta-text, .abt-cta-text p { font-size: var(--fs-lead) !important; line-height: 1.4 !important; }
.abt-values-sub, .abt-values-sub p { font-size: var(--fs-h3) !important; }

/* paragraphs */
.abt-body, .abt-body p, .abt-sub, .abt-sub p, .abt-values-copy, .abt-values-copy p,
.ct-intro, .ct-intro p, .uc-text, .uc-text p, .ct-map-address, .ct-map-address p { font-size: var(--fs-body) !important; }
.ct-form-sub, .ct-form-sub p { font-size: var(--fs-small) !important; }

/* figures */
.abt-stat .elementor-counter-number-wrapper { font-size: var(--fs-num) !important; }
.abt-stat-text .elementor-heading-title { font-size: calc(var(--fs-num) * .8) !important; min-height: var(--fs-num); }
.abt-stat .elementor-counter-title, .abt-stat-label, .abt-stat-label p { font-size: var(--fs-small) !important; }
.abt-badge-year .elementor-heading-title { font-size: 1.6rem !important; }

/* cards and rows */
.abt-svc-title .elementor-heading-title, .abt-value .elementor-icon-box-title { font-size: var(--fs-h3) !important; }
.abt-svc-text, .abt-svc-text p, .abt-value .elementor-icon-box-description { font-size: var(--fs-small) !important; }
.abt-why-list .elementor-icon-list-item { font-size: var(--fs-body) !important; }
.abt-why-list .elementor-icon-list-item:first-child { font-size: var(--fs-h3) !important; }
.abt-why-list .elementor-icon-list-item::before { font-size: 2rem !important; }
.ct-item-value .elementor-heading-title { font-size: var(--fs-body) !important; }

/* Flex rows that must wrap on narrow screens: Elementor sets flex-wrap:nowrap and flex sizing on its containers/widgets,
   so these have to be forced (otherwise the call-to-action button runs off the edge on tablets). */
.abt-cta-inner, .ct-map-head, .ct-map-btns, .uc-actions, .ct-follow, .abt-title-row, .abt-crumbs { flex-wrap: wrap !important; }
.abt-cta-text { flex: 1 1 380px !important; min-width: 0 !important; width: auto !important; }
.abt-cta-btn { flex: none !important; width: auto !important; max-width: none !important; }


/* =========================================================
   SEARCH RESULTS PAGE (search.php) — same banner, spacing and type scale as the other inner pages.
   ========================================================= */
.srch-hero { background: #101318 url('../images/hero-poster.jpg') center center / cover no-repeat; }
.srch-main { background: var(--ab-soft); padding: var(--sec-pad) 0; font-family: var(--font-body); color: var(--ab-text); }

/* search bar */
.srch-form { display: flex; align-items: center; gap: 12px; max-width: 780px; margin: 0 auto; padding: 8px 8px 8px 26px; background: #fff; border: 1px solid var(--ab-line); border-radius: 60px; box-shadow: 0 18px 40px rgba(20,24,31,.08); transition: border-color .25s ease, box-shadow .25s ease; }
.srch-form:focus-within { border-color: var(--red); box-shadow: 0 0 0 4px rgba(222,0,17,.12), 0 18px 40px rgba(20,24,31,.08); }
.srch-form > .bi { flex: none; font-size: 1.1rem; color: var(--ab-mid); }
.srch-form input[type="search"] { flex: 1 1 auto; min-width: 0; width: 100%; padding: 12px 4px; border: 0 !important; outline: 0 !important; box-shadow: none !important; background: transparent !important; font-size: 1.05rem; color: var(--ab-ink); }
.srch-form input[type="search"]::placeholder { color: #8b919a; opacity: 1; }
.srch-form .btn { flex: none; padding: .8rem 1.8rem; }
.srch-summary { margin: 24px 0 0; text-align: center; font-size: var(--fs-body); color: var(--ab-text); }
.srch-summary strong { color: var(--ab-ink); }
.srch-q { color: var(--red); font-weight: 600; }

/* result cards */
.srch-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gutter); margin-top: var(--head-gap); }
.srch-card { display: flex; flex-direction: column; overflow: hidden; background: #fff; border: 1px solid var(--ab-line); border-radius: 18px; box-shadow: 0 10px 28px rgba(20,24,31,.06); transition: transform .35s var(--ease-out), box-shadow .35s ease, border-color .35s ease; }
.srch-card:hover { transform: translateY(-6px); box-shadow: 0 24px 48px rgba(20,24,31,.14); border-color: #d3d7dd; }
.srch-thumb { position: relative; display: block; aspect-ratio: 16 / 10; overflow: hidden; background: #14181f; }
.srch-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform .9s var(--ease-out); }
.srch-card:hover .srch-thumb img { transform: scale(1.07); }
.srch-thumb-ph { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 2.4rem; color: rgba(255,255,255,.4); background: radial-gradient(circle at 15% 100%, rgba(222,0,17,.35), transparent 55%), linear-gradient(135deg, #232b36, #0f1319); }
.srch-badge { position: absolute; top: 14px; left: 14px; padding: 6px 12px; border-radius: 50px; background: rgba(255,255,255,.95); color: var(--ab-ink); font-size: .68rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; line-height: 1; box-shadow: 0 6px 16px rgba(0,0,0,.18); }
.srch-body { display: flex; flex: 1; flex-direction: column; padding: calc(var(--gutter) + 2px); }
.srch-title { margin: 0 0 12px; font-size: var(--fs-h3); font-weight: 700; line-height: 1.3; letter-spacing: -.01em; color: var(--ab-ink); }
.srch-title a { color: inherit !important; text-decoration: none !important; transition: color .2s ease; }
.srch-title a:hover { color: var(--red) !important; }
.srch-excerpt { display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; margin: 0 0 18px; font-size: var(--fs-small); line-height: 1.7; color: var(--ab-text); }
.srch-more { margin-top: auto; display: inline-flex; align-items: center; gap: 8px; align-self: flex-start; font-size: .8rem; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--red) !important; text-decoration: none !important; }
.srch-more .bi { transition: transform .3s var(--ease-out); }
.srch-card:hover .srch-more .bi, .srch-more:hover .bi { transform: translateX(5px); }
.srch-main mark { padding: 0 3px; border-radius: 3px; background: rgba(222,0,17,.14); color: inherit; }

/* pagination */
.srch-results .pagination { margin-top: var(--head-gap); }
.srch-results .nav-links { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; }
.srch-results .page-numbers { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-width: 46px; height: 46px; padding: 0 18px; background: #fff; border: 1px solid var(--ab-line); border-radius: 50px; font-size: .92rem; font-weight: 600; color: var(--ab-ink); text-decoration: none; transition: all .25s ease; }
.srch-results a.page-numbers:hover { border-color: var(--red); color: var(--red); transform: translateY(-2px); }
.srch-results .page-numbers.current { background: var(--ab-ink); border-color: var(--ab-ink); color: #fff; }
.srch-results .page-numbers.dots { background: transparent; border-color: transparent; }
.srch-results .screen-reader-text { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); border: 0; white-space: nowrap; }

/* nothing found / empty search */
.srch-empty { max-width: 760px; margin: var(--head-gap) auto 0; padding: var(--card-pad); text-align: center; background: #fff; border: 1px solid var(--ab-line); border-radius: 22px; box-shadow: 0 24px 56px rgba(20,24,31,.08); }
.srch-empty-icon { display: inline-flex; align-items: center; justify-content: center; width: 76px; height: 76px; margin-bottom: 22px; border-radius: 50%; background: rgba(222,0,17,.1); color: var(--red); font-size: 1.8rem; }
.srch-empty h2 { margin: 0 0 var(--title-gap); font-size: var(--fs-h2-sm); font-weight: 700; line-height: 1.2; letter-spacing: -.02em; color: var(--ab-ink); }
.srch-empty p { max-width: 560px; margin: 0 auto 26px; font-size: var(--fs-body); line-height: 1.75; color: var(--ab-text); }
.srch-chips { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin: 0 0 30px; padding: 0; list-style: none; }
.srch-chips a { display: inline-flex; align-items: center; gap: 8px; padding: 10px 18px; background: var(--ab-soft); border: 1px solid var(--ab-line); border-radius: 50px; font-size: .9rem; font-weight: 600; color: var(--ab-ink) !important; text-decoration: none !important; transition: all .25s ease; }
.srch-chips a .bi { font-size: .8rem; color: var(--red); transition: transform .25s ease; }
.srch-chips a:hover { background: #fff; border-color: var(--red); transform: translateY(-2px); }
.srch-chips a:hover .bi { transform: translate(2px, -2px); }

@media (max-width: 991.98px) {
	.srch-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 575.98px) {
	.srch-grid { grid-template-columns: 1fr; }
	.srch-form { padding: 6px 6px 6px 18px; gap: 8px; }
	.srch-form .btn { padding: .7rem 1.2rem; font-size: .75rem; }
	.srch-form input[type="search"] { font-size: 1rem; }
}

/* contact details card: when the form beside it is taller, share the spare height between the blocks instead of leaving an empty strip at the bottom */
@media (min-width: 992px) { .ct-info { justify-content: space-between !important; } }


/* =========================================================
   QUICK ENQUIRY — the one block shared by every page (Elementor saved template "Quick Enquiry" + Contact Form 7).
   Same look as before (grey card, pill fields, red button), now identical everywhere.
   ========================================================= */
.qe-section { width: 100%; }
.qe-section .elementor-widget { margin-block-end: 0 !important; }
.qe-section * { font-family: var(--font-body) !important; }
.qe-card { display: grid !important; grid-template-columns: 5fr 7fr; gap: var(--split-gap) !important; align-items: center; padding: var(--card-pad) !important; background: var(--gray-bg) !important; border-radius: 20px !important; }

/* left: label, title, phone */
.qe-eyebrow .elementor-heading-title { margin: 0 0 var(--eyebrow-gap) !important; font-size: .9rem !important; font-weight: 500 !important; line-height: 1.4 !important; letter-spacing: .05em; text-transform: uppercase; color: var(--red) !important; }
.qe-title .elementor-heading-title { margin: 0 0 28px !important; font-size: var(--fs-h2) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em; color: var(--ink) !important; text-wrap: balance; }
.qe-call { display: flex !important; flex-direction: row !important; align-items: center !important; gap: 16px !important; }
.qe-call-icon .elementor-icon { width: 52px !important; height: 52px !important; border-radius: 50% !important; background: var(--red) !important; color: #fff !important; fill: #fff !important; display: inline-flex !important; align-items: center; justify-content: center; padding: 0 !important; }
.qe-call-icon .elementor-icon svg { width: 1.1rem !important; height: 1.1rem !important; fill: currentColor !important; }
.qe-call-label .elementor-heading-title { margin: 0 !important; font-size: .95rem !important; font-weight: 500 !important; line-height: 1.4 !important; text-transform: uppercase; color: var(--gray-text) !important; }
.qe-call-num .elementor-heading-title { margin: 0 !important; font-size: 1.5rem !important; font-weight: 700 !important; line-height: 1.3 !important; color: var(--ink) !important; }
.qe-call-num a { color: inherit !important; text-decoration: none !important; border-bottom: 2px solid var(--ink); }
.qe-call-num a:hover { color: var(--red) !important; border-bottom-color: var(--red); }

/* right: intro + form */
.qe-intro .elementor-heading-title { margin: 0 0 var(--field-gap) !important; font-size: 1.15rem !important; font-weight: 600 !important; line-height: 1.55 !important; color: var(--ink) !important; }
.qe-form .wpcf7 form { margin: 0; }
.qe-form .wpcf7 p { margin: 0 0 var(--field-gap) !important; }
.qe-cf-grid { display: grid; grid-template-columns: 1fr 1fr; column-gap: var(--field-gap); margin: 0 !important; }
.qe-form .wpcf7-form-control-wrap { display: block; }
.qe-form .wpcf7 input[type="text"], .qe-form .wpcf7 input[type="email"], .qe-form .wpcf7 input[type="tel"], .qe-form .wpcf7 select {
	display: block; width: 100%; max-width: 100%; box-sizing: border-box; height: auto; min-height: 46px; padding: 11px 22px; border: 2px solid transparent !important; border-radius: 50px !important;
	background-color: #fff !important; color: var(--ink) !important; font-size: .95rem; line-height: 1.4; box-shadow: none !important; outline: 0; transition: border-color .2s ease, box-shadow .2s ease;
}
.qe-form .wpcf7 select { cursor: pointer; }
.qe-form .wpcf7 input::placeholder { color: #6f7680; opacity: 1; }
.qe-form .wpcf7 input:focus, .qe-form .wpcf7 select:focus { border-color: var(--red) !important; box-shadow: 0 0 0 4px rgba(222,0,17,.12) !important; }
.qe-form .wpcf7-not-valid { border-color: var(--red) !important; }
.qe-form .wpcf7-not-valid-tip { display: block; margin: 6px 0 0 22px; font-size: .8rem; font-weight: 500; color: var(--red); }
.qe-form .wpcf7-submit { display: inline-flex; align-items: center; justify-content: center; padding: 14px 34px; border: 2px solid var(--red) !important; border-radius: 50px !important; background: var(--red) !important; color: #fff !important; font-size: .8rem; font-weight: 700; text-transform: uppercase; letter-spacing: .1em; cursor: pointer; box-shadow: none !important; transition: all .25s ease; }
.qe-form .wpcf7-submit:hover, .qe-form .wpcf7-submit:focus { background: var(--ink) !important; border-color: var(--ink) !important; }
.qe-form .qe-cf-submit { display: flex; align-items: center; gap: 12px; margin-bottom: 0 !important; }
.qe-form .wpcf7-spinner { margin: 0; }
.qe-form .wpcf7 form .wpcf7-response-output { margin: 18px 0 0; padding: 12px 18px; border-width: 1px; border-radius: 14px; font-size: .92rem; line-height: 1.5; }
.qe-form .wpcf7 form.sent .wpcf7-response-output { border-color: #1a7f37; background: #eaf7ee; color: #14602a; }
.qe-form .wpcf7 form.invalid .wpcf7-response-output, .qe-form .wpcf7 form.failed .wpcf7-response-output, .qe-form .wpcf7 form.unaccepted .wpcf7-response-output { border-color: var(--red); background: #fdecee; color: #8a0a14; }

@media (max-width: 991.98px) {
	.qe-card { grid-template-columns: 1fr; gap: 28px !important; align-items: start; }
}
@media (max-width: 575.98px) {
	.qe-cf-grid { grid-template-columns: 1fr; }
	.qe-form .wpcf7-submit { width: 100%; }
	.qe-form .qe-cf-submit { flex-direction: column; align-items: stretch; }
	.qe-call-num .elementor-heading-title { font-size: 1.3rem !important; }
}

/* =========================================================
   SECTION SPACING RULE (final word, every page, every screen size): each section has exactly 50px at the top and
   50px at the bottom — nothing larger anywhere. The gaps around headings and between columns are capped at 50px too.
   ========================================================= */
:root { --sec-pad: 50px; --head-gap: 40px; --split-gap: 50px; }
.site-footer { padding-top: 50px !important; }
/* the wrapper of the Quick Enquiry block used to add its own 60px margin on top of the section above it */
.elementor > .e-con:has(#contact) { margin-top: 0 !important; margin-bottom: 0 !important; }


/* =========================================================
   SITE-WIDE TYPE SCALE — the same four sizes on EVERY page (Home, Services, About, Contact, Insights, Search ...):
     page title (H1)  ·  section heading (H2)  ·  sub-heading (H3: card / row / step titles)  ·  paragraph.
   Everything else is a label (small capitals) or a deliberately large statement/figure. Fluid: every size scales down
   smoothly on tablet and phone. Change a token and the whole site follows. Declared last: it has the final word.
   ========================================================= */
:root {
	--fs-h1: clamp(1.9rem, 1.5rem + 1.6vw, 2.6rem);      /* page titles (banner) — 41.6px on desktop */
	--fs-h2: clamp(1.6rem, 1.15rem + 1.5vw, 2.1rem);     /* section headings — 33.6px */
	--fs-h3: 1.15rem;                                    /* sub-headings: card, row and step titles — 18.4px */
	--fs-body: max(15px, .95rem);                        /* every paragraph, card description and list text — 15.2px (15px on phones) */
	--fs-lead: clamp(1.15rem, 1rem + .7vw, 1.4rem);      /* statement lines (introduction, call to action, quotes) */
	--fs-label: .85rem;                                  /* small capital labels above headings */
	--fs-small: var(--fs-body);                          /* no second paragraph size */
	--fs-h2-sm: var(--fs-h2);                            /* no second heading size */
}

/* page titles — every banner, plus the Home hero */
.page-hero-title, .page-hero-title .elementor-heading-title, .hero-title { font-size: var(--fs-h1) !important; line-height: 1.15 !important; }

/* section headings */
.section-title, .section-title .elementor-heading-title, .abt-title .elementor-heading-title, .ab-title .elementor-heading-title, .ct-title .elementor-heading-title,
.qe-title .elementor-heading-title, .srch-empty h2, .svc-section h2, .editorial-main h2, .svc-editorial h2, .about-section h2, .why-section h2, .blog-section h2,
.industries-banner h2, .accred-section h2, .clients-section h2 { font-size: var(--fs-h2) !important; line-height: 1.15 !important; }

/* sub-headings (card / row / step titles) */
.reason-title, .reason-title h4, .apply-item-body h3, .process-step h3, .credential-item h3, .float-list-item h3, .blog-card-body h3, .service-card-body h3,
.abt-svc-title .elementor-heading-title, .abt-value .elementor-icon-box-title, .ab-svc .elementor-icon-box-title, .ab-value .elementor-icon-box-title,
.abt-values-sub, .abt-values-sub p, .srch-title, .uc-svc .elementor-icon-box-title, .editorial-main h3, .svc-section h3 { font-size: var(--fs-h3) !important; line-height: 1.3 !important; }

/* paragraphs: body copy, card descriptions, list text — one size */
.section-text, .section-text p, .svc-strip-lead, .reason-desc, .apply-item-body p, .process-step p, .credential-item p, .credential-note, .float-list-item p,
.clients-heading, .hero-text, .enquiry-intro, .abt-body, .abt-body p, .abt-sub, .abt-sub p, .abt-values-copy, .abt-values-copy p, .abt-svc-text, .abt-svc-text p,
.abt-value .elementor-icon-box-description, .ab-svc .elementor-icon-box-description, .ab-value .elementor-icon-box-description, .uc-svc .elementor-icon-box-description,
.ct-intro, .ct-intro p, .ct-form-sub, .ct-form-sub p, .ct-map-address, .ct-map-address p, .uc-text, .uc-text p, .srch-excerpt, .srch-summary, .srch-empty p,
.editorial-main p, .editorial-main li, .svc-section p, .abt-why-list .elementor-icon-list-item, .qe-intro .elementor-heading-title { font-size: var(--fs-body) !important; line-height: 1.7 !important; }
.abt-why-list .elementor-icon-list-item:first-child { font-size: var(--fs-h3) !important; }

/* statement lines */
.abt-lead .elementor-heading-title, .abt-cta-text, .abt-cta-text p, .pullquote-text { font-size: var(--fs-lead) !important; line-height: 1.4 !important; }

/* small capital labels above headings */
.eyebrow, .abt-eyebrow .elementor-heading-title, .ab-eyebrow .elementor-heading-title, .qe-eyebrow .elementor-heading-title { font-size: var(--fs-label) !important; }

/* catch-alls (zero extra specificity, so the specific rules above still win): a heading or paragraph that someone adds later in
   Elementor follows the same scale automatically */
:where(.elementor-widget-heading) h1.elementor-heading-title { font-size: var(--fs-h1) !important; }
:where(.elementor-widget-heading) h2.elementor-heading-title { font-size: var(--fs-h2) !important; }
:where(.elementor-widget-heading) :is(h3, h4).elementor-heading-title { font-size: var(--fs-h3) !important; }
:where(.elementor-widget-text-editor) p { font-size: var(--fs-body) !important; }
.hero-title .elementor-heading-title { font-size: var(--fs-h1) !important; line-height: 1.15 !important; }
/* labels and quotes sitting inside service sections must not be flattened to paragraph size by `.svc-section p` */
.svc-section p.eyebrow, p.eyebrow { font-size: var(--fs-label) !important; }
.svc-section p.pullquote-text, p.pullquote-text { font-size: var(--fs-lead) !important; line-height: 1.45 !important; }

/* Quick Enquiry is a section like any other: 50px above and 50px below it (it used to sit flush against the section above). */
.elementor > .e-con:has(#contact) { margin: 0 !important; padding-top: 50px !important; padding-bottom: 50px !important; }
body:has(#contact) #primary { margin-bottom: 0 !important; }

/* Sections carry spacing as padding only: no leftover margins (the red credential band on a few service pages had a 50px bottom margin, doubling the gap above the Quick Enquiry). */
.svc-section { margin-top: 0 !important; margin-bottom: 0 !important; }

/* Buttons: clicking or tabbing to a button must never turn its TEXT blue (the theme default link colour on focus/active).
   Only the text colour is pinned to the designed one; backgrounds and everything else are untouched. */
.btn-red-pill, .btn-red-pill:visited, .btn-red-pill:hover, .btn-red-pill:focus, .btn-red-pill:focus-visible, .btn-red-pill:active { color: #fff !important; --bs-btn-color: #fff; --bs-btn-hover-color: #fff; --bs-btn-active-color: #fff; }
.btn-light-pill, .btn-light-pill:visited, .btn-light-pill:focus, .btn-light-pill:focus-visible, .btn-light-pill:active { color: var(--ink) !important; }
.btn-light-pill:hover { color: #fff !important; }
.btn-outline-pill, .btn-outline-pill:visited, .btn-outline-pill:focus, .btn-outline-pill:focus-visible, .btn-outline-pill:active { color: #fff !important; }
.btn-outline-pill:hover { color: var(--ink) !important; }
.elementor-button:visited, .elementor-button:focus, .elementor-button:active { text-decoration: none !important; }
.ct-btn--dark .elementor-button:visited, .ct-btn--dark .elementor-button:focus, .ct-btn--dark .elementor-button:active, .abt-cta-btn .elementor-button:focus { color: #fff !important; }
.abt-cta-btn .elementor-button:active { color: #fff !important; }
.wpcf7-submit:focus, .wpcf7-submit:active { color: #fff !important; }
/* no dotted browser ring after a mouse click; keyboard users still get a clear ring */
.btn-red-pill:focus:not(:focus-visible), .btn-light-pill:focus:not(:focus-visible), .btn-outline-pill:focus:not(:focus-visible), .elementor-button:focus:not(:focus-visible) { outline: none !important; box-shadow: none; }
.btn-red-pill:focus-visible, .btn-light-pill:focus-visible, .btn-outline-pill:focus-visible, .elementor-button:focus-visible { outline: 2px solid var(--ink) !important; outline-offset: 3px; }

.ct-map { padding-bottom: 50px !important; }


/* =========================================================
   SECTION SPACING, part 2 — see assets/js/irc-layout.js: the second of two neighbouring sections on the same background
   loses its top padding, so the pair keeps one 50px gap instead of 100px.
   ========================================================= */
.irc-join { padding-top: 0 !important; }
.elementor > .e-con.irc-join:has(#contact) { padding-top: 0 !important; }  /* the Quick Enquiry rule above is more specific: let the merge win */
/* the Quick Enquiry block on theme-template pages (Insights): it is its own section, 50px above and below */
.qe-standalone { padding: var(--sec-pad) 0; }

/* =========================================================
   INSIGHTS (blog) — the listing (home.php / archive.php) and an article (single.php).
   Cards reuse the search-result card styles (.srch-*), spacing and type follow the site-wide tokens.
   ========================================================= */
.bl-main { background: var(--ab-soft); color: var(--ab-text); font-family: var(--font-body); }
.bl-listing, .bl-article-wrap, .bl-related { padding: var(--sec-pad) 0; }

/* listing: heading + intro line, category chips */
.bl-intro { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: var(--gutter) var(--split-gap); }
.bl-title { margin: 0 0 12px; font-size: var(--fs-h2); font-weight: 700; line-height: 1.15; letter-spacing: -.02em; color: var(--ab-ink); }
.bl-lede { margin: 0; max-width: 560px; font-size: var(--fs-body); line-height: 1.7; color: var(--ab-text); }
.bl-chips { display: flex; flex-wrap: wrap; gap: 10px; margin: 0; padding: 0; list-style: none; }
.bl-chips a { display: inline-block; padding: 9px 18px; background: #fff; border: 1px solid var(--ab-line); border-radius: 50px; font-size: .88rem; font-weight: 600; line-height: 1.3; color: var(--ab-ink) !important; text-decoration: none !important; transition: all .25s ease; }
.bl-chips a:hover { border-color: var(--red); color: var(--red) !important; transform: translateY(-2px); }
.bl-chips a.is-active { background: var(--ab-ink); border-color: var(--ab-ink); color: #fff !important; }
.bl-grid { margin-top: var(--head-gap); }
.bl-meta { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 0 0 10px; font-size: .8rem; font-weight: 500; line-height: 1.4; color: #6f7680; }
.bl-meta span { display: inline-flex; align-items: center; gap: 6px; }
.bl-meta .bi { color: var(--red); }
/* the newest article: one wide card across the top of the first page */
.bl-card--featured { grid-column: 1 / -1; flex-direction: row; }
.bl-card--featured .srch-thumb { flex: 0 0 52%; aspect-ratio: auto; min-height: 340px; }
.bl-card--featured .srch-body { justify-content: center; padding: var(--card-pad); }
.bl-card--featured .srch-title { font-size: var(--fs-lead); }
.bl-main .pagination { margin-top: var(--head-gap); }
.bl-main .nav-links { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; }
.bl-main .page-numbers { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-width: 46px; height: 46px; padding: 0 18px; background: #fff; border: 1px solid var(--ab-line); border-radius: 50px; font-size: .92rem; font-weight: 600; color: var(--ab-ink); text-decoration: none; transition: all .25s ease; }
.bl-main a.page-numbers:hover { border-color: var(--red); color: var(--red); transform: translateY(-2px); }
.bl-main .page-numbers.current { background: var(--ab-ink); border-color: var(--ab-ink); color: #fff; }
.bl-main .page-numbers.dots { background: transparent; border-color: transparent; }
.bl-main .screen-reader-text { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); border: 0; white-space: nowrap; }

/* article */
.bl-layout { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: var(--split-gap); align-items: start; }
.bl-article { min-width: 0; }
.bl-header { margin-bottom: 30px; }
.bl-cat { display: inline-block; margin-bottom: 16px; padding: 6px 14px; border-radius: 50px; background: rgba(222,0,17,.1); font-size: .72rem; font-weight: 700; letter-spacing: .14em; line-height: 1.3; text-transform: uppercase; color: var(--red) !important; text-decoration: none !important; }
.bl-post-title { margin: 0 0 16px; font-size: var(--fs-h1); font-weight: 700; line-height: 1.2; letter-spacing: -.02em; color: var(--ab-ink); text-wrap: balance; }
.bl-hero-img { margin: 0 0 30px; overflow: hidden; border-radius: 20px; box-shadow: 0 24px 50px rgba(20,24,31,.14); }
.bl-hero-img img { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover; }
.bl-content { font-size: var(--fs-body); line-height: 1.85; color: var(--ab-text); }
.bl-content > :first-child { margin-top: 0; }
.bl-content p { margin: 0 0 1.15em; }
.bl-content h2 { margin: 1.6em 0 .6em; font-size: var(--fs-lead); font-weight: 700; line-height: 1.3; letter-spacing: -.01em; color: var(--ab-ink); }
.bl-content h3 { margin: 1.4em 0 .5em; font-size: var(--fs-h3); font-weight: 700; line-height: 1.3; color: var(--ab-ink); }
.bl-content ul, .bl-content ol { margin: 0 0 1.15em; padding-left: 1.3em; }
.bl-content li { margin-bottom: .45em; }
.bl-content li::marker { color: var(--red); font-weight: 700; }
.bl-content a { color: var(--ab-ink); text-decoration: none; border-bottom: 2px solid var(--red); }
.bl-content a:hover { color: var(--red); }
.bl-content img { max-width: 100%; height: auto; border-radius: 16px; }
.bl-content figure { margin: 1.6em 0; }
.bl-content figcaption { margin-top: 8px; font-size: .85rem; color: #6f7680; }
.bl-content blockquote { margin: 1.6em 0; padding: 22px 26px; background: #fff; border-left: 4px solid var(--red); border-radius: 0 16px 16px 0; font-size: var(--fs-h3); font-weight: 600; line-height: 1.55; color: var(--ab-ink); }
.bl-content blockquote p { margin: 0; }
.bl-foot { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px; margin-top: 30px; padding-top: 24px; border-top: 1px solid #d5d9de; }
.bl-tags { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; list-style: none; }
.bl-tags a { display: inline-block; padding: 6px 14px; background: #fff; border: 1px solid var(--ab-line); border-radius: 50px; font-size: .82rem; font-weight: 600; color: var(--ab-ink) !important; text-decoration: none !important; transition: all .25s ease; }
.bl-tags a:hover { border-color: var(--red); color: var(--red) !important; }
.bl-share { display: flex; align-items: center; gap: 10px; margin-left: auto; }
.bl-share span { margin-right: 4px; font-size: .78rem; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: #6f7680; }
.bl-share a { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; background: #fff; border: 1px solid var(--ab-line); border-radius: 50%; font-size: .95rem; color: var(--ab-ink) !important; text-decoration: none !important; transition: all .25s ease; }
.bl-share a:hover { background: var(--red); border-color: var(--red); color: #fff !important; transform: translateY(-3px); }
.bl-pager { display: grid; grid-template-columns: 1fr 1fr; gap: var(--gutter); margin-top: 30px; }
.bl-pager a { display: block; padding: 18px 22px; background: #fff; border: 1px solid var(--ab-line); border-radius: 16px; text-decoration: none !important; transition: all .25s ease; }
.bl-pager a:hover { border-color: var(--red); transform: translateY(-3px); box-shadow: 0 14px 30px rgba(20,24,31,.1); }
.bl-pager small { display: block; margin-bottom: 6px; font-size: .75rem; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--red); }
.bl-pager span { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-size: var(--fs-body); font-weight: 600; line-height: 1.4; color: var(--ab-ink); }
.bl-pager-next { text-align: right; grid-column: 2; }

/* sidebar */
.bl-side { display: flex; flex-direction: column; gap: var(--gutter); }
.srch-form--sm { max-width: none; margin: 0; padding: 5px 5px 5px 18px; gap: 8px; box-shadow: none; }
.srch-form--sm input[type="search"] { padding: 9px 4px; font-size: .95rem; }
.srch-form--sm .btn { padding: .6rem 1.2rem; font-size: .75rem; }
.bl-widget { padding: 24px; background: #fff; border: 1px solid var(--ab-line); border-radius: 18px; }
.bl-widget-title { margin: 0 0 16px; font-size: var(--fs-h3); font-weight: 700; line-height: 1.3; color: var(--ab-ink); }
.bl-cat-list, .bl-recent { margin: 0; padding: 0; list-style: none; }
.bl-cat-list li + li { border-top: 1px solid var(--ab-line); }
.bl-cat-list a { display: flex; align-items: center; justify-content: space-between; padding: 11px 0; font-size: var(--fs-body); font-weight: 600; color: var(--ab-ink) !important; text-decoration: none !important; transition: color .2s ease; }
.bl-cat-list a:hover { color: var(--red) !important; }
.bl-cat-list em { min-width: 28px; padding: 2px 8px; background: var(--ab-soft); border-radius: 50px; font-size: .78rem; font-style: normal; font-weight: 700; text-align: center; color: var(--ab-mid); }
.bl-recent li + li { margin-top: 14px; }
.bl-recent a { display: flex; align-items: center; gap: 14px; text-decoration: none !important; }
.bl-recent img, .bl-recent-ph { flex: none; width: 68px; height: 68px; border-radius: 12px; object-fit: cover; }
.bl-recent-ph { display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #232b36, #0f1319); color: rgba(255,255,255,.5); }
.bl-recent strong { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; font-size: .92rem; font-weight: 600; line-height: 1.4; color: var(--ab-ink); transition: color .2s ease; }
.bl-recent a:hover strong { color: var(--red); }
.bl-recent small { display: block; margin-top: 4px; font-size: .78rem; color: #6f7680; }
.bl-cta { background: linear-gradient(150deg, #262e39, var(--ab-ink)); border-color: transparent; }
.bl-cta .bl-widget-title { color: #fff; }
.bl-cta p { margin: 0 0 20px; font-size: var(--fs-body); line-height: 1.7; color: rgba(255,255,255,.8); }

@media (max-width: 991.98px) {
	.bl-layout { grid-template-columns: 1fr; }
	.bl-card--featured { flex-direction: column; }
	.bl-card--featured .srch-thumb { flex: none; min-height: 0; aspect-ratio: 16 / 10; }
	.bl-share { margin-left: 0; }
}
@media (max-width: 575.98px) {
	.bl-pager { grid-template-columns: 1fr; }
	.bl-pager-next { grid-column: auto; }
}

/* featured card: the photo fills its half without deciding the height of the card (a tall portrait photo used to stretch it) */
.bl-card--featured .srch-thumb { aspect-ratio: auto; min-height: 360px; }
.bl-card--featured .srch-thumb img { position: absolute; inset: 0; }
.bl-card--featured .srch-more { margin-top: 12px; }
@media (max-width: 991.98px) { .bl-card--featured .srch-thumb { min-height: 0; aspect-ratio: 16 / 10; } }

/* Clicking any link or button must not leave the theme dotted focus box or turn its text blue. Mouse clicks show no ring at all; keyboard users (Tab) still get a clear, solid ring. */
:where(a, button, [role="button"], summary, .btn):focus:not(:focus-visible) { outline: none !important; box-shadow: none; }
:where(a, button, [role="button"], summary, .btn):focus-visible { outline: 2px solid var(--ink); outline-offset: 3px; }
.main-menu .nav-link:focus, .main-menu .nav-link:active { color: var(--ink); }
.main-menu > li.current-menu-item > .nav-link:focus, .main-menu > li.current_page_item > .nav-link:focus, .main-menu .nav-link:hover { color: var(--red); }
.site-footer a:focus, .site-footer a:active { color: inherit; }
.nav-search-toggle:focus, .nav-search-toggle:active { color: var(--ink); background: transparent; }

/* Text blocks: the gap below/above belongs to the block, never also to the paragraph inside it (that doubled it). */
.abt-values-sub { margin: 16px 0 10px !important; }
.abt-values-sub p, .ct-intro p, .ct-form-sub p { margin: 0 !important; }
.ct-intro { margin: 0 0 28px !important; }
.ct-form-sub { margin: 0 0 28px !important; }
.uc-text { margin: 0 auto 32px !important; max-width: 620px; }
.uc-text p { margin: 0 auto !important; }

/* Desktop (992px and up): every .container-xl keeps Bootstrap's 12px side gutter, so section content lines up exactly with the header and banner
   (Elementor containers drop it; below 992px the 20px / 32px rules above already apply). */
@media (min-width: 992px) { .container-xl { padding-left: 12px !important; padding-right: 12px !important; } }

/* Whole card is the click target (Insights, related articles, search results): the title link stretches over the entire card. */
.srch-card { position: relative; }
.srch-title a::after { content: ""; position: absolute; inset: 0; z-index: 1; border-radius: inherit; }
.srch-title a:focus-visible { outline: none !important; }
.srch-title a:focus-visible::after { outline: 2px solid var(--ink); outline-offset: 3px; border-radius: 18px; }

/* the Quick Enquiry on pages whose last section is an Elementor "boxed" container: let it use the same width as every other section (it was capped at 1140px on screens over 1400px) */
.e-con-boxed:has(#contact) > .e-con-inner { max-width: 100% !important; width: 100% !important; }

/* These text blocks own their bottom gap, but Elementor's widget rule (margin-block-end:0, more specific) was winning and removing it. */
.ct-main .ct-intro.elementor-widget { margin-bottom: 28px !important; }
.ct-main .ct-form-sub.elementor-widget { margin-bottom: 28px !important; }
.uc-main .uc-text.elementor-widget { margin-bottom: 32px !important; }
.abt-values .abt-values-sub.elementor-widget { margin: 16px 0 10px !important; }

/* =========================================================
   NOTHING LARGER THAN 50px BETWEEN TWO BLOCKS OF CONTENT (service pages and articles).
   The divider block ("Suitable materials include: ..." / "3D laser scanning supports: ...") used to stack a 25px paragraph margin, a 16px
   container gap, a 45px top margin, a line and 29px of padding (about 115px). Card grids and lists carried 38-45px top margins on top of
   the same paragraph margin and gap. Everything is now capped so the visible space from the text above to the next block is at most 50px.
   ========================================================= */
.svc-strip-lead { margin-top: 0 !important; padding-top: 14px !important; margin-bottom: 14px !important; }
/* the paragraph right above a divider block gives up its own bottom margin (the 16px container gap already separates them) */
.elementor-widget:has(+ .elementor-widget > .svc-strip-lead) > p { margin-bottom: 0 !important; }
.elementor-widget:has(+ .elementor-widget > .svc-strip-lead) > h2 { margin-bottom: 0 !important; }
/* grids and lists under a paragraph or heading: 25px paragraph margin + 16px gap + 10px = 51px at most */
.feature-grid, .info-grid, .info-row-grid, .testimonial-grid, .float-list, .plain-list-grid, .pullquote-grid, .process-timeline, .apply-list, .ndt-accordion { margin-top: 10px !important; }
/* inside articles */
.bl-content h2 { margin: 1.15em 0 .5em; }
.bl-content h3 { margin: 1.1em 0 .45em; }
.bl-content blockquote { margin: 1.3em 0; }

/* Heading row that sits directly above a divider-and-lead block (.svc-strip-lead): the subtitle's own bottom margin
   plus the row gap made ~40px before the line; the line now sits one 16px gap below the subtitle. */
.e-con:has(+ .e-con .svc-strip-lead) .section-text { margin-bottom: 0 !important; }

/* One section-heading style everywhere: some titles were 700 / 1.22 line-height / uppercase, so they looked bigger than the rest
   although the size token was already the same. Weight, line-height, tracking and case now match too. */
h2.elementor-heading-title, h2.section-title, .section-title h2, body.home h2, .accred-section h2, .abt-title .elementor-heading-title, .ab-title .elementor-heading-title, .ct-title .elementor-heading-title, .qe-title .elementor-heading-title, .bl-title, .uc-title .elementor-heading-title {
	font-weight: 600 !important; line-height: 1.15 !important; letter-spacing: -.01em !important; text-transform: none !important;
}
.accred-title.elementor-widget-heading .elementor-heading-title { line-height: 1.15 !important; }

/* Heading block -> card/row grid underneath: one short gap (~40px), never the 80px that stacked margins gave. */
.credential-row, .credential-row--flat { margin-top: 10px !important; }
:where(.row.justify-content-center > .col-lg-8) .section-text:last-child { margin-bottom: 14px !important; }

/* =========================================================
   ONE CONTENT COLUMN ON EVERY SCREEN SIZE
   Header, footer and every section share the Bootstrap .container-xl column (540 / 720 / 960 / 1140 / 1320px).
   Only deliberate full-width pieces (banner photos, the half-width photos, the contact map) reach the screen edge.
   ========================================================= */
:root { --cw: 100%; --edge: 24px; }
/* .container-xl is fluid below 1200px, then 1140px, then 1320px */
@media (min-width: 1200px) { :root { --cw: 1140px; } }
@media (min-width: 1400px) { :root { --cw: 1320px; } }
/* gap between the screen edge and the column's inner text edge; percentages in padding resolve against the full-width parent */
@media (min-width: 992px) { :root { --edge: max(40px, calc(50% - var(--cw) / 2 + 12px)); } }

/* Elementor's boxed wrapper (.e-con-inner) stopped at 1140px while the .container-xl inside it is 1320px from 1400px up, which left the
   hero, About, Top Reasons and Accreditations narrower than the header and footer. */
@media (min-width: 1400px) { .elementor .e-con { --container-max-width: 1320px; } }

/* Service pages, "Why choose ..." split: photo bleeds left, the text stops at the column edge instead of the screen edge. */
@media (min-width: 992px) {
	.why-helium-content { margin-left: 40% !important; width: 60% !important; padding-right: var(--edge) !important; }
	/* Home, Our Services: turbine photo bleeds left, the carousel stops at the column edge. */
	.services-content { padding-right: var(--edge); padding-left: max(0px, calc(var(--edge) - 20% - 78px)); }
	.services-content > .container-fluid { padding-right: 0 !important; }
}

/* Quick Enquiry: Elementor's default 10px side padding on its wrapper pushed the card 10px inside the header/footer column on tablets. */
.elementor > .e-con:has(.qe-section) { padding-left: 0 !important; padding-right: 0 !important; }

/* Home hero (video): at least 80% of the screen height on desktop, large and extra-large screens (never below 495px on short laptop screens). */
@media (min-width: 992px) {
	.hero { min-height: max(495px, 80vh) !important; }
	/* the text block and the stats box sit together in the vertical middle of the taller hero, not stuck to its top */
	.hero > .e-con-inner { justify-content: center !important; }
}

/* About > Why clients choose IRC (desktop): the heading sits in its own rows above, and the photo + numbered list share the last row —
   so the list starts at the photo's top edge and its rows stretch to the photo's bottom edge. (subgrid keeps the left column one Elementor container.) */
@media (min-width: 992px) {
	.abt-why-grid { grid-template-rows: auto auto 1fr; row-gap: 0 !important; }
	.abt-why-left { display: grid !important; grid-row: 1 / span 3; grid-column: 1; grid-template-rows: subgrid; position: static !important; align-self: stretch !important; }
	.abt-why-right { grid-row: 3; grid-column: 2; align-self: stretch !important; display: flex !important; flex-direction: column !important; }
	.abt-why-right > .elementor-widget, .abt-why-right .elementor-widget-container, .abt-why-right .elementor-icon-list-items { flex: 1 1 auto; display: flex; flex-direction: column; }
	.abt-why-right .elementor-icon-list-item { flex: 1 1 0; align-content: center; }
	/* The photo is a shorter 1:1 box that grows to the row height, so its bottom edge always meets the last list line. */
	.abt-why-photo { align-self: stretch !important; }
	.abt-why-photo .elementor-widget-container { position: relative; width: 100%; height: 100%; aspect-ratio: 1 / 1; }
	.abt-why-photo img { position: absolute; inset: 0; width: 100% !important; height: 100% !important; max-width: none !important; aspect-ratio: auto; object-fit: cover; }
}

/* About > Why clients choose IRC: each reason is a white card with a red number badge, all in one body size (the first one used to be bigger and bold
   and looked out of place). Cards are spaced 14px apart and, on desktop, share the photo's height (see the block above). */
.abt-why-list .elementor-icon-list-items { display: flex !important; flex-direction: column !important; gap: 14px; }
.abt-why-list .elementor-icon-list-item { grid-template-columns: 46px 1fr !important; gap: 20px !important; align-items: center !important; padding: 20px 26px !important; border: 1px solid var(--ab-line) !important; border-radius: 16px; background: #fff; font-size: var(--fs-body) !important; font-weight: 500 !important; line-height: 1.65 !important; letter-spacing: 0 !important; box-shadow: 0 6px 18px rgba(20,24,31,.04); transition: transform .3s ease, box-shadow .3s ease, border-color .3s ease; }
.abt-why-list .elementor-icon-list-item:first-child { font-size: var(--fs-body) !important; font-weight: 500 !important; line-height: 1.65 !important; }
.abt-why-list .elementor-icon-list-item:last-child { border-bottom: 1px solid var(--ab-line) !important; }
.abt-why-list .elementor-icon-list-item::before { display: grid; place-items: center; width: 46px; height: 46px; border-radius: 50%; background: rgba(222,0,17,.09); color: var(--red); font-size: 1rem !important; font-weight: 700; line-height: 1; letter-spacing: 0; }
.abt-why-list .elementor-icon-list-item:hover { transform: translateY(-3px); padding-left: 26px !important; border-color: rgba(222,0,17,.35) !important; box-shadow: 0 16px 34px rgba(20,24,31,.09); }
.abt-why-list .elementor-icon-list-item:hover::before { background: var(--red); color: #fff; }
@media (max-width: 767.98px) {
	.abt-why-list .elementor-icon-list-item { grid-template-columns: 40px 1fr !important; gap: 14px !important; padding: 16px 18px !important; }
	.abt-why-list .elementor-icon-list-item::before { width: 40px; height: 40px; font-size: .92rem !important; }
	.abt-why-list .elementor-icon-list-item:hover { padding-left: 18px !important; }
}

@media (max-width: 575.98px) {
	.abt-logo-carousel .elementor-image-carousel-wrapper { padding: 0 44px !important; }
	.abt-logo-carousel .elementor-image-carousel-wrapper::before, .abt-logo-carousel .elementor-image-carousel-wrapper::after { width: 44px; }
	.abt-logo-carousel .elementor-swiper-button { width: 34px; height: 34px; }
	.abt-logo-carousel .elementor-swiper-button-prev { margin-left: -44px !important; }
	.abt-logo-carousel .elementor-swiper-button-next { margin-right: -44px !important; }
}

/* About > What we do: shorter cards (470px -> 360px). The 96px top padding keeps the icon's space free, so longer text can never run into it. */
.abt-svc { min-height: 360px !important; padding-top: 96px !important; }
@media (max-width: 767.98px) { .abt-svc { min-height: 340px !important; padding-top: 92px !important; } }

/* Corrosion Mapping and Helium Leak Detection: the divider line + "helps you:" list that follows the copy | photo row used to touch the button and the photo
   (the 50px-cap rule above zeroed its top margin because it assumed a paragraph sits above). It now starts 40px below the row. */
.svc-editorial .svc-strip-lead { margin-top: 40px !important; }

/* Home > Clients heading: centred and a little larger (20px), with the thin rule on both sides of the sentence. Text itself is unchanged. */
.clients-heading-row { justify-content: center; }
.elementor-widget:has(> .clients-heading) { display: flex; align-items: center; gap: 24px; width: 100%; }
.elementor-widget:has(> .clients-heading)::before { content: ""; flex: 1 1 auto; height: 1px; min-width: 40px; background: var(--border-soft); }
.clients-heading { margin: 0 !important; font-size: 1.25rem !important; font-weight: 600 !important; line-height: 1.3 !important; letter-spacing: .03em; text-align: center; }
@media (max-width: 767.98px) {
	.clients-heading { font-size: 1.05rem !important; white-space: normal; }
	.elementor-widget:has(> .clients-heading) { gap: 14px; }
	.elementor-widget:has(> .clients-heading)::before, .elementor-widget:has(> .clients-heading) > .clients-rule { min-width: 16px; }
}
.clients-section .clients-heading-row { margin-bottom: 30px !important; }

/* Contact: the full-width map is a deliberate edge-to-edge piece, so it sits directly on the footer (the section's 50px bottom padding left a white strip between them). */
.elementor .ct-map.e-con { padding-bottom: 0 !important; }

/* =========================================================
   Home > Our Services, built from native Elementor widgets (photo, label, title, link) around the [irc_services_cards] carousel.
   Same look as the old [irc_services] shortcode: photo bleeds left (20%), text column stops at the header/footer column edge.
   ========================================================= */
.services-flex.e-con { flex-direction: row; align-items: stretch; flex-wrap: nowrap; gap: 30px; }
.services-flex > .services-turbine.e-con { display: none; flex: 0 0 20%; max-width: 20%; position: relative; }
.services-flex > .services-content.e-con { flex: 1 1 auto; min-width: 0; padding: 50px 0 !important; }
.services-turbine > .elementor-widget-image { position: absolute !important; inset: 0; width: 100%; height: 100%; margin: 0 !important; }
.services-inner.e-con { width: 100%; padding-left: 12px !important; padding-right: 12px !important; }
.services-head.e-con { flex-direction: row; justify-content: space-between; align-items: flex-end; flex-wrap: nowrap; gap: 16px; margin-bottom: 1.5rem; }
.services-head-text.e-con { flex: 1 1 auto; min-width: 0; }
/* the label and the link are Heading widgets: the wrapper carries the old .eyebrow / .link-arrow look, the inner element just inherits it */
.services-eyebrow { margin: 0 0 1.4rem !important; }
.services-eyebrow .elementor-heading-title, .services-link .elementor-heading-title, .services-link .elementor-heading-title a { margin: 0 !important; padding: 0; font: inherit !important; color: inherit !important; letter-spacing: inherit; text-transform: inherit; line-height: inherit !important; }
.services-link { flex: 0 0 auto; margin: 0 !important; width: auto !important; }
.services-link .elementor-heading-title a { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; text-decoration: none !important; transition: color .2s ease; }
.services-link .elementor-heading-title a::after { content: "\f144"; font-family: "bootstrap-icons" !important; font-weight: 400; font-size: 1em; line-height: 1; transition: transform .25s ease; }
.services-link:hover { color: var(--red-dark); }
.services-link .elementor-heading-title a:hover::after { transform: translate(3px, -3px); }
@media (min-width: 992px) {
	.services-flex > .services-turbine.e-con { display: block; }
	.services-flex > .services-content.e-con { padding-right: var(--edge) !important; padding-left: max(0px, calc(var(--edge) - 20% - 78px)) !important; }
	.services-inner.e-con { padding-left: 48px !important; padding-right: 0 !important; }
}
@media (max-width: 991.98px) { .services-flex.e-con { flex-direction: column; } }
@media (max-width: 767.98px) { .services-head.e-con { flex-direction: column; align-items: flex-start; } }
.services-head-text .elementor-widget, .services-inner > .elementor-widget { margin-block-end: 0 !important; margin-bottom: 0 !important; }
.services-head-text .section-title { margin-bottom: 0 !important; }
.services-head-text .services-eyebrow { margin-bottom: 1.4rem !important; }
.services-head-text .section-title .elementor-heading-title { margin-bottom: 0 !important; }
@media (max-width: 767.98px) { .services-head.e-con { flex-direction: column !important; align-items: flex-start !important; } .services-head-text.e-con { width: 100%; } }

/* =========================================================
   Home > Top Reasons to Choose Us, built from native Elementor widgets (same class names as the old HTML, so the look is unchanged).
   ========================================================= */
.why-eyebrow { margin: 0 0 1.4rem !important; }
.why-eyebrow .elementor-heading-title { margin: 0 !important; padding: 0; font: inherit !important; color: inherit !important; letter-spacing: inherit; text-transform: inherit; line-height: inherit !important; }
.why-section .section-text.elementor-widget { margin: 0 !important; }
.why-section .reason-list.e-con { margin-top: 0; padding-top: calc(2rem - 1px) !important; border-top: 1px solid var(--border-soft); }
.reason-list > .reason-item.e-con { flex-direction: row; align-items: center; gap: 20px; padding: 20px 0 !important; border-bottom: 1px solid var(--border-soft); }
.reason-list > .reason-item.e-con:first-child { padding-top: 0 !important; }
.reason-list > .reason-item.e-con:last-child { border-bottom: none; padding-bottom: 0 !important; }
.reason-item > .reason-icon.elementor-widget { flex: 0 0 78px; width: 78px !important; height: 78px; margin: 0 !important; display: flex !important; align-items: center; justify-content: center; }
.reason-icon.elementor-widget img { width: 34px !important; height: 34px !important; max-width: none; object-fit: contain; filter: brightness(0); border-radius: 0 !important; box-shadow: none !important; }
.reason-item > .reason-title.elementor-widget { flex: 0 0 170px; padding-top: 4px; margin: 0 !important; }
.reason-title h4.elementor-heading-title { color: var(--ink) !important; font-family: var(--font-head); font-size: var(--fs-h3) !important; font-weight: 600 !important; line-height: 1.3 !important; margin: 0 !important; }
.reason-item > .reason-desc.elementor-widget { flex: 1 1 auto; min-width: 0; padding-top: 4px; margin: 0 !important; }
.reason-desc.elementor-widget p { font-size: .92rem !important; line-height: 1.6 !important; margin: 0 !important; }
@media (max-width: 575.98px) {
	.reason-list > .reason-item.e-con { flex-wrap: wrap; row-gap: 8px; }
	.reason-item > .reason-title.elementor-widget { flex: 1 1 auto; padding-top: 8px; }
	.reason-item > .reason-desc.elementor-widget { flex: 1 1 100%; padding-top: 0; }
}
/* photo + "9K Happy Customers" badge */
.why-image-wrap.e-con { position: relative; display: flex; flex-direction: row; justify-content: center; }
.why-image-wrap > .why-image-inner.elementor-widget { border-radius: var(--radius-lg); overflow: hidden; width: 100% !important; margin: 0 !important; }
.why-image-wrap > .why-image-inner img { border-radius: var(--radius-lg) !important; width: 100% !important; height: auto !important; aspect-ratio: 5 / 7; object-fit: cover; box-shadow: 0 20px 45px rgba(0,0,0,.15) !important; display: block; }
.why-image-wrap > .happy-badge.e-con { position: absolute !important; right: 24px; bottom: -28px; width: auto; background: var(--yellow-badge); border-radius: var(--radius-md); padding: 20px 30px !important; flex-direction: column; align-items: center; gap: 10px; box-shadow: 0 12px 30px rgba(0,0,0,.15); text-align: center; }
.happy-text.e-con { align-items: center; line-height: 1.2; }
.happy-number { margin: 0 !important; }
.happy-number .elementor-heading-title { margin: 0 !important; font-family: var(--font-head); font-size: 1.6rem !important; font-weight: 700 !important; line-height: 1.2 !important; color: var(--ink) !important; }
.happy-label { margin: 0 !important; padding: 4px 0 7px; }
.happy-label .elementor-heading-title { margin: 0 !important; font-size: 1rem !important; font-weight: 400 !important; line-height: 1.2 !important; color: var(--ink) !important; }
.happy-avatars.e-con { flex-direction: row; align-items: center; justify-content: center; gap: 0; }
.happy-avatars > .elementor-widget { margin: 0 !important; width: auto !important; }
.happy-avatars > .elementor-widget + .elementor-widget { margin-left: -10px !important; }
.happy-avatars .happy-avatar img { width: 34px !important; height: 34px !important; aspect-ratio: 1; margin: 0 !important; }
.happy-avatars > .happy-avatars-more.elementor-widget { width: 34px !important; height: 34px; }
.happy-avatars-more .elementor-heading-title { margin: 0 !important; font-size: .8rem !important; line-height: 1 !important; font-weight: 400 !important; color: #fff !important; }

/* Our Services photo: crop from the left edge, so a portrait picture with captions on its left side (e.g. "Advanced NDT") keeps them readable and only the right edge is trimmed.
   :where() keeps this at the lowest specificity - an "Object Position" set on the Image widget in Elementor still overrides it. */
:where(.services-turbine) img { object-position: left center; }

/* Applications list (numbered rows with the red icon): the first row had no room above its icon and the last row none below it, so the hover highlight
   hugged the icon at both ends. Every row now has 22px above and below; the negative list margins give the 22px back, so the page rhythm stays as it was.
   Trial on one page first (Inspector Deployment for Shutdowns, page 561). */
body.page-id-561 .apply-item:first-child { padding-top: 22px; }
body.page-id-561 .apply-item:last-child { padding-bottom: 22px; }
body.page-id-561 .apply-list { margin-top: -12px !important; margin-bottom: -22px; }


/* =========================================================
   OUR TEAM page (tm-* classes). Native Elementor widgets; this CSS only supplies the look.
   Banner, eyebrow label and the call-to-action reuse the About page's ab-hero / abt-* classes.
   Rhythm: banner > founder + director cards (white) > ten team cards (grey) > call-to-action.
   Spacing and type follow the site tokens (--sec-pad, --gutter, --fs-*). Photos are swapped in the Elementor Image widget.
   ========================================================= */
.tm-lead, .tm-team { width: 100% !important; max-width: 100% !important; position: relative; scroll-margin-top: 90px; }
.tm-lead:not(.irc-join), .tm-team:not(.irc-join) { padding-top: var(--sec-pad) !important; }
.tm-lead, .tm-team { padding-bottom: var(--sec-pad) !important; }
.tm-lead { background: #fff !important; }
.tm-team { background: var(--ab-soft) !important; }
/* inner .container-xl follows the header/footer column (fluid < 1200, 1140, 1320 from 1400) like every other section */
.tm-lead > .container-xl, .tm-team > .container-xl { width: 100% !important; max-width: none !important; position: relative; z-index: 1; }
@media (min-width: 992px) { .tm-lead > .container-xl, .tm-team > .container-xl { padding-left: 12px !important; padding-right: 12px !important; } }
@media (min-width: 1200px) { .tm-lead > .container-xl, .tm-team > .container-xl { max-width: 1140px !important; } }
@media (min-width: 1400px) { .tm-lead > .container-xl, .tm-team > .container-xl { max-width: 1320px !important; } }
.tm-lead *, .tm-team * { font-family: var(--font-body) !important; }
.tm-lead .elementor-widget, .tm-team .elementor-widget { margin-block-end: 0 !important; }

/* ---------- 1. Founder and director cards ---------- */
.tm-features { display: flex !important; flex-direction: column !important; gap: var(--gutter) !important; }
.tm-feature { display: grid !important; grid-template-columns: minmax(0, 30%) minmax(0, 1fr); gap: clamp(28px, 4vw, 56px) !important; align-items: start !important; padding: clamp(24px, 3.4vw, 48px) !important; background: #fff; border: 1px solid var(--ab-line) !important; border-radius: 24px !important; box-shadow: 0 24px 60px rgba(20,24,31,.07); }
.tm-feature--alt { grid-template-columns: minmax(0, 1fr) minmax(0, 30%); background: var(--ab-soft); box-shadow: none; }
.tm-feature-media { position: relative !important; }
.tm-portrait img { display: block; width: 100% !important; height: auto !important; aspect-ratio: 3 / 4; object-fit: cover; border-radius: 20px !important; border-bottom: 6px solid var(--red) !important; box-shadow: none !important; }
.tm-feature--alt .tm-portrait img { aspect-ratio: 1 / 1; }
.tm-feature-body { min-width: 0; }
.tm-feature-body .abt-eyebrow .elementor-heading-title { margin-bottom: 14px !important; }
.tm-feature-name .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h2) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em; color: var(--ab-ink) !important; }
.tm-feature-name::after { content: ""; display: block; width: 52px; height: 3px; margin: 16px 0 20px; background: var(--red); }

/* shared: biography text */
.tm-bio, .tm-bio p { color: var(--ab-text); }
.tm-bio p { margin: 0 0 .9rem; font-size: var(--fs-body) !important; line-height: 1.7 !important; }
.tm-bio p:last-child { margin-bottom: 0; }

/* ---------- 2. The team: ten cards in two columns ---------- */
.tm-team-grid { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--gutter) !important; align-items: stretch !important; }
.tm-card { position: relative !important; display: flex !important; flex-direction: column !important; min-width: 0; padding: clamp(24px, 3vw, 40px) !important; background: #fff; border-radius: 20px !important; box-shadow: 0 14px 40px rgba(20,24,31,.07); }
.tm-card::after { content: ""; position: absolute; left: 0; top: clamp(24px, 3vw, 40px); width: 5px; height: 62px; border-radius: 0 4px 4px 0; background: var(--red); }
.tm-card-head { display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; align-items: center !important; gap: 20px !important; margin-bottom: 20px !important; }
.tm-avatar { flex: none !important; width: 64px !important; min-width: 64px !important; }
.tm-avatar img { display: block; width: 64px !important; height: 64px !important; border-radius: 50% !important; object-fit: cover; box-shadow: none !important; }
.tm-card-id { flex: 1 1 0 !important; min-width: 0 !important; width: auto !important; gap: 3px !important; }
.tm-name .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.25 !important; letter-spacing: -.01em; color: var(--ab-ink) !important; }
.tm-role .elementor-heading-title { margin: 0 !important; font-size: .9rem !important; font-weight: 700 !important; line-height: 1.35 !important; color: var(--red) !important; }
.tm-qual .elementor-heading-title { margin: 0 !important; font-size: .82rem !important; font-weight: 600 !important; line-height: 1.4 !important; color: #6f7680 !important; }

@media (max-width: 991.98px) {
	.tm-feature { grid-template-columns: minmax(0, 36%) minmax(0, 1fr); }
	.tm-feature--alt { grid-template-columns: minmax(0, 1fr) minmax(0, 36%); }
}
@media (max-width: 767.98px) {
	.tm-team-grid { grid-template-columns: minmax(0, 1fr); }
	.tm-feature, .tm-feature--alt { grid-template-columns: minmax(0, 1fr); }
	.tm-feature-media { width: 100%; max-width: 320px; margin: 0 auto; }
	.tm-feature--alt .tm-feature-media { order: -1; }
}
@media (max-width: 575.98px) {
	.tm-card-head { gap: 14px !important; }
}


/* =========================================================
   CASE STUDIES page (cs-* classes). Native Elementor widgets; this CSS only supplies the look.
   Banner and the call-to-action reuse the About page's ab-hero / abt-cta classes.
   The big faded numbers (01-05) and the red 1/2/3 circles / 1-2-3 badges are CSS counters, not text in any widget.
   Spacing and type follow the site tokens (--sec-pad, --gutter, --fs-*). Photos are swapped in the Elementor Image widget.
   ========================================================= */
.cs-main { width: 100% !important; max-width: 100% !important; position: relative; background: #fff !important; scroll-margin-top: 90px; }
.cs-main:not(.irc-join) { padding-top: var(--sec-pad) !important; }
.cs-main { padding-bottom: var(--sec-pad) !important; }
/* inner .container-xl follows the header/footer column (fluid < 1200, 1140, 1320 from 1400) like every other section */
.cs-main > .container-xl { width: 100% !important; max-width: none !important; position: relative; z-index: 1; }
@media (min-width: 992px) { .cs-main > .container-xl { padding-left: 12px !important; padding-right: 12px !important; } }
@media (min-width: 1200px) { .cs-main > .container-xl { max-width: 1140px !important; } }
@media (min-width: 1400px) { .cs-main > .container-xl { max-width: 1320px !important; } }
.cs-main * { font-family: var(--font-body) !important; }
.cs-main .elementor-widget { margin-block-end: 0 !important; }

/* ---------- Case Study 1-5 buttons: jump to each case study ---------- */
.cs-pills { display: flex !important; flex-direction: row !important; flex-wrap: wrap !important; justify-content: center !important; gap: 12px !important; margin-bottom: var(--head-gap) !important; }
.cs-pill { flex: none !important; width: auto !important; }
.cs-pill .elementor-heading-title { position: relative; display: inline-block; margin: 0 !important; padding: 11px 22px; border: 1.5px solid var(--red); border-radius: 999px; background: #fff; font-size: .74rem !important; font-weight: 700 !important; line-height: 1 !important; letter-spacing: .14em; text-transform: uppercase; color: var(--red) !important; transition: background .25s ease, color .25s ease, transform .3s var(--ease-out); }
.cs-pill a { color: inherit !important; text-decoration: none !important; }
/* the link is only the text; stretch its click area over the whole pill (padding + border) */
.cs-pill a::after { content: ""; position: absolute; inset: -2px; border-radius: 999px; }
.cs-pill:first-child .elementor-heading-title, .cs-pill:hover .elementor-heading-title { background: var(--red); color: #fff !important; }
.cs-pill:hover .elementor-heading-title { transform: translateY(-2px); }

/* ---------- one case study ---------- */
.cs-list { display: flex !important; flex-direction: column !important; gap: 64px !important; counter-reset: cs; }
.cs-card { counter-increment: cs; display: flex !important; flex-direction: column !important; gap: 26px !important; scroll-margin-top: 100px; }
.cs-head { position: relative !important; display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(0, 36%); gap: clamp(24px, 4vw, 56px) !important; align-items: center !important; }
.cs-head::after { content: counter(cs, decimal-leading-zero); position: absolute; left: -4px; top: -36px; z-index: 0; font-size: clamp(5rem, 3.6rem + 4.4vw, 8.5rem); font-weight: 800; line-height: 1; letter-spacing: -.04em; color: rgba(222,0,17,.09); pointer-events: none; }
.cs-intro { grid-column: 1 !important; grid-row: 1 !important; position: relative; z-index: 1; min-width: 0; }
.cs-media { grid-column: 2 !important; grid-row: 1 !important; position: relative !important; z-index: 1; }
.cs-photo img { display: block; width: 100% !important; height: auto !important; aspect-ratio: 16 / 10; object-fit: cover; border-radius: 18px !important; border-bottom: 5px solid var(--red) !important; box-shadow: 0 18px 40px rgba(20,24,31,.14) !important; }
.cs-photo-1 img { object-position: 62% 50%; }
.cs-photo-3 img { object-position: 40% 30%; }
.cs-intro .abt-eyebrow .elementor-heading-title { margin-bottom: 14px !important; }
.cs-title .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h2) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em; color: var(--ab-ink) !important; }
.cs-lead { margin-top: var(--title-gap) !important; }
.cs-lead .elementor-heading-title { margin: 0 !important; font-size: var(--fs-body) !important; font-weight: 400 !important; line-height: 1.7 !important; color: var(--ab-mid) !important; }

/* Background | The Challenge | IRC's Solution */
.cs-cols { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--gutter) !important; counter-reset: csb; }
.cs-col { counter-increment: csb; display: flex !important; flex-direction: column !important; padding: 26px !important; background: #fff; border: 1px solid var(--ab-line) !important; border-radius: 18px !important; box-shadow: 0 10px 30px rgba(20,24,31,.06); }
.cs-col::after { order: -1; content: counter(csb); display: flex; align-items: center; justify-content: center; width: 34px; height: 34px; margin-bottom: 18px; border-radius: 50%; background: var(--red); color: #fff; font-size: .82rem; font-weight: 700; }
.cs-col-title .elementor-heading-title { margin: 0 0 10px !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.3 !important; color: var(--ab-ink) !important; }
.cs-col-text, .cs-col-text p { margin: 0; color: var(--ab-text); }
.cs-col-text p { font-size: var(--fs-body) !important; line-height: 1.7 !important; }

/* Why ... Was the Right Choice (dark) | Value Delivered (white) */
.cs-split { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--gutter) !important; align-items: stretch !important; }
.cs-why { position: relative !important; overflow: hidden !important; padding: 28px !important; background: #17181b; border-radius: 20px !important; }
.cs-why::after { content: ""; position: absolute; top: -70px; right: -70px; width: 230px; height: 230px; border-radius: 50%; background: rgba(222,0,17,.26); pointer-events: none; }
.cs-why > * { position: relative; z-index: 1; }
.cs-value { padding: 28px !important; background: #fff; border: 1px solid var(--ab-line) !important; border-radius: 20px !important; box-shadow: 0 10px 30px rgba(20,24,31,.06); }
.cs-box-title .elementor-heading-title { margin: 0 0 16px !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.3 !important; color: var(--ab-ink) !important; }
.cs-why .cs-box-title .elementor-heading-title { color: #fff !important; }
.cs-why-list .elementor-icon-list-items { display: flex !important; flex-direction: column !important; gap: 10px !important; margin: 0 !important; padding: 0 !important; list-style: none !important; counter-reset: csw; }
.cs-why-list .elementor-icon-list-item { counter-increment: csw; display: flex !important; align-items: center !important; gap: 14px !important; margin: 0 !important; padding: 12px 16px !important; background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.12); border-radius: 14px; font-size: var(--fs-body) !important; line-height: 1.55 !important; color: #fff !important; }
.cs-why-list .elementor-icon-list-item::before { content: counter(csw); flex: none; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 50%; background: var(--red); color: #fff; font-size: .75rem; font-weight: 700; }
.cs-why-list .elementor-icon-list-text { padding: 0 !important; margin: 0 !important; color: inherit !important; font: inherit !important; }
.cs-value-list .elementor-icon-list-items { display: flex !important; flex-direction: column !important; gap: 14px !important; margin: 0 !important; padding: 0 !important; list-style: none !important; }
.cs-value-list .elementor-icon-list-item { display: flex !important; align-items: flex-start !important; gap: 12px !important; margin: 0 !important; padding: 0 !important; font-size: var(--fs-body) !important; line-height: 1.55 !important; color: var(--ab-ink) !important; }
.cs-value-list .elementor-icon-list-icon { flex: none; display: flex !important; align-items: center; justify-content: center; width: 24px !important; min-width: 24px; height: 24px; margin: 1px 0 0 !important; padding: 0 !important; border-radius: 50%; background: var(--red); color: #fff !important; }
.cs-value-list .elementor-icon-list-icon svg, .cs-value-list .elementor-icon-list-icon i { width: 11px !important; height: 11px !important; font-size: 11px !important; fill: #fff !important; color: #fff !important; }
.cs-value-list .elementor-icon-list-text { padding: 0 !important; margin: 0 !important; color: inherit !important; font: inherit !important; }

/* Key Takeaway */
.cs-take { display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; align-items: center !important; gap: 22px !important; padding: 18px 26px !important; background: #fff; border: 1px solid var(--ab-line) !important; border-left: 4px solid var(--red) !important; border-radius: 14px !important; box-shadow: 0 10px 30px rgba(20,24,31,.06); }
.cs-take-tag { flex: none !important; width: auto !important; }
.cs-take-tag .elementor-heading-title { margin: 0 !important; font-size: .72rem !important; font-weight: 700 !important; line-height: 1 !important; letter-spacing: .2em; text-transform: uppercase; white-space: nowrap; color: var(--red) !important; }
.cs-take-text { flex: 1 1 0 !important; min-width: 0 !important; width: auto !important; }
.cs-take-text, .cs-take-text p { margin: 0; color: var(--ab-ink); }
.cs-take-text p { font-size: var(--fs-body) !important; font-weight: 600 !important; line-height: 1.6 !important; }

/* FAQ */
.cs-faq-title .elementor-heading-title { display: flex; align-items: center; gap: 12px; margin: 0 0 16px !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.3 !important; color: var(--ab-ink) !important; }
.cs-faq-title .elementor-heading-title::before { content: ""; flex: none; width: 30px; height: 2px; background: var(--red); }
.cs-faq-grid { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--gutter) !important; }
.cs-faq-item { padding: 18px 20px !important; background: #fff; border: 1px solid var(--ab-line) !important; border-radius: 14px !important; box-shadow: 0 10px 30px rgba(20,24,31,.05); }
.cs-faq-q .elementor-heading-title { margin: 0 0 6px !important; font-size: var(--fs-body) !important; font-weight: 700 !important; line-height: 1.4 !important; color: var(--ab-ink) !important; }
.cs-faq-a, .cs-faq-a p { margin: 0; color: var(--ab-mid); }
.cs-faq-a p { font-size: var(--fs-body) !important; line-height: 1.6 !important; }

@media (max-width: 991.98px) {
	.cs-cols, .cs-split, .cs-faq-grid { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 767.98px) {
	.cs-head { grid-template-columns: minmax(0, 1fr); }
	.cs-intro { grid-column: 1 !important; grid-row: 1 !important; }
	.cs-media { grid-column: 1 !important; grid-row: 2 !important; }
	.cs-take { flex-direction: column !important; align-items: flex-start !important; gap: 12px !important; padding: 18px 20px !important; }
	.cs-why, .cs-value, .cs-col { padding: 22px !important; }
	.cs-pills { gap: 8px !important; }
	.cs-pill .elementor-heading-title { padding: 9px 14px; font-size: .68rem !important; }
}


/* =========================================================
   CONTACT page — standard spacing (client: "too much space in the left block and in the form").
   Brought in line with the rest of the site: cards 32px inside, tighter info rows, and form fields as tall as the
   standard Quick Enquiry fields (47px). Only .ct-* inside .ct-main is touched; phones keep their own padding above.
   ========================================================= */
@media (min-width: 768px) {
	.ct-main .ct-info, .ct-main .ct-form-card { padding: 32px !important; }
}
/* left block */
.ct-main .ct-info .ct-title .elementor-heading-title, .ct-main .ct-form-card .ct-title .elementor-heading-title { margin-bottom: 12px !important; }
.ct-main .ct-intro.elementor-widget { margin-bottom: 20px !important; }
.ct-main .ct-item { padding: 10px 0 !important; gap: 16px !important; grid-template-columns: 44px 1fr; }
.ct-main .ct-item-icon .elementor-icon { width: 44px !important; height: 44px !important; }
.ct-main .ct-item-icon .elementor-icon svg { width: 1rem !important; height: 1rem !important; }
.ct-main .ct-follow { margin-top: 12px !important; padding-top: 20px !important; }
/* form */
.ct-main .ct-form-sub.elementor-widget { margin-bottom: 20px !important; }
.ct-main .ct-form .wpcf7 p { margin-bottom: 16px !important; }
.ct-main .ct-form .wpcf7 p.ct-cf-submit { margin-bottom: 0 !important; }
.ct-main .ct-cf-grid { column-gap: 16px !important; }
.ct-main .ct-form .wpcf7-form-control-wrap { margin-top: 6px; }
.ct-main .ct-form .wpcf7 input[type="text"], .ct-main .ct-form .wpcf7 input[type="email"], .ct-main .ct-form .wpcf7 input[type="tel"] { min-height: 47px; padding-top: 11px !important; padding-bottom: 11px !important; }
.ct-main .ct-form .wpcf7 textarea { min-height: 96px; height: 96px; padding-top: 11px; padding-bottom: 11px; }
.ct-main .ct-cf-human .ct-cf-label, .ct-main .ct-form .wpcf7-quiz-label { margin-bottom: 6px; }
.ct-main .ct-form .wpcf7-submit { padding-top: 13px; padding-bottom: 13px; }

/* =========================================================
   Service pages built later in Elementor (not in irc_full_bleed_service_page_ids()) showed Astra's 4em gap between the
   header and the banner. Same zeroing as .irc-full-bleed above, but keyed on the page itself: a page whose first Elementor
   block is the standard banner (.page-hero). The editor preview wraps the blocks in .elementor-section-wrap, hence two paths.
   Pages on the Elementor Full Width layout don't match (no .entry-content).
   ========================================================= */
body:has(.entry-content > .elementor > .page-hero, .entry-content > .elementor > .elementor-section-wrap > .page-hero) #primary,
body:has(.entry-content > .elementor > .page-hero, .entry-content > .elementor > .elementor-section-wrap > .page-hero) #main,
body:has(.entry-content > .elementor > .page-hero, .entry-content > .elementor > .elementor-section-wrap > .page-hero) .ast-container { padding-top: 0 !important; margin-top: 0 !important; }
body:has(.entry-content > .elementor > .page-hero, .entry-content > .elementor > .elementor-section-wrap > .page-hero) .site-content { padding-top: 0 !important; }


/* =========================================================
   INSIGHTS page (ins-* classes). Native Elementor widgets; this CSS only supplies the look.
   Banner and the call-to-action reuse the About page's ab-hero / abt-cta classes.
   The numbers 1-12 (red circles, big figure on the two feature panels) are CSS counters, not text in any widget.
   Spacing and type follow the site tokens (--sec-pad, --gutter, --fs-*).
   ========================================================= */

.ins-main { width: 100% !important; max-width: 100% !important; position: relative; }
.ins-main > .container-xl { width: 100% !important; max-width: none !important; position: relative; z-index: 1; }
@media (min-width: 992px) { .ins-main > .container-xl { padding-left: 12px !important; padding-right: 12px !important; } }
@media (min-width: 1200px) { .ins-main > .container-xl { max-width: 1140px !important; } }
@media (min-width: 1400px) { .ins-main > .container-xl { max-width: 1320px !important; } }
.ins-main * { font-family: var(--font-body) !important; }
.ins-main .elementor-widget { margin-block-end: 0 !important; }

/* ---------- the white card ---------- */
.ins-main { background: #fff !important; padding-top: var(--sec-pad) !important; padding-bottom: var(--sec-pad) !important; }
.ins-board { display: flex !important; flex-direction: column !important; gap: 40px !important; counter-reset: ins; padding: clamp(22px, 4.2vw, 61px) !important; background: #fff; border: 1px solid rgba(20,24,31,.05) !important; border-radius: clamp(20px, 2.4vw, 30px) !important; box-shadow: 0 24px 64px rgba(20,24,31,.10); }
.ins-intro, .ins-intro p { margin: 0; max-width: 900px; font-size: var(--fs-h3) !important; line-height: 1.7 !important; color: var(--ab-mid); }

/* ---------- numbers: one dark feature card (the 582 / 108 / 43 RLA figures) + four light tiles ---------- */
.ins-stats { display: grid !important; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 16px !important; align-items: stretch !important; }
.ins-stat { position: relative !important; display: flex !important; flex-direction: column !important; justify-content: flex-start !important; gap: 8px !important; min-width: 0; padding: 24px 24px 22px !important; background: #f3f4f6 !important; border-radius: 18px !important; }
.ins-stat:first-child { flex-direction: row !important; flex-wrap: wrap; align-items: baseline !important; column-gap: 10px !important; row-gap: 0 !important; } /* "Since" + 1995 on one line so every number sits on the same line */
.ins-stat--trio { grid-column: 1 / -1 !important; grid-row: 1; padding: clamp(26px, 3vw, 38px) clamp(22px, 3.4vw, 46px) !important; background: #1b1a1d !important; border-radius: 20px !important; }
.ins-stat-num .elementor-heading-title { margin: 0 !important; font-size: clamp(2rem, 1.4rem + 1.5vw, 2.6rem) !important; font-weight: 700 !important; line-height: 1.05 !important; letter-spacing: -.025em; color: var(--ab-ink) !important; }
.ins-stat-label .elementor-heading-title { margin: 0 !important; font-size: .92rem !important; font-weight: 500 !important; line-height: 1.45 !important; color: var(--ab-mid) !important; text-wrap: balance; }
.ins-stat--trio .ins-stat-num .elementor-heading-title { color: #fff !important; font-size: clamp(2.5rem, 1.5rem + 3.2vw, 4rem) !important; }
.ins-stat--trio .ins-stat-num::after { content: ""; display: block; width: 34px; height: 3px; margin-top: 14px; background: var(--red); }
.ins-stat--trio .ins-stat-label .elementor-heading-title { font-size: 1rem !important; color: rgba(255,255,255,.78) !important; }
.ins-trio { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0 !important; }
.ins-sub { position: relative; display: flex !important; flex-direction: column !important; gap: 10px !important; min-width: 0; padding: 0 clamp(14px, 3vw, 44px) !important; }
.ins-sub:first-child { padding-left: 0 !important; }
.ins-sub + .ins-sub::after { content: ""; position: absolute; left: 0; top: 4px; bottom: 4px; width: 1px; background: rgba(255,255,255,.16); }

/* ---------- Featured Insights + groups ---------- */
.ins-heading .elementor-heading-title { margin: 0 !important; padding-left: 16px; border-left: 4px solid var(--red); font-size: var(--fs-h2) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em; color: var(--ab-ink) !important; }
.ins-groups { display: flex !important; flex-direction: column !important; gap: 50px !important; margin-top: -12px; }
.ins-group { display: flex !important; flex-direction: column !important; gap: var(--gutter) !important; scroll-margin-top: 100px; }
.ins-group-title { position: relative; padding-bottom: 14px; border-bottom: 1px solid var(--ab-line); }
.ins-group-title::after { content: ""; position: absolute; left: 0; bottom: -1px; width: 64px; height: 2px; background: var(--red); }
.ins-group-title .elementor-heading-title { margin: 0 !important; font-size: var(--fs-lead) !important; font-weight: 700 !important; line-height: 1.2 !important; letter-spacing: -.015em; color: var(--ab-ink) !important; }

/* feature: dark panel with the big number | title, text, arrow */
.ins-feature { counter-increment: ins; display: grid !important; grid-template-columns: minmax(0, 45fr) minmax(0, 55fr); gap: clamp(24px, 3.4vw, 48px) !important; align-items: center !important; }
.ins-panel { position: relative !important; min-height: clamp(200px, 19vw, 260px) !important; background: linear-gradient(135deg, #3a404c 0%, #1b1c20 100%) !important; border-radius: 20px !important; border-bottom: 6px solid var(--red) !important; overflow: hidden !important; }
.ins-panel::after { content: counter(ins); position: absolute; left: clamp(18px, 2vw, 28px); bottom: 10px; font-size: clamp(3.4rem, 2.6rem + 3vw, 5rem); font-weight: 700; line-height: 1; letter-spacing: -.03em; color: #fff; }
.ins-panel-icon { position: absolute !important; top: 16%; right: 11%; }
.ins-panel-icon .elementor-icon { font-size: clamp(3.2rem, 2.4rem + 3vw, 5.4rem) !important; color: rgba(255,255,255,.17) !important; }
.ins-panel-icon .elementor-icon svg { width: 1em; height: 1em; }
.ins-panel-icon .elementor-icon svg, .ins-panel-icon .elementor-icon svg path { fill: rgba(255,255,255,.17) !important; }
.ins-feature-body { display: flex !important; flex-direction: column !important; align-items: flex-start !important; gap: 14px !important; }
.ins-feature-title .elementor-heading-title { margin: 0 !important; font-size: var(--fs-lead) !important; font-weight: 700 !important; line-height: 1.25 !important; letter-spacing: -.015em; color: var(--ab-ink) !important; }
.ins-text, .ins-text p { margin: 0; color: var(--ab-mid); }
.ins-text p { font-size: var(--fs-body) !important; line-height: 1.7 !important; }

/* small cards */
.ins-cards { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--gutter) !important; }
.ins-card { counter-increment: ins; display: flex !important; flex-direction: column !important; gap: 14px !important; padding: 24px 24px 22px !important; background: #f3f4f6 !important; border-radius: 18px !important; }
.ins-card::after { order: -1; content: counter(ins); display: flex; align-items: center; justify-content: center; width: 34px; height: 34px; margin-bottom: 6px; border-radius: 50%; background: var(--red); color: #fff; font-size: .8rem; font-weight: 700; }
.ins-card-title .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.3 !important; color: var(--ab-ink) !important; }
.ins-card .ins-go { margin-top: auto; align-self: flex-end; padding-top: 6px; }

/* round red arrow (icon-only Button widget) */
.ins-go .elementor-button { display: inline-flex !important; align-items: center; justify-content: center; width: 46px; height: 46px; min-width: 46px; padding: 0 !important; border: 0 !important; border-radius: 50% !important; background: var(--red) !important; color: #fff !important; fill: #fff !important; transition: background .25s ease, transform .25s ease; }
.ins-go .elementor-button:hover, .ins-go .elementor-button:focus { background: var(--red-dark) !important; transform: translateX(3px); }
.ins-go .elementor-button-content-wrapper { gap: 0; }
.ins-go .elementor-button-icon svg { width: 16px; height: 16px; fill: currentColor; }
.ins-go .elementor-button-text:empty { display: none; }

/* ---------- tablet and phones ---------- */
@media (max-width: 991.98px) { /* tablet + phones: two light tiles per row under the dark card */
	.ins-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 575.98px) {
	.ins-stats { gap: 12px !important; }
	.ins-stat { padding: 18px 16px 16px !important; }
	.ins-sub { padding: 0 12px !important; }
	.ins-stat--trio { padding: 24px 16px !important; }
	.ins-stat--trio .ins-stat-label .elementor-heading-title { font-size: .85rem !important; }
}
@media (max-width: 767.98px) {
	.ins-board { gap: 32px !important; }
	.ins-feature { grid-template-columns: minmax(0, 1fr); }
	.ins-panel { min-height: 190px !important; }
	.ins-cards { grid-template-columns: minmax(0, 1fr); }
}

/* Red call-to-action band: plain gradient, no decorative circles (client feedback). Layout and colours unchanged. */
.abt-cta::after { display: none !important; }

/* Red call-to-action band, stacked layout (phones): the text kept its 380px row width as a HEIGHT (a 300px+ empty gap above the button). Rows (>= 768px) are untouched. */
@media (max-width: 767.98px) { .abt-cta-text { flex: 0 1 auto !important; } }


/* =========================================================
   INSIGHT ARTICLE page (ia-* classes), e.g. Insight 06. Native Elementor widgets; this CSS only supplies the look.
   The white board, the feature layout, the numbered cards, the banner and the call-to-action reuse the Insights page classes (ins-*, ab-hero, abt-cta).
   Numbers 1-3 on the cards and 01-04 on the steps are CSS counters. No decorative circles (client feedback).
   ========================================================= */
.ia-board { gap: 24px !important; }
.ia-feature { counter-increment: none; }

/* dark photo panel with the big "06": a site photo can be set through the container's own Background control (it overrides this gradient) */
.ia-panel { position: relative !important; min-height: clamp(220px, 21vw, 300px) !important; background-color: #23262c; background-image: linear-gradient(135deg, #3a404c 0%, #1b1c20 100%); background-size: cover; background-position: center; border-radius: 20px !important; border-bottom: 6px solid var(--red) !important; overflow: hidden !important; }
.ia-panel-num { position: absolute !important; left: clamp(18px, 2.2vw, 32px); bottom: 12px; z-index: 2; }
.ia-panel-num .elementor-heading-title { margin: 0 !important; font-size: clamp(3.4rem, 2.6rem + 3vw, 4.6rem) !important; font-weight: 700 !important; line-height: 1 !important; letter-spacing: -.03em; color: #fff !important; text-shadow: 0 2px 14px rgba(0,0,0,.35); }
.ia-eyebrow .elementor-heading-title { margin: 0 0 6px !important; color: var(--red) !important; letter-spacing: .16em; }
.ia-feature .ins-feature-title .elementor-heading-title { font-size: var(--fs-h2) !important; line-height: 1.15 !important; }

/* three numbered cards */
.ia-cards { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--gutter) !important; }
.ia-cards .ins-card { padding: 28px 30px 30px !important; gap: 12px !important; }

/* How to use it well (white) | Where PECT has been used (dark) */
.ia-split { display: grid !important; grid-template-columns: minmax(0, 1.12fr) minmax(0, .88fr); gap: var(--gutter) !important; align-items: stretch !important; }
.ia-how { display: flex !important; flex-direction: column !important; gap: 18px !important; padding: 30px 32px 32px !important; background: #fff; border: 1px solid var(--ab-line) !important; border-radius: 24px !important; }
.ia-where { display: flex !important; flex-direction: column !important; gap: 8px !important; padding: 30px 32px !important; background: #1b1a1d !important; border-radius: 24px !important; }
.ia-box-title .elementor-heading-title { margin: 0 !important; font-size: var(--fs-lead) !important; font-weight: 700 !important; line-height: 1.25 !important; letter-spacing: -.015em; color: var(--ab-ink) !important; }
.ia-where .ia-box-title .elementor-heading-title { color: #fff !important; }
.ia-box-sub .elementor-heading-title { margin: 0 0 12px !important; font-size: .92rem !important; font-weight: 400 !important; line-height: 1.5 !important; color: rgba(255,255,255,.65) !important; }
.ia-steps { display: flex !important; flex-direction: column !important; gap: 12px !important; counter-reset: iastep; }
.ia-step { counter-increment: iastep; display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; align-items: flex-start !important; gap: 16px !important; padding: 16px 20px !important; background: #fff; border: 1px solid var(--ab-line) !important; border-radius: 16px !important; box-shadow: 0 2px 8px rgba(20,24,31,.03); }
.ia-step::after { order: -1; content: counter(iastep, decimal-leading-zero); flex: none; display: flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 50%; background: rgba(222,0,17,.11); color: var(--red); font-size: .78rem; font-weight: 700; }
.ia-step-text { flex: 1 1 0 !important; min-width: 0 !important; width: auto !important; }
.ia-step-text, .ia-step-text p { margin: 0; color: var(--ab-mid); }
.ia-step-text p { font-size: var(--fs-body) !important; line-height: 1.6 !important; }
.ia-step-text strong { color: var(--ab-ink); font-weight: 700; }
.ia-checks .elementor-icon-list-items { display: flex !important; flex-direction: column !important; gap: 14px !important; margin: 0 !important; padding: 0 !important; list-style: none !important; }
.ia-checks .elementor-icon-list-item { display: flex !important; align-items: center !important; gap: 14px !important; margin: 0 !important; padding: 0 !important; font-size: var(--fs-body) !important; line-height: 1.4 !important; color: #fff !important; }
.ia-checks .elementor-icon-list-icon { flex: none; display: flex !important; align-items: center; justify-content: center; width: 28px !important; min-width: 28px; height: 28px; margin: 0 !important; padding: 0 !important; border-radius: 50%; background: var(--red); }
.ia-checks .elementor-icon-list-icon svg, .ia-checks .elementor-icon-list-icon i { width: 13px !important; height: 13px !important; font-size: 13px !important; fill: #fff !important; color: #fff !important; }
.ia-checks .elementor-icon-list-text { padding: 0 !important; margin: 0 !important; color: inherit !important; font: inherit !important; }

/* key takeaway bar */
.ia-take { display: flex !important; flex-direction: row !important; flex-wrap: nowrap !important; align-items: center !important; gap: 24px !important; padding: 20px 32px !important; background: linear-gradient(100deg, #e3000f 0%, #b5000e 100%) !important; border-radius: 22px !important; }
.ia-take-tag { flex: none !important; width: auto !important; }
.ia-take-tag .elementor-heading-title { margin: 0 !important; padding: 14px 26px; border-radius: 999px; background: #fff; font-size: .74rem !important; font-weight: 700 !important; line-height: 1 !important; letter-spacing: .2em; text-transform: uppercase; white-space: nowrap; color: var(--red) !important; }
.ia-take-text { flex: 1 1 0 !important; min-width: 0 !important; width: auto !important; }
.ia-take-text, .ia-take-text p { margin: 0; color: #fff; }
.ia-take-text p { font-size: var(--fs-h3) !important; font-weight: 600 !important; line-height: 1.4 !important; }

/* Did you know? | Related insights */
.ia-group { display: flex !important; flex-direction: column !important; gap: 20px !important; margin-top: 16px; }
.ia-sub .elementor-heading-title { display: flex; align-items: center; gap: 14px; margin: 0 !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.3 !important; color: var(--ab-ink) !important; }
.ia-sub .elementor-heading-title::before { content: ""; flex: none; width: 36px; height: 2px; background: var(--red); }
.ia-fact-grid { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(24px, 4vw, 56px) !important; }
.ia-rel-grid { display: grid !important; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--gutter) !important; }
.ia-fact, .ia-rel { display: flex !important; flex-direction: column !important; gap: 8px !important; padding: 2px 0 2px 24px !important; border-left: 3px solid var(--red) !important; }
.ia-fact-title .elementor-heading-title, .ia-rel-title .elementor-heading-title { margin: 0 !important; font-size: var(--fs-body) !important; font-weight: 700 !important; line-height: 1.4 !important; color: var(--ab-ink) !important; }
.ia-rel-tag .elementor-heading-title { margin: 0 !important; font-size: .72rem !important; font-weight: 700 !important; line-height: 1.3 !important; letter-spacing: .16em; text-transform: uppercase; color: var(--red) !important; }

@media (max-width: 767.98px) {
	.ia-cards, .ia-fact-grid, .ia-rel-grid, .ia-split { grid-template-columns: minmax(0, 1fr); }
	.ia-panel { min-height: 190px !important; }
	.ia-cards .ins-card { padding: 24px 22px 24px !important; }
	.ia-how, .ia-where { padding: 24px 20px !important; }
	.ia-step { padding: 14px !important; gap: 12px !important; }
	.ia-take { flex-direction: column !important; align-items: flex-start !important; gap: 14px !important; padding: 22px 20px !important; }
}


/* =========================================================
   INSIGHTS listing, third design (il-* classes). Native Elementor widgets; this CSS only supplies the look.
   The white board / container rules reuse ins-main / ins-board (shared with the Insight article pages); the banner reuses ab-hero.
   The outlined numbers 01-12 on the cards are CSS counters, not text in any widget. No decorative circles.
   ========================================================= */
.il-board { gap: 56px !important; counter-reset: il; }
.il-head { display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: clamp(24px, 5vw, 72px) !important; align-items: center !important; }
.il-title .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h2) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em; color: var(--ink) !important; }
.il-title--red .elementor-heading-title { color: var(--red) !important; }
.il-intro, .il-intro p { margin: 0; font-size: var(--fs-body) !important; line-height: 1.7 !important; color: var(--ab-mid); }

/* numbers: one soft panel with a hero figure (582) beside four smaller ones, hairlines between them */
.il-stats { display: grid !important; grid-template-columns: 1.25fr 1fr 1fr; grid-template-rows: auto auto; background: #f3f4f6 !important; border-radius: 24px !important; overflow: hidden !important; }
.il-stat { display: flex !important; flex-direction: column !important; justify-content: flex-start !important; gap: 8px !important; min-width: 0; padding: clamp(22px, 2.4vw, 32px) clamp(22px, 2.6vw, 36px) !important; box-shadow: -1px -1px 0 0 #dcdfe5; }
.il-stat:nth-child(3) { grid-column: 1; grid-row: 1 / span 2; justify-content: center !important; }
.il-stat-num .elementor-heading-title { margin: 0 !important; font-size: var(--fs-num) !important; font-weight: 700 !important; line-height: 1.05 !important; letter-spacing: -.025em; color: var(--ink) !important; }
.il-stat-label .elementor-heading-title { margin: 0 !important; font-size: var(--fs-body) !important; font-weight: 400 !important; line-height: 1.5 !important; color: var(--ab-mid) !important; text-wrap: balance; }
.il-stat:nth-child(1) .il-stat-label .elementor-heading-title { font-weight: 600; color: var(--ink) !important; }
.il-stat:nth-child(3) .il-stat-num .elementor-heading-title { font-size: clamp(3.4rem, 2.2rem + 4.4vw, 5.6rem) !important; color: var(--red) !important; letter-spacing: -.04em; }
.il-stat:nth-child(3) .il-stat-label .elementor-heading-title { font-size: var(--fs-h3) !important; font-weight: 600; line-height: 1.45 !important; color: var(--ink) !important; max-width: 17em; }

.il-heading .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h2) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em; color: var(--ink) !important; }

/* groups: red dot + title on a dark rule, then the cards */
.il-groups { display: flex !important; flex-direction: column !important; gap: 56px !important; margin-top: -14px; }
.il-group { display: flex !important; flex-direction: column !important; gap: 24px !important; min-width: 0; scroll-margin-top: 100px; }
.il-group-title { padding-bottom: 14px; border-bottom: 2px solid var(--ink); }
.il-group-title .elementor-heading-title { display: flex; align-items: center; gap: 14px; margin: 0 !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.3 !important; letter-spacing: -.01em; color: var(--ink) !important; }
.il-group-title .elementor-heading-title::before { content: ""; flex: none; width: 11px; height: 11px; border-radius: 50%; background: var(--red); }
.il-grid { display: grid !important; gap: 22px !important; align-items: stretch !important; }
.il-grid--lead { grid-template-columns: 1.15fr 1fr 1fr; }
.il-grid--lead > .il-card--big { grid-row: 1 / span 2; }
.il-grid--trio { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.il-grid--stack { grid-template-columns: minmax(0, 1fr); }
.il-duo { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: clamp(28px, 3.4vw, 48px) !important; align-items: start !important; }

/* cards: grey | white with a red edge | dark | red, each with an outlined number */
.il-card { counter-increment: il; display: flex !important; flex-direction: column !important; gap: 12px !important; min-width: 0; padding: clamp(22px, 2.4vw, 34px) !important; border-radius: 24px !important; }
.il-card::after { order: -1; content: counter(il, decimal-leading-zero); margin-bottom: 14px; font-size: clamp(2.4rem, 2rem + 1.2vw, 3.3rem); font-weight: 800; line-height: 1; letter-spacing: -.02em; color: transparent; -webkit-text-stroke: 1.5px var(--red); }
.il-card--gray { background: #f3f4f6 !important; }
.il-card--line { background: #fff !important; border: 1px solid var(--ab-line) !important; border-left: 4px solid var(--red) !important; box-shadow: 0 10px 26px rgba(20,24,31,.06); }
.il-card--dark { background: #1b1a1d !important; }
.il-card--dark::after { font-size: clamp(3.2rem, 2.4rem + 2.6vw, 5rem); margin-bottom: 22px; }
.il-card--big::after { font-size: clamp(3.8rem, 2.6rem + 4.2vw, 6.6rem); margin-bottom: 28px; }
.il-card--red { background: var(--red) !important; }
.il-card--red::after { -webkit-text-stroke-color: #fff; }
.il-card-title .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.3 !important; letter-spacing: -.01em; color: var(--ink) !important; }
.il-card--big .il-card-title .elementor-heading-title { font-size: var(--fs-lead) !important; }
.il-card--dark .il-card-title .elementor-heading-title, .il-card--red .il-card-title .elementor-heading-title { color: #fff !important; }
.il-text, .il-text p { margin: 0; color: var(--ab-mid); }
.il-text p { font-size: var(--fs-body) !important; line-height: 1.7 !important; }
.il-card--dark .il-text, .il-card--dark .il-text p, .il-card--red .il-text, .il-card--red .il-text p { color: rgba(255,255,255,.82); }

@media (max-width: 991.98px) {
	.il-head { grid-template-columns: minmax(0, 1fr); }
	.il-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: none; }
	.il-stat:nth-child(3) { grid-column: 1 / -1; grid-row: 1; }
	.il-grid--lead, .il-grid--trio { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.il-grid--lead > .il-card--big { grid-column: 1 / -1; grid-row: auto; }
	.il-grid--trio > :first-child { grid-column: 1 / -1; }
	.il-duo { grid-template-columns: minmax(0, 1fr); gap: 56px !important; }
}
@media (max-width: 575.98px) {
	.il-board { gap: 40px !important; }
	.il-grid--lead, .il-grid--trio { grid-template-columns: minmax(0, 1fr); }
	.il-grid { gap: 16px !important; }
	.il-card { padding: 22px 20px !important; border-radius: 20px !important; }
	.il-stat { padding: 20px 18px 18px !important; }
	.il-groups { gap: 44px !important; }
}


/* =========================================================
   CAREERS page (cr-* classes). Native Elementor widgets; this CSS only supplies the look.
   The banner reuses ab-hero and the closing red band reuses abt-cta (text only). The numbers 01-05 on the cards are CSS counters,
   not text in any widget. Coloured words in the titles are separate Heading widgets. No decorative circles.
   Spacing and type follow the site tokens (--sec-pad, --gutter, --head-gap, --fs-*).
   ========================================================= */
.cr-sec { width: 100% !important; max-width: 100% !important; position: relative; background: #fff !important; padding-bottom: var(--sec-pad) !important; }
.cr-sec:not(.irc-join) { padding-top: var(--sec-pad) !important; }
.cr-sec > .container-xl { width: 100% !important; max-width: none !important; position: relative; z-index: 1; }
@media (min-width: 992px) { .cr-sec > .container-xl { padding-left: 12px !important; padding-right: 12px !important; } }
@media (min-width: 1200px) { .cr-sec > .container-xl { max-width: 1140px !important; } }
@media (min-width: 1400px) { .cr-sec > .container-xl { max-width: 1320px !important; } }
.cr-sec * { font-family: var(--font-body) !important; }
.cr-sec .elementor-widget { margin-block-end: 0 !important; }
.cr-sec.cr-why { padding-top: 0 !important; } /* intro and this section are both white: one 50px gap, not two */
.cr-why > .container-xl { gap: var(--head-gap) !important; }

/* section titles: side-by-side Heading widgets, the coloured word is its own widget */
.cr-title { display: flex !important; flex-direction: row !important; flex-wrap: wrap !important; align-items: baseline !important; column-gap: .28em !important; row-gap: 0 !important; }
.cr-title-part { flex: none !important; width: auto !important; }
.cr-title-part .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h2) !important; font-weight: 700 !important; line-height: 1.15 !important; letter-spacing: -.02em; color: var(--ink) !important; }
.cr-title-part--red .elementor-heading-title { color: var(--red) !important; }
.cr-text, .cr-text p { margin: 0; color: var(--ab-mid); }
.cr-text p { font-size: var(--fs-body) !important; line-height: 1.7 !important; }

/* intro: title | two paragraphs behind a red edge */
.cr-intro-grid { display: grid !important; grid-template-columns: minmax(0, .8fr) minmax(0, 1.5fr); gap: clamp(28px, 5vw, 72px) !important; align-items: center !important; }
.cr-intro-copy { display: flex !important; flex-direction: column !important; gap: 18px !important; padding: 4px 0 4px clamp(22px, 2.4vw, 32px) !important; border-left: 3px solid var(--red) !important; }
.cr-lead, .cr-lead p { margin: 0; color: var(--ink); }
.cr-lead p { font-size: var(--fs-body) !important; font-weight: 500; line-height: 1.75 !important; }

/* Why Join IRC?: three cards, then two wider ones */
.cr-cards { display: grid !important; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: var(--gutter) !important; counter-reset: crc; }
.cr-card { grid-column: span 2; counter-increment: crc; display: flex !important; flex-direction: column !important; gap: 10px !important; min-width: 0; padding: 30px 30px 32px !important; background: #f3f4f6 !important; border-radius: 22px !important; }
.cr-card:nth-child(n+4) { grid-column: span 3; }
.cr-card::after { order: -1; content: counter(crc, decimal-leading-zero); display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; margin-bottom: 14px; border-radius: 50%; background: rgba(222,0,17,.1); color: var(--red); font-size: .78rem; font-weight: 700; }
.cr-card--dark { background: var(--ab-ink) !important; border-bottom: 4px solid var(--red) !important; }
.cr-card--dark::after { background: rgba(222,0,17,.24); color: #ff6670; }
.cr-card--dark .cr-card-title .elementor-heading-title { color: #fff !important; }
.cr-card--dark .cr-text, .cr-card--dark .cr-text p { color: rgba(255,255,255,.78); }
.cr-card:nth-child(n+4) { display: grid !important; grid-template-columns: 44px minmax(0, 1fr); column-gap: 22px !important; row-gap: 8px !important; align-items: start; }
.cr-card:nth-child(n+4)::after { grid-column: 1; grid-row: 1 / span 2; margin-bottom: 0; }
.cr-card:nth-child(n+4) > .cr-card-title { grid-column: 2; grid-row: 1; align-self: end; }
.cr-card:nth-child(n+4) > .cr-text { grid-column: 2; grid-row: 2; }
.cr-card-title .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.3 !important; letter-spacing: -.01em; color: var(--ink) !important; }

/* Who We Look For: dark band, title + line | five ticked lines */
.cr-look { background: var(--ab-ink) !important; }
.cr-look-grid { display: grid !important; grid-template-columns: minmax(0, 1fr); gap: 30px !important; }
.cr-look-head { display: flex !important; flex-direction: row !important; flex-wrap: wrap !important; align-items: baseline !important; gap: 8px 32px !important; }
.cr-look-sub { flex: 1 1 280px !important; width: auto !important; }
.cr-look .cr-title-part:not(.cr-title-part--red) .elementor-heading-title { color: #fff !important; }
.cr-look-sub, .cr-look-sub p { color: rgba(255,255,255,.7); }
.cr-checks .elementor-icon-list-items { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: clamp(28px, 5vw, 72px); margin: 0 !important; padding: 0 !important; list-style: none !important; }
.cr-checks .elementor-icon-list-item { display: flex !important; align-items: center !important; gap: 18px !important; margin: 0 !important; padding: 18px 0 !important; border-bottom: 1px solid rgba(255,255,255,.12); font-size: var(--fs-body) !important; font-weight: 600; line-height: 1.4 !important; color: #fff !important; }
.cr-checks .elementor-icon-list-item:last-child { border-bottom: 0; }
.cr-checks .elementor-icon-list-icon { flex: none; display: flex !important; align-items: center; justify-content: center; width: 40px !important; min-width: 40px; height: 40px; margin: 0 !important; padding: 0 !important; border-radius: 50%; background: rgba(222,0,17,.16); border: 1px solid rgba(222,0,17,.55); }
.cr-checks .elementor-icon-list-icon svg, .cr-checks .elementor-icon-list-icon i { width: 14px !important; height: 14px !important; font-size: 14px !important; fill: var(--red) !important; color: var(--red) !important; }
.cr-checks .elementor-icon-list-text { padding: 0 !important; margin: 0 !important; color: inherit !important; font: inherit !important; }

/* Current Opportunities: light card, text | resume address */
.cr-open-card { display: grid !important; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: clamp(24px, 4vw, 56px) !important; align-items: center !important; padding: clamp(26px, 3.6vw, 48px) !important; background: #f3f4f6 !important; border-radius: 26px !important; }
.cr-open-copy { display: flex !important; flex-direction: column !important; gap: 14px !important; }
.cr-mail { display: flex !important; flex-direction: column !important; gap: 10px !important; padding: 26px 30px !important; background: var(--ab-ink) !important; border-bottom: 4px solid var(--red) !important; border-radius: 18px !important; }
.cr-mail-label .elementor-heading-title { margin: 0 !important; font-size: .72rem !important; font-weight: 700 !important; line-height: 1.3 !important; letter-spacing: .18em; text-transform: uppercase; color: var(--red) !important; }
.cr-mail-addr .elementor-heading-title { margin: 0 !important; font-size: var(--fs-h3) !important; font-weight: 700 !important; line-height: 1.3 !important; color: #fff !important; overflow-wrap: anywhere; }
.cr-mail-addr a { color: inherit !important; text-decoration: none !important; }
.cr-mail-addr a:hover { text-decoration: underline !important; }

@media (max-width: 991.98px) {
	.cr-intro-grid, .cr-look-grid, .cr-open-card { grid-template-columns: minmax(0, 1fr); }
	.cr-checks .elementor-icon-list-items { grid-template-columns: minmax(0, 1fr); }
	.cr-card:nth-child(n+4) { display: flex !important; }
	.cr-card:nth-child(n+4)::after { margin-bottom: 14px; }
	.cr-card:nth-child(n+4) > .cr-card-title, .cr-card:nth-child(n+4) > .cr-text { align-self: stretch; }
	.cr-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.cr-card, .cr-card:nth-child(n+4) { grid-column: span 1; }
	.cr-card:last-child { grid-column: 1 / -1; }
}
@media (max-width: 575.98px) {
	.cr-cards { grid-template-columns: minmax(0, 1fr); }
	.cr-card:last-child { grid-column: auto; }
	.cr-card { padding: 24px 22px 26px !important; }
	.cr-checks .elementor-icon-list-item { padding: 16px 0 !important; gap: 14px !important; }
	.cr-mail { padding: 22px 20px !important; }
}


/* =========================================================
   Home > Why IRC Engineering: the "9K Happy Customers" badge in a new format (client asked to change it).
   A white card with a red edge, the figure in red above the caption, no peach box and no stock-photo faces
   (the three round pictures and the "+" circle are hidden; the widgets stay in the page and can be shown again).
   Position, text and size scale are unchanged.
   ========================================================= */
.why-image-wrap > .happy-badge.e-con { background: #fff !important; border-radius: 16px !important; border-left: 4px solid var(--red); padding: 18px 28px 18px 24px !important; flex-direction: column; align-items: flex-start; gap: 0; text-align: left; box-shadow: 0 16px 36px rgba(20,24,31,.18); }
.happy-text.e-con { align-items: flex-start; line-height: 1.2; }
.happy-number .elementor-heading-title { font-size: var(--fs-num) !important; line-height: 1 !important; letter-spacing: -.03em; color: var(--red) !important; }
.happy-label { padding: 6px 0 0 !important; }
.happy-label .elementor-heading-title { font-size: var(--fs-body) !important; font-weight: 500 !important; line-height: 1.3 !important; color: var(--ab-mid) !important; }
.happy-avatars.e-con { display: none !important; }
