/* ============================================================
   Área de Lazer Jaime Tellini — animations.css
   Animações de scroll, microinterações e efeitos visuais
   ============================================================ */

/* ─── Animações de entrada (Intersection Observer) ──────────── */
.fade-in {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.fade-in.visible {
  opacity: 1;
  transform: translateY(0);
}

.fade-in-left {
  opacity: 0;
  transform: translateX(-32px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.fade-in-left.visible {
  opacity: 1;
  transform: translateX(0);
}

.fade-in-right {
  opacity: 0;
  transform: translateX(32px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.fade-in-right.visible {
  opacity: 1;
  transform: translateX(0);
}

.scale-in {
  opacity: 0;
  transform: scale(0.92);
  transition: opacity 0.6s ease, transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.scale-in.visible {
  opacity: 1;
  transform: scale(1);
}

/* Delays escalonados */
.delay-100 { transition-delay: 0.1s; }
.delay-150 { transition-delay: 0.15s; }
.delay-200 { transition-delay: 0.2s; }
.delay-300 { transition-delay: 0.3s; }
.delay-400 { transition-delay: 0.4s; }
.delay-500 { transition-delay: 0.5s; }
.delay-600 { transition-delay: 0.6s; }
.delay-700 { transition-delay: 0.7s; }
.delay-800 { transition-delay: 0.8s; }

/* ─── Contador animado ──────────────────────────────────────── */
.count-up {
  display: inline-block;
}

/* ─── Brilho em botões (exceto btn-primary que usa ::before para overlay azul) ─ */
@keyframes btnShine {
  from { transform: translateX(-100%) skewX(-15deg); }
  to   { transform: translateX(200%) skewX(-15deg); }
}

/* Aplica o efeito de brilho em botões secundarfios, ghost e whatsapp — mas NÃO no btn-primary */
.btn:not(.btn-primary)::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 40%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
  transform: translateX(-100%) skewX(-15deg);
  border-radius: inherit;
  z-index: 0;
  pointer-events: none;
}

.btn:not(.btn-primary):hover::after {
  animation: btnShine 0.6s ease;
}


/* ─── Ondas SVG animadas ────────────────────────────────────── */
@keyframes waveFlow {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}

.wave-animated {
  animation: waveFlow 8s linear infinite;
}

/* ─── Elementos flutuantes ──────────────────────────────────── */
@keyframes float {
  0%, 100% { transform: translateY(0); }
  50%       { transform: translateY(-12px); }
}

@keyframes floatSlow {
  0%, 100% { transform: translateY(0) rotate(0deg); }
  50%       { transform: translateY(-8px) rotate(2deg); }
}

.float-anim { animation: float 4s ease-in-out infinite; }
.float-slow  { animation: floatSlow 6s ease-in-out infinite; }

/* ─── Elementos decorativos de bolhas ───────────────────────── */
.bubble {
  position: absolute;
  border-radius: 50%;
  pointer-events: none;
  background: radial-gradient(circle, rgba(13,184,232,0.12), rgba(13,184,232,0.03));
}

@keyframes bubbleRise {
  0%   { transform: translateY(0) scale(1); opacity: 0.4; }
  100% { transform: translateY(-80px) scale(1.2); opacity: 0; }
}

/* ─── Parallax suave (JS-controlled) ───────────────────────── */
.parallax-element {
  will-change: transform;
}

/* ─── Card hover com profundidade ───────────────────────────── */
.card-depth {
  transition: transform 0.3s ease, box-shadow 0.3s ease;
  transform-style: preserve-3d;
}

.card-depth:hover {
  transform: perspective(600px) rotateX(2deg) translateY(-4px);
}

/* ─── Foco visível ──────────────────────────────────────────── */
:focus-visible {
  outline: 3px solid #0db8e8;
  outline-offset: 3px;
  border-radius: 4px;
}

/* ─── Gradiente de texto animado ────────────────────────────── */
@keyframes gradientText {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

.gradient-text-anim {
  background: linear-gradient(270deg, #0db8e8, #1a6ebd, #f2611c, #0db8e8);
  background-size: 300% 300%;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  animation: gradientText 5s ease infinite;
}

/* ─── Galeria masonry hover ─────────────────────────────────── */
.galeria-item {
  transform-origin: center center;
}

/* ─── Skeleton loading ──────────────────────────────────────── */
@keyframes shimmer {
  from { background-position: -200% 0; }
  to   { background-position: 200% 0; }
}

.skeleton {
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
  border-radius: 4px;
}

/* ─── Toast notification ────────────────────────────────────── */
.toast {
  position: fixed;
  top: 90px;
  right: 24px;
  background: var(--grafite);
  color: var(--branco);
  padding: 12px 20px;
  border-radius: 8px;
  font-size: 14px;
  font-weight: 500;
  z-index: 9998;
  transform: translateX(120%);
  transition: transform 0.3s ease;
  max-width: 320px;
  box-shadow: 0 8px 24px rgba(0,0,0,0.3);
}

.toast.show { transform: translateX(0); }
.toast.success { border-left: 4px solid #25d366; }
.toast.error   { border-left: 4px solid #ef4444; }
.toast.info    { border-left: 4px solid #0db8e8; }

/* ─── Decorativo azul — água no fundo ───────────────────────── */
.water-bg {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
}

.water-bg::before {
  content: '';
  position: absolute;
  bottom: -20%;
  left: -10%;
  width: 120%;
  height: 60%;
  background: radial-gradient(ellipse at center, rgba(13,184,232,0.06) 0%, transparent 70%);
  border-radius: 50%;
}

/* ─── Seções com bordas onduladas (SVG) ─────────────────────── */
.section-wave-bottom {
  position: relative;
  padding-bottom: 60px;
}

.section-wave-bottom::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 60px;
  background: inherit;
  clip-path: ellipse(55% 100% at 50% 100%);
}

/* ─── Brilho no hover de ícones ─────────────────────────────── */
@keyframes iconGlow {
  0%, 100% { box-shadow: 0 4px 15px rgba(13,184,232,0.25); }
  50%       { box-shadow: 0 8px 30px rgba(13,184,232,0.55); }
}

.icon-glow-anim {
  animation: iconGlow 2.5s ease-in-out infinite;
}

/* ─── Swipe indicator (mobile carousel) ────────────────────── */
@keyframes swipeHint {
  0%, 100% { transform: translateX(0) opacity(0.8); }
  50%       { transform: translateX(6px) opacity(1); }
}

.swipe-hint {
  animation: swipeHint 1.5s ease-in-out infinite;
}

/* ─── Reduced motion override ───────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .fade-in, .fade-in-left, .fade-in-right, .scale-in {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }

  .float-anim, .float-slow,
  .wave-animated, .gradient-text-anim,
  .icon-glow-anim, .swipe-hint {
    animation: none !important;
  }

  .btn::after { display: none; }
}
