/* ---- nav ----------------------------------------------------------------
   68px, one line at desktop. The FH monogram needs no containment tile on
   this ground: the mark's own black field and the page ground are within a
   shade of each other, so it reads as a mark rather than as a sticker. */

.nav {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: var(--z-nav);
  height: var(--nav-h);
  display: flex;
  align-items: center;
  background: rgba(12, 12, 13, 0.72);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border-bottom: 1px solid transparent;
  transition: border-color var(--dur-1) var(--ease), background-color var(--dur-1) var(--ease);
}
.nav.is-stuck {
  border-bottom-color: var(--line-soft);
  background: rgba(12, 12, 13, 0.92);
}

.nav__in {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: clamp(16px, 3vw, 40px);
}

.nav__mark {
  display: flex;
  align-items: center;
  gap: 0.6em;
  flex: none;
}
.nav__mark img { width: 32px; height: 32px; object-fit: contain; }
.nav__word {
  font-family: var(--mark);
  font-weight: 600;
  font-size: 0.95rem;
  letter-spacing: -0.015em;
}

.nav__links {
  display: flex;
  align-items: center;
  gap: clamp(18px, 2.2vw, 34px);
}
.nav__link {
  font-size: var(--fs-xs);
  color: var(--bone-soft);
  transition: color var(--dur-1) var(--ease);
}
.nav__link:hover { color: var(--bone); }

.nav__cta { padding: 0.7em 1.15em; font-size: var(--fs-micro); }

.nav__burger {
  display: none;
  width: 40px; height: 40px;
  align-items: center;
  justify-content: center;
  flex: none;
  margin-right: -8px;
}
.nav__burger i {
  display: block;
  width: 19px; height: 1px;
  background: var(--bone);
  position: relative;
  transition: background-color var(--dur-1) var(--ease);
}
.nav__burger i::before,
.nav__burger i::after {
  content: "";
  position: absolute;
  left: 0;
  width: 19px; height: 1px;
  background: var(--bone);
  transition: transform var(--dur-1) var(--ease);
}
.nav__burger i::before { top: -6px; }
.nav__burger i::after  { top: 6px; }
.nav.is-open .nav__burger i { background: transparent; }
.nav.is-open .nav__burger i::before { transform: translateY(6px) rotate(45deg); }
.nav.is-open .nav__burger i::after  { transform: translateY(-6px) rotate(-45deg); }

@media (max-width: 820px) {
  .nav__links {
    /* .nav carries backdrop-filter, which makes it the containing block for
       fixed descendants. `inset` would resolve against the 68px bar and
       collapse this to zero height, so size it in viewport units instead. */
    position: fixed;
    top: var(--nav-h);
    left: 0;
    right: 0;
    height: calc(100svh - var(--nav-h));
    background: var(--void);
    flex-direction: column;
    justify-content: center;
    align-items: flex-start;
    padding: 0 var(--gut);
    gap: 26px;
    opacity: 0;
    transform: translateY(-6px);
    pointer-events: none;
    transition: opacity var(--dur-1) var(--ease), transform var(--dur-1) var(--ease);
  }
  .nav.is-open .nav__links { opacity: 1; transform: none; pointer-events: auto; }
  .nav__link { font-size: var(--fs-h3); }
  .nav__cta { order: -1; padding: 0.9em 1.5em; font-size: var(--fs-xs); }
  .nav__burger { display: flex; }
}

/* --- persistent quote affordance ---------------------------------------
   Icon-only on small screens, labelled from 640px up. Same label as every
   other quote CTA on the page.

   Tucked away while a real quote button is already on screen. Two reasons: it
   is a duplicate of that button, and on a narrow viewport it physically lands
   on top of the hero's own CTA row.

   Written as a class that HIDES rather than one that reveals. If the observer
   in nav.js never delivers (it is skipped without scripting, and some
   embedded browsers throttle it), the failure is a visible button that
   overlaps slightly, not a call to action that has silently vanished. Never
   let script hide something that script must later bring back. */
.js .float.is-tucked {
  opacity: 0;
  transform: translateY(8px);
  pointer-events: none;
}

.float {
  position: fixed;
  right: clamp(14px, 2.4vw, 28px);
  bottom: clamp(14px, 2.4vw, 28px);
  z-index: var(--z-cta);
  display: inline-flex;
  align-items: center;
  gap: 0.6em;
  padding: 0.85em 1.2em;
  background: var(--bone);
  color: var(--void);
  border-radius: var(--r);
  font-size: var(--fs-xs);
  font-weight: 500;
  transition: background-color var(--dur-1) var(--ease),
              transform var(--dur-1) var(--ease),
              opacity var(--dur-1) var(--ease);
}
/* Excludes the tucked state so the hover lift cannot fight the hidden
   transform if a pointer happens to rest where the button used to be. */
.float:not(.is-tucked):hover { background: #fff; transform: translateY(-2px); }
.float svg { width: 1.1em; height: 1.1em; flex: none; }
.float span { display: none; }
@media (min-width: 640px) { .float span { display: inline; } }
