@keyframes pulse-dot {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.35; }
}

@keyframes trace-draw {
  from { stroke-dashoffset: var(--dash, 400); }
  to { stroke-dashoffset: 0; }
}

@keyframes flicker {
  0%, 100% { opacity: 1; }
  92% { opacity: 1; }
  93% { opacity: 0.4; }
  94% { opacity: 1; }
}

@keyframes scan-sweep {
  from { transform: translateY(-100%); }
  to { transform: translateY(100%); }
}

.reveal {
  opacity: 0;
  transform: translateY(16px);
  transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out);
}
.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.core-trace {
  stroke-dasharray: var(--dash, 400);
  stroke-dashoffset: var(--dash, 400);
  animation: trace-draw 2.4s var(--ease-out) forwards;
}

.core-chip {
  animation: flicker 6s infinite;
}

@media (prefers-reduced-motion: reduce) {
  .reveal { opacity: 1; transform: none; }
  .core-trace { stroke-dashoffset: 0; animation: none; }
  .core-chip { animation: none; }
}
