html:has(.page-scroll-pt-9-5) {
  --scroll-pt: 9.5rem;
}

body[data-scroll-locked] {
  margin-right: 0 !important;
  padding-right: 0 !important;
}

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.secondary-scrollbar::-webkit-scrollbar {
  width: 0.375rem;
}

.secondary-scrollbar::-webkit-scrollbar-thumb {
  background: hsl(var(--base-muted));
}

.intercom-launcher,
.intercom-lightweight-app,
.intercom-with-namespace-52k34s {
  z-index: 50 !important;
}

@keyframes fade-in {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

.fade-in {
  animation-name: fade-in;
  animation-duration: 300ms;
  animation-timing-function: ease-out;
  animation-fill-mode: forwards;
  animation-delay: 400ms;
  opacity: 0;
}

/*
 * No-JS fallback for Framer Motion enter animations.
 * Motion wrappers (InViewMotion, FadeIn, BlurFade) serialize their hidden
 * `initial` keyframe into inline styles (opacity:0/0.01,
 * transform:translateY(...), filter:blur(...)) during SSR. Without JS those
 * styles are never cleared, hiding crawlable content. When scripting is
 * unavailable, reset the tagged wrappers to their visible end state.
 * `!important` beats the serialized inline styles; resetting transform/filter
 * keeps content in its final position so there is no layout shift.
 *
 * This file is kept as an unprocessed static stylesheet (copied verbatim into
 * public/styles at dev/build time) rather than imported into globals.css
 * because the Lightning CSS pipeline strips the `scripting` media feature
 * during the build.
 */
@media (prefers-reduced-motion: reduce) {
  [data-animate] {
    opacity: 1 !important;
    transform: none !important;
    filter: none !important;
  }
}

@media (scripting: none) {
  [data-animate] {
    opacity: 1 !important;
    transform: none !important;
    filter: none !important;
  }

  /*
   * AnimatedAccordion serializes collapsed panels as height:0 and opacity:0.
   * Without JS, expand every panel so crawlable copy stays visible.
   */
  [data-accordion-panel] {
    grid-template-rows: 1fr !important;
    overflow: visible !important;
  }

  [data-accordion-content] {
    opacity: 1 !important;
    transform: none !important;
  }

  /*
   * LazyImage reveals the sharp image via an onLoad JS handler
   * (opacity:0 -> opacity:1). Without JS that handler never fires, so the
   * real image stays hidden behind the blurred placeholder. Force the sharp
   * image visible and drop the placeholder when scripting is unavailable.
   */
  [data-lazy-image="main"] {
    opacity: 1 !important;
  }

  [data-lazy-image="blur"] {
    opacity: 0 !important;
  }
}

/* Hide Intercom launcher while a dialog portal is open. */
body:has([data-radix-portal]) [data-intercom-launcher],
body:has([role="dialog"]) [data-intercom-launcher] {
  pointer-events: none;
  scale: 0.95;
  opacity: 0;
}
