/* =========================================================================================
 * Bridge stylesheet: makes Elementor's native widget markup look like the original design.
 *
 * The pages are built from real Elementor components (see includes/elementor-widgets.php),
 * and each element carries the same Tailwind classes the original hand-written markup used.
 * Tailwind reaches anything on an element's own wrapper, but it can't reach the markup
 * Elementor generates *inside* a widget - `.elementor-heading-title`, `.elementor-button`,
 * `.elementor-counter-number`, and so on. Those internals are styled here.
 *
 * Two rules of thumb:
 *   - Everything here is a DEFAULT. Elementor's own Style tab writes at
 *     `.elementor-NNN .elementor-element.elementor-element-XXX` (0,3,0) specificity, which
 *     outranks these selectors - so an admin restyling a widget in the panel always wins.
 *   - Keep selectors anchored on an `eka-` class so nothing here leaks into widgets an admin
 *     adds later from the standard Elementor panel.
 *
 * Loaded after elementor-frontend and the per-post CSS (see eka_enqueue_assets()).
 * ====================================================================================== */

/* -----------------------------------------------------------------------------------------
 * Containers
 *
 * Elementor containers default to flex-column with 10px padding and a 20px gap. The ported
 * Tailwind classes already carry the site's own spacing and layout, so Elementor's defaults
 * are zeroed out through its custom properties. Only the properties are neutralised - no real
 * padding/gap declarations - which leaves Tailwind's `px-4` / `gap-12` free to apply.
 * -------------------------------------------------------------------------------------- */
/*
 * !important is deliberate here, not a specificity shortcut: Elementor regenerates each
 * container's `--display`/`--flex-direction`/`--padding-*`/`--gap*` as an inline <style> rule
 * targeting that exact element (`.elementor-POST .elementor-element.elementor-element-XXX`),
 * which lands at the same (0,3,0) specificity as the rule below - so the winner is decided by
 * source order alone. On the saved front end that inline rule is enqueued before this
 * stylesheet, so this stylesheet wins; but the Elementor *editor* re-injects its version live
 * into <head>, always AFTER this stylesheet, which flips the outcome and breaks every eka-tw
 * container's layout in the editor (Elementor's `--display:flex` default wins over Tailwind's
 * `grid`/`block`, producing exactly the garbled overlapping text seen in the editor canvas).
 * !important removes that race so these properties always resolve the same way in both places.
 * This is safe: nothing about these containers is meant to be restyled via Elementor's own
 * Layout controls (see eka_con()'s docblock) - their layout comes from Tailwind classes only.
 */
.elementor .e-con.eka-tw {
	--display: block !important;
	--flex-direction: row !important;
	--padding-top: 0px !important;
	--padding-right: 0px !important;
	--padding-bottom: 0px !important;
	--padding-left: 0px !important;
	--gap: 0px !important;
	--row-gap: 0px !important;
	--column-gap: 0px !important;
}

/* `.e-con-full.e-flex` sets flex-direction from --flex-direction at a specificity Tailwind's
   `flex-col` can't beat, so the direction is mapped back onto the variable here. */
.elementor .e-con.eka-tw.flex-col { --flex-direction: column !important; }
.elementor .e-con.eka-tw.flex-row { --flex-direction: row !important; }

@media (min-width: 640px) {
	.elementor .e-con.eka-tw.sm\:flex-col { --flex-direction: column !important; }
	.elementor .e-con.eka-tw.sm\:flex-row { --flex-direction: row !important; }
}
@media (min-width: 768px) {
	.elementor .e-con.eka-tw.md\:flex-col { --flex-direction: column !important; }
	.elementor .e-con.eka-tw.md\:flex-row { --flex-direction: row !important; }
}
@media (min-width: 1024px) {
	.elementor .e-con.eka-tw.lg\:flex-col { --flex-direction: column !important; }
	.elementor .e-con.eka-tw.lg\:flex-row { --flex-direction: row !important; }
}

/* Purely-decorative HTML widget (background blooms, a scroll cue) sitting as a direct child of
   a `flex`/`grid` section. Its own content is entirely absolutely-positioned, so it has no
   in-flow size of its own; left as a normal flex/grid item it collapses to zero width and gets
   shoved wherever flex/grid order happens to place it, instead of positioning against the
   section like a plain decoration should. `eka-decor` pulls the widget itself out of flow -
   full-bleed over the section - so its absolutely-positioned contents place correctly again,
   and disables pointer events so it never sits over the real content and blocks clicks. */
