/* NexaIoT — Animations */
:root {
  --dur-fast:   150ms;
  --dur-normal: 300ms;
  --dur-slow:   600ms;
  --ease-out:   cubic-bezier(0.16,1,0.3,1);
  --ease-spring:cubic-bezier(0.34,1.56,0.64,1);
}

@keyframes revealUp {
  from{opacity:0;transform:translateY(20px)}
  to{opacity:1;transform:translateY(0)}
}
@keyframes fadeIn {
  from{opacity:0} to{opacity:1}
}
@keyframes slideInLeft {
  from{transform:translateX(-100%);opacity:0}
  to{transform:translateX(0);opacity:1}
}
@keyframes criticalPulse {
  0%,100%{box-shadow:0 0 0 0 rgba(255,59,92,.4)}
  50%{box-shadow:0 0 0 8px rgba(255,59,92,0)}
}
@keyframes breathe {
  0%,100%{opacity:1;transform:scale(1)}
  50%{opacity:.5;transform:scale(.75)}
}
@keyframes driftGlow {
  0%{background-position:20% 30%}
  33%{background-position:80% 20%}
  66%{background-position:60% 80%}
  100%{background-position:20% 30%}
}
@keyframes tickerScroll {
  from{transform:translateX(100vw)}
  to{transform:translateX(-100%)}
}
@keyframes valueFlash {
  0%{color:var(--accent);background:rgba(0,212,255,.15)}
  100%{color:var(--text);background:transparent}
}
@keyframes pulseBadge {
  0%,100%{transform:scale(1)}
  50%{transform:scale(1.2)}
}
@keyframes toastIn {
  from{opacity:0;transform:translateY(8px)}
  to{opacity:1;transform:translateY(0)}
}
@keyframes orbitPulse {
  0%{stroke-dashoffset:200;opacity:0}
  20%{opacity:1}
  80%{opacity:1}
  100%{stroke-dashoffset:0;opacity:0}
}
@keyframes spinRing {
  from{transform:rotate(0deg)}
  to{transform:rotate(360deg)}
}
@keyframes alertBlink {
  0%,90%,100%{opacity:1}
  95%{opacity:.3}
}
@keyframes scenFloat {
  0%,100%{transform:translateY(0)}
  50%{transform:translateY(-10px)}
}
@keyframes wordReveal {
  from{opacity:0;transform:translateY(30px);filter:blur(4px)}
  to{opacity:1;transform:translateY(0);filter:blur(0)}
}

/* Card hover */
.card,.device-card,.solution-card {
  transition:transform var(--dur-normal) var(--ease-spring),
             box-shadow var(--dur-normal) var(--ease-out),
             border-color var(--dur-fast) var(--ease-out);
}
.card:hover,.device-card:hover {
  transform:translateY(-3px);
  box-shadow:0 16px 48px rgba(0,0,0,.4);
}

/* Button */
.btn{transition:all var(--dur-fast) var(--ease-spring)}
.btn:active{transform:scale(.96)}

/* Value flash on update */
.metric-value.updated {
  animation:valueFlash 600ms var(--ease-out) forwards;
  border-radius:4px;
}

/* Scroll reveal via IntersectionObserver */
.scroll-reveal{opacity:0;transform:translateY(28px);transition:opacity .6s var(--ease-out),transform .6s var(--ease-out)}
.scroll-reveal.revealed{opacity:1;transform:translateY(0)}

@media(prefers-reduced-motion:reduce) {
  *{animation-duration:.01ms !important;transition-duration:.01ms !important}
}
