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

@keyframes markBreath { 0%, 100% { box-shadow: 0 0 0 0 rgba(91,91,214,0); transform: scale(1); } 50% { box-shadow: 0 0 0 10px rgba(91,91,214,0.1); transform: scale(1.04); } }

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

@keyframes spin { to { transform: rotate(360deg); } }

@keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-16.6667%); } }

@keyframes cursorBlink { 0%, 45% { opacity: 1; } 55%, 100% { opacity: 0; } }

@keyframes orbFloat {
  0% { opacity: 0; transform: translateY(0px) scale(1); }
  20% { opacity: 1; }
  50% { transform: translateY(-24px) scale(1.05); }
  80% { opacity: 1; }
  100% { opacity: 0; transform: translateY(0px) scale(1); }
}

@keyframes dotPulse { 0%,100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.6); opacity: 0.7; } }

/* Mark-by-mark reveal (examiner result) — see result-view.js */
@keyframes markRise { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@keyframes scorePop { 0% { opacity: 0; transform: scale(0.72); } 60% { transform: scale(1.06); } 100% { opacity: 1; transform: scale(1); } }
