/* ============================================================
   AGPI-NEUF.FR — Animations & transitions
   ============================================================ */

/* ── Respect des préférences utilisateur ─────────────────── */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}

/* ── Scroll-reveal ────────────────────────────────────────── */
.reveal {
    opacity: 0;
    transform: translateY(22px);
    transition: opacity 0.55s ease, transform 0.55s ease;
}
.reveal.revealed {
    opacity: 1;
    transform: translateY(0);
}
.reveal--delay-1 { transition-delay: 0.1s; }
.reveal--delay-2 { transition-delay: 0.2s; }
.reveal--delay-3 { transition-delay: 0.3s; }
.reveal--delay-4 { transition-delay: 0.4s; }

/* Variante : fade uniquement (sans translation) */
.reveal--fade { transform: none; }

/* ── Pulse (point disponibilité) ──────────────────────────── */
@keyframes pulse-dot {
    0%, 100% { transform: scale(1); opacity: 1; }
    50%       { transform: scale(0.65); opacity: 0.4; }
}
.dispo-dot { animation: pulse-dot 2s ease-in-out infinite; }

/* ── Animation immeuble hero ──────────────────────────────── */
@keyframes rise-floor {
    from { opacity: 0; transform: scaleY(0); transform-origin: bottom; }
    to   { opacity: 1; transform: scaleY(1); transform-origin: bottom; }
}
@keyframes light-up {
    from { opacity: 0; }
    to   { opacity: 0.85; }
}
@keyframes crane-appear {
    from { opacity: 0; transform: translateY(-10px); }
    to   { opacity: 1; transform: translateY(0); }
}
@keyframes spark {
    0%   { opacity: 1; transform: translate(0, 0) scale(1); }
    100% { opacity: 0; transform: translate(var(--dx,0), var(--dy,-15px)) scale(0); }
}
@keyframes count-in {
    from { opacity: 0; transform: translateY(8px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* ── Hover shimmer sur boutons ────────────────────────────── */
.btn--primary,
.btn--gold {
    position: relative; overflow: hidden;
}
.btn--primary::after,
.btn--gold::after {
    content: '';
    position: absolute; top: 0; left: -100%;
    width: 60%; height: 100%;
    background: linear-gradient(90deg, transparent, rgba(255,255,255,0.15), transparent);
    transition: left 0.5s ease;
}
.btn--primary:hover::after,
.btn--gold:hover::after { left: 150%; }

/* ── Skeleton loading ─────────────────────────────────────── */
.skeleton {
    background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
    background-size: 200% 100%;
    animation: skeleton-wave 1.5s infinite;
    border-radius: var(--radius);
}
@keyframes skeleton-wave {
    from { background-position: 200% 0; }
    to   { background-position: -200% 0; }
}

/* ── Float léger (icônes/badges hero) ────────────────────── */
@keyframes float {
    0%, 100% { transform: translateY(0); }
    50%       { transform: translateY(-6px); }
}
.float { animation: float 3s ease-in-out infinite; }
.float--slow { animation-duration: 4.5s; }

/* ── Slide-in entrée de page ──────────────────────────────── */
@keyframes slide-up {
    from { opacity: 0; transform: translateY(30px); }
    to   { opacity: 1; transform: translateY(0); }
}
.animate-in {
    animation: slide-up 0.6s ease-out both;
}
.animate-in--delay { animation-delay: 0.15s; }

/* ── Tag flottant "Nouveau" ───────────────────────────────── */
@keyframes badge-pop {
    0%   { transform: scale(0.5); opacity: 0; }
    80%  { transform: scale(1.1); }
    100% { transform: scale(1);   opacity: 1; }
}
.badge--new { animation: badge-pop 0.4s ease-out both; }

/* ── Header scrolled ──────────────────────────────────────── */
.site-header {
    transition: box-shadow 0.3s ease, background 0.3s ease;
}
.site-header.scrolled {
    background: rgba(46, 46, 46, 0.97);
    backdrop-filter: blur(10px);
    box-shadow: 0 4px 30px rgba(0,0,0,0.35);
}
