/* ==========================================================
   IBS Live · Animation & Micro-interaction Layer
   Zero dependencies. All hardware-accelerated (transform + opacity).
   ========================================================== */

/* --- Scroll-reveal --- */
.ibs-reveal {
  opacity: 0;
  transform: translateY(28px);
  transition:
    opacity .7s cubic-bezier(.16, 1, .3, 1),
    transform .7s cubic-bezier(.16, 1, .3, 1);
  will-change: opacity, transform;
}
.ibs-reveal.on { opacity: 1; transform: none; }
.ibs-reveal.left  { transform: translateX(-40px); }
.ibs-reveal.right { transform: translateX(40px); }
.ibs-reveal.scale { transform: scale(.9); }
.ibs-reveal.on.left,
.ibs-reveal.on.right,
.ibs-reveal.on.scale { transform: none; }

/* Stagger children */
.ibs-stagger > * {
  opacity: 0;
  transform: translateY(24px);
  transition:
    opacity .55s cubic-bezier(.16, 1, .3, 1),
    transform .55s cubic-bezier(.16, 1, .3, 1);
}
.ibs-stagger.on > *              { opacity: 1; transform: none; }
.ibs-stagger.on > *:nth-child(1) { transition-delay: .05s; }
.ibs-stagger.on > *:nth-child(2) { transition-delay: .15s; }
.ibs-stagger.on > *:nth-child(3) { transition-delay: .25s; }
.ibs-stagger.on > *:nth-child(4) { transition-delay: .35s; }
.ibs-stagger.on > *:nth-child(5) { transition-delay: .45s; }
.ibs-stagger.on > *:nth-child(6) { transition-delay: .55s; }
.ibs-stagger.on > *:nth-child(n+7) { transition-delay: .65s; }

/* --- Card hover lift --- */
.gallery-grid > figure,
.dept-card, .card, .kpi-card, .role-card, .contact-card, .stat-card {
  transition:
    transform .35s cubic-bezier(.2, .9, .3, 1.4),
    box-shadow .35s cubic-bezier(.2, .9, .3, 1);
  will-change: transform;
}
@media (hover: hover){
  .gallery-grid > figure:hover,
  .dept-card:hover,
  .kpi-card:hover,
  .role-card:hover,
  .contact-card:hover,
  .stat-card:hover {
    transform: translateY(-6px) scale(1.015);
    box-shadow: 0 20px 42px rgba(6, 128, 41, .22);
  }
}

/* --- Image zoom in figures --- */
.gallery-grid > figure { overflow: hidden; }
.gallery-grid > figure img {
  transition: transform .8s cubic-bezier(.2, .8, .3, 1);
  will-change: transform;
}
@media (hover: hover){
  .gallery-grid > figure:hover img { transform: scale(1.06); }
}

/* --- Button micro-interactions --- */
.btn, .cta, button.primary, a.btn-primary {
  transition:
    transform .18s ease,
    box-shadow .25s ease,
    filter .18s ease;
  will-change: transform;
}
.btn:hover, .cta:hover, button.primary:hover, a.btn-primary:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 22px rgba(4, 111, 37, .28);
  filter: brightness(1.05);
}
.btn:active, .cta:active, button.primary:active {
  transform: translateY(0) scale(.98);
}

/* --- Animated counters --- */
.ibs-counter {
  font-variant-numeric: tabular-nums;
  display: inline-block;
}

/* --- Hero parallax layer --- */
.hero, .hero-inner {
  position: relative;
  overflow: hidden;
}
.ibs-hero-bg {
  position: absolute; inset: -8%;
  z-index: 0;
  will-change: transform;
  transition: transform .1s linear;
  pointer-events: none;
}

/* --- Subtle floating background dots on hero (branded) --- */
.hero::before, .hero-inner::before {
  content: "";
  position: absolute;
  top: -80px; right: -80px;
  width: 320px; height: 320px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(242, 196, 0, .18) 0%, transparent 70%);
  animation: ibsFloat 12s ease-in-out infinite;
  pointer-events: none;
  z-index: 0;
}
.hero::after, .hero-inner::after {
  content: "";
  position: absolute;
  bottom: -100px; left: -100px;
  width: 380px; height: 380px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(6, 128, 41, .16) 0%, transparent 70%);
  animation: ibsFloat 15s ease-in-out infinite reverse;
  pointer-events: none;
  z-index: 0;
}
@keyframes ibsFloat {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33%      { transform: translate(30px, -20px) scale(1.06); }
  66%      { transform: translate(-24px, 30px) scale(.95); }
}

/* --- Smooth scroll for the whole page --- */
html { scroll-behavior: smooth; }

/* --- Subtle underline animation for nav links --- */
.nav-links a, .site-nav a {
  position: relative;
  transition: color .2s;
}
.nav-links a::after, .site-nav a::after {
  content: "";
  position: absolute;
  left: 0; bottom: -3px;
  width: 100%; height: 2px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: right;
  transition: transform .3s cubic-bezier(.16, 1, .3, 1);
}
.nav-links a:hover::after, .site-nav a:hover::after {
  transform: scaleX(1);
  transform-origin: left;
}

/* --- Page load fade-in --- */
body.ibs-page-loading {
  opacity: 0;
}
body.ibs-page-ready {
  opacity: 1;
  transition: opacity .4s ease-out;
}

/* --- Anchor link scroll highlight --- */
:target {
  animation: ibsTargetPulse 1.6s ease-out;
}
@keyframes ibsTargetPulse {
  0%   { box-shadow: 0 0 0 0 rgba(6, 128, 41, .45); }
  100% { box-shadow: 0 0 0 32px rgba(6, 128, 41, 0); }
}

/* --- Sticky header shrink on scroll --- */
.site-header.ibs-shrink {
  padding-top: 6px !important;
  padding-bottom: 6px !important;
  backdrop-filter: saturate(180%) blur(10px);
  -webkit-backdrop-filter: saturate(180%) blur(10px);
  background: rgba(255, 255, 255, .96) !important;
  box-shadow: 0 4px 20px rgba(0, 0, 0, .08);
  transition:
    padding .3s ease,
    background .3s ease,
    box-shadow .3s ease;
}
/* On mobile the frosted-glass transparency causes content to bleed through - keep it fully opaque */
@media (max-width: 900px){
  .site-header.ibs-shrink,
  .ed-header.ibs-shrink{
    background: #ffffff !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
  }
}

/* --- Scroll progress bar at very top of page --- */
#ibsScrollProgress {
  position: fixed;
  top: 0; left: 0;
  height: 3px;
  width: 0%;
  background: linear-gradient(90deg, #068029, #f2c400, #068029);
  background-size: 200% 100%;
  z-index: 999999;
  pointer-events: none;
  animation: ibsProgressShimmer 3s linear infinite;
}
@keyframes ibsProgressShimmer {
  0%   { background-position:   0% 50%; }
  100% { background-position: 200% 50%; }
}

/* Respect user's reduced-motion preference */
@media (prefers-reduced-motion: reduce){
  .ibs-reveal,
  .ibs-stagger > *,
  .gallery-grid > figure,
  .dept-card, .card, .kpi-card,
  .btn, .cta,
  .hero::before, .hero::after,
  .ibs-hero-bg,
  #ibsScrollProgress {
    transition: none !important;
    animation: none !important;
    transform: none !important;
    opacity: 1 !important;
  }
  html { scroll-behavior: auto; }
}
