:root {
  --splash-bg: #00643b;
  --splash-stage-size: min(72vw, 280px);
  --splash-icon-src-size: 512;
  --splash-har-anchor-x: 59;
  --splash-har-anchor-y: 60;
  --splash-har-mask-width: 435;
  --splash-har-src-w: 1645;
  --splash-har-src-h: 520;
  --splash-har-fit-w: min(92vw, calc(88vh * var(--splash-har-src-w) / var(--splash-har-src-h)));
  --splash-har-fit-scale: calc(var(--splash-har-fit-w) / var(--splash-har-src-w));
  --splash-har-fit-h: calc(var(--splash-har-fit-w) * var(--splash-har-src-h) / var(--splash-har-src-w));
  --splash-har-offset-x: calc(var(--splash-har-anchor-x) * var(--splash-har-fit-scale));
  --splash-har-offset-y: calc(var(--splash-har-anchor-y) * var(--splash-har-fit-scale));
  --splash-icon-fit-size: calc(var(--splash-icon-src-size) * var(--splash-har-fit-scale));
  --splash-mask-x: calc(var(--splash-har-mask-width) * var(--splash-har-fit-scale));
  --splash-fade-delay: 0.15s;
  --splash-fade-duration: 0.45s;
  --splash-align-delay: calc(var(--splash-fade-delay) + var(--splash-fade-duration));
  --splash-align-duration: 0.75s;
  --splash-swap-delay: calc(var(--splash-align-delay) + var(--splash-align-duration));
  --splash-mask-duration: 0.85s;
}

html.no-app-splash #app-splash {
  display: none;
}

#app-splash {
  position: fixed;
  inset: 0;
  z-index: 10000;
  overflow: hidden;
  background: var(--splash-bg);
  transition: opacity 0.35s ease, visibility 0.35s ease;
}

#app-splash.app-splash--hide {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

.app-splash__har {
  position: absolute;
  top: calc(50% - var(--splash-har-fit-h) / 2);
  left: calc(50% - var(--splash-har-fit-w) / 2);
  z-index: 1;
  width: var(--splash-har-fit-w);
  height: var(--splash-har-fit-h);
  opacity: 0;
  pointer-events: none;
}

.app-splash__har-mask {
  position: absolute;
  top: calc(50% - var(--splash-har-fit-h) / 2);
  left: calc(50% - var(--splash-har-fit-w) / 2 + var(--splash-mask-x));
  z-index: 2;
  width: calc(var(--splash-har-fit-w) - var(--splash-mask-x));
  height: var(--splash-har-fit-h);
  background: var(--splash-bg);
  opacity: 1;
  visibility: hidden;
  pointer-events: none;
}

.app-splash__icon-wrap {
  position: absolute;
  top: calc(50% - var(--splash-stage-size) / 2);
  left: calc(50% - var(--splash-stage-size) / 2);
  z-index: 3;
  width: var(--splash-stage-size);
  height: var(--splash-stage-size);
}

.app-splash__icon-wrap img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.app-splash__from {
  opacity: 1;
}

.app-splash__to {
  opacity: 0;
}

@media (prefers-reduced-motion: no-preference) {
  .app-splash__from {
    animation: app-splash-fade-out var(--splash-fade-duration) ease-in-out var(--splash-fade-delay)
      forwards;
  }

  .app-splash__to {
    animation: app-splash-fade-in var(--splash-fade-duration) ease-in-out var(--splash-fade-delay)
      forwards;
  }

  .app-splash__icon-wrap {
    animation:
      app-splash-icon-align var(--splash-align-duration) ease-in-out var(--splash-align-delay) forwards,
      app-splash-icon-hide 0.01s linear var(--splash-swap-delay) forwards;
  }

  .app-splash__har {
    animation: app-splash-har-show 0.01s linear var(--splash-swap-delay) forwards;
  }

  .app-splash__har-mask {
    animation:
      app-splash-mask-reveal 0s linear var(--splash-swap-delay) forwards,
      app-splash-mask-swipe var(--splash-mask-duration) ease-in-out var(--splash-swap-delay) forwards;
  }
}

@media (prefers-reduced-motion: reduce) {
  .app-splash__from {
    display: none;
  }

  .app-splash__to {
    opacity: 0;
  }

  .app-splash__icon-wrap {
    display: none;
  }

  .app-splash__har {
    opacity: 1;
  }

  .app-splash__har-mask {
    display: none;
  }
}

@keyframes app-splash-fade-out {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

@keyframes app-splash-fade-in {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes app-splash-icon-align {
  from {
    top: calc(50% - var(--splash-stage-size) / 2);
    left: calc(50% - var(--splash-stage-size) / 2);
    width: var(--splash-stage-size);
    height: var(--splash-stage-size);
  }

  to {
    top: calc(50% - var(--splash-har-fit-h) / 2 - var(--splash-har-offset-y));
    left: calc(50% - var(--splash-har-fit-w) / 2 - var(--splash-har-offset-x));
    width: var(--splash-icon-fit-size);
    height: var(--splash-icon-fit-size);
  }
}

@keyframes app-splash-icon-hide {
  to {
    opacity: 0;
    visibility: hidden;
  }
}

@keyframes app-splash-har-show {
  to {
    opacity: 1;
  }
}

@keyframes app-splash-mask-reveal {
  to {
    visibility: visible;
  }
}

@keyframes app-splash-mask-swipe {
  from {
    transform: translateX(0);
  }

  to {
    transform: translateX(100%);
  }
}
