.page-loader {
  position: fixed;
  inset: 0;
  z-index: 9999;
  display: grid;
  place-items: center;
  isolation: isolate;
  overflow: hidden;
  background: radial-gradient(
    ellipse at 50% 40%,
    #245682 0%, #173d63 20%, #0c2847 43%, #06182e 72%, #030d1b 100%
  );
  color: #fff9ee;
  font-family: Arial, sans-serif;
  transition: opacity 0.22s ease, visibility 0.22s ease;
}

/* The landing page and both auth flows use the same loader. */
.page-loader .loader-content {
  position: relative;
  z-index: 2;
  box-sizing: border-box;
  width: min(84vw, 460px);
  padding: 25px 8px;
  text-align: center;
}

.page-loader .loader-orbit {
  position: relative;
  display: grid;
  place-items: center;
  width: min(72vw, 330px);
  aspect-ratio: 1;
  margin: 0 auto 24px;
}

.page-loader .loader-logo {
  display: block;
  position: relative;
  width: 76%;
  height: 66%;
  object-fit: contain;
  margin: 0;
  filter: brightness(0) invert(1) drop-shadow(0 0 22px #b9ddff30);
  animation: loader-float 4s ease-in-out infinite;
}

.loader-ring {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  transform: rotate(-90deg);
  overflow: visible;
}

.loader-ring circle {
  fill: none;
  stroke-width: 2;
}

.loader-ring-track {
  stroke: #ffffff18;
}

.loader-ring-value {
  stroke-dasharray: 100;
  stroke-dashoffset: 100;
  stroke-linecap: round;
  filter: drop-shadow(0 0 3px #f4dfbe60);
}

/* The percentage is visible. The progress bar carries its accessible value. */
.page-loader .loader-progress {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
}

.page-loader .loader-caption {
  position: relative;
  margin: 0 0 18px;
  font-family: "Crimson Pro", Georgia, serif;
  font-size: clamp(28px, 3vw, 40px);
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: 0.6px;
  background: linear-gradient(120deg, #fff, #fae0b8);
  background-clip: text;
  -webkit-background-clip: text;
  color: transparent;
}

.page-loader .loader-percent {
  margin: 12px 0 0;
  font: 500 clamp(58px, 6vw, 78px)/1 "Crimson Pro", Georgia, serif;
  font-variant-numeric: lining-nums tabular-nums;
  letter-spacing: -2px;
  background: linear-gradient(120deg, #fff, #bcd3e8 48%, #fae0b8);
  background-clip: text;
  color: transparent;
}

.page-loader .loader-note {
  margin: 16px 0 0;
  font: 12px/1.5 Arial, sans-serif;
  letter-spacing: 1.7px;
  color: #9bafc6;
}

@keyframes loader-float {
  50% { transform: translateY(-6px); }
}

.fh-auth-loader {
  z-index: 100001;
  visibility: visible;
}

html.fh-auth-loading :is(.auth-shell, .app) {
  visibility: hidden;
}

.page-loader.is-finished {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

dialog.page-loader {
  width: 100%;
  height: 100%;
  max-width: none;
  max-height: none;
  margin: 0;
  padding: 0;
  border: 0;
}

dialog.page-loader:not([open]) {
  display: none;
}

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

  .page-loader .loader-logo {
    animation: none;
  }
}

.fh-loader-starfield { position: absolute; inset: 0; z-index: 0; overflow: hidden; pointer-events: none; }
.fh-loader-starfield::before { content: ""; position: absolute; inset: -10%; background: radial-gradient( ellipse at 33% 40%, rgb(55 114 174 / 14%), transparent 42% ), radial-gradient( ellipse at 69% 65%, rgb(38 86 145 / 13%), transparent 40% ); filter: blur(24px); }
.fh-loader-star { position: absolute; left: var(--star-x); top: var(--star-y); width: var(--star-size); height: var(--star-size); border-radius: 50%; background: var(--star-color); opacity: var(--star-opacity); box-shadow: 0 0 5px rgb(218 237 255 / 32%); animation: fh-loader-star-drift var(--star-duration) ease-in-out var(--star-delay) infinite alternate; }
.fh-loader-star.is-glint { width: 3px; height: 3px; background: #fff4df; box-shadow: 0 0 5px #fff2d9, 0 0 12px rgb(255 226 183 / 25%); }
.fh-loader-star.is-glint::before { content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); border-radius: 50%; background: linear-gradient( 90deg, transparent, #fff2dc, transparent ); width: 15px; height: 1px; }
.fh-loader-star.is-glint::after { content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); border-radius: 50%; width: 1px; height: 15px; background: linear-gradient( transparent, #fff2dc, transparent ); }
@keyframes fh-loader-star-drift {
  from { transform: translate3d( calc(var(--star-dx) * -1), calc(var(--star-dy) * -1), 0 ); opacity: var(--star-opacity); }
  to { transform: translate3d( var(--star-dx), var(--star-dy), 0 ); opacity: calc(var(--star-opacity) * .65); }
}
@media (prefers-reduced-motion: reduce) {
  .fh-loader-star { animation: none !important; }
}
