body {
  margin: 0;
  background-color: #fff;
}

.pwa-loader__spinner {
  display: flex;
  align-items: center;
  justify-content: center;
}

.pwa-loader__spinner--fullscreen {
  position: fixed;
  inset: 0;
  z-index: 1000;
  background-color: rgb(255 255 255 / 80%);
}

/* Иконка приложения — основной индикатор загрузки; точки ниже остаются
   запасным вариантом, когда иконка ещё не сохранена (первый заход на лендинг). */
.pwa-loader__icon {
  width: 96px;
  height: 96px;
  border-radius: 22%;
  object-fit: cover;
  animation: pwa-loader-pulse 1.2s ease-in-out infinite alternate;
}

@keyframes pwa-loader-pulse {
  from {
    opacity: 0.75;
    transform: scale(0.94);
  }

  to {
    opacity: 1;
    transform: scale(1);
  }
}

.pwa-loader__dots {
  width: 200px;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

/* display у элементов ниже задан классом и сам по себе перебил бы [hidden]. */
.pwa-loader__icon[hidden],
.pwa-loader__dots[hidden] {
  display: none;
}

.pwa-loader__circle {
  position: relative;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  margin: 3px;
}

@keyframes pwa-loader-moving-up {
  from {
    top: 0;
  }

  to {
    top: 40px;
  }
}

.pwa-loader__circle--blue {
  background-color: #4885ed;
  animation: pwa-loader-moving-up 1.5s infinite alternate;
}

.pwa-loader__circle--red {
  background-color: #db3236;
  animation: pwa-loader-moving-up 1.5s 0.25s infinite alternate;
}

.pwa-loader__circle--yellow {
  background-color: #f4c20d;
  animation: pwa-loader-moving-up 1.5s 0.4s infinite alternate;
}

.pwa-loader__circle--green {
  background-color: #3cba54;
  animation: pwa-loader-moving-up 1.5s 0.6s infinite alternate;
}
