/* Local-only scroll and reveal effects. No framework or CDN dependency. */
html { scroll-behavior: auto !important; overscroll-behavior-y: none; }

/* The underline belongs below the hovered/active nav label, never at the top. */
#desktopNav .nav-sliding-underline {
  top: auto !important;
  bottom: 0 !important;
  transform: none !important;
  transition:
    left 320ms cubic-bezier(.22, 1, .36, 1),
    width 280ms cubic-bezier(.22, 1, .36, 1),
    opacity 180ms ease !important;
}

.reveal,
.fade-up-element {
  --reveal-delay: 0ms;
  opacity: 0;
  translate: 0 26px;
  transition:
    opacity 720ms cubic-bezier(.16, 1, .3, 1) var(--reveal-delay),
    translate 720ms cubic-bezier(.16, 1, .3, 1) var(--reveal-delay);
  will-change: opacity, translate;
}

.reveal[data-delay="1"], .fade-up-stagger-1 { --reveal-delay: 80ms; }
.reveal[data-delay="2"], .fade-up-stagger-2 { --reveal-delay: 160ms; }
.reveal[data-delay="3"], .fade-up-stagger-3 { --reveal-delay: 240ms; }
.reveal[data-delay="4"], .fade-up-stagger-4 { --reveal-delay: 320ms; }
.reveal[data-delay="5"], .fade-up-stagger-5 { --reveal-delay: 400ms; }
.reveal[data-delay="6"], .fade-up-stagger-6 { --reveal-delay: 480ms; }

.reveal.is-visible,
.reveal.in-view,
.fade-up-element.is-visible,
.fade-up-element.in-view {
  opacity: 1 !important;
  translate: 0 0;
}

/* Page/view transition for same-site route navigation. */
body {
  opacity: 1;
  transition: opacity 240ms ease;
}
/* Never transform/translate body: doing so changes the containing block of
   position:fixed children and pushes the help launcher to the page bottom. */
body.page-entering { opacity: 0; }
body.page-ready { opacity: 1; }
body.page-transitioning { opacity: 0; pointer-events: none; }

/* Small interactions that retain the existing navy-white-gold design. */
.navlink { transition: color 180ms ease, translate 180ms ease; }
.navlink:hover { translate: 0 -1px; }
.hero-photo a.rounded-card:hover,
#about .rounded-card:hover,
#services a.rounded-card:hover { box-shadow: 0 16px 34px -18px rgba(10,35,66,.35); }
.faq-item:hover { border-color: rgba(23,78,166,.38); box-shadow: 0 12px 28px -20px rgba(10,35,66,.4); }

/* Floating controls must never wait for an observer. */
#inquiryLauncher,
#inquiryModal,
[data-chat-launcher],
.need-help,
.chat-bubble,
.fixed,
.sticky {
  opacity: 1;
}

/* Keep the public help control attached to the viewport on every screen size. */
#inqLaunch,
.inq-launch {
  position: fixed !important;
  right: max(14px, env(safe-area-inset-right)) !important;
  bottom: max(14px, env(safe-area-inset-bottom)) !important;
  z-index: 9999 !important;
  opacity: 1 !important;
  visibility: visible !important;
  translate: none !important;
  transform: none !important;
}

#inqPanel,
.inq-panel {
  position: fixed !important;
  z-index: 9999 !important;
}

@media (max-width: 520px) {
  #inqLaunch,
  .inq-launch {
    right: max(12px, env(safe-area-inset-right)) !important;
    bottom: max(12px, env(safe-area-inset-bottom)) !important;
  }

  #inqPanel,
  .inq-panel {
    right: max(10px, env(safe-area-inset-right)) !important;
    bottom: calc(68px + env(safe-area-inset-bottom)) !important;
    width: calc(100vw - 20px) !important;
    max-height: calc(100dvh - 86px - env(safe-area-inset-bottom)) !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  html, body { scroll-behavior: auto !important; }
  .reveal,
  .reveal[data-delay],
  .fade-up-element {
    opacity: 1 !important;
    translate: none !important;
    transition: none !important;
    will-change: auto;
  }
  body, body.page-entering, body.page-ready, body.page-transitioning {
    opacity: 1 !important;
    translate: none !important;
    transition: none !important;
  }
}
