/* ============================================================
   BHAGWATI GRANITE AND MARBLE LLP — animations.css
   All animation definitions
   ============================================================ */

/* ── Reveal Classes ── */
.reveal-up    { 
  opacity:0; 
  transform:translateY(48px);  
  transition:opacity .8s var(--ease), transform .8s var(--ease); 
}
.reveal-left  { 
  opacity:0; transform:translateX(-48px); 
  transition:opacity .8s var(--ease), transform .8s var(--ease); 
}
.reveal-right { 
  opacity:0; 
  transform:translateX(48px);  
  transition:opacity .8s var(--ease), transform .8s var(--ease); 
}
.reveal-scale { 
  opacity:0; 
  transform:scale(.92);        
  transition:opacity .8s var(--ease), transform .8s var(--ease); 
}
.reveal-fade  { 
  opacity:0;                              
  transition:opacity .9s var(--ease); 
}

.reveal-up.in, .reveal-left.in, .reveal-right.in, .reveal-scale.in, .reveal-fade.in {
  opacity:1; 
  transform:none;
}

/* Stagger delays */
.d1 { 
  transition-delay:.1s !important; 
}
.d2 { 
  transition-delay:.2s !important; 
}
.d3 {
  transition-delay:.3s !important; 
}
.d4 {
  transition-delay:.4s !important; 
}
.d5 { 
  transition-delay:.5s !important; 
}
.d6 { 
  transition-delay:.6s !important; 
}
.d7 { 
  transition-delay:.7s !important; 
}
.d8 { 
  transition-delay:.8s !important; 
}

/* ── Float ── */
@keyframes floatY {
  0%,100%{
    transform:translateY(0)
  }
  50%{
    transform:translateY(-14px)
  }
}
.float-anim      { 
  animation:floatY 4.5s ease-in-out infinite; 
}
.float-anim-slow { 
  animation:floatY 7s   ease-in-out infinite; 
}
.float-anim-fast { 
  animation:floatY 3s   ease-in-out infinite; 
}

/* ── Shimmer Text ── */
@keyframes shimmerText {
  0%  { 
    background-position:-200% center; 
  }
  100%{ 
    background-position: 200% center; 
  }
}
.shimmer-text {
  background: linear-gradient(90deg, var(--gold-dark) 0%, var(--gold-light) 50%, var(--gold-dark) 100%);
  background-size: 200% auto;
  -webkit-background-clip: text; 
  -webkit-text-fill-color: transparent;
  background-clip: text;
  animation: shimmerText 3.5s linear infinite;
}

/* ── Gradient Border Pulse ── */
@keyframes borderPulse {
  0%,100%{ 
    box-shadow:0 0 0 0 rgba(201,168,76,.3); 
  }
  50%    { 
    box-shadow:0 0 0 12px rgba(201,168,76,0); 
  }
}
.border-pulse { 
  animation: borderPulse 2.5s ease-in-out infinite; 
}

/* ── Glow Pulse ── */
@keyframes glowPulse {
  0%,100%{ 
    box-shadow:0 0 20px rgba(201,168,76,.15); 
  }
  50%    { 
    box-shadow:0 0 50px rgba(201,168,76,.45); 
  }
}
.glow-pulse { 
  animation: glowPulse 3s ease-in-out infinite; 
}

