:root {
  --motion-ease: cubic-bezier(.22, 1, .36, 1);
  --motion-fast: 220ms;
  --motion-medium: 680ms;
}

/* Keep CTA labels readable instead of inheriting the global blue link hover. */
a.btn,
a.btn:hover,
a.btn:focus-visible,
a.nav-end:hover,
a.nav-end:focus-visible {
  color: #fff;
}

a.btn.outline,
a.btn.outline:hover,
a.btn.outline:focus-visible {
  color: var(--navy);
}

@view-transition {
  navigation: auto;
}

::view-transition-old(root) {
  animation: page-out 180ms ease both;
}

::view-transition-new(root) {
  animation: page-in 420ms var(--motion-ease) both;
}

html {
  scroll-behavior: smooth;
}

.hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  --spot-x: 76%;
  --spot-y: 24%;
}

.hero::before,
.hero::after {
  content: "";
  position: absolute;
  pointer-events: none;
  z-index: -1;
}

.hero::before {
  width: clamp(330px, 48vw, 720px);
  aspect-ratio: 1;
  left: var(--spot-x);
  top: var(--spot-y);
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: radial-gradient(circle, rgba(3, 88, 252, .16), rgba(20, 138, 91, .07) 38%, transparent 70%);
  filter: blur(8px);
  animation: hero-breathe 8s ease-in-out infinite alternate;
}

.hero::after {
  inset: 0;
  background-image: radial-gradient(rgba(3, 88, 252, .15) .8px, transparent .8px);
  background-size: 24px 24px;
  mask-image: linear-gradient(105deg, transparent 30%, #000 100%);
  opacity: .34;
}

.hero > .shell {
  position: relative;
  z-index: 1;
}

.motion-ready .site-header {
  animation: header-in 560ms var(--motion-ease) both;
}

.motion-ready .reveal-motion {
  opacity: 0;
  transform: translate3d(0, 24px, 0) scale(.985);
  filter: blur(4px);
  transition:
    opacity var(--motion-medium) var(--motion-ease),
    transform var(--motion-medium) var(--motion-ease),
    filter var(--motion-medium) var(--motion-ease);
  transition-delay: var(--reveal-delay, 0ms);
  will-change: opacity, transform, filter;
}

.motion-ready .reveal-motion.is-visible {
  opacity: 1;
  transform: translate3d(0, 0, 0) scale(1);
  filter: blur(0);
}

.tile {
  position: relative;
  overflow: hidden;
  transition:
    transform 360ms var(--motion-ease),
    box-shadow 360ms var(--motion-ease),
    border-color 360ms ease,
    background-color 360ms ease;
}

.tile::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--blue), var(--emerald));
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 420ms var(--motion-ease);
}

.btn {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  transition:
    transform var(--motion-fast) var(--motion-ease),
    box-shadow var(--motion-fast) ease,
    background-color var(--motion-fast) ease,
    border-color var(--motion-fast) ease;
}

.btn::after {
  content: "";
  position: absolute;
  inset: -2px;
  background: linear-gradient(110deg, transparent 25%, rgba(255, 255, 255, .38) 48%, transparent 72%);
  transform: translateX(-120%);
  transition: transform 620ms var(--motion-ease);
  z-index: 1;
  pointer-events: none;
}

.desktop-nav a,
.foot a {
  transition: color var(--motion-fast) ease, opacity var(--motion-fast) ease;
}

.desktop-nav a {
  position: relative;
}

.desktop-nav a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -7px;
  height: 2px;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--blue), var(--emerald));
  transform: scaleX(0);
  transform-origin: center;
  transition: transform 300ms var(--motion-ease);
}

.mobile-nav.open {
  animation: menu-in 320ms var(--motion-ease) both;
}

.word-highlight {
  box-shadow: 0 .16em .5em rgba(3, 88, 252, .2);
  animation: highlight-pulse 3.8s ease-in-out infinite;
}

@media (hover: hover) and (pointer: fine) {
  .tile:hover {
    transform: translateY(-7px);
    border-color: rgba(3, 88, 252, .3);
    box-shadow: 0 22px 48px rgba(2, 33, 87, .12);
  }

  .tile:hover::after,
  .desktop-nav a:hover::after,
  .desktop-nav a:focus-visible::after {
    transform: scaleX(1);
  }

  .btn:hover {
    transform: translateY(-3px);
    box-shadow: 0 14px 28px rgba(3, 88, 252, .2);
  }

  .btn:hover::after {
    transform: translateX(120%);
  }

  .foot a:hover {
    opacity: .78;
  }
}

@media (max-width: 700px) {
  .hero::before {
    width: 430px;
    opacity: .8;
  }

  .hero::after {
    opacity: .22;
  }
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-duration: .01ms !important;
    transition-delay: 0ms !important;
  }

  .motion-ready .reveal-motion {
    opacity: 1;
    transform: none;
    filter: none;
  }
}

@keyframes header-in {
  from { opacity: 0; transform: translateY(-18px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes hero-breathe {
  from { opacity: .7; transform: translate(-50%, -50%) scale(.94); }
  to { opacity: 1; transform: translate(-50%, -50%) scale(1.08); }
}

@keyframes highlight-pulse {
  0%, 100% { box-shadow: 0 .16em .5em rgba(3, 88, 252, .18); }
  50% { box-shadow: 0 .18em .7em rgba(3, 88, 252, .34); }
}

@keyframes menu-in {
  from { opacity: 0; transform: translateY(-10px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes page-out {
  to { opacity: 0; transform: translateY(-5px); }
}

@keyframes page-in {
  from { opacity: 0; transform: translateY(8px); }
}
