/* 1) Animación caída, rebotes y giros */
@keyframes dropBounceSpin {
  0% {
    transform: translateY(-200%) rotate(0deg);
  }
  60% {
    transform: translateY(0) rotate(720deg);
  }
  75% {
    transform: translateY(-30px) rotate(1080deg);
  }
  90% {
    transform: translateY(0) rotate(1440deg);
  }
  100% {
    transform: translateY(0) rotate(1440deg);
  }
}

#hero-logo.logo-animate {
  animation: dropBounceSpin 2.5s ease-out forwards;
}

/* 2) Fade-in subtítulo */
@keyframes fadeInSub {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

#hero-subtitle.fade-in {
  animation: fadeInSub 1.2s ease forwards;
}


@keyframes fadeInSub {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* fade-in */
.fade-in {
  animation: fadeInText 1s forwards;
}
@keyframes fadeInText {
  from { opacity: 0; }
  to   { opacity: 1; }
}

#parallax-services .bg-fixed {
  background-attachment: fixed;
  /* opcional: ajusta posición o tamaño */
}
/* === Glass Card === */
.glass-card {
  background: rgba(255, 255, 255, 0.05);
  border: 2px solid rgba(59, 130, 246, 0.4);
  border-radius: 1rem;
  backdrop-filter: blur(10px);
  box-shadow: 0 4px 30px rgba(0,0,0,0.1);
  transition: transform 0.3s, border 0.3s, background 0.3s;
}

.glass-card:hover {
  transform: translateY(-8px) scale(1.05);
  border-color: #3b82f6;
  background: rgba(0, 0, 80, 0.15);
}

.glass-card img {
  object-fit: contain;
}

.glass-card h3 {
  color: #fff;
}

.glass-card p {
  color: #ccc;
}

/* Responsive grid is handled by Tailwind classes in HTML */

/* Marquee animation */
@keyframes slide-left {
  0%   { transform: translateX(0%); }
  100% { transform: translateX(-50%); }
}

/* Track animado */
.tech-track {
  animation: slide-left 25s linear infinite;
}
/* Pausa la animación al hover */
.tech-track:hover {
  animation-play-state: paused;
}

/* Iconos “pop” al hover */
.tech-icon {
  transition: transform 0.3s ease;
}
.tech-item:hover .tech-icon {
  transform: scale(1.3);
}

/* Asegura que el marquee no salte frames */
.tech-track {
  will-change: transform;
}

/* ---------- BLOQUE SOBRE MÍ (estado inicial) ---------- */
#about-lock-zone,
#about-lock-zone-bottom {
  height: 1px;          /* marcadores invisibles */
  width: 100%;
  pointer-events: none;  /* no interfieren con clicks */
}

.about-frame {
  transform: scale(0.7);
  opacity: 0;
  will-change: transform, opacity;
  transition: none; /* animamos por JS */
}

/* (Opcional) estilo si quieres diferenciar cuando se está revirtiendo
.about-frame.reversing {
  outline: 2px dashed rgba(147,197,253,0.4);
}
*/

.skills-zone {
  opacity: 0;
  transition: opacity 0.6s ease;
}
.skills-zone.visible {
  opacity: 1;
}


/* ---------- SKILLS (animaciones “flip”) ---------- */
.window { position: relative; overflow: hidden; }

/* Base de cada skill */
.skill {
  display: inline-block;
  padding: 0.75rem 1.4rem;
  font-weight: 600;
  font-size: 0.95rem;
  background: rgba(59,130,246,0.85);
  color: #fff;
  border-radius: 0.9rem;
  box-shadow: 0 6px 18px -6px rgba(0,0,0,0.25);
  opacity: 0;
  transform: translate(0);
  will-change: transform, opacity;
}

/* Activador común */
.skill.play {
  animation-duration: 1.8s;
  animation-timing-function: ease;
  animation-fill-mode: forwards;
  animation-iteration-count: 1; /* Cambia a 'infinite' si quieres loop continuo */
}

/* Keyframes extraídos y limpiados */
@keyframes flip-r {
  0% { opacity:1; transform:translate(0); }
  50% { opacity:0; transform:translate(100%); }
  51% { opacity:0; transform:translate(-100%); }
  100% { opacity:1; transform:translate(0); }
}
@keyframes flip-ru {
  0% { opacity:1; transform:translate(0,0); }
  50% { opacity:0; transform:translate(100%,-100%); }
  51% { opacity:0; transform:translate(-100%,100%); }
  100% { opacity:1; transform:translate(0,0); }
}
@keyframes flip-l {
  0% { opacity:1; transform:translate(0); }
  50% { opacity:0; transform:translate(-100%); }
  51% { opacity:0; transform:translate(100%); }
  100% { opacity:1; transform:translate(0); }
}
@keyframes flip-d {
  0% { opacity:1; transform:translateY(0); }
  50% { opacity:0; transform:translateY(100%); }
  51% { opacity:0; transform:translateY(-100%); }
  100% { opacity:1; transform:translateY(0); }
}
@keyframes flip-u {
  0% { opacity:1; transform:translateY(0); }
  50% { opacity:0; transform:translateY(-100%); }
  51% { opacity:0; transform:translateY(100%); }
  100% { opacity:1; transform:translateY(0); }
}

.skill.flip-r.play  { animation-name: flip-r; }
.skill.flip-ru.play { animation-name: flip-ru; }
.skill.flip-l.play  { animation-name: flip-l; }
.skill.flip-d.play  { animation-name: flip-d; }
.skill.flip-u.play  { animation-name: flip-u; }

/* Stagger automático por fila (opcional) */
.skills-row.play .skill:nth-child(1) { animation-delay: 0s; }
.skills-row.play .skill:nth-child(2) { animation-delay: 0.15s; }
.skills-row.play .skill:nth-child(3) { animation-delay: 0.30s; }
.skills-row.play .skill:nth-child(4) { animation-delay: 0.45s; }
.skills-row.play .skill:nth-child(5) { animation-delay: 0.60s; }
.skills-row.play .skill:nth-child(6) { animation-delay: 0.75s; }
.skills-row.play .skill:nth-child(7) { animation-delay: 0.90s; }
.skills-row.play .skill:nth-child(8) { animation-delay: 1.05s; }

/* fade-slide desde abajo */
.fade-slide {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity 0.8s ease, transform 0.8s ease;
}

/* estado visible */
.fade-slide.visible {
  opacity: 1;
  transform: translateY(0);
}

.wave-divider {
  /* aumenta la zona de transición hacia arriba y abajo */
  margin-top: -2rem;
  margin-bottom: -2rem;
}

.wave-svg {
  display: block;
  width: 100%;
  height: 200px;   /* más alta que antes (era 80px) */
}
