.page-loading-overlay {
  position: absolute;
  inset: 0;
  z-index: 10;
  pointer-events: none;
  background: var(--page);
  opacity: 1;
  transition: opacity 160ms ease;
}

.page-loading-overlay.is-hiding {
  opacity: 0;
}

@media (prefers-reduced-motion: reduce) {
  .page-loading-overlay {
    transition: none;
  }
}

.page-loading-overlay .page-loading-line {
  display: inline-block;
  width: var(--page-loading-width, 60%);
  min-width: 36px;
  height: 0.9em;
  border-radius: 999px;
  background: var(--surface-hover);
  color: transparent;
  overflow: hidden;
  vertical-align: middle;
}

.page-loading-overlay .page-loading-media {
  background: var(--surface-hover);
  color: transparent;
}

.page-loading-overlay .page-loading-line,
.page-loading-overlay .page-loading-media {
  position: relative;
}

.page-loading-overlay .page-loading-line::after,
.page-loading-overlay .page-loading-media::after {
  content: '';
  position: absolute;
  inset: 0;
  transform: translateX(-100%);
  background: linear-gradient(
    90deg,
    transparent,
    color-mix(in srgb, var(--surface) 65%, transparent),
    transparent
  );
  animation: page-loading-shimmer 1.4s infinite;
}

@keyframes page-loading-shimmer {
  100% {
    transform: translateX(100%);
  }
}

@media (prefers-reduced-motion: reduce) {
  .page-loading-overlay .page-loading-line::after,
  .page-loading-overlay .page-loading-media::after {
    animation: none;
  }
}

/* Текст внутри skeleton всегда скрыт,
   даже если исходный компонент задаёт свой цвет */
.page-loading-overlay .page-loading-line {
  color: transparent !important;
  -webkit-text-fill-color: transparent !important;
  text-shadow: none !important;
}

.page-loading-overlay .page-loading-line::selection {
  color: transparent;
  background: transparent;
}

/* Якорь только для page-loading overlay.
   position: relative не меняет геометрию .main */
.main {
  position: relative;
}
