/* ==========================================================================
   ANIMATIONS & KEYFRAMES
========================================================================== */

@keyframes spin{ to{ transform:rotate(360deg); } }

@keyframes blink{
  0%,49%{opacity:1;}
  50%,100%{opacity:0;}
}

@keyframes scrollLine{
  0%{ top:-100%; }
  60%{ top:100%; }
  100%{ top:100%; }
}

@keyframes marquee{
  from{ transform:translateX(0); }
  to{ transform:translateX(-50%); }
}
[dir="rtl"] .clients__track{ animation-name:marqueeRtl; }
@keyframes marqueeRtl{
  from{ transform:translateX(0); }
  to{ transform:translateX(50%); }
}

@keyframes floatY{
  0%,100%{ transform:translateY(0); }
  50%{ transform:translateY(-14px); }
}

@keyframes pulseGlow{
  0%,100%{ opacity:.55; }
  50%{ opacity:1; }
}

/* ===== Reveal on scroll (driven by JS adding .is-inview) ===== */
[data-aos]{
  transition-property:opacity, transform, filter;
  transition-duration:.9s;
  transition-timing-function:var(--ease);
}

/* ===== Tilt cards ===== */
.tilt{
  transform-style:preserve-3d;
  will-change:transform;
  transition:transform .15s ease-out, box-shadow .4s ease;
}
.tilt:hover{
  box-shadow:0 30px 60px -20px rgba(0,0,0,.6);
}

/* ===== Magnetic buttons (JS applies inline transform; this softens release) ===== */
.magnetic{
  transition:transform .5s var(--ease);
}

/* ===== Animated gradient border utility ===== */
.edu-card::before,
.timeline__card::before{
  content:'';
  position:absolute;inset:0;
  border-radius:inherit;
  padding:1px;
  background:linear-gradient(120deg, transparent 30%, rgba(201,162,75,.5), transparent 70%);
  background-size:250% 250%;
  -webkit-mask:linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;
  mask-composite:exclude;
  opacity:0;
  transition:opacity .4s ease;
  animation:borderSheen 5s linear infinite;
  pointer-events:none;
}
.edu-card:hover::before,
.timeline__card:hover::before{ opacity:1; }

@keyframes borderSheen{
  0%{ background-position:0% 50%; }
  100%{ background-position:200% 50%; }
}

/* ===== Floating decorative elements ===== */
.hero__portrait{ animation:floatY 7s ease-in-out infinite; }

/* ===== Loading screen fade-in body ===== */
body.is-loading{ overflow:hidden; height:100vh; }

/* ===== Page transition overlay (link clicks) ===== */
.page-transition{
  position:fixed;inset:0;z-index:9997;
  background:var(--gold);
  transform:scaleY(0);
  transform-origin:bottom;
  pointer-events:none;
}
.page-transition.is-active{
  animation:pageWipe .9s var(--ease) forwards;
}
@keyframes pageWipe{
  0%{ transform:scaleY(0); transform-origin:bottom; }
  50%{ transform:scaleY(1); transform-origin:bottom; }
  51%{ transform-origin:top; }
  100%{ transform:scaleY(0); transform-origin:top; }
}

/* ===== Reduced motion ===== */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
}