/* ── Infinite Gradient BG ── */
@keyframes gradientShift {
  0%  { 
    background-position:0% 50%; 
  }
  50% { 
    background-position:100% 50%; 
  }
  100%{ 
    background-position:0% 50%; 
  }
}
.animated-gradient-bg {
  background: linear-gradient(-45deg, #080808, #141414, #0e0e0e, #0a0a0a);
  background-size: 400% 400%;
  animation: gradientShift 10s ease infinite;
}

/* ── Play Button Pulse ── */
@keyframes playPulse {
  0%,100%{ 
    box-shadow:0 0 0 0 rgba(201,168,76,.4); 
  }
  50%    { 
    box-shadow:0 0 0 22px rgba(201,168,76,0); 
  }
}
.play-btn-pulse { 
  animation: playPulse 2.2s ease-in-out infinite; 
}

/* ── Spin ── */
@keyframes spin { 
  from{
    transform:rotate(0deg)
  } 
  to{
    transform:rotate(360deg)
  } 
}
.spin { 
  animation: spin 1s linear infinite; 
}

/* ── Fade In ── */
@keyframes fadeIn { from{
  opacity:0
} 
to{
  opacity:1
} 
}
.fade-in { 
  animation: fadeIn .6s ease forwards; 
}

/* ── Slide Up ── */
@keyframes slideUp { 
  from{
    opacity:0;
    transform:translateY(28px)
  } 
  to{
    opacity:1;
    transform:translateY(0)
  } 
}
.slide-up { 
  animation: slideUp .6s var(--ease) forwards; 
}

/* ── Scale In ── */
@keyframes scaleIn { 
  from{opacity:0;transform:scale(.85)
  } 
  to{
    opacity:1;
    transform:scale(1)
  } 
}
.scale-in { 
  animation: scaleIn .5s var(--ease) forwards; 
}

/* ── Text Mask Reveal ── */
.text-mask { 
  overflow: hidden; 
  display: block; 
}
.text-mask-inner {
  display: block; 
  transform: translateY(100%);
  transition: transform .95s var(--ease-out);
}
.text-mask-inner.revealed { 
  transform: translateY(0); 
}

/* ── Image Reveal ── */
.img-reveal-wrap { 
  position: relative; 
  overflow: hidden; 
}
.img-reveal-wrap::after {
  content: ''; 
  position: absolute; 
  inset: 0;
  background: var(--gold); 
  transform: scaleX(1); 
  transform-origin: right;
  transition: transform .9s var(--ease-out);
}
.img-reveal-wrap.revealed::after { 
  transform: scaleX(0); 
}

/* ── Parallax ── */
.parallax-el { 
  will-change: transform; 
}

/* ── 3D Tilt ── */
.tilt-card { 
  transform-style: preserve-3d; 
  transition: transform .3s var(--ease); 
}

/* ── Magnetic Button ── */
.magnetic { 
  transition: transform .4s var(--ease-out); 
}

/* ── Page Transition Overlay ── */
.pt-bar {
  position: fixed; 
  left: 0; 
  right: 0; 
  height: 100vh;
  background: var(--black); 
  z-index: 9999998;
  transform: scaleY(0); 
  transform-origin: bottom;
  transition: transform .55s var(--ease-in-out);
}
.pt-bar.active { 
  transform: scaleY(1); 
}

/* ── Notification Toast ── */
.toast-notify {
  position: fixed; 
  bottom: 2rem; 
  left: 50%;
  transform: translateX(-50%) translateY(80px);
  background: var(--dark-3); 
  border: 1px solid var(--glass-border);
  color: var(--white); 
  padding: 1.1rem 2rem; 
  border-radius: var(--r-md);
  font-family: var(--font-sans); 
  font-size: .84rem; 
  z-index: 999999;
  display: flex; 
  align-items: center; 
  gap: .75rem;
  box-shadow: var(--shadow-dark); 
  transition: transform .5s var(--ease-out);
  white-space: nowrap;
}
.toast-notify.show { 
  transform: translateX(-50%) translateY(0); 
}
.toast-notify i { 
  color: var(--gold); 
  font-size: 1.1rem; 
}

/* ── Form Success/Error ── */
.form-success-msg {
  display: flex; 
  align-items: center; 
  gap: .75rem;
  padding: 1.2rem 1.5rem; 
  background: rgba(37,211,102,.08);
  border: 1px solid rgba(37,211,102,.3); 
  border-radius: var(--r-md);
  color: #4CAF50; 
  font-size: .84rem; 
  margin-top: 1rem;
  animation: slideUp .5s var(--ease) forwards;
}
.form-error-msg {
  display: flex; 
  align-items: center; 
  gap: .75rem;
  padding: 1.2rem 1.5rem; 
  background: rgba(231,76,60,.08);
  border: 1px solid rgba(231,76,60,.3); 
  border-radius: var(--r-md);
  color: #e74c3c; 
  font-size: .84rem; 
  margin-top: 1rem;
  animation: slideUp .5s var(--ease) forwards;
}
.field-error { 
  color: #e74c3c; 
  font-size: .7rem; 
  margin-top: .3rem; 
  display: block; 
}
.field-error-border { 
  border-bottom-color: #e74c3c !important; 
}