.elementor .eka-decor { position: absolute !important; inset: 0; pointer-events: none; }
.elementor .eka-decor > * { pointer-events: auto; }

/* Elementor gives containers `min-width: 0`, which stops an absolutely-positioned decoration
   inside a `relative` container from escaping its bounds the way the original markup did. */
.elementor .e-con.eka-tw.relative { position: relative; }
.elementor .e-con.eka-tw.overflow-hidden { overflow: hidden; }

/* Horizontally scrollable strip with the scrollbar hidden (the Services jump nav). */
.elementor .eka-scroll-x { scrollbar-width: none; -ms-overflow-style: none; }
.elementor .eka-scroll-x::-webkit-scrollbar { display: none; }

/* -----------------------------------------------------------------------------------------
 * Widget bottom margins
 *
 * Elementor zeroes every widget's bottom margin inside a container with
 * `.e-con .elementor-widget.elementor-widget { margin-block-end: 0 }` - a (0,3,0) selector that
 * outranks a Tailwind `mb-*` utility (0,1,0). The ported design leans on those utilities for its
 * vertical rhythm, so the scale it actually uses is re-asserted here at a specificity that wins.
 * (Top margins are untouched by Elementor, so `mt-*` needs no help.)
 * -------------------------------------------------------------------------------------- */
