/* Sfondo del loader identico a quello del body (griglia + glow) */
.loader-overlay {
  background-color: white; /* light fallback */
}
.dark .loader-overlay {
  background-color: #111827; /* gray-900 */
}

.loader-overlay::before,
.loader-overlay::after {
  content: '';
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
}
.loader-overlay::before {
  background-image:
    linear-gradient(rgba(99,102,241,0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(99,102,241,0.06) 1px, transparent 1px);
  background-size: 40px 40px;
}
body:not(.dark) .loader-overlay::before {
  background-image:
    linear-gradient(rgba(37,99,235,0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(37,99,235,0.06) 1px, transparent 1px);
  background-size: 44px 44px;
}
.loader-overlay::after {
  background:
    radial-gradient(ellipse 60% 40% at 20% 20%, rgba(59,130,246,0.08) 0%, transparent 70%),
    radial-gradient(ellipse 50% 35% at 80% 70%, rgba(99,102,241,0.07) 0%, transparent 70%),
    radial-gradient(ellipse 40% 30% at 60% 10%, rgba(139,92,246,0.05) 0%, transparent 70%);
}
body:not(.dark) .loader-overlay::after {
  background:
    radial-gradient(ellipse 60% 40% at 20% 20%, rgba(59,130,246,0.1) 0%, transparent 70%),
    radial-gradient(ellipse 50% 35% at 80% 70%, rgba(99,102,241,0.08) 0%, transparent 70%);
}

/* Animazione fade lenta e morbida */
@keyframes fade-slow {
  0%, 100% {
    opacity: 1;
    transform: scale(1);
  }
  50% {
    opacity: 0.5;
    transform: scale(0.96);
  }
}
.animate-fade-slow {
  animation: fade-slow 3s ease-in-out infinite;
}