/* Grab Smart - motion layer support styles */

/* WebGL canvas sits behind hero content, never intercepts clicks */
.gsv-hero{position:relative;isolation:isolate}
.gsv-three{
  position:absolute;inset:0;z-index:0;
  pointer-events:none;overflow:hidden;
  opacity:0;animation:gsvThreeIn 1.4s ease .25s forwards;
}
.gsv-three canvas{display:block;width:100%!important;height:100%!important}
.gsv-hero > *:not(.gsv-three){position:relative;z-index:1}
@keyframes gsvThreeIn{to{opacity:1}}

/* Timeline rail draw-in, driven by the --gsv-rail custom property */
.gsv-timeline{--gsv-rail:100%}
.gsv-timeline::before{
  height:var(--gsv-rail)!important;
  transition:none;
}

/* Hardware hints so scrubbed transforms stay smooth */
.gsv-page-hero__media img,.gsv-hero-media img{will-change:transform}
.gsv-indcard,.gsv-value,.gsv-valcard,.gsv-member,
.gsv-flowstep,.gsv-compbox,.gsv-tile,.gsv-story{will-change:transform,opacity}

/* Elements GSAP animates start hidden only when GSAP is actually present,
   so a CDN failure can never leave the page blank. */
html.gsv-motion-ready .gsv-hero .gsv-eyebrow,
html.gsv-motion-ready .gsv-hero h1{backface-visibility:hidden}

/* Lift on hover, consistent across every card type */
.gsv-indcard,.gsv-valcard,.gsv-member,.gsv-compbox{
  transition:transform .35s cubic-bezier(.25,.46,.45,.94),
             box-shadow .35s cubic-bezier(.25,.46,.45,.94),
             border-color .35s ease;
}
.gsv-member:hover,.gsv-valcard:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg)}

@media (prefers-reduced-motion: reduce){
  .gsv-three{display:none!important}
  .gsv-indcard,.gsv-value,.gsv-valcard,.gsv-member,
  .gsv-flowstep,.gsv-compbox,.gsv-tile,.gsv-story{will-change:auto}
  .gsv-member:hover,.gsv-valcard:hover{transform:none}
}

@media (max-width:767px){
  .gsv-three{display:none!important}
  .gsv-page-hero__media img,.gsv-hero-media img{will-change:auto}
}
