/* ═══════════════════════════════════════════════════════════════════════════
   ANIMACIONES / KEYFRAMES / EFECTOS DE MOVIMIENTO
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─── KEYFRAMES BASE ─── */
@keyframes gradientShift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } }
@keyframes pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.05); opacity: 0.85; } }
@keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-12px); } }
@keyframes shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } }
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes fadeUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }
@keyframes scaleIn { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: scale(1); } }
@keyframes slideRight { from { opacity: 0; transform: translateX(-40px); } to { opacity: 1; transform: translateX(0); } }
@keyframes glow {
  0%, 100% { box-shadow: 0 0 0 0 rgba(232, 212, 166, 0.5); }
  50% { box-shadow: 0 0 30px 8px rgba(232, 212, 166, 0.4); }
}
@keyframes particleFloat {
  0% { transform: translateY(100vh) translateX(0) scale(0); opacity: 0; }
  10% { opacity: 0.5; }
  50% { transform: translateY(50vh) translateX(20px) scale(1); }
  90% { opacity: 0.4; }
  100% { transform: translateY(-10vh) translateX(-10px) scale(0.8); opacity: 0; }
}
@keyframes typewriter { from { width: 0; } to { width: 100%; } }
@keyframes blinkCursor { 50% { border-color: transparent; } }
@keyframes textReveal { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }
@keyframes orbit { from { transform: rotate(0deg) translateX(120px) rotate(0deg); } to { transform: rotate(360deg) translateX(120px) rotate(-360deg); } }

/* ─── PARTÍCULAS FLOTANTES (decorativo) ─── */
.particles { position: absolute; inset: 0; overflow: hidden; pointer-events: none; z-index: 0; }
.particles__dot {
  position: absolute;
  width: 6px; height: 6px;
  background: var(--champagne);
  border-radius: var(--radius-full);
  opacity: 0.6;
  animation: particleFloat 15s infinite linear;
  filter: blur(0.5px);
}
.particles__dot:nth-child(1) { left: 8%;  animation-delay: 0s;  width: 4px; height: 4px; }
.particles__dot:nth-child(2) { left: 20%; animation-delay: -3s; background: var(--rose-gold); }
.particles__dot:nth-child(3) { left: 35%; animation-delay: -6s; width: 8px; height: 8px; }
.particles__dot:nth-child(4) { left: 50%; animation-delay: -9s; background: var(--lavender); }
.particles__dot:nth-child(5) { left: 65%; animation-delay: -12s; }
.particles__dot:nth-child(6) { left: 80%; animation-delay: -2s; background: var(--magenta); width: 3px; height: 3px; }
.particles__dot:nth-child(7) { left: 92%; animation-delay: -8s; width: 5px; height: 5px; }

/* ─── EFECTOS DE HOVER PARA CARDS ─── */
.hover-lift { transition: transform var(--duration-base) var(--ease-luxe), box-shadow var(--duration-base) var(--ease-luxe); }
.hover-lift:hover { transform: translateY(-8px); box-shadow: var(--shadow-xl); }

.hover-tilt { transition: transform var(--duration-base) var(--ease-luxe); transform-style: preserve-3d; }
.hover-tilt:hover { transform: perspective(800px) rotateY(-4deg) rotateX(4deg) scale(1.02); }

.hover-glow { transition: box-shadow var(--duration-base) var(--ease-luxe); }
.hover-glow:hover { box-shadow: var(--shadow-glow); }

/* ─── SCROLL REVEAL (vanilla, sin AOS) ─── */
.reveal { opacity: 0; transform: translateY(40px); transition: opacity var(--duration-luxe) var(--ease-luxe), transform var(--duration-luxe) var(--ease-luxe); }
.reveal.is-visible { opacity: 1; transform: translateY(0); }
.reveal--scale { transform: scale(0.94); }
.reveal--scale.is-visible { transform: scale(1); }
.reveal--right { transform: translateX(-40px); }
.reveal--right.is-visible { transform: translateX(0); }
.reveal--left { transform: translateX(40px); }
.reveal--left.is-visible { transform: translateX(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; }

/* ─── BORDER ANIMADO (gradiente girando) ─── */
.border-animated {
  position: relative;
  background-clip: padding-box;
}
.border-animated::before {
  content: '';
  position: absolute; inset: -2px;
  background: conic-gradient(from var(--angle, 0deg), var(--champagne), var(--magenta), var(--lavender), var(--champagne));
  border-radius: inherit;
  z-index: -1;
  animation: rotateBorder 4s linear infinite;
}
@property --angle { syntax: '<angle>'; initial-value: 0deg; inherits: false; }
@keyframes rotateBorder { to { --angle: 360deg; } }

/* ─── INFINITE MARQUEE ─── */
.marquee {
  overflow: hidden;
  display: flex;
  user-select: none;
}
.marquee__track {
  display: flex;
  gap: var(--space-xl);
  animation: marqueeScroll 30s linear infinite;
  flex-shrink: 0;
}
@keyframes marqueeScroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* ─── BACKGROUND BLOB DECORATIVO ─── */
.blob {
  position: absolute;
  border-radius: 50%;
  filter: blur(80px);
  opacity: 0.5;
  pointer-events: none;
  z-index: 0;
}
.blob--champagne { background: var(--champagne); }
.blob--magenta   { background: var(--magenta); }
.blob--lavender  { background: var(--lavender); }
.blob--rose      { background: var(--rose-gold); }
