/* ==========================================================
   Reveal-on-scroll animation system (IntersectionObserver driven)
   Uses transform/opacity only — never affects layout/height.
   ========================================================== */
[data-reveal]{opacity:0;will-change:transform,opacity;transition:opacity 1s var(--ease),transform 1.05s cubic-bezier(.16,.9,.24,1),filter .8s ease;}
[data-reveal="up"]{transform:translate3d(0,90px,0) scale(.96);}
[data-reveal="down"]{transform:translate3d(0,-90px,0) scale(.96);}
[data-reveal="left"]{transform:translate3d(-190px,25px,0) rotate(-2deg);}
[data-reveal="right"]{transform:translate3d(190px,25px,0) rotate(2deg);}
[data-reveal="zoom"]{transform:scale(.78) rotate(-3deg);}
[data-reveal="fade"]{transform:none;}

[data-reveal].is-visible{opacity:1;transform:translate(0,0) scale(1);}

/* Rich arrival motion used consistently across all seven pages. */
.site-header{animation:headerDrop .75s var(--ease) both;}
.page-hero h1{animation:heroTitle .8s .15s var(--ease) both;}
.page-hero .breadcrumb{animation:heroTitle .7s var(--ease) both;}
.cat-tile,.product-card,.feature-card,.service-card,.gallery-card{will-change:transform;}
.cat-tile:hover,.product-card:hover,.feature-card:hover,.service-card:hover,.gallery-card:hover{animation:cardLift .55s var(--ease) both;}
@keyframes headerDrop{
  0%{opacity:0;transform:translate3d(0,-190px,0) scale(.88)}
  100%{opacity:1;transform:none}
}
@keyframes heroTitle{from{opacity:0;transform:translateX(-42px)}to{opacity:1;transform:none}}
@keyframes cardLift{0%{transform:translateY(0) scale(1)}55%{transform:translateY(-12px) scale(1.018)}100%{transform:translateY(-8px) scale(1.01)}}

/* stagger children via inline --d custom property (delay in ms) */
[data-reveal]{transition-delay:var(--d,0ms);}

/* The hero may enter immediately; lower sections wait for the scroll observer. */
body.page-ready .hero-visual{animation:heroTrophyArrive 1.05s .18s cubic-bezier(.16,.95,.28,1) both;}
body.page-ready .hero-badge-pill{animation:badgeFlyIn .7s cubic-bezier(.16,.95,.28,1) both;}
body.page-ready .hero-badge-pill:nth-child(2){animation-delay:.14s;}
body.page-ready .hero-badge-pill:nth-child(3){animation-delay:.28s;}
@keyframes heroTrophyArrive{from{opacity:0;transform:translate3d(180px,15px,0) scale(.72) rotate(7deg)}to{opacity:1;transform:none}}
@keyframes badgeFlyIn{from{opacity:0;transform:translateX(-75px) scale(.7)}to{opacity:1;transform:none}}

@media (prefers-reduced-motion: reduce){
  [data-reveal]{opacity:1 !important;transform:none !important;transition:none !important;}
  body.page-ready .hero-visual,body.page-ready .hero-badge-pill{animation:none!important;}
  .hero-medal-ring,.call-pill i,.site-header,.page-hero h1,.page-hero .breadcrumb,.cat-tile,.product-card,.feature-card,.service-card,.gallery-card{animation:none !important;}
}

/* Loader */
#pm-loader{
  position:fixed;inset:0;background:var(--deep-blue);z-index:9999;
  display:flex;align-items:center;justify-content:center;
  transition:opacity .5s ease,visibility .5s ease;
}
#pm-loader.is-hidden{opacity:0;visibility:hidden;pointer-events:none;}
.loader-trophy{width:64px;height:64px;position:relative;}
.loader-trophy svg{width:100%;height:100%;animation:loaderSpin 1s ease-in-out infinite;}
@keyframes loaderSpin{
  0%,100%{transform:scale(1) rotate(0deg);}
  50%{transform:scale(1.12) rotate(6deg);}
}
