/* Site-wide motion: scroll reveals, headline word reveals, hover micro-interactions.
   Classes are added by motion.js; without JS (or with reduced motion) nothing is hidden. */
:root {
  --pm-ease: cubic-bezier(.16, 1, .3, 1);
  --pm-ease-soft: cubic-bezier(.33, 1, .68, 1);
  --pm-red: var(--e-global-color-primary, #E22626);
  --pm-dur: .9s;
}

html { scroll-behavior: smooth; }

/* Until motion.js has sorted the page, keep content still (head script adds .pm-js, with a timeout failsafe). */
.pm-js:not(.pm-ready) [data-elementor-type]:not([data-elementor-type="header"]):not([data-elementor-type="popup"]) .elementor-widget { opacity: 0; }
.pm-js:not(.pm-ready) [data-elementor-type="header"] .elementor-widget,
.pm-js:not(.pm-ready) [data-elementor-type="popup"] .elementor-widget { opacity: 1; }

/* ---- Scroll reveal ---------------------------------------------------- */
.pm-r {
  opacity: 0;
  transform: translate3d(0, 28px, 0);
  filter: blur(6px);
  transition: opacity var(--pm-dur) var(--pm-ease-soft), transform var(--pm-dur) var(--pm-ease), filter var(--pm-dur) var(--pm-ease-soft);
  transition-delay: var(--pm-d, 0ms);
}
.pm-r.pm-in { opacity: 1; transform: none; filter: none; }
.pm-r.pm-done { transition-delay: 0ms; }

/* Images settle in from a slight zoom. */
.pm-r.pm-img { transform: none; filter: none; }
.pm-r.pm-img img { transform: scale(1.06); filter: blur(8px); transition: transform 1.4s var(--pm-ease), filter 1s var(--pm-ease-soft); transition-delay: var(--pm-d, 0ms); }
.pm-r.pm-img.pm-in img { transform: none; filter: none; }

/* Headlines rise word by word from behind a mask. */
.pm-r.pm-split { opacity: 1; transform: none; filter: none; }
.pm-w { display: inline-block; overflow: hidden; vertical-align: top; padding: 0 .1em .14em; margin: 0 -.1em -.14em; }
.pm-w > span { display: inline-block; transform: translate3d(0, 110%, 0); transition: transform 1s var(--pm-ease); transition-delay: calc(var(--pm-d, 0ms) + var(--pm-i, 0) * 55ms); }
.pm-in .pm-w > span { transform: none; }

/* ---- Header --------------------------------------------------------- */
.pm-js [data-elementor-type="header"] { animation: pm-drop .9s var(--pm-ease) both; }
@keyframes pm-drop { from { opacity: 0; transform: translate3d(0, -14px, 0); } to { opacity: 1; transform: none; } }

/* ---- Buttons -------------------------------------------------------- */
.elementor-button {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  transition: transform .45s var(--pm-ease), box-shadow .45s var(--pm-ease), background-color .3s ease, border-color .3s ease, color .3s ease !important;
}
.elementor-button::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(110deg, transparent 30%, rgba(255, 255, 255, .28) 50%, transparent 70%);
  transform: translateX(-120%);
  transition: transform .9s var(--pm-ease);
  pointer-events: none;
}
.elementor-button:hover { transform: translate3d(0, -2px, 0); box-shadow: 0 14px 28px -12px rgba(226, 38, 38, .6); }
.elementor-button:hover::after { transform: translateX(120%); }
.elementor-button:active { transform: translate3d(0, 0, 0) scale(.98); transition-duration: .15s; }
.elementor-button .elementor-button-icon { transition: transform .45s var(--pm-ease); }
.elementor-button:hover .elementor-button-icon { transform: translateX(3px); }
.elementor-button:focus-visible { outline: 2px solid var(--pm-red); outline-offset: 3px; }

/* ---- Cards ---------------------------------------------------------- */
.pm-card { transition: transform .6s var(--pm-ease), box-shadow .6s var(--pm-ease), opacity var(--pm-dur) var(--pm-ease-soft), filter var(--pm-dur) var(--pm-ease-soft); }
.pm-card.pm-in:hover { transform: translate3d(0, -6px, 0); box-shadow: 0 24px 48px -24px rgba(0, 0, 0, .45); }
.pm-zoom { overflow: hidden; }
.pm-zoom img { transition: transform 1.2s var(--pm-ease) !important; }
.pm-card:hover .pm-zoom img, .pm-zoom:hover img { transform: scale(1.05); }

/* Pills and list rows (checkmark badges, service areas) nudge on hover. */
.elementor-icon-list-item { transition: transform .4s var(--pm-ease); }
.elementor-icon-list-item:hover { transform: translateX(3px); }
.elementor-icon-list-icon svg, .elementor-icon-list-icon i { transition: transform .5s var(--pm-ease); }
.elementor-icon-list-item:hover .elementor-icon-list-icon svg,
.elementor-icon-list-item:hover .elementor-icon-list-icon i { transform: scale(1.15); }

/* Form fields: soft focus glow. */
.gform_wrapper input:not([type=submit]):not([type=hidden]), .gform_wrapper textarea, .gform_wrapper select {
  transition: box-shadow .35s var(--pm-ease), border-color .35s ease, transform .35s var(--pm-ease);
}
.gform_wrapper input:not([type=submit]):not([type=hidden]):focus, .gform_wrapper textarea:focus, .gform_wrapper select:focus {
  box-shadow: 0 0 0 3px rgba(226, 38, 38, .22);
  outline: none;
}

/* ---- Popup ---------------------------------------------------------- */
.elementor-popup-modal { backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); animation: pm-fade .45s ease both; }
.elementor-popup-modal .dialog-widget-content { animation: pm-pop .7s var(--pm-ease) both !important; }
@keyframes pm-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes pm-pop { from { opacity: 0; transform: translate3d(0, 24px, 0) scale(.96); } to { opacity: 1; transform: none; } }

/* ---- Phones: shorter travel, faster ---------------------------------- */
@media (max-width: 767px) {
  :root { --pm-dur: .75s; }
  .pm-r { transform: translate3d(0, 18px, 0); filter: blur(4px); }
  .pm-card.pm-in:hover { transform: none; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .pm-r, .pm-r img, .pm-w > span { opacity: 1 !important; transform: none !important; filter: none !important; transition: none !important; }
  .elementor-button, .elementor-button::after, .pm-card, .pm-zoom img, .elementor-icon-list-item,
  [data-elementor-type="header"], .elementor-popup-modal, .elementor-popup-modal .dialog-widget-content { transition: none !important; animation: none !important; }
  .elementor-button::after { display: none; }
}
