/* Early navigation override. Load immediately after the inline critical CSS. */
html.ih-navigation-ready .o-loader,
html.ih-navigation-ready .o-loader-light {
  display: none !important;
  visibility: hidden !important;
  pointer-events: none !important;
}

html.ih-navigation-ready.is-loading {
  cursor: auto;
}

/* Replace the original floating orange scribble with a quiet, local underline. */
html.ih-navigation-ready .o-svg-underline {
  display: none !important;
}

.c-header .o-nav_label {
  position: relative;
}

.c-header .o-nav_label::after {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: -4px;
  height: 1px;
  background: currentColor;
  opacity: 0;
  transform: scaleX(.75);
  transform-origin: left;
  transition: opacity 240ms ease, transform 300ms cubic-bezier(.2, .65, .3, 1);
}

.c-header .o-nav_link:hover .o-nav_label::after,
.c-header .o-nav_link:focus-visible .o-nav_label::after {
  opacity: .75;
  transform: scaleX(1);
}

/* Keep transitions on the resting state so cancellation also eases back.
   The outgoing page reaches zero opacity before the controller swaps it. */
html.ih-navigation-ready [data-load-container] .o-scroll,
html.ih-navigation-ready [data-load-container] .ih-footer-clean {
  transition: filter 300ms cubic-bezier(.4, 0, .2, 1), opacity 300ms cubic-bezier(.4, 0, .2, 1);
}

html.ih-route-changing [data-load-container] .o-scroll,
html.ih-route-changing [data-load-container] .ih-footer-clean {
  filter: blur(6px);
  opacity: 0;
  will-change: filter, opacity;
}

html.ih-route-entering [data-load-container] .o-scroll,
html.ih-route-entering [data-load-container] .ih-footer-clean {
  transition: filter 420ms cubic-bezier(.2, .65, .3, 1), opacity 420ms cubic-bezier(.2, .65, .3, 1);
  will-change: filter, opacity;
}

@media (prefers-reduced-motion: reduce) {
  .c-header .o-nav_label::after { transition: none; }
  html.ih-navigation-ready [data-load-container] .o-scroll,
  html.ih-navigation-ready [data-load-container] .ih-footer-clean,
  html.ih-route-changing [data-load-container] .o-scroll,
  html.ih-route-changing [data-load-container] .ih-footer-clean,
  html.ih-route-entering [data-load-container] .o-scroll,
  html.ih-route-entering [data-load-container] .ih-footer-clean {
    animation: none;
    filter: none;
    opacity: 1;
    transition: none;
  }
}

/* White navigation has a dark backing after the hero and on inner pages. */
.c-header::before {
  content:'';
  position:fixed;
  inset:0 0 auto;
  height:64px;
  /* Solid, no backdrop blur: a blur samples nothing past the viewport edge,
     which some browsers draw as a light line down each side of the bar. */
  background:#120F0C;
  pointer-events:none;
  z-index:190;
  transition:opacity 240ms ease;
}

body:has(.k-slides):not(.ih-header-backed) .c-header::before { opacity:0; }

@media (prefers-reduced-motion: reduce) {
  .c-header::before { transition:none; }
}

/* current page: the hover underline, held on */
.c-header .o-nav_link[aria-current="page"] .o-nav_label::after { opacity:1; transform:scaleX(1); }

.c-header .o-nav_link[aria-current="page"] .o-nav_label::after { transition:none; }
html.ih-route-changing .c-header .o-nav_label::after,html.ih-route-entering .c-header .o-nav_label::after { transition:none; }
