/* SPA: контент не схлопывается при переходе; индикатор загрузки без затемнения. */
#app-main {
  min-height: calc(var(--app-min-height, 100vh) - var(--nav-h, 60px));
}

html.is-spa-loading #app-main {
  pointer-events: none;
}

html.is-spa-loading::after {
  content: '';
  position: fixed;
  top: var(--nav-h, 60px);
  left: 0;
  width: 35%;
  height: 2px;
  z-index: 4000;
  background: var(--primary-color, #6366f1);
  animation: spa-nav-progress 0.7s ease-in-out infinite alternate;
  pointer-events: none;
}

@keyframes spa-nav-progress {
  from {
    transform: translateX(-100%);
    opacity: 0.55;
  }
  to {
    transform: translateX(280%);
    opacity: 1;
  }
}
