/* Motion lives mostly in GSAP (assets/js/utils/motion.js). CSS here only covers
   state transitions that do not need orchestration. All of it is neutralised by
   the prefers-reduced-motion block in reset.css. */

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

.diagram-slot[aria-busy="true"] {
  min-height: 60px;
  border-radius: var(--r-xl);
  background: var(--surface-row);
  border: 1px dashed var(--border-row);
  animation: pulse-dot 1.4s ease-in-out infinite;
}

.progress__fill { will-change: transform; }
.day-card, .card-link, .quiz-option, .lab-step, .module-row, .pipe-node { will-change: auto; }

.boot-screen[role="status"] { animation: pulse-dot 1.4s ease-in-out infinite; }
