/* Transición global para imágenes del tenant runtime. La clase se aplica por
   JavaScript antes de que la imagen termine de cargar, incluyendo AJAX/modales. */
.isa-image-loading,
.isa-image-loaded {
  transition: opacity .56s cubic-bezier(.22,.72,.22,1), filter .72s cubic-bezier(.22,.72,.22,1), transform .72s cubic-bezier(.22,.72,.22,1);
  will-change: opacity, filter, transform;
}

.isa-image-loading {
  opacity: 0;
  filter: blur(9px) saturate(.82);
  transform: scale(1.018);
  background-color: #edf1f7;
  background-image: linear-gradient(105deg, transparent 30%, rgba(255,255,255,.82) 46%, transparent 62%);
  background-size: 220% 100%;
  animation: isa-image-shimmer 1.15s ease-in-out infinite;
}

.isa-image-loaded {
  opacity: 1;
  filter: blur(0) saturate(1);
  transform: scale(1);
  background-image: none;
  animation: none;
  will-change: auto;
}

.isa-image-load-error {
  opacity: .72;
  filter: none;
  transform: none;
  background-image: none;
  animation: none;
}

.modal .isa-image-loading,
[role="dialog"] .isa-image-loading,
.mfp-content .isa-image-loading {
  transform: scale(.975);
}

@keyframes isa-image-shimmer {
  0% { background-position: 115% 0; }
  100% { background-position: -115% 0; }
}

@media (prefers-reduced-motion: reduce) {
  .isa-image-loading,
  .isa-image-loaded {
    animation: none;
    transition-duration: .01ms;
    filter: none;
    transform: none;
  }
}

@media print {
  .isa-image-loading,
  .isa-image-loaded,
  .isa-image-load-error {
    opacity: 1 !important;
    filter: none !important;
    transform: none !important;
    animation: none !important;
  }
}
