/* The first paint is the loader, never the old interface followed by a loader.
   The exported page remains intact underneath and is revealed exactly once. */
body::before,
body::after {
  opacity: 1;
  transition: opacity 0.28s ease;
}

body::before {
  pointer-events: auto;
  animation: mahina-stable-loader-failsafe 0.28s ease 8s forwards;
}

body::after {
  animation:
    mahina-loader-sweep 1.35s cubic-bezier(0.65, 0, 0.35, 1) infinite,
    mahina-stable-loader-failsafe 0.28s ease 8s forwards;
}

body[data-mahina-page-loaded="true"]::before,
body[data-mahina-page-loaded="true"]::after {
  opacity: 0;
  pointer-events: none;
  animation: none;
}

@keyframes mahina-stable-loader-failsafe {
  to { opacity: 0; visibility: hidden; pointer-events: none; }
}

@media (prefers-reduced-motion: reduce) {
  body::before,
  body::after {
    transition: none;
    animation: mahina-stable-loader-failsafe 0.01s linear 8s forwards;
  }
  body::after { background-position: 0 0; }
  body[data-mahina-page-loaded="true"]::before,
  body[data-mahina-page-loaded="true"]::after { animation: none; }
}
