/* ════════════════════════════════════════════════════════════════════
   ATELIERSERRURIER · COUCHE ANIMATION (vector CSS/SVG, sans dépendance)
   Effet "vivant" type Lottie, mais 0 librairie, 0 CORS, ultra léger.
   ════════════════════════════════════════════════════════════════════ */

@keyframes cta-sweep   {0%{left:-60%}55%,100%{left:145%}}
@keyframes floaty      {0%,100%{transform:translateY(0)}50%{transform:translateY(-16px)}}
@keyframes floaty2     {0%,100%{transform:translateY(0) translateX(0)}50%{transform:translateY(14px) translateX(-9px)}}
@keyframes keyrock     {0%,100%{transform:rotate(-9deg)}50%{transform:rotate(9deg)}}
@keyframes glowdrift   {0%,100%{transform:translate(0,0)}50%{transform:translate(26px,-20px)}}
@keyframes draw        {to{stroke-dashoffset:0}}
@keyframes risein      {from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@keyframes cta-ping    {0%{box-shadow:0 0 0 0 rgba(190,47,27,.55)}70%{box-shadow:0 0 0 18px rgba(190,47,27,0)}100%{box-shadow:0 0 0 0 rgba(190,47,27,0)}}
@keyframes cta-breathe {0%,100%{transform:scale(1)}50%{transform:scale(1.035)}}

/* visible pulsation on every call button (sonar ping + gentle breathe) */
.cta-pulse{animation:cta-ping 1.9s ease-out infinite, cta-breathe 1.9s ease-in-out infinite;will-change:transform,box-shadow}
.cta-pulse:hover{animation-play-state:paused}

/* gold underline drawn under section titles when scrolled into view */
.sh-underline{display:block;margin:12px auto 0;width:90px;height:10px}
.sh-underline path{stroke-dasharray:200;stroke-dashoffset:200}
.sh-underline.in path{animation:draw 1s ease-out forwards}

/* light sweep across primary call buttons (draws the eye to the CTA) */
.cta-shine{position:relative;overflow:hidden}
.cta-shine::after{content:'';position:absolute;top:0;left:-60%;width:42%;height:100%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.38),transparent);
  transform:skewX(-18deg);pointer-events:none;animation:cta-sweep 5s ease-in-out infinite}

/* floating brand "stickers" + turning key injected into the hero */
.anim-float{position:absolute;pointer-events:none;z-index:1;will-change:transform;animation:floaty 6s ease-in-out infinite}
.anim-float.f2{animation:floaty2 7.5s ease-in-out infinite}
.anim-key{position:absolute;pointer-events:none;z-index:1;transform-origin:50% 30%;
  animation:keyrock 4.2s ease-in-out infinite;will-change:transform;
  filter:drop-shadow(0 6px 14px rgba(0,0,0,.35))}

/* slow drift on the hero glows = a gently "breathing" backdrop */
.hero-glow1{animation:glowdrift 15s ease-in-out infinite}
.hero-glow2{animation:glowdrift 19s ease-in-out infinite alternate-reverse}

/* animated gold underline drawn under the hero accent word */
.anim-underline{display:block;margin-top:-6px}
.anim-underline path{stroke-dasharray:300;stroke-dashoffset:300;animation:draw 1s .5s ease-out forwards}

/* service-card photo gets a soft zoom-in on first reveal (in addition to hover) */
.sc-illo img{transition:transform .6s cubic-bezier(.22,1,.36,1)}

@media (max-width:760px){.anim-key,.anim-float{display:none}}

@media (prefers-reduced-motion: reduce){
  .cta-shine::after,.anim-float,.anim-key,.hero-glow1,.hero-glow2,.cta-pulse{animation:none!important}
  .anim-underline path,.sh-underline path{stroke-dashoffset:0!important;animation:none!important}
}

/* reduced-motion also disables the legacy reveal system so nothing stays hidden */
@media (prefers-reduced-motion: reduce){
  .rv,.rvr,.rv *{opacity:1!important;transform:none!important;transition:none!important;animation:none!important}
}
