/* "Back to top" button, shared by every page that loads js/pbt-scroll-top.js.
   The script adds the button; it appears after the visitor scrolls down and the ring
   around the arrow shows how far down the page they are. Change its look with the
   variables below (on .pbt-scroll-top, or on :root to change every page). */

.pbt-scroll-top {
  --pbt-st-size: 52px;
  --pbt-st-right: clamp(16px, 2.5vw, 32px);
  --pbt-st-bottom: clamp(16px, 2.5vw, 32px);
  --pbt-st-raise: 88px;              /* extra lift when a chat button shares the corner */
  --pbt-st-bg: #0b3b9c;
  --pbt-st-bg-hover: #082f7d;
  --pbt-st-fg: #fff;
  --pbt-st-ring: #5ec8ff;
  --pbt-st-ring-track: rgba(255, 255, 255, 0.22);
  --pbt-st-focus: #ffbf00;
  --pbt-st-shadow: 0 10px 24px rgba(5, 30, 82, 0.28);
  --pbt-st-shadow-hover: 0 14px 30px rgba(5, 30, 82, 0.36);
  --pbt-st-z: 990;
  --pbt-st-speed: 0.35s;

  position: fixed;
  right: calc(var(--pbt-st-right) + env(safe-area-inset-right, 0px));
  bottom: calc(var(--pbt-st-bottom) + env(safe-area-inset-bottom, 0px));
  z-index: var(--pbt-st-z);
  display: grid;
  place-items: center;
  width: var(--pbt-st-size);
  height: var(--pbt-st-size);
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: var(--pbt-st-bg);
  color: var(--pbt-st-fg);
  box-shadow: var(--pbt-st-shadow);
  cursor: pointer;
  opacity: 0;
  visibility: hidden;
  transform: translateY(18px) scale(0.85);
  transition:
    opacity var(--pbt-st-speed) ease,
    transform var(--pbt-st-speed) cubic-bezier(0.2, 0.8, 0.2, 1.25),
    visibility 0s linear var(--pbt-st-speed),
    background-color 0.2s ease,
    box-shadow 0.2s ease;
  -webkit-tap-highlight-color: transparent;
}

.pbt-scroll-top.is-visible {
  opacity: 1;
  visibility: visible;
  transform: translateY(0) scale(1);
  transition-delay: 0s;
}

.pbt-scroll-top--raised {
  bottom: calc(var(--pbt-st-bottom) + var(--pbt-st-raise) + env(safe-area-inset-bottom, 0px));
}

.pbt-scroll-top:hover {
  background: var(--pbt-st-bg-hover);
  box-shadow: var(--pbt-st-shadow-hover);
}

.pbt-scroll-top:focus-visible {
  outline: 3px solid var(--pbt-st-focus);
  outline-offset: 3px;
}

/* Progress ring */
.pbt-scroll-top__ring {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  transform: rotate(-90deg);
  pointer-events: none;
}

.pbt-scroll-top__track,
.pbt-scroll-top__progress {
  fill: none;
  stroke-width: 2.5;
}

.pbt-scroll-top__track {
  stroke: var(--pbt-st-ring-track);
}

.pbt-scroll-top__progress {
  stroke: var(--pbt-st-ring);
  stroke-linecap: round;
  transition: stroke-dashoffset 0.15s linear;
}

.pbt-scroll-top__arrow {
  position: relative;
  width: 20px;
  height: 20px;
}

.pbt-scroll-top:hover .pbt-scroll-top__arrow,
.pbt-scroll-top:focus-visible .pbt-scroll-top__arrow {
  animation: pbt-st-nudge 0.9s ease-in-out infinite;
}

/* Brief lift of the arrow when the button is pressed */
.pbt-scroll-top.is-launching .pbt-scroll-top__arrow {
  animation: pbt-st-launch 0.5s ease-in forwards;
}

@keyframes pbt-st-nudge {
  0%,
  100% {
    transform: translateY(0);
  }

  50% {
    transform: translateY(-4px);
  }
}

@keyframes pbt-st-launch {
  0% {
    transform: translateY(0);
    opacity: 1;
  }

  60% {
    transform: translateY(-14px);
    opacity: 0;
  }

  61% {
    transform: translateY(12px);
    opacity: 0;
  }

  100% {
    transform: translateY(0);
    opacity: 1;
  }
}

@media (max-width: 640px) {
  .pbt-scroll-top {
    --pbt-st-size: 46px;
    --pbt-st-raise: 72px;
  }

  .pbt-scroll-top__arrow {
    width: 18px;
    height: 18px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .pbt-scroll-top,
  .pbt-scroll-top__progress {
    transition: opacity 0.01s, visibility 0s;
  }

  .pbt-scroll-top {
    transform: none;
  }

  .pbt-scroll-top:hover .pbt-scroll-top__arrow,
  .pbt-scroll-top:focus-visible .pbt-scroll-top__arrow,
  .pbt-scroll-top.is-launching .pbt-scroll-top__arrow {
    animation: none;
  }
}

@media print {
  .pbt-scroll-top {
    display: none;
  }
}
