/*==========================================================
  PREMIUM PORTFOLIO ANIMATIONS
  (utility classes only — keyframe names kept distinct from
  style.css to avoid one file silently overriding the other)
==========================================================*/

@keyframes floatY{
  0%{ transform:translateY(0px); }
  50%{ transform:translateY(-18px); }
  100%{ transform:translateY(0px); }
}
.float{ animation:floatY 5s ease-in-out infinite; }

@keyframes rotate360{
  0%{ transform:rotate(0deg); }
  100%{ transform:rotate(360deg); }
}
.rotate{ animation:rotate360 20s linear infinite; }

@keyframes glowPulse{
  0%{ box-shadow:0 0 10px rgba(212,175,55,.15); }
  50%{ box-shadow:0 0 45px rgba(212,175,55,.55); }
  100%{ box-shadow:0 0 10px rgba(212,175,55,.15); }
}
.glow{ animation:glowPulse 3s infinite; }

@keyframes cardPulse{
  0%{ transform:scale(1); }
  50%{ transform:scale(1.05); }
  100%{ transform:scale(1); }
}
.pulse-card{ animation:cardPulse 2.5s infinite; }

@keyframes fadeUp{
  0%{ opacity:0; transform:translateY(60px); }
  100%{ opacity:1; transform:translateY(0); }
}
.fade-up{ animation:fadeUp 1s ease forwards; }

@keyframes fadeLeft{
  0%{ opacity:0; transform:translateX(-80px); }
  100%{ opacity:1; transform:translateX(0); }
}
.fade-left{ animation:fadeLeft 1s forwards; }

@keyframes fadeRight{
  0%{ opacity:0; transform:translateX(80px); }
  100%{ opacity:1; transform:translateX(0); }
}
.fade-right{ animation:fadeRight 1s forwards; }

@keyframes zoomIn{
  0%{ opacity:0; transform:scale(.7); }
  100%{ opacity:1; transform:scale(1); }
}
.zoom{ animation:zoomIn .9s forwards; }

@keyframes slideDown{
  0%{ transform:translateY(-100px); opacity:0; }
  100%{ transform:translateY(0); opacity:1; }
}
.slide-down{ animation:slideDown .8s forwards; }

@keyframes lineGrow{
  0%{ width:0; }
  100%{ width:100%; }
}
.line-animation{ animation:lineGrow 1.2s forwards; }

@keyframes shimmer{
  0%{ background-position:-300px; }
  100%{ background-position:300px; }
}
.shimmer{
  background:linear-gradient(90deg,#111,#2a2a2a,#111);
  background-size:600px;
  animation:shimmer 2s infinite;
}

@keyframes blink{ 50%{ opacity:0; } }
.cursor{ animation:blink .8s infinite; }

/* ==================================================
   Button shine sweep
================================================== */

.btn::before{
  content:"";
  position:absolute;
  left:-100%;
  top:0;
  height:100%;
  width:100%;
  background:rgba(255,255,255,.25);
  transform:skewX(-35deg);
  transition:.7s;
}
.btn:hover::before{ left:140%; }

/* ==================================================
   Loader fade-out (JS toggles .is-hidden on load)
================================================== */

.loader-wrapper.is-hidden{ opacity:0; pointer-events:none; }

/* ==================================================
   Respect users who prefer less motion
================================================== */

@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
  }
}
