/* Top progress bar */
.loading-bar {
  position: fixed;
  left: 0; top: 0;
  height: 3px;
  width: 100%;
  transform-origin: left center;
  transform: scaleX(0);
  background: linear-gradient(90deg, #0074e4, #5aa9ff);
  transition: transform .25s ease;
  z-index: 9999;
  opacity: 0;
}
.loading-bar.is-active { opacity: 1; }

/* Full-screen overlay */
.loading-overlay {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0.15); /* subtle */
  backdrop-filter: blur(1px);
  display: grid;
  place-items: center;
  opacity: 0;
  pointer-events: none;
  transition: opacity .15s ease;
  z-index: 9998; /* under bar */
}
.loading-overlay.is-active {
  opacity: 1;
  pointer-events: auto;
}

/* Spinner */
.loading-spinner {
  width: 36px; height: 36px;
  border-radius: 50%;
  border: 3px solid rgba(0,0,0,0.12);
  border-top-color: #0074e4;
  animation: spin .8s linear infinite;
  background: transparent;
}
@keyframes spin { to { transform: rotate(360deg); } }