/* One session introduction. The page renders independently underneath it.
   CSS and the tiny head watchdog both clear the overlay without site.js. */
.site-splash {
  position: fixed;
  z-index: 2147483647;
  inset: 0;
  display: none;
  width: 100%;
  height: 100vh;
  height: 100dvh;
  overflow: hidden;
  isolation: isolate;
  contain: layout paint;
  color: var(--white, #f7fbfb);
  cursor: pointer;
}
html.splash-active .site-splash,
html.splash-exit .site-splash { display: block !important; }

.splash-backdrop {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 27rem 22rem at 42% 44%, rgb(39 99 168 / 16%), transparent 75%),
    radial-gradient(ellipse 23rem 17rem at 64% 58%, rgb(24 111 124 / 9%), transparent 80%),
    linear-gradient(145deg, #040b15, var(--navy-950, #06111d) 52%, #040a13);
}
.splash-backdrop::after {
  position: absolute;
  inset: 0;
  content: "";
  background: linear-gradient(119deg, transparent 22%, rgb(96 165 250 / 2.5%) 43%, transparent 60%);
  opacity: 0;
  animation: splash-light-in 1.5s .15s ease-out forwards;
}

/* Only this fixed decoration responds to Safari's visual viewport. No page reflow. */
.splash-stage {
  position: absolute;
  inset: 0 0 auto;
  display: grid;
  height: 100vh;
  height: 100dvh;
  height: var(--splash-height, 100dvh);
  padding-block: env(safe-area-inset-top, 0px) env(safe-area-inset-bottom, 0px);
  box-sizing: border-box;
  place-items: center;
  transform: translate3d(0, var(--splash-top, 0px), 0);
  transition: height 180ms ease-out, transform 180ms ease-out;
}
.splash-grid {
  position: absolute;
  width: min(155vw, 76rem);
  height: min(105vw, 46rem);
  top: 50%;
  background-image:
    linear-gradient(rgb(96 165 250 / 8%) 1px, transparent 1px),
    linear-gradient(90deg, rgb(96 165 250 / 8%) 1px, transparent 1px);
  background-size: clamp(2.1rem, 4vw, 3.5rem) clamp(2.1rem, 4vw, 3.5rem);
  mask-image: radial-gradient(ellipse 48% 52% at 50% 45%, #000, transparent 100%);
  transform-origin: 50% 0;
  opacity: 0;
  animation: splash-grid-in 1.65s .1s cubic-bezier(.22,1,.36,1) forwards;
  pointer-events: none;
}
.splash-network {
  position: absolute;
  width: min(112vw, 42rem);
  aspect-ratio: 1.3;
  color: var(--turquoise, #35d3c3);
  pointer-events: none;
}
.splash-network::before,
.splash-network::after,
.splash-wave {
  position: absolute;
  content: "";
  border: 1px solid rgb(96 165 250 / 13%);
  border-radius: 50%;
  opacity: 0;
}
.splash-network::before {
  inset: 7% 17%;
  animation: splash-ring-in 1.2s .48s ease-out forwards;
}
.splash-network::after {
  inset: 14% 23%;
  border-color: rgb(96 165 250 / 6%);
  animation: splash-ring-in 1.4s .55s ease-out forwards;
}
.splash-wave {
  inset: 7% 17%;
  border-color: rgb(53 211 195 / 24%);
  animation: splash-ring-wave 1.2s 1.28s cubic-bezier(.22,1,.36,1) forwards;
}
.splash-network svg { display: block; width: 100%; height: 100%; }
.splash-links { color: var(--brand-blue, #60a5fa); opacity: .24; }
.splash-links path {
  stroke-dasharray: 1;
  stroke-dashoffset: 1;
  animation: splash-link-in 1.35s .42s cubic-bezier(.3,0,.2,1) forwards;
}
.splash-links path:nth-child(2) { animation-delay: .58s; }
.splash-links path:nth-child(3) { animation-delay: .82s; opacity: .5; }
.splash-packets path {
  stroke-dasharray: .025 .975;
  stroke-dashoffset: 1;
  opacity: 0;
  animation: splash-packet 1.55s .72s cubic-bezier(.3,0,.2,1) forwards;
}
.splash-packets path:nth-child(2) { animation-delay: .91s; }
.splash-nodes circle {
  opacity: 0;
  transform-box: fill-box;
  transform-origin: center;
  animation: splash-node-in .8s .32s ease-out forwards;
}
.splash-nodes circle:nth-child(2),
.splash-nodes circle:nth-child(9) { animation-delay: .48s; }
.splash-nodes circle:nth-child(3),
.splash-nodes circle:nth-child(8) { animation-delay: .66s; }
.splash-nodes circle:nth-child(4),
.splash-nodes circle:nth-child(7) { animation-delay: .87s; }
.splash-nodes circle:nth-child(5),
.splash-nodes circle:nth-child(6) { animation-delay: 1.08s; }
.splash-center {
  position: relative;
  z-index: 1;
  display: grid;
  place-items: center;
  /* The end of the actual sequence starts the handoff; no load-event wait. */
  animation: splash-sequence 2.28s linear both;
}
.splash-center::before {
  position: absolute;
  width: clamp(17rem, 64vw, 30rem);
  aspect-ratio: 1.6;
  background: radial-gradient(ellipse, rgb(5 17 31 / 92%) 15%, rgb(5 17 31 / 25%) 55%, transparent 73%);
  content: "";
  pointer-events: none;
}
.splash-logo {
  position: relative;
  display: flex;
  align-items: center;
  gap: clamp(.8rem, 2.7vw, 1.1rem);
  white-space: nowrap;
}
.splash-logo .brand-mark {
  width: clamp(3.4rem, 13.5vw, 4.5rem);
  height: clamp(3.4rem, 13.5vw, 4.5rem);
  border-radius: 22%;
  box-shadow: 0 0 1.6rem rgb(53 211 195 / 9%);
  filter: none;
  opacity: 0;
  transform: scale(.92);
  animation: splash-mark-in .75s .24s cubic-bezier(.16,1,.3,1) forwards;
}
.splash-logo .brand-mark svg { display: block; width: 100%; height: 100%; }
.splash-logo .brand-mark-bg {
  fill: var(--navy-800, #102238);
  stroke: rgb(96 165 250 / 35%);
  stroke-width: .45;
}
.splash-logo .brand-mark-signal {
  stroke: var(--turquoise, #35d3c3);
  animation: splash-signal-active .8s 1.48s ease-in-out both;
}
.splash-logo .brand-word {
  color: var(--white, #f7fbfb);
  font-family: var(--display, system-ui, sans-serif);
  font-size: clamp(2.55rem, 10.4vw, 3.5rem);
  font-weight: 450;
  letter-spacing: -.05em;
  line-height: 1.12;
  opacity: 0;
  transform: translate3d(.35rem, .2rem, 0);
  animation: splash-word-in .85s .5s cubic-bezier(.16,1,.3,1) forwards;
}
.splash-logo .brand-word b { color: var(--brand-blue, #60a5fa); font-weight: 700; }

/* A bounded CSS backstop still completes when JavaScript throws. */
html.splash-active .site-splash { animation: splash-css-backstop 3.2s both; }
html.splash-exit .site-splash { pointer-events: none; }
html.splash-exit .splash-backdrop { animation: splash-backdrop-out var(--splash-exit-duration, .82s) cubic-bezier(.4,0,.2,1) both; }
html.splash-exit .splash-grid,
html.splash-exit .splash-network { animation: splash-network-out .65s ease-out both; }
html.splash-exit .splash-center::before { animation: splash-backdrop-out .45s ease-out both; }
html.splash-exit:not(.splash-docking) .splash-center { animation: splash-lockup-out .18s ease-out both; }
html.splash-docking .nav .brand { animation: splash-nav-handoff var(--splash-exit-duration, .82s) linear both !important; }

@keyframes splash-sequence { from, to { opacity: 1; } }
@keyframes splash-light-in { to { opacity: 1; } }
@keyframes splash-grid-in {
  from { opacity: 0; transform: perspective(700px) rotateX(58deg) translate3d(0, -1.2rem, 0); }
  to { opacity: .65; transform: perspective(700px) rotateX(58deg) translate3d(0, -.5rem, 0); }
}
@keyframes splash-link-in { to { stroke-dashoffset: 0; } }
@keyframes splash-packet {
  0% { opacity: 0; stroke-dashoffset: 1; }
  15%, 65% { opacity: .62; }
  100% { opacity: 0; stroke-dashoffset: 0; }
}
@keyframes splash-node-in {
  from { opacity: 0; transform: scale(.65); }
  to { opacity: .62; transform: scale(1); }
}
@keyframes splash-ring-in {
  from { opacity: 0; transform: scale(.97); }
  to { opacity: 1; transform: scale(1); }
}
@keyframes splash-ring-wave {
  0% { opacity: 0; transform: scale(.84); }
  25% { opacity: .5; }
  100% { opacity: 0; transform: scale(1.12); }
}
@keyframes splash-mark-in { to { opacity: 1; transform: scale(1); } }
@keyframes splash-word-in { to { opacity: 1; transform: none; } }
@keyframes splash-signal-active {
  0%, 100% { opacity: .72; }
  45% { opacity: 1; }
}
@keyframes splash-backdrop-out { to { opacity: 0; } }
@keyframes splash-network-out { to { opacity: 0; transform: translate3d(0, -.6rem, 0) scale(1.04); } }
@keyframes splash-lockup-out { to { opacity: 0; transform: translate3d(0, -.5rem, 0) scale(.98); } }
@keyframes splash-nav-handoff { 0%, 70% { opacity: 0; } 100% { opacity: 1; } }
@keyframes splash-css-backstop {
  0%, 71% { opacity: 1; visibility: visible; }
  100% { opacity: 0; visibility: hidden; pointer-events: none; }
}
@media (min-width: 64rem) {
  .splash-network { width: clamp(34rem, 46vw, 42rem); }
}
@media (prefers-reduced-motion: reduce) {
  html .site-splash,
  html.splash-active .site-splash,
  html.splash-exit .site-splash { display: none !important; animation: none !important; }
  .site-splash *, .site-splash *::before, .site-splash *::after { animation: none !important; transition: none !important; }
  html.splash-docking .nav .brand { animation: none !important; opacity: 1; }
}
