/* V115: shared header progress for the five primary iframe routes. */
.portal-v2 .register-inline-frame {
  transition: opacity .18s ease;
}

body.route-loading .portal-v2 #panel-view.panel-loading .register-inline-frame {
  visibility: hidden;
  opacity: 0;
}

body.route-loading .portal-v2 .topbar::after {
  content: "";
  position: absolute;
  z-index: 70;
  left: 0;
  right: auto;
  bottom: -1px;
  width: 100%;
  height: 3px;
  display: block;
  pointer-events: none;
  transform: scaleX(.04);
  transform-origin: left center;
  animation: sagrothRouteLoad 1.45s cubic-bezier(.12, .64, .25, 1) forwards;
  background: linear-gradient(90deg, #5c161e 0%, var(--s14-accent, #a32935) 52%, var(--s14-silver, #c5c5ca) 88%, var(--s14-text, #ededee) 100%);
  box-shadow: 0 0 12px rgba(163, 41, 53, .5);
}

body.route-loading.route-load-complete .portal-v2 .topbar::after {
  animation: none;
  transform: scaleX(1);
  transition: transform .18s ease-out;
}

@keyframes sagrothRouteLoad {
  0% { transform: scaleX(.04); }
  36% { transform: scaleX(.38); }
  72% { transform: scaleX(.64); }
  100% { transform: scaleX(.82); }
}

@media (prefers-reduced-motion: reduce) {
  body.route-loading .portal-v2 .topbar::after {
    animation: none;
    transform: scaleX(.72);
  }

  body.route-loading.route-load-complete .portal-v2 .topbar::after {
    transform: scaleX(1);
  }
}
