/* ============================================================
   Abby Solutions — Premium Site Animations
   Applies to everything EXCEPT the hero section (#heroLocked)
   and the logo. Built on transform/opacity/clip-path only.
   ============================================================ */

/* ---------- Base reveal states (before entering viewport) ---------- */
.av-reveal-section,
.av-reveal-text,
.av-counter-wrap {
  opacity: 1;
  transform: translateY(24px);
  transition: opacity 0.7s ease, transform 0.7s ease;
  will-change: transform;
}

.av-card {
  /* Cards (gallery/services/projects) are never hidden — only a very
     light entrance nudge that is barely perceptible even if the
     reveal never fires, so content is always visible. */
  opacity: 1;
  transform: translateY(10px);
  transition: opacity 0.6s ease, transform 0.6s ease, box-shadow 0.35s ease, border-color 0.35s ease;
  will-change: transform;
}

.av-reveal-heading {
  opacity: 1;
  transform: translateY(20px);
  filter: blur(4px);
  transition: opacity 0.65s ease-out, transform 0.65s ease-out, filter 0.65s ease-out;
  will-change: transform, filter;
}

/* Images: no reveal animation — always shown normally, no risk of
   being left invisible. */

/* In-view state */
.av-reveal-section.av-in,
.av-reveal-text.av-in,
.av-counter-wrap.av-in {
  opacity: 1;
  transform: translateY(0);
}
.av-card.av-in {
  transform: translateY(0);
}
.av-reveal-heading.av-in {
  opacity: 1;
  transform: translateY(0);
  filter: blur(0);
}

/* ---------- Cards: hover depth ---------- */
.av-card.av-in:hover {
  transform: translateY(-6px);
  box-shadow: 0 20px 40px -12px rgba(11,31,58,0.18);
}

/* Icon / arrow micro-movement inside hovered cards */
.av-card .av-icon { transition: transform 0.35s cubic-bezier(.34,1.56,.64,1); }
.av-card:hover .av-icon { transform: scale(1.12) rotate(-4deg); }
.av-card .av-arrow { transition: transform 0.3s ease; display: inline-block; }
.av-card:hover .av-arrow { transform: translateX(5px); }

/* ---------- Buttons: micro-interactions ---------- */
.av-btn {
  position: relative;
  overflow: hidden;
  transition: transform 0.25s cubic-bezier(.34,1.56,.64,1), box-shadow 0.25s ease;
}
.av-btn:hover { transform: translateY(-2px) scale(1.025); }
.av-btn:active { transform: translateY(0) scale(0.97); }
.av-btn .av-arrow { transition: transform 0.3s ease; display: inline-block; }
.av-btn:hover .av-arrow { transform: translateX(4px); }
.av-btn:focus-visible { outline: 2px solid #FFDE59; outline-offset: 2px; }

/* ---------- Nav link underline ---------- */
.nav-link { position: relative; }
.nav-link::after {
  content: '';
  position: absolute;
  left: 0; right: 100%;
  bottom: -2px;
  height: 2px;
  background: currentColor;
  transition: right 0.3s cubic-bezier(.65,0,.35,1);
}
.nav-link:hover::after,
.nav-link-active::after { right: 0; }

/* Navbar entrance (runs once on load, not scroll-triggered) */
#siteHeaderWrap { animation: avNavIn 0.6s cubic-bezier(.16,.84,.44,1) both; }
@keyframes avNavIn {
  from { opacity: 0; transform: translateY(-14px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ---------- Mobile menu open/close + stagger ---------- */
#mobileMenu.av-menu-open {
  animation: avMenuIn 0.35s cubic-bezier(.16,.84,.44,1) both;
}
#mobileMenu.av-menu-closing {
  animation: avMenuOut 0.25s ease-in both;
}
@keyframes avMenuIn {
  from { opacity: 0; transform: translateY(-10px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes avMenuOut {
  from { opacity: 1; transform: translateY(0); }
  to   { opacity: 0; transform: translateY(-10px); }
}
#mobileMenu.av-menu-open > a,
#mobileMenu.av-menu-open > div {
  opacity: 0;
  transform: translateX(-8px);
  animation: avMenuItemIn 0.4s ease forwards;
}

@keyframes avMenuItemIn {
  to { opacity: 1; transform: translateX(0); }
}

/* ---------- Counters ---------- */
.av-counter-wrap.av-in { opacity: 1; transform: translateY(0); }

/* ---------- Reduced motion: everything visible immediately ---------- */
@media (prefers-reduced-motion: reduce) {
  .av-reveal-section, .av-reveal-heading, .av-reveal-text, .av-card, .av-counter-wrap {
    opacity: 1 !important; transform: none !important; filter: none !important; clip-path: none !important;
    transition: none !important; animation: none !important;
  }
  #siteHeaderWrap, #mobileMenu.av-menu-open > a, #mobileMenu.av-menu-open > div { animation: none !important; opacity: 1 !important; transform: none !important; }
}

/* ---------- Mobile: faster, shorter, lighter ---------- */
@media (max-width: 768px) {
  .av-reveal-section, .av-reveal-text, .av-card, .av-counter-wrap {
    transform: translateY(18px);
    transition-duration: 0.5s;
  }
  .av-reveal-heading { transform: translateY(14px); filter: blur(3px); transition-duration: 0.45s; }
  .av-card.av-in:hover { transform: none; box-shadow: none; }
  .av-btn:hover { transform: none; }
}