/* ==============================
   Dekoline Prime — Animations
   ============================== */

/* Reveal on scroll */
.reveal { opacity: 0; transform: translateY(40px); transition: opacity .9s cubic-bezier(.25,.8,.25,1), transform .9s cubic-bezier(.25,.8,.25,1); }
.reveal.is-visible { opacity: 1; transform: translateY(0); }

/* Staggered children */
.reveal > * { transition-delay: .05s; }
.reveal.is-visible > *:nth-child(1) { animation: fadeUp .8s ease both .1s; }
.reveal.is-visible > *:nth-child(2) { animation: fadeUp .8s ease both .2s; }
.reveal.is-visible > *:nth-child(3) { animation: fadeUp .8s ease both .3s; }
.reveal.is-visible > *:nth-child(4) { animation: fadeUp .8s ease both .4s; }

@keyframes fadeUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes scaleIn { from { opacity: 0; transform: scale(.9); } to { opacity: 1; transform: scale(1); } }
@keyframes float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
@keyframes kenBurns { 0% { transform: scale(1); } 50% { transform: scale(1.08); } 100% { transform: scale(1); } }
@keyframes curtainSway { 0%,100% { transform: translateX(0) rotate(0); } 50% { transform: translateX(4px) rotate(.5deg); } }
@keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } }

.fade-in { animation: fadeIn .8s ease both; }
.float-anim { animation: float 6s ease-in-out infinite; }
.ken-burns .campaign-banner { animation: kenBurns 20s ease-in-out infinite; background-size: cover; }
.curtain-sway { animation: curtainSway 4s ease-in-out infinite; transform-origin: top center; }

/* Hover effects */
.hover-lift { transition: transform var(--dp-transition), box-shadow var(--dp-transition); }
.hover-lift:hover { transform: translateY(-6px); box-shadow: var(--dp-shadow-hover); }

.hover-zoom { overflow: hidden; display: inline-block; }
.hover-zoom img { transition: transform .6s cubic-bezier(.25,.8,.25,1); }
.hover-zoom:hover img { transform: scale(1.1); }

/* Shimmer placeholder */
.shimmer { background: linear-gradient(90deg, #f0ebe0 0%, #f8f4ea 50%, #f0ebe0 100%); background-size: 200% 100%; animation: shimmer 1.5s infinite; }

/* Parallax helper */
.parallax { will-change: transform; }

/* Button ripple */
.btn { position: relative; overflow: hidden; }
.btn::before { content:''; position: absolute; top: 50%; left: 50%; width: 0; height: 0; border-radius: 50%; background: rgba(255,255,255,.25); transform: translate(-50%, -50%); transition: width .6s, height .6s; }
.btn:active::before { width: 300px; height: 300px; }

/* Map pin drop */
.dp-map-pin { animation: pinDrop .6s cubic-bezier(.5,-.3,.5,1.3) both; }
@keyframes pinDrop { from { transform: translateY(-30px) rotate(-45deg); opacity: 0; } to { transform: translateY(0) rotate(-45deg); opacity: 1; } }

/* Count-up preparation */
.stat-number { transition: color .4s ease; }

/* Parallax 3D tilt for cards */
.tilt-card { transform-style: preserve-3d; transition: transform .4s ease; }

/* Smooth image load */
img[loading="lazy"] { opacity: 0; transition: opacity .6s ease; }
img[loading="lazy"].loaded { opacity: 1; }

/* Prefers-reduced-motion */
@media (prefers-reduced-motion: reduce) {
    * { animation: none !important; transition: none !important; }
    .reveal { opacity: 1; transform: none; }
}
