/* Page loader: the Monfina mark assembles, then the overlay fades out.
   Hiding is pure CSS (animation), so a JS failure can never leave it stuck.
   .mf-seen (set inline in <head>) shortens it after the first page view;
   .mf-leaving (set by site.js on link click) fades it back in before navigating. */

.page-loader {
  position: fixed; inset: 0; z-index: 9999;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 26px;
  background: #080b16;
  pointer-events: none;
  animation: loader-out .45s ease .95s forwards;
}
.loader-mark { width: 84px; height: auto; overflow: visible; }
.loader-mark path { transform-box: fill-box; transform-origin: center; opacity: 0; }
/* Bars travel along the mark's own slant: purple rise into place, white drops to meet them. */
.loader-mark .lm-left  { animation: bar-rise .55s cubic-bezier(.2,.8,.2,1) .05s forwards; }
.loader-mark .lm-right { animation: bar-rise .55s cubic-bezier(.2,.8,.2,1) .17s forwards; }
.loader-mark .lm-top   { animation: bar-drop .55s cubic-bezier(.2,.8,.2,1) .29s forwards; }
.loader-line { width: 120px; height: 2px; border-radius: 2px; background: #1d2340; overflow: hidden; }
.loader-line::after {
  content: ''; display: block; height: 100%; width: 100%;
  background: linear-gradient(90deg, #6366f1, #c5b8ff);
  transform: scaleX(0); transform-origin: left;
  animation: line-fill .8s cubic-bezier(.4,0,.2,1) .1s forwards;
}

@keyframes bar-rise { from { opacity: 0; transform: translate(-14px, 32px); } to { opacity: 1; transform: none; } }
@keyframes bar-drop { from { opacity: 0; transform: translate(14px, -32px); } to { opacity: 1; transform: none; } }
@keyframes line-fill { to { transform: scaleX(1); } }
@keyframes loader-out { to { opacity: 0; visibility: hidden; } }
@keyframes loader-in { from { opacity: 0; visibility: visible; } to { opacity: 1; visibility: visible; } }

/* Repeat views in the same session: quicker. */
.mf-seen .page-loader { animation-delay: .5s; animation-duration: .35s; }
.mf-seen .loader-mark path { animation-duration: .35s; }
.mf-seen .loader-mark .lm-right { animation-delay: .1s; }
.mf-seen .loader-mark .lm-top { animation-delay: .15s; }
.mf-seen .loader-line::after { animation-duration: .45s; }

/* Leaving: show the (already assembled) mark while the next page loads. */
.mf-leaving .page-loader { animation: loader-in .22s ease forwards; pointer-events: auto; }
.mf-leaving .loader-mark path { animation: none; opacity: 1; transform: none; }
.mf-leaving .loader-line::after { animation: line-fill 1.2s ease forwards; transform: scaleX(0); }

@media (prefers-reduced-motion: reduce) {
  .page-loader { animation: loader-out .2s ease .15s forwards; }
  .loader-mark path, .mf-seen .loader-mark path { animation: none; opacity: 1; transform: none; }
  .loader-line { display: none; }
}
@media print { .page-loader { display: none; } }