.elementor .e-con .elementor-widget.elementor-widget.mb-0 { margin-block-end: 0; }
.elementor .e-con .elementor-widget.elementor-widget.mb-0\.5 { margin-block-end: .125rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-1 { margin-block-end: .25rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-2 { margin-block-end: .5rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-3 { margin-block-end: .75rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-4 { margin-block-end: 1rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-5 { margin-block-end: 1.25rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-6 { margin-block-end: 1.5rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-8 { margin-block-end: 2rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-10 { margin-block-end: 2.5rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-12 { margin-block-end: 3rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-14 { margin-block-end: 3.5rem; }
.elementor .e-con .elementor-widget.elementor-widget.mb-16 { margin-block-end: 4rem; }

/* -----------------------------------------------------------------------------------------
 * Heading
 * -------------------------------------------------------------------------------------- */

/*
 * Elementor's global Kit typography assigns every heading its own explicit `font-family`,
 * `font-weight` and `color` (Roboto / Elementor's default weight / Elementor's default blue -
 * not this site's), which ordinarily loses to the rule below on the saved front end (same
 * (0,2,0) selector, but this stylesheet is enqueued after the Kit's static CSS there). The
 * Elementor *editor*, however, re-generates that same Kit rule as a live inline <style> tag on
 * every load, always appended to <head> AFTER this stylesheet - flipping the outcome and
 * leaving headings in Elementor's default look (this is the "wrong fonts" symptom). It also
 * writes an even more specific per-element color rule for the same reason. !important removes
 * the ordering race so headings render identically in the editor and on the live site.
 */
.elementor-widget-heading .elementor-heading-title {
	font-family: inherit !important;
	line-height: inherit !important;
	font-size: inherit !important;
	font-weight: inherit !important;
	color: inherit !important;
	letter-spacing: inherit !important;
}

/* The small uppercase eyebrow. `.label` (theme CSS) styles the wrapper; the inner span
   inherits it, but needs the block-level defaults cleared. The margin is restated here
   because Elementor zeroes widget margins at a specificity `.label` can't reach. */
.elementor .e-con .elementor-widget.elementor-widget.eka-label { margin-block-end: .75rem; }
.eka-label .elementor-heading-title {
	display: inline;
	font-family: inherit !important;
	font-size: inherit !important;
	font-weight: inherit !important;
	letter-spacing: inherit !important;
	text-transform: inherit !important;
	color: inherit !important;
}

/* -----------------------------------------------------------------------------------------
 * Text editor
 *
 * Elementor 4 renders the editor content straight into the widget wrapper (no inner
 * container), so Tailwind's `space-y-4` on the wrapper spaces the paragraphs natively.
 * Same editor-only Kit-typography race as headings above - see that comment.
 * -------------------------------------------------------------------------------------- */
/*
 * `color` is deliberately NOT !important here, unlike the other properties. Elementor renders
 * text-editor content straight into this SAME wrapper element (no inner child to target), and
 * eka_text()'s own $classes argument - e.g. `text-white`, `text-gray-300` - lands on this exact
 * element too. An !important inherit would make every paragraph ignore its own explicit
 * Tailwind colour and pull the ancestor's instead (almost always gray-900), which is exactly
 * what made light-on-dark copy like the CTA subtext and stat captions unreadable. Plain
 * `inherit` still reliably beats Elementor's Kit default (its static per-post CSS loads before
 * this stylesheet) while correctly losing to a real Tailwind colour class (Tailwind's
 * generated stylesheet loads last of all, right before this cascade is evaluated).
 */
.elementor-widget-text-editor {
	font-family: inherit !important;
	font-size: inherit !important;
	line-height: inherit !important;
	color: inherit;
}
.elementor-widget-text-editor p { margin: 0; }
.elementor-widget-text-editor p + p { margin-top: 1em; }

/* `space-y-*` already handles the rhythm - don't double it up. */
.elementor-widget-text-editor[class*="space-y-"] p + p { margin-top: 0; }

.elementor-widget-text-editor a { color: #EF7F1A; text-decoration: none; }
.elementor-widget-text-editor a:hover { color: #D4701A; }

/* -----------------------------------------------------------------------------------------
 * Image
 *
 * `.eka-img` is the site's standard "fill the box, crop to cover" image. Sizing, rounding and
 * shadow come from Tailwind classes on the widget wrapper, exactly as in the original markup.
 * -------------------------------------------------------------------------------------- */
.elementor .eka-img { line-height: 0; text-align: inherit; }
.elementor .eka-img img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: inherit;
}
.elementor .eka-img-top img { object-position: top; }
.elementor .eka-img-contain img { object-fit: contain; }

/* Logos: the wrapper carries the height (`h-10`, `h-12`) and shrink-wraps to the logo's own
   aspect ratio, so a chip background/padding hugs the mark instead of spanning the column. */
.elementor .eka-img-auto {
	display: inline-block;
	flex: 0 0 auto;
	width: auto;
	max-width: 100%;
}
.elementor .eka-img-auto img { width: auto; height: 100%; max-width: 100%; object-fit: contain; }

/* Slow zoom on hover, as on the About/gallery grids. */
.elementor .eka-img-zoom img { transition: transform .5s ease; }
.elementor .eka-img-zoom:hover img { transform: scale(1.05); }

/*
 * -----------------------------------------------------------------------------------------
 * Button
 *
 * The visual button is the <a> Elementor renders, not the widget wrapper, so the padded area
 * stays clickable. Variants below match the button styles used across the original pages.
 *
 * `background`/`color` carry `!important`: absent an explicit Style-tab colour, Elementor's
 * editor writes the Kit's default accent colour as a live per-element override
 * (`.elementor-POST .elementor-element.elementor-element-XXX .elementor-button`), which is
 * MORE specific than any class-based rule here and would otherwise paint every button
 * Elementor's default orange/blue instead of this design's palette - editor-only, since the
 * saved front end doesn't generate that redundant per-element rule. See the heading comment
 * above for the fuller explanation of why this class of bug is editor-only.
 * -------------------------------------------------------------------------------------- */
.elementor .eka-btn .elementor-button {
	display: inline-flex;
	align-items: center;
	gap: .5rem;
	padding: .75rem 1.5rem;
	border: 0;
	border-radius: .5rem;
	background: none !important;
	box-shadow: none;
	font-family: inherit;
	font-size: 1rem;
	font-weight: 600;
	line-height: 1.5;
	text-decoration: none;
	transition: background-color .3s ease, color .3s ease, border-color .3s ease, box-shadow .3s ease;
}
.elementor .eka-btn .elementor-button-content-wrapper { display: inline-flex; align-items: center; gap: .5rem; }
.elementor .eka-btn .elementor-button-icon { display: inline-flex; align-items: center; }
.elementor .eka-btn .elementor-button-icon svg { width: 1em; height: 1em; }
.elementor .eka-btn .elementor-button-text { flex-grow: 0; }

.elementor .eka-btn-navy .elementor-button { background: #182B4C !important; color: #fff !important; box-shadow: 0 4px 6px -1px rgba(24,43,76,.18); }
.elementor .eka-btn-navy .elementor-button:hover { background: #142440 !important; box-shadow: 0 10px 20px -6px rgba(24,43,76,.32); }

.elementor .eka-btn-brand .elementor-button { background: #EF7F1A !important; color: #fff !important; }
.elementor .eka-btn-brand .elementor-button:hover { background: #D4701A !important; }

.elementor .eka-btn-outline .elementor-button { border: 2px solid #EF7F1A; color: #EF7F1A !important; background: transparent !important; }
.elementor .eka-btn-outline .elementor-button:hover { background: #EF7F1A !important; color: #fff !important; }

.elementor .eka-btn-outline-light .elementor-button { border: 1px solid #d1d5db; color: #4b5563 !important; background: transparent !important; }
.elementor .eka-btn-outline-light .elementor-button:hover { border-color: #6b7280; }

.elementor .eka-btn-white .elementor-button { background: #fff !important; color: #182B4C !important; }
.elementor .eka-btn-white .elementor-button:hover { background: #FEF3E8 !important; }

/* Inline text link with a trailing arrow - "Read Our Story", "Learn more". */
.elementor .eka-btn-link .elementor-button { padding: 0; background: none !important; color: #EF7F1A !important; }
.elementor .eka-btn-link .elementor-button:hover { color: #D4701A !important; }
.elementor .eka-btn-link-light .elementor-button { color: #FBA561 !important; font-size: .875rem; }
.elementor .eka-btn-link-light .elementor-button:hover { color: #FDE6D0 !important; }

/* The Services page's sticky in-page jump links. */
.elementor .eka-btn-jump { flex: 0 0 auto; }
.elementor .eka-btn-jump .elementor-button {
	padding: .375rem .75rem;
	border-radius: .5rem;
	background: none !important;
	color: #4b5563 !important;
	font-size: .875rem;
	font-weight: 400;
	white-space: nowrap;
}
.elementor .eka-btn-jump .elementor-button:hover { background: #FEF3E8 !important; color: #EF7F1A !important; }
.elementor .eka-btn-link .elementor-button:hover .elementor-button-icon { transform: translateX(4px); }
.elementor .eka-btn-link .elementor-button-icon { transition: transform .3s ease; }

.elementor .eka-btn-sm .elementor-button { padding: .5rem 1rem; font-size: .875rem; font-weight: 500; }
.elementor .eka-btn-lg .elementor-button { padding: .875rem 2rem; border-radius: .75rem; box-shadow: 0 10px 15px -3px rgba(239,127,26,.35); }

/* "Watch on YouTube" - a text link in YouTube's red rather than the brand orange. */
.elementor .eka-btn-youtube .elementor-button { color: #ef4444 !important; font-size: .875rem; }
.elementor .eka-btn-youtube .elementor-button:hover { color: #dc2626 !important; }

/* The sweep highlight the original design put on its primary buttons. */
.elementor .eka-btn-shine .elementor-button { position: relative; overflow: hidden; }
.elementor .eka-btn-shine .elementor-button::after {
	content: '';
	position: absolute;
	top: 0;
	left: -100%;
	width: 60%;
	height: 100%;
	background: linear-gradient(90deg, transparent, rgba(255,255,255,.25), transparent);
	transition: left .5s ease;
}
.elementor .eka-btn-shine .elementor-button:hover::after { left: 150%; }

/* -----------------------------------------------------------------------------------------
 * Icon
 *
 * Elementor paints icon SVGs with `fill`, and a CSS declaration beats an inline `fill="none"`
 * attribute - so the outline Heroicons need their stroke/fill restored explicitly. The
 * eka-icon-outline / eka-icon-solid class is chosen automatically by eka_icon_variant().
 * -------------------------------------------------------------------------------------- */
.elementor .eka-icon-outline svg,
.elementor .eka-icon-outline .elementor-icon svg { fill: none; stroke: currentColor; }
.elementor .eka-icon-solid svg,
.elementor .eka-icon-solid .elementor-icon svg { fill: currentColor; stroke: none; }

/* Inherit colour from the wrapper so a Tailwind `text-white` / `text-brand-500` reaches the
   icon - !important because Elementor's editor otherwise paints every icon its Kit primary
   colour (a light blue) via the same live per-element override race described on the Button
   and Heading sections above. Without this, icons render sky-blue in the editor only. */
.elementor .eka-icon .elementor-icon,
.elementor .eka-iconbox .elementor-icon { color: inherit !important; background: none; border: 0; padding: 0; }

.elementor .eka-icon .elementor-icon-wrapper { display: flex; align-items: center; justify-content: center; line-height: 0; }
.elementor .eka-icon .elementor-icon { display: flex; font-size: inherit; }
.elementor .eka-icon svg { width: var(--eka-icon-size, 1.5rem); height: var(--eka-icon-size, 1.5rem); }

/* The rounded coloured tile behind an icon. Box size/colour/radius come from Tailwind on the
   wrapper; this just centres the glyph inside it. */
.elementor .eka-icon-tile { display: flex; align-items: center; justify-content: center; }
.elementor .eka-icon-tile .elementor-icon-wrapper { width: 100%; height: 100%; }

.elementor .eka-icon-xs { --eka-icon-size: .75rem; }
.elementor .eka-icon-sm { --eka-icon-size: 1.25rem; }
.elementor .eka-icon-md { --eka-icon-size: 1.5rem; }
.elementor .eka-icon-lg { --eka-icon-size: 1.75rem; }
.elementor .eka-icon-xl { --eka-icon-size: 2.5rem; }

/* -----------------------------------------------------------------------------------------
 * Icon box
 * -------------------------------------------------------------------------------------- */
.elementor .eka-iconbox .elementor-icon-box-wrapper { display: flex; flex-direction: column; text-align: inherit; align-items: inherit; }
.elementor .eka-iconbox .elementor-icon-box-icon { margin-bottom: 1.25rem; line-height: 0; }
.elementor .eka-iconbox .elementor-icon-box-title { font-family: inherit !important; font-size: 1.25rem; font-weight: 600; line-height: 1.4; margin: 0 0 .75rem; color: inherit !important; }
.elementor .eka-iconbox .elementor-icon-box-description { font-family: inherit !important; font-size: .875rem; line-height: 1.7; margin: 0; color: inherit !important; opacity: .78; }
.elementor .eka-iconbox svg { width: var(--eka-icon-size, 1.5rem); height: var(--eka-icon-size, 1.5rem); }

/* Icon rendered inside a rounded coloured tile, as on the Vision/Mission/Motto cards. */
.elementor .eka-iconbox-tile .elementor-icon-box-icon { display: block; }
.elementor .eka-iconbox-tile .elementor-icon {
	width: 3rem;
	height: 3rem;
	border-radius: .75rem;
	display: inline-flex;
	align-items: center;
	justify-content: center;
}
.elementor .eka-iconbox-tile-brand .elementor-icon { background: #FEF3E8; color: #EF7F1A !important; }
.elementor .eka-iconbox-tile-orange .elementor-icon { background: #EF7F1A; color: #fff !important; }
.elementor .eka-iconbox-tile-navy .elementor-icon { background: #182B4C; color: #fff !important; }
.elementor .eka-iconbox-tile-light .elementor-icon { background: rgba(255,255,255,.15); color: #fff !important; }

/* Icon to the left of the text rather than above it. */
.elementor .eka-iconbox-inline .elementor-icon-box-wrapper { flex-direction: row; align-items: flex-start; gap: 1rem; text-align: left; }
.elementor .eka-iconbox-inline .elementor-icon-box-icon { margin-bottom: 0; flex: 0 0 auto; }

/* Centred icon over a stacked title/subtitle - the annual report cards. */
.elementor .eka-report .elementor-icon-box-wrapper { align-items: center; text-align: center; }
.elementor .eka-report .elementor-icon-box-icon { margin-bottom: .75rem; color: #EF7F1A !important; }
.elementor .eka-report svg { width: 2.5rem; height: 2.5rem; }
.elementor .eka-report .elementor-icon-box-title { font-family: inherit !important; font-size: 1rem; font-weight: 700; margin-bottom: 0; color: #111827 !important; }
.elementor .eka-report .elementor-icon-box-description { font-family: inherit !important; font-size: .75rem; color: #9ca3af !important; opacity: 1; }
.elementor .eka-report-latest .elementor-icon-box-icon,
.elementor .eka-report-latest .elementor-icon-box-title { color: #fff !important; }
.elementor .eka-report-latest .elementor-icon-box-description { color: rgba(255,255,255,.8) !important; }

/* -----------------------------------------------------------------------------------------
 * Donate page: giving tiers and donor cards
 * -------------------------------------------------------------------------------------- */
.elementor .donate-card { transition: transform .3s ease, box-shadow .3s ease; }
.elementor .donate-card:hover { transform: translateY(-6px); box-shadow: 0 22px 44px rgba(24,43,76,.16); }
.elementor .donate-card.featured { background: linear-gradient(140deg, #182B4C 0%, #2a3f6a 100%); }

/* Amount headings on the two white tiers (Supporter/Champion) were text-3xl in brand-500, which
 * is only ~2.7:1 against white - below the 3:1 WCAG AA minimum even for large text. Sized down
 * one step and recoloured to brand-700 (~4.5:1) so low-vision visitors can read them; the
 * featured navy card keeps its white-on-navy heading untouched since that already passes. */
.elementor .donate-card .elementor-widget-heading.text-brand-500 { font-size: 1.5rem !important; color: #B85E15 !important; }

/* Tier labels (Supporter/Champion) were text-gray-400, ~2.5:1 against white - also below AA.
 * gray-500 (~4.8:1) matches the contrast already used for the donate form's own field labels. */
.elementor .donate-card .elementor-widget-heading.text-gray-400 { color: #6b7280 !important; }

/* -----------------------------------------------------------------------------------------
 * Contact page: phone/email link cards, and the Contact Form 7 widget
 * -------------------------------------------------------------------------------------- */
.elementor .eka-contact-link { display: flex; align-items: center; gap: .75rem; font-size: .875rem; transition: color .2s ease; cursor: pointer; }
.elementor .eka-contact-link .elementor-icon { width: 1.25rem; height: 1.25rem; }
.elementor .eka-contact-link span { font-weight: 600; }
.elementor .eka-contact-link.eka-contact-sm span { font-weight: 400; }

.elementor .eka-contact-dark { color: #374151; }
.elementor .eka-contact-dark:hover { color: #EF7F1A; }
.elementor .eka-contact-light { color: #fff; }
.elementor .eka-contact-light:hover { color: #EF7F1A; }

.elementor .eka-cf7 .wpcf7-form p { margin: 0 0 .75rem; }
.elementor .eka-cf7 .wpcf7-form input[type=text],
.elementor .eka-cf7 .wpcf7-form input[type=email],
.elementor .eka-cf7 .wpcf7-form input[type=tel],
.elementor .eka-cf7 .wpcf7-form select,
.elementor .eka-cf7 .wpcf7-form textarea {
	width: 100%; padding: .75rem 1rem; border: 1px solid #e5e7eb; border-radius: .5rem;
	font-size: .875rem; background: #fff; font-family: 'Inter', sans-serif; box-sizing: border-box;
}
.elementor .eka-cf7 .wpcf7-form input:focus,
.elementor .eka-cf7 .wpcf7-form select:focus,
.elementor .eka-cf7 .wpcf7-form textarea:focus { outline: none; border-color: #EF7F1A; }
.elementor .eka-cf7 .wpcf7-form textarea { resize: none; }
.elementor .eka-cf7 .wpcf7-form input[type=submit] {
	padding: .75rem 1.5rem; background: #EF7F1A; color: #fff; font-weight: 600;
	border: none; border-radius: .5rem; cursor: pointer; transition: background .2s;
}
.elementor .eka-cf7 .wpcf7-form input[type=submit]:hover { background: #D4701A; }
.elementor .eka-cf7 .wpcf7-form .wpcf7-not-valid-tip { color: #dc2626; font-size: .75rem; margin-top: .25rem; }
.elementor .eka-cf7 .wpcf7-form-control-wrap { display: block; }

/* -----------------------------------------------------------------------------------------
 * Breadcrumb strip in the dark page banners.
 * -------------------------------------------------------------------------------------- */
.elementor .eka-crumb p { display: flex; align-items: center; gap: .5rem; }
.elementor .eka-crumb a { color: rgba(255,255,255,.7); text-decoration: none; }
.elementor .eka-crumb a:hover { color: #fff; }

/* -----------------------------------------------------------------------------------------
 * Counter
 *
 * `.elementor-counter` is flex column-reverse, so Elementor's title-then-number DOM order
 * renders the number on top - which is what the original stat cards did.
 * -------------------------------------------------------------------------------------- */
.elementor .eka-counter .elementor-counter { align-items: flex-start; }
.elementor .eka-counter .elementor-counter-number-wrapper {
	flex: 0 0 auto;
	justify-content: flex-start;
	font-family: inherit !important;
	font-size: 1.875rem;
	font-weight: 700;
	line-height: 1;
	font-variant-numeric: tabular-nums;
	color: inherit !important;
}
.elementor .eka-counter .elementor-counter-number-prefix,
.elementor .eka-counter .elementor-counter-number-suffix { flex-grow: 0; }
.elementor .eka-counter .elementor-counter-title {
	flex: 0 0 auto;
	justify-content: flex-start;
	font-family: inherit !important;
	font-size: .875rem;
	font-weight: 600;
	line-height: 1.4;
	margin-top: .25rem;
	color: inherit !important;
}

.elementor .eka-counter-center .elementor-counter { align-items: center; }
.elementor .eka-counter-center .elementor-counter-number-wrapper,
.elementor .eka-counter-center .elementor-counter-title { justify-content: center; }

.elementor .eka-counter-lg .elementor-counter-number-wrapper { font-size: 2.25rem; }
.elementor .eka-counter-xl .elementor-counter-number-wrapper { font-size: 3rem; }

/* Counter with no title, sized entirely by the Tailwind classes on its wrapper - used where
   the label sits beside the figure rather than under it. */
.elementor .eka-counter-bare .elementor-counter-number-wrapper { font-size: inherit; font-weight: inherit; }
.elementor .eka-counter-bare .elementor-counter-title { display: none; }

/* -----------------------------------------------------------------------------------------
 * Icon list
 * -------------------------------------------------------------------------------------- */
.elementor .eka-list .elementor-icon-list-items { display: flex; flex-direction: column; gap: .75rem; margin: 0; padding: 0; list-style: none; }
.elementor .eka-list .elementor-icon-list-item { display: flex; align-items: flex-start; gap: .75rem; font-family: inherit !important; font-size: inherit; line-height: inherit; color: inherit !important; }
.elementor .eka-list .elementor-icon-list-item a { display: flex; align-items: flex-start; gap: .75rem; color: inherit !important; text-decoration: none; }
.elementor .eka-list .elementor-icon-list-icon { flex: 0 0 auto; margin-top: .15em; color: #EF7F1A !important; }
.elementor .eka-list .elementor-icon-list-icon svg { width: 1em; height: 1em; }
.elementor .eka-list .elementor-icon-list-text { padding: 0; color: inherit !important; }

/* Check inside a filled circle, as on the Mission card. */
.elementor .eka-list-badge .elementor-icon-list-icon {
	width: 1.25rem;
	height: 1.25rem;
	margin-top: .1em;
	border-radius: 9999px;
	background: #EF7F1A;
	color: #fff !important;
	display: flex;
	align-items: center;
	justify-content: center;
}
.elementor .eka-list-badge .elementor-icon-list-icon svg { width: .75rem; height: .75rem; }

.elementor .eka-list-tight .elementor-icon-list-items { gap: .5rem; }

/* Small coloured dot instead of an icon - the bulleted lists throughout Services.
   The Icon List widget is still what an admin edits; only the marker is restyled. */
.elementor .eka-list-dot .elementor-icon-list-items { gap: .375rem; }
.elementor .eka-list-dot .elementor-icon-list-icon {
	width: .375rem;
	height: .375rem;
	margin-top: .55em;
	border-radius: 9999px;
	background: currentColor;
	flex: 0 0 auto;
}
.elementor .eka-list-dot .elementor-icon-list-icon svg { display: none; }

.elementor .eka-list-dot-brand .elementor-icon-list-icon { color: #EF7F1A !important; }
.elementor .eka-list-dot-navy .elementor-icon-list-icon { color: #182B4C !important; }
.elementor .eka-list-dot-blue .elementor-icon-list-icon { color: #3b82f6 !important; }
.elementor .eka-list-dot-teal .elementor-icon-list-icon { color: #14b8a6 !important; }
.elementor .eka-list-dot-green .elementor-icon-list-icon { color: #22c55e !important; }
.elementor .eka-list-dot-amber .elementor-icon-list-icon { color: #f59e0b !important; }
.elementor .eka-list-dot-purple .elementor-icon-list-icon { color: #a78bfa !important; }
.elementor .eka-list-dot-emerald .elementor-icon-list-icon { color: #34d399 !important; }
.elementor .eka-list-dot-rose .elementor-icon-list-icon { color: #fb7185 !important; }

/* -----------------------------------------------------------------------------------------
 * Tabs
 *
 * Restyled as the rounded pill tabs the original Alpine.js blocks used.
 * -------------------------------------------------------------------------------------- */
.elementor .eka-tabs .elementor-tabs { text-align: left; }
.elementor .eka-tabs .elementor-tabs-wrapper { display: flex; flex-wrap: wrap; gap: .5rem; border: 0; margin-bottom: 2rem; }
.elementor .eka-tabs .elementor-tab-title {
	font-family: inherit;
	border: 1px solid #e5e7eb;
	border-radius: 9999px;
	background: #fff !important;
	color: #4b5563 !important;
	padding: .5rem 1.25rem;
	font-size: .875rem;
	font-weight: 600;
	transition: all .2s ease;
}
.elementor .eka-tabs .elementor-tab-title:hover { border-color: #EF7F1A; color: #EF7F1A !important; }
.elementor .eka-tabs .elementor-tab-title.elementor-active { background: #EF7F1A !important; border-color: #EF7F1A; color: #fff !important; }
.elementor .eka-tabs .elementor-tab-title.elementor-active::before,
.elementor .eka-tabs .elementor-tab-title.elementor-active::after { display: none; }
.elementor .eka-tabs .elementor-tab-content { font-family: inherit; border: 0; padding: 0; font-size: .9375rem; line-height: 1.75; color: #6b7280 !important; }
.elementor .eka-tabs .elementor-tab-mobile-title { border: 0; }

/* -----------------------------------------------------------------------------------------
 * Component-built tab groups (see initEkaTabs() in eka-site.js)
 *
 * Used instead of Elementor's Tabs widget on the Services page, because Tabs would collapse a
 * whole panel into one rich-text field. Here each panel is a Container, so every card inside it
 * stays an individually editable widget.
 * -------------------------------------------------------------------------------------- */
.elementor .eka-tab-panel { display: none; }
.elementor .eka-tab-panel.is-active { display: block; animation: ekaTabIn .2s ease-out; }
@keyframes ekaTabIn { from { opacity: 0; transform: translateY(.5rem); } to { opacity: 1; transform: translateY(0); } }

/* Panels are hidden on the front end, but must all stay visible and selectable in the editor. */
.elementor-editor-active .eka-tab-panel { display: block; }

/* background/color carry !important for the same reason the Button section above does:
   absent an explicit Style-tab colour, Elementor's editor writes its Kit accent colour as a
   live per-element override that outranks a plain class rule - editor-only, see the fuller
   explanation on the Button section. */
.elementor .eka-tab-btn .elementor-button {
	padding: .5rem 1rem;
	border-radius: .5rem;
	border: 1px solid #e5e7eb;
	background: #fff !important;
	color: #4b5563 !important;
	font-size: .875rem;
	font-weight: 500;
}
.elementor .eka-tab-btn .elementor-button:hover { background: #f3f4f6 !important; }
.elementor .eka-tab-btn.is-active .elementor-button {
	background: #EF7F1A !important;
	border-color: #EF7F1A;
	color: #fff !important;
	box-shadow: 0 1px 2px 0 rgba(0,0,0,.05);
}

/* The Higher Education group uses navy pills with a leading icon. */
.elementor .eka-tab-btn-navy .elementor-button { padding: .625rem 1.25rem; border-radius: .75rem; }
.elementor .eka-tab-btn-navy.is-active .elementor-button { background: #182B4C !important; border-color: #182B4C; color: #fff !important; }

/* -----------------------------------------------------------------------------------------
 * Accordion
 * -------------------------------------------------------------------------------------- */
.elementor .eka-accordion .elementor-accordion-item { border: 1px solid #f1f5f9; border-radius: 1rem; margin-bottom: .75rem; overflow: hidden; }
.elementor .eka-accordion .elementor-tab-title { font-family: inherit; background: #fff; padding: 1rem 1.25rem; font-size: 1rem; font-weight: 600; color: #111827 !important; border: 0; }
.elementor .eka-accordion .elementor-tab-title.elementor-active { color: #EF7F1A !important; }
.elementor .eka-accordion .elementor-tab-content { font-family: inherit; border: 0; padding: 0 1.25rem 1.25rem; font-size: .875rem; line-height: 1.75; color: #6b7280 !important; }

/* -----------------------------------------------------------------------------------------
 * Video
 *
 * `eka-video-cover` makes the player fill a fixed-height card slot (the story cards), with the
 * poster frame cropped to cover rather than letterboxed.
 * -------------------------------------------------------------------------------------- */
.elementor .eka-video-cover .elementor-wrapper { height: 100%; padding: 0; }
.elementor .eka-video-cover .elementor-wrapper::before { display: none; }
.elementor .eka-video-cover .elementor-custom-embed-image-overlay { height: 100%; background-size: cover; background-position: center; }
.elementor .eka-video-cover .elementor-custom-embed-image-overlay img { width: 100%; height: 100%; object-fit: cover; }
.elementor .eka-video-cover iframe { position: absolute; inset: 0; width: 100%; height: 100%; }

/* -----------------------------------------------------------------------------------------
 * Divider - the hairline gradient rule between home-page sections.
 * -------------------------------------------------------------------------------------- */
.elementor .eka-divider .elementor-divider { padding: 0; }
.elementor .eka-divider .elementor-divider-separator {
	border: 0;
	height: 1px;
	background: linear-gradient(90deg, transparent, #e2e8f0 40%, transparent);
}

/* -----------------------------------------------------------------------------------------
 * Editor-only affordances
 *
 * Several sections are transparent text on a dark background, or absolutely positioned. In the
 * Elementor canvas that can leave a widget invisible and therefore un-selectable, so give every
 * element a minimum hit area while editing.
 * -------------------------------------------------------------------------------------- */
.elementor-editor-active .elementor-element:empty { min-height: 12px; }
.elementor-editor-active .e-con.eka-tw { min-height: 8px; }
