/* ==========================================================================
   TVOLTTECH CONTROL TRANSFORMERS LLP - Animations & Keyframes
   ========================================================================== */

/* Keyframe Animations */
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

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

@keyframes slideInRight {
  from {
    opacity: 0;
    transform: translateX(40px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes pulseGlow {
  0%, 100% {
    box-shadow: 0 0 15px rgba(227, 27, 35, 0.2);
  }
  50% {
    box-shadow: 0 0 30px rgba(227, 27, 35, 0.5);
  }
}

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

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

/* Scroll Reveal Classes (Handled via IntersectionObserver in animations.js) */
.reveal {
  opacity: 0;
  transform: translateY(35px);
  transition: opacity 0.7s cubic-bezier(0.2, 0.8, 0.2, 1), transform 0.7s cubic-bezier(0.2, 0.8, 0.2, 1);
  will-change: opacity, transform;
}

.reveal.active {
  opacity: 1;
  transform: translateY(0);
}

.reveal-left {
  opacity: 0;
  transform: translateX(-40px);
  transition: opacity 0.7s cubic-bezier(0.2, 0.8, 0.2, 1), transform 0.7s cubic-bezier(0.2, 0.8, 0.2, 1);
}

.reveal-left.active {
  opacity: 1;
  transform: translateX(0);
}

.reveal-right {
  opacity: 0;
  transform: translateX(40px);
  transition: opacity 0.7s cubic-bezier(0.2, 0.8, 0.2, 1), transform 0.7s cubic-bezier(0.2, 0.8, 0.2, 1);
}

.reveal-right.active {
  opacity: 1;
  transform: translateX(0);
}

/* Stagger Animation Delays */
.stagger-parent .stagger-child {
  opacity: 0;
  transform: translateY(25px);
  transition: opacity 0.5s ease, transform 0.5s ease;
}

.stagger-parent.active .stagger-child:nth-child(1) { transition-delay: 0.1s; opacity: 1; transform: translateY(0); }
.stagger-parent.active .stagger-child:nth-child(2) { transition-delay: 0.2s; opacity: 1; transform: translateY(0); }
.stagger-parent.active .stagger-child:nth-child(3) { transition-delay: 0.3s; opacity: 1; transform: translateY(0); }
.stagger-parent.active .stagger-child:nth-child(4) { transition-delay: 0.4s; opacity: 1; transform: translateY(0); }
.stagger-parent.active .stagger-child:nth-child(5) { transition-delay: 0.5s; opacity: 1; transform: translateY(0); }
.stagger-parent.active .stagger-child:nth-child(6) { transition-delay: 0.6s; opacity: 1; transform: translateY(0); }

/* Floating Element Class */
.floating {
  animation: floatElement 5s ease-in-out infinite;
}

/* Red Pulse Glow */
.pulse-red {
  animation: pulseGlow 3s infinite;
}

/* Button Ripple & Hover micro-effects */
.btn-ripple {
  position: relative;
  overflow: hidden;
}

.btn-ripple::after {
  content: "";
  display: block;
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  pointer-events: none;
  background-image: radial-gradient(circle, #fff 10%, transparent 10.01%);
  background-repeat: no-repeat;
  background-position: 50%;
  transform: scale(10, 10);
  opacity: 0;
  transition: transform .5s, opacity 1s;
}

.btn-ripple:active::after {
  transform: scale(0, 0);
  opacity: .3;
  transition: 0s;
}


/* ===== Page loader ===== */
#page-loader{position:fixed;inset:0;z-index:99999;background:var(--bg-primary,#fff);display:flex;align-items:center;justify-content:center;transition:opacity .6s ease,visibility .6s ease}
#page-loader.done{opacity:0;visibility:hidden}
.loader-inner{text-align:center}
.loader-logo{width:150px;max-width:55vw;animation:loaderPulse 1.4s ease-in-out infinite}
.loader-bar{width:180px;height:3px;margin:1.25rem auto 0;background:rgba(227,27,35,.15);border-radius:3px;overflow:hidden}
.loader-bar span{display:block;height:100%;width:40%;background:var(--brand-red,#E31B23);border-radius:3px;animation:loaderBar 1.1s ease-in-out infinite}
@keyframes loaderPulse{0%,100%{transform:scale(1);opacity:.85}50%{transform:scale(1.07);opacity:1}}
@keyframes loaderBar{0%{transform:translateX(-100%)}100%{transform:translateX(350%)}}

/* ===== Header shrink + mega menu ===== */
.header{transition:padding .3s ease,box-shadow .3s ease}
.header.header-shrink{box-shadow:0 6px 24px rgba(0,0,0,.12)}
.header.header-shrink .logo-img{transform:scale(.88)}
.logo-img{transition:transform .3s ease}
.nav-item{position:relative;display:inline-flex;align-items:center}
.nav-caret{font-size:.65rem;margin-left:.3rem;transition:transform .3s ease}
.nav-item.has-mega:hover .nav-caret{transform:rotate(180deg)}
.mega-menu{position:absolute;top:100%;left:50%;transform:translateX(-30%) translateY(14px);min-width:720px;display:grid;grid-template-columns:repeat(3,1fr);gap:1.75rem;padding:1.75rem 2rem;background:var(--bg-card,#fff);border:1px solid rgba(127,127,127,.2);border-top:3px solid var(--brand-red,#E31B23);border-radius:0 0 12px 12px;box-shadow:0 24px 50px rgba(0,0,0,.18);opacity:0;visibility:hidden;transition:opacity .3s ease,transform .3s ease,visibility .3s;z-index:1000}
.nav-item.has-mega:hover .mega-menu,.nav-item.has-mega:focus-within .mega-menu{opacity:1;visibility:visible;transform:translateX(-30%) translateY(0)}
.mega-col h4{font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;color:var(--brand-red,#E31B23);margin-bottom:.75rem}
.mega-col a{display:block;padding:.35rem 0;font-size:.92rem;color:var(--text-white,inherit);transition:padding-left .25s ease,color .25s ease}
.mega-col a:hover{padding-left:.5rem;color:var(--brand-red,#E31B23)}
.mega-all{font-weight:700;margin-top:.5rem}
@media(max-width:1024px){.mega-menu{display:none}.nav-caret{display:none}.nav-item{display:block}}

/* ===== Product portfolio tabs ===== */
.portfolio-tabs{display:flex;gap:.75rem;flex-wrap:wrap;justify-content:center;margin-bottom:2.5rem}
.portfolio-tab{padding:.7rem 1.5rem;border-radius:999px;border:1px solid rgba(127,127,127,.35);background:transparent;color:inherit;font-weight:600;cursor:pointer;transition:all .3s ease}
.portfolio-tab:hover{border-color:var(--brand-red,#E31B23);color:var(--brand-red,#E31B23);transform:translateY(-2px)}
.portfolio-tab.active{background:var(--brand-red,#E31B23);border-color:var(--brand-red,#E31B23);color:#fff;box-shadow:0 8px 20px rgba(227,27,35,.3)}
.portfolio-panel{display:none;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.5rem}
.portfolio-panel.active{display:grid}
.portfolio-panel.active .portfolio-card{animation:portfolioIn .55s ease both}
.portfolio-panel.active .portfolio-card:nth-child(2){animation-delay:.08s}
.portfolio-panel.active .portfolio-card:nth-child(3){animation-delay:.16s}
.portfolio-panel.active .portfolio-card:nth-child(4){animation-delay:.24s}
@keyframes portfolioIn{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
.portfolio-card{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:1.75rem 1.25rem;background:var(--bg-card,#fff);border:1px solid rgba(127,127,127,.2);border-radius:14px;text-align:center;font-weight:600;overflow:hidden;transition:transform .35s ease,box-shadow .35s ease,border-color .35s ease}
.portfolio-card img{height:150px;max-width:100%;object-fit:contain;transition:transform .5s ease}
.portfolio-card:hover{transform:translateY(-8px);border-color:var(--brand-red,#E31B23);box-shadow:0 18px 38px rgba(0,0,0,.14)}
.portfolio-card:hover img{transform:scale(1.1)}

/* ===== Stats band ===== */
.stats-band{background:linear-gradient(135deg,#E31B23 0%,#8f0f15 100%);color:#fff;padding:3.5rem 0}
.stats-band-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:2rem;text-align:center}
.stats-band-item .stat-number{display:block;font-size:2.4rem;font-weight:800;color:#fff}
.stats-band-item .stat-label{display:block;margin-top:.35rem;opacity:.9;color:#fff}


/* ===== Logo intro animation (overrides earlier loader styles) ===== */
#page-loader{background:#FD0304;transition:transform .9s cubic-bezier(.77,0,.18,1),opacity .9s ease;opacity:1;visibility:visible}
#page-loader.done{transform:translateY(-100%);opacity:1;visibility:visible}
.loader-logo-wrap{position:relative;width:min(520px,82vw);margin:0 auto;overflow:hidden;animation:logoZoom 2.4s cubic-bezier(.22,1,.36,1) both}
.loader-logo{display:block;width:100%;max-width:none;animation:logoReveal 1.4s cubic-bezier(.77,0,.18,1) both}
.loader-shine{position:absolute;top:0;bottom:0;left:-40%;width:30%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-18deg);animation:logoShine 1.1s ease-in-out 1.3s both}
.loader-bar{width:min(260px,60vw);height:3px;margin:1.5rem auto 0;background:rgba(255,255,255,.3);border-radius:3px;overflow:hidden}
.loader-bar span{width:100%;background:#FFE600;transform-origin:left;animation:loaderFill 2.4s ease-in-out both}
@keyframes logoReveal{0%{clip-path:inset(0 100% 0 0);transform:translateX(-30px) scale(.9);filter:blur(6px)}60%{filter:blur(0)}100%{clip-path:inset(0 0 0 0);transform:none;filter:blur(0)}}
@keyframes logoZoom{0%,55%{transform:scale(1)}100%{transform:scale(1.06)}}
@keyframes logoShine{0%{left:-40%}100%{left:130%}}
@keyframes loaderFill{0%{transform:scaleX(0)}100%{transform:scaleX(1)}}
@media(prefers-reduced-motion:reduce){.loader-logo-wrap,.loader-logo,.loader-shine,.loader-bar span{animation:none}}


/* ===== Light / dark colour management ===== */
.mega-col a,.portfolio-card{color:var(--text-main)}
.mega-col a:hover{color:var(--brand-red)}
.portfolio-tab{color:var(--text-main);border-color:var(--border-color)}
.portfolio-tab.active{color:#fff}
.portfolio-card,.mega-menu{border-color:var(--border-color)}
[data-theme="light"] .text-yellow{color:var(--brand-yellow-dark)!important}
[data-theme="light"] .mega-menu,[data-theme="light"] .portfolio-card{box-shadow:var(--shadow-md)}
[data-theme="dark"] .mega-menu{background:var(--bg-surface)}
