/* Technip global design-language overrides: consistent card borders + client
   logo marquee. Loaded site-wide (functions.php, filemtime-versioned). */

/* ---------- global polish (no content touched, presentation only) ---------- */
html { scroll-behavior: smooth; overflow-x: hidden; }
body { overflow-x: hidden; max-width: 100%; }
::selection { background: #EC2229; color: #fff; }

/* The parent theme's own base rule is `h1..h6{font-family:"Space Grotesk",
   serif}` - a SERIF fallback for a sans-serif font. Any heading that doesn't
   get Space Grotesk (slow/unavailable Google Fonts load, or a custom
   raw-HTML heading that only inherits font-family rather than declaring it)
   drops straight to a generic serif face, which reads as broken/inconsistent
   next to the rest of the site's sans-serif type. Force a matching
   sans-serif fallback stack everywhere instead. */
h1, h2, h3, h4, h5, h6 {
  font-family: "Space Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif !important;
}

/* The theme also carries an unscoped `button{padding:17px 30px;background:
   #1F1F1F}` base rule that hits every <button> tag sitewide. Any custom
   button that sets its own width/height but forgets to also reset padding
   balloons outward into an oversized pill (bit us twice already: the CTA
   popup close button and the job-application modal close button). Force
   border-box everywhere so that mistake is contained instead of visible. */
button, input, textarea, select {
  box-sizing: border-box;
}

/* rs-heading (industrie-addons) subtitle text: several widgets across the
   site were saved with a stray orange outline-text effect (transparent
   fill + orange stroke). Force it to a solid logo color everywhere,
   overriding each widget's own saved per-post CSS. */
.prelements-heading .title-inner .sub-text {
  color: #EC2229 !important;
  -webkit-text-fill-color: #EC2229 !important;
  -webkit-text-stroke-width: 0 !important;
  -webkit-text-stroke-color: transparent !important;
}

/* ---------- Engineering / Services / Technology hub grid cards ---------- */
.tp-card{display:flex;flex-direction:column;background:#fff;border-radius:14px;overflow:hidden;
  box-shadow:0 1px 2px rgba(10,19,48,.05),0 14px 32px -20px rgba(10,19,48,.25);
  transition:transform .3s cubic-bezier(.2,.8,.2,1),box-shadow .3s ease;
  text-decoration:none !important;color:inherit;height:100%;width:100%;
  font-family:"Space Grotesk",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;}
.tp-card:hover{transform:translateY(-6px);box-shadow:0 1px 2px rgba(10,19,48,.06),0 26px 44px -20px rgba(236,34,41,.28);}
.tp-card-img{position:relative;aspect-ratio:16/10;overflow:hidden;background:#0A1330;}
.tp-card-img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s cubic-bezier(.2,.8,.2,1);}
.tp-card:hover .tp-card-img img{transform:scale(1.06);}
.tp-card-body{padding:22px 22px 22px;display:flex;flex-direction:column;flex:1;}
.tp-card h3{font-size:17px;font-weight:800;color:#0A1330;line-height:1.35;margin:0 0 14px;}
.tp-card h3::before{content:"";display:inline-block;width:22px;height:3px;margin-right:9px;margin-bottom:2px;
  vertical-align:middle;border-radius:2px;background:linear-gradient(90deg,#EC2229,#B81017);}
.tp-card-rule{border:none;border-top:1.5px solid #E3E8F0;margin:0 0 14px;width:100%;}
.tp-card-cta{margin-top:auto;display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;
  color:#EC2229;text-transform:uppercase;letter-spacing:.03em;}
.tp-card-cta svg{width:14px;height:14px;transition:transform .25s ease;}
.tp-card:hover .tp-card-cta svg{transform:translateX(4px);}

/* Leaf-page body content (.tplb, built per-page via inline <style>): the
   inline block used a narrow 900px column with small type, reading cramped
   next to the full-width .tphs header above it. Widen the column to match
   the site's other content wrappers (.tpab/.tplg both use 1180px) and bump
   type up a step; !important because this rule needs to beat the page's own
   inline <style> block, which loads later in the DOM at equal specificity. */
.tplb{padding:32px 24px 24px !important;}
.tplb-wrap{max-width:1180px !important;}
.tplb-intro{font-size:22.5px !important;line-height:1.7 !important;margin:0 0 34px !important;}
.tplb h4{font-size:26px !important;margin:36px 0 16px !important;}
.tplb h4:first-of-type{margin-top:0 !important;}
.tplb li{font-size:21px !important;line-height:1.6 !important;margin:0 0 14px !important;padding-left:24px !important;}
.tplb li::before{top:.6em !important;width:7px !important;height:7px !important;}
.tplb p{font-size:21px !important;line-height:1.65 !important;margin:0 0 16px !important;}

/* Hub-page intro paragraph: keep the line length readable rather than letting
   one sentence stretch the full container width. */
.tp-hub-intro { max-width:760px; margin-left:auto !important; margin-right:auto !important; }

/* Buttons everywhere get a consistent lift + shadow on hover instead of the
   flat default Elementor swap. */
.elementor-button, .elementor-widget-button a.elementor-button {
  transition: transform .28s cubic-bezier(.2,.8,.2,1), box-shadow .28s ease, background .25s ease, color .25s ease !important;
}
.elementor-button:hover, .elementor-widget-button a.elementor-button:hover {
  transform: translateY(-2px);
}

/* ---------- sitewide heading design ---------- */
/* Some heading widgets have a "link" set on them, which wraps the title text
   in an <a> - with nothing resetting that, browsers render it with the
   default blue + underline link style. Kill that everywhere, unconditionally,
   regardless of page/section. */
.elementor-heading-title a {
  color: inherit !important;
  text-decoration: none !important;
}
.elementor-heading-title a:hover {
  color: #EC2229 !important;
}

/* Consistent weight/tracking across every heading sitewide - no decorative
   underline (tried it, looked inconsistent across pages with varied heading
   structures; removed per feedback). */
.elementor-heading-title {
  letter-spacing: -0.01em;
  line-height: 1.25;
}
h1.elementor-heading-title, h2.elementor-heading-title { font-weight: 800; }
h3.elementor-heading-title, h4.elementor-heading-title { font-weight: 700; }

/* Professional "technical drafting" heading mark - a short accent line
   before the text, sitewide. Uses an inline (not block) pseudo-element so
   it travels with the text and stays correct whether the heading is
   left, center, or right aligned. */
h2.elementor-heading-title::before,
h3.elementor-heading-title::before,
h4.elementor-heading-title::before {
  content: "";
  display: inline-block;
  width: 26px;
  height: 3px;
  margin-right: 10px;
  margin-bottom: 3px;
  vertical-align: middle;
  border-radius: 2px;
  background: linear-gradient(90deg, #EC2229, #B81017);
}
/* Same accent-line mark on the site's own custom (raw-HTML) section
   headings, so the design language matches across native Elementor
   headings and hand-built sections alike. */
.tphm h2::before, .tpg-head h2::before, .tplg-head h2::before {
  content: "";
  display: inline-block;
  width: 26px;
  height: 3px;
  margin-right: 10px;
  margin-bottom: 3px;
  vertical-align: middle;
  border-radius: 2px;
  background: linear-gradient(90deg, #EC2229, #B81017);
}

/* Section headings (Elementor's "e-parent" marks a section's outer container;
   this reaches up to 3 nesting levels deep, which covers virtually every real
   section title sitewide) get breathing room below. Card-interior headings
   (inside .e-con.e-child, e.g. grid-card titles) are deliberately untouched
   so their own tight spacing stays intact. */
.e-parent > .elementor-widget-heading:not(:last-child),
.e-parent > .e-con > .elementor-widget-heading:not(:last-child),
.e-parent > .e-con > .e-con > .elementor-widget-heading:not(:last-child) {
  margin-bottom: 20px;
}
.elementor-widget-heading:has(+ .elementor-widget-heading) {
  margin-bottom: 6px !important;
}

/* Links inside body copy get a subtle underline-grow interaction. */
.elementor-widget-text-editor a:not(.elementor-button) {
  background-image: linear-gradient(#EC2229, #EC2229);
  background-position: 0 100%; background-repeat: no-repeat; background-size: 0% 2px;
  transition: background-size .3s ease; padding-bottom: 1px;
}
.elementor-widget-text-editor a:not(.elementor-button):hover { background-size: 100% 2px; }

/* Consistent, calmer focus ring for accessibility + a slightly more premium feel. */
a:focus-visible, button:focus-visible { outline: 2px solid #EC2229; outline-offset: 2px; }

/* ---------- sitewide grid-card border language ---------- */
/* Applies to Elementor image widgets used as card thumbnails (not hero /
   background-image sections, which use CSS backgrounds, not <img> tags). */
.elementor-widget-image .elementor-widget-container img,
.elementor-image-box-img img,
.swiper-slide-image {
  border-radius: 8px !important;
  box-shadow: 0 1px 2px rgba(10,19,48,.05), 0 14px 28px -18px rgba(10,19,48,.35) !important;
}
/* Give the photo-strip "gallery" carousels (image-carousel widget, used as
   the pre-footer gallery on every hub/leaf page) a polished, "premium wall of
   photos" feel: even spacing, soft shadow, hover-zoom, smooth crossfade-in
   between slides, no clipped border on active/transitioning slides. */
.elementor-widget-image-carousel .swiper-slide { padding: 8px; }
.elementor-widget-image-carousel .swiper-slide-inner { line-height: 0; overflow: hidden; border-radius: 12px; }
.elementor-widget-image-carousel .swiper-slide-image {
  transition: transform .5s cubic-bezier(.2,.8,.2,1) !important;
}
.elementor-widget-image-carousel .swiper-slide:hover .swiper-slide-image {
  transform: scale(1.06);
}
.elementor-widget-image-carousel .elementor-swiper-button {
  background: rgba(10,19,48,.55) !important; border-radius: 50% !important;
  width: 42px !important; height: 42px !important;
  transition: background .25s ease, transform .25s ease;
}
.elementor-widget-image-carousel .elementor-swiper-button:hover {
  background: #EC2229 !important; transform: scale(1.08);
}
.elementor-widget-image-carousel .elementor-swiper-button svg,
.elementor-widget-image-carousel .elementor-swiper-button i { color: #fff !important; }
.elementor-widget-image-carousel .swiper-pagination-bullet-active {
  background: #EC2229 !important;
}

/* ---------- value-proposition cards (replaces Happy Addons ha-infobox) ---------- */
.tp-vgrid {
  display: grid; grid-template-columns: repeat(6, 1fr); gap: 20px;
  width: 100%;
}
@media (max-width: 991px) { .tp-vgrid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 599px) { .tp-vgrid { grid-template-columns: repeat(2, 1fr); } }
.tp-vcard {
  position: relative; background: #fff; border-radius: 14px;
  padding: 30px 18px 24px; text-align: center; overflow: hidden;
  box-shadow: 0 1px 2px rgba(10,19,48,.04), 0 12px 30px -18px rgba(10,19,48,.18);
  border: 1px solid #EEF0F4;
  transition: transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s ease, border-color .3s ease;
}
.tp-vcard::before {
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px;
  background: linear-gradient(90deg, #EC2229, #FF8A6B);
  transform: scaleX(0); transform-origin: left center; transition: transform .35s ease;
}
.tp-vcard:hover {
  transform: translateY(-6px);
  box-shadow: 0 1px 2px rgba(10,19,48,.05), 0 24px 40px -20px rgba(236,34,41,.28);
  border-color: transparent;
}
.tp-vcard:hover::before { transform: scaleX(1); }
.tp-vcard-icon {
  width: 52px; height: 52px; margin: 0 auto 16px; display: flex;
  align-items: center; justify-content: center; border-radius: 50%;
  background: linear-gradient(135deg, #EC2229, #B81017); color: #fff;
  box-shadow: 0 8px 18px -8px rgba(236,34,41,.55);
  transition: transform .3s ease;
}
.tp-vcard:hover .tp-vcard-icon { transform: scale(1.08) rotate(-4deg); }
.tp-vcard-icon svg { width: 22px; height: 22px; }
.tp-vcard h3 {
  margin: 0 0 8px; font-size: 15.5px; font-weight: 800; color: #0A1330;
  letter-spacing: .01em;
}
.tp-vcard p { margin: 0; font-size: 12.5px; line-height: 1.55; color: #6B7280; }

/* ---------- contact page: info blocks as clean boxed cards ---------- */
.elementor-element-67f3e00, .elementor-element-7bffecc, .elementor-element-1a35549 {
  background: rgba(255,255,255,.05) !important;
  border: 1px solid rgba(255,255,255,.1) !important;
  border-radius: 10px !important;
  padding: 18px !important;
  margin-bottom: 14px;
}
.elementor-element-67f3e00 { border-bottom: 1px solid rgba(255,255,255,.1) !important; }

/* ---------- contact page: two-column info + form split ---------- */
.elementor-element-8dc41c0 { align-items: stretch !important; }
.elementor-element-8e7c9e2 {
  flex: 0 0 42% !important; max-width: 42% !important; width: 42% !important;
}
.elementor-element-b289e2c {
  flex: 0 0 58% !important; max-width: 58% !important; width: 58% !important;
}
@media (max-width: 900px) {
  .elementor-element-8e7c9e2, .elementor-element-b289e2c {
    flex: 0 0 100% !important; max-width: 100% !important; width: 100% !important;
  }
  .elementor-element-8e7c9e2 { border-radius: 14px 14px 0 0 !important; }
  .elementor-element-b289e2c { border-radius: 0 0 14px 14px !important; border-width: 0 1px 1px 1px !important; }
}

/* ---------- clients page: logo grid cards ---------- */
.tp-client-grid {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; width: 100%;
}
@media (max-width: 991px) { .tp-client-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 599px) { .tp-client-grid { grid-template-columns: repeat(2, 1fr); } }
.tp-client-card {
  background: #fff; border: 1px solid #EEF0F4; border-radius: 12px;
  height: 130px; display: flex; align-items: center; justify-content: center;
  padding: 20px; box-shadow: 0 1px 2px rgba(10,19,48,.04), 0 12px 26px -18px rgba(10,19,48,.16);
  transition: transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s ease, border-color .3s ease;
}
.tp-client-card:hover {
  transform: translateY(-5px);
  box-shadow: 0 1px 2px rgba(10,19,48,.05), 0 20px 34px -18px rgba(236,34,41,.25);
  border-color: transparent;
}
.tp-client-card img {
  max-width: 100%; max-height: 62px; width: auto; height: auto; object-fit: contain;
  filter: none; opacity: 1; transition: filter .3s ease, opacity .3s ease;
}
.tp-client-card:hover img { filter: grayscale(100%); opacity: .8; }

/* ---------- client logo marquee (continuous smooth auto-scroll) ---------- */
.tp-logo-marquee {
  width: 100%;
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
}
.tp-logo-track {
  display: flex;
  align-items: center;
  width: max-content;
  animation: tp-marquee 32s linear infinite;
}
.tp-logo-item {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 34px;
  height: 70px;
}
.tp-logo-item img {
  max-height: 46px;
  width: auto;
  max-width: 140px;
  object-fit: contain;
  filter: none;
  opacity: 1;
  border: none;
  border-radius: 0;
  transition: filter .3s ease, opacity .3s ease, transform .3s ease;
}
.tp-logo-item:hover img {
  filter: grayscale(100%);
  opacity: .8;
  transform: translateY(-2px);
}
@keyframes tp-marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .tp-logo-track { animation: none; }
}

/* ---------- "Why Choose Us" section: fix oversized/percentage-based
   padding stacking with the next section's own top padding into a huge gap,
   and suppress the theme's stray decorative dot above the heading. ---------- */
.elementor-element-b93a2f7 { padding: 50px 30px 0 !important; }
.elementor-element-b93a2f7 .elementor-heading-title { text-align: center; }
.elementor-element-146b887 { padding-top: 46px !important; }
.elementor-element-8847881::before,
.elementor-element-8847881 .elementor-widget-container::before {
  display: none !important;
}
/* The floating "dot" decoration next to several headings is a broken image
   (rs-multi-image parallax graphic pointing at the same dead theme-demo
   domain fixed elsewhere this session) - it renders as an empty broken-image
   icon. Purely decorative, so hide it outright rather than chase the domain. */
.rs-multi-image { display: none !important; }

/* ---------- achievement strip: gradient + subtle grid texture ---------- */
.elementor-element-1c25e71 {
  background: linear-gradient(120deg, #0A1330 0%, #16204A 55%, #1B2A57 100%) !important;
  position: relative; overflow: hidden;
}
/* Elementor container rows holding the achievement/counter stats sometimes
   fail to apply their own flex-direction:row - force it. Covers both the
   homepage's hand-built stat row (plain heading widgets, id aeea972) and any
   rs-counter based row (About page) via one shared rule set. */
.elementor-element-aeea972,
.e-con:has(> .elementor-widget-rs-counter),
.e-con:has(> .e-con > .elementor-widget-rs-counter) {
  display: flex !important; flex-direction: row !important;
  flex-wrap: wrap !important; justify-content: center !important;
  align-items: stretch !important;
  gap: 0 !important;
}
.elementor-element-aeea972 > *,
.e-con:has(> .elementor-widget-rs-counter) > *,
.e-con:has(> .e-con > .elementor-widget-rs-counter) > * {
  flex: 1 1 220px; max-width: 300px;
  padding: 0 34px !important;
}
.elementor-element-aeea972 .elementor-heading-title {
  font-size: 56px !important;
}
@media (max-width: 991px) and (min-width: 768px) {
  .elementor-element-aeea972 .elementor-heading-title { font-size: 44px !important; }
}
@media (max-width: 767px) {
  .elementor-element-aeea972,
  .e-con:has(> .elementor-widget-rs-counter),
  .e-con:has(> .e-con > .elementor-widget-rs-counter) {
    flex-direction: row !important;
  }
  .elementor-element-aeea972 > *,
  .e-con:has(> .elementor-widget-rs-counter) > *,
  .e-con:has(> .e-con > .elementor-widget-rs-counter) > * {
    max-width: 33.33%; flex: 1 1 33.33%;
    padding: 0 8px !important;
    border-right: 1px solid rgba(255,255,255,.16);
  }
  .elementor-element-aeea972 > *:last-child,
  .e-con:has(> .elementor-widget-rs-counter) > *:last-child { border-right: none; }
  .elementor-element-aeea972 .elementor-heading-title { font-size: 26px !important; }
  .elementor-element-aeea972 .elementor-widget-text-editor p { font-size: 10.5px !important; }
}

/* About page: dark value-proposition icon-boxes get the same elevation +
   hover language as everything else, and the achievement/counter section
   gets the same gradient treatment as the homepage. */
.elementor-widget-icon-box {
  transition: transform .3s cubic-bezier(.2,.8,.2,1), box-shadow .3s ease;
  border-radius: 16px; overflow: hidden;
}
.elementor-widget-icon-box:hover {
  transform: translateY(-6px);
  box-shadow: 0 24px 40px -20px rgba(236,34,41,.35);
}
.elementor-element-0542e29 {
  background: linear-gradient(120deg, #0A1330 0%, #16204A 55%, #1B2A57 100%) !important;
}
.elementor-element-1c25e71::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background-image:
    linear-gradient(rgba(255,255,255,.05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.05) 1px, transparent 1px);
  background-size: 46px 46px;
  -webkit-mask-image: radial-gradient(ellipse at center, #000 0%, transparent 75%);
  mask-image: radial-gradient(ellipse at center, #000 0%, transparent 75%);
}

/* ---------- homepage CTA: extra polish on top of the JSON-level gradient ---------- */
.elementor-element-ae42946 .elementor-button {
  box-shadow: 0 14px 30px -14px rgba(236,34,41,.65);
  transition: transform .3s ease, box-shadow .3s ease, background .25s ease, color .25s ease;
}
.elementor-element-ae42946 .elementor-button:hover {
  transform: translateY(-3px);
  box-shadow: 0 18px 36px -14px rgba(0,0,0,.4);
}

/* ---------- hero slider: pill pagination + arrows + responsive crop ---------- */
.elementor-element-6463ce5 .swiper-pagination-bullets {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  bottom: 20px !important;
}
.elementor-element-6463ce5 .swiper-pagination-bullet {
  background: #ffffff; opacity: .55; width: 22px; height: 5px;
  border-radius: 3px; margin: 0 !important; position: relative; overflow: hidden;
  transition: opacity .25s ease;
}
.elementor-element-6463ce5 .swiper-pagination-bullet:hover { opacity: .8; }
.elementor-element-6463ce5 .swiper-pagination-bullet-active {
  opacity: 1; width: 40px; background: rgba(255,255,255,.35);
}
.elementor-element-6463ce5 .swiper-pagination-bullet-active::after {
  content: ""; position: absolute; inset: 0; background: #EC2229;
  transform-origin: left center; animation: tp-hero-progress 5s linear;
}
@keyframes tp-hero-progress {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}
/* Arrows sit anchored to the bottom-right corner, stacked above the
   pagination row (not floating mid-slide over the heading text). */
.elementor-element-6463ce5 .elementor-swiper-button {
  top: auto !important; bottom: 62px !important; transform: none !important;
  width: 38px; height: 38px; background: rgba(255,255,255,.14);
  border: 1.5px solid rgba(255,255,255,.5); border-radius: 50%;
  backdrop-filter: blur(2px); transition: background .25s ease, border-color .25s ease;
  display: flex; align-items: center; justify-content: center;
}
.elementor-element-6463ce5 .elementor-swiper-button-prev {
  left: auto !important; right: 96px !important;
}
.elementor-element-6463ce5 .elementor-swiper-button-next {
  right: 40px !important;
}
.elementor-element-6463ce5 .elementor-swiper-button:hover {
  background: #EC2229; border-color: #EC2229;
}
.elementor-element-6463ce5 .elementor-swiper-button svg,
.elementor-element-6463ce5 .elementor-swiper-button i { color: #fff; }
/* More breathing room between the slide button and the nav cluster below it,
   and a visible-against-dark-photo arrow style, on every screen size. */
.elementor-element-6463ce5 .swiper-slide-contents { padding-bottom: 26px; }
.elementor-element-6463ce5 .elementor-slide-button { margin-bottom: 4px; }
@media (max-width: 767px) {
  .elementor-element-6463ce5 .swiper-pagination-bullets { bottom: 16px !important; }
  .elementor-element-6463ce5 .swiper-slide-contents { padding-bottom: 58px; }
  .elementor-element-6463ce5 .elementor-swiper-button {
    width: 32px !important; height: 32px !important; bottom: 44px !important;
    background: rgba(10,19,48,.65); border-color: rgba(255,255,255,.7);
    opacity: 1 !important; visibility: visible !important;
  }
  .elementor-element-6463ce5 .elementor-swiper-button-prev { right: 80px !important; }
  .elementor-element-6463ce5 .elementor-swiper-button-next { right: 34px !important; }
}
/* Hard guarantee regardless of the widget's own arrow-icon-size setting. */
.elementor-element-6463ce5 .elementor-swiper-button svg {
  width: 16px !important; height: 16px !important;
}
.elementor-element-6463ce5 .elementor-swiper-button i {
  font-size: 16px !important;
}
/* Subtle entrance motion for the text block each time a slide becomes active. */
.elementor-element-6463ce5 .swiper-slide-contents {
  opacity: 0; transform: translateY(16px);
}
.elementor-element-6463ce5 .swiper-slide-active .swiper-slide-contents {
  animation: tp-hero-content-in .7s ease .15s forwards;
}
@keyframes tp-hero-content-in {
  to { opacity: 1; transform: translateY(0); }
}
/* Favour the top of the source photo in portrait/mobile crops, center on
   wide desktop crops - same images, no separate assets needed. */
.elementor-element-6463ce5 .swiper-slide-bg { background-position: center center; }
@media (max-width: 767px) {
  .elementor-element-6463ce5 .swiper-slide-bg { background-position: top center; }
}
