/* ============================================================
   ANIMATIONS
   ============================================================ */

@keyframes stagger-up {
  from { opacity: 0; transform: translateY(12px); }
  to { opacity: 1; transform: translateY(0); }
}
.stagger > * {
  opacity: 0;
  animation: stagger-up 480ms cubic-bezier(.2,.7,.2,1) forwards;
}
.stagger > *:nth-child(1) { animation-delay: 60ms; }
.stagger > *:nth-child(2) { animation-delay: 120ms; }
.stagger > *:nth-child(3) { animation-delay: 180ms; }
.stagger > *:nth-child(4) { animation-delay: 240ms; }
.stagger > *:nth-child(5) { animation-delay: 300ms; }
.stagger > *:nth-child(6) { animation-delay: 360ms; }
.stagger > *:nth-child(7) { animation-delay: 420ms; }
.stagger > *:nth-child(8) { animation-delay: 480ms; }
.stagger > *:nth-child(9) { animation-delay: 540ms; }
.stagger > *:nth-child(10) { animation-delay: 600ms; }

@keyframes pulse {
  0% { box-shadow: 0 0 0 0 rgba(43,217,194,0.55); }
  70% { box-shadow: 0 0 0 8px rgba(43,217,194,0); }
  100% { box-shadow: 0 0 0 0 rgba(43,217,194,0); }
}

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

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

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes flashSelected {
  0% { box-shadow: 0 0 0 0 var(--brand-glow); }
  100% { box-shadow: 0 0 0 12px transparent; }
}
.ed-element.selected {
  animation: flashSelected 480ms ease;
}

.view-fade-in { animation: stagger-up 380ms cubic-bezier(.2,.7,.2,1); }

/* Cursor modes en el stage */
.ed-stage.cursor-text { cursor: text; }
.ed-stage.cursor-move { cursor: move; }
.ed-stage.cursor-default { cursor: default; }