/* ==========================================================================
 * Site header, mega menus, mobile panel.
 *
 * Built on the tokens declared in main.css (:root). One breakpoint switches
 * desktop navigation for the mobile panel: 1100px, where five top-level items
 * plus two buttons stop fitting next to a typical product name.
 * ======================================================================= */

.vp-site-header {
  position: relative;
  z-index: 50;
  background: rgb(255 255 255 / .9);
  border-bottom: 1px solid transparent;
  -webkit-backdrop-filter: saturate(1.6) blur(14px);
  backdrop-filter: saturate(1.6) blur(14px);
  transition: border-color var(--vpf-dur) var(--vpf-ease), box-shadow var(--vpf-dur) var(--vpf-ease), background-color var(--vpf-dur) var(--vpf-ease);
}

.vp-site-header.is-sticky {
  position: sticky;
  top: 0;
}

/* The admin bar is fixed above the page on desktop. */
.admin-bar .vp-site-header.is-sticky {
  top: 32px;
}

@media (max-width: 782px) {
  .admin-bar .vp-site-header.is-sticky {
    top: 0;
  }
}

.vp-site-header.is-scrolled,
.vp-site-header:has(.vp-mega-open) {
  border-bottom-color: var(--vpf-line);
  box-shadow: 0 1px 0 rgb(var(--vpf-ink-rgb) / .02), 0 8px 24px rgb(var(--vpf-ink-rgb) / .05);
  background: rgb(255 255 255 / .96);
}

.vp-site-header .vpf-header-shell {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 24px;
  min-height: var(--vpf-header-h);
}

/* ---------------------------------------------------------------- brand --- */

.vp-site-header .vpf-brand {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  color: var(--vpf-ink);
  font-weight: 800;
  text-decoration: none;
  white-space: nowrap;
}

.vp-site-header .vpf-brand .custom-logo {
  display: block;
  width: auto;
  max-height: 40px;
}

.vp-site-header .vpf-brand-mark {
  display: grid;
  place-items: center;
  width: 36px;
  height: 36px;
  border-radius: 10px;
  background: var(--vpf-primary);
  box-shadow: inset 0 -2px 0 rgb(var(--vpf-accent-rgb) / .9);
  color: #fff;
  font-size: 16px;
  font-weight: 800;
}

.vp-site-header .vpf-brand-text {
  overflow: hidden;
  font-size: 18px;
  letter-spacing: -.02em;
  text-overflow: ellipsis;
}

/* ------------------------------------------------------------ desktop nav */

.vp-site-header .vp-nav {
  display: flex;
  justify-content: center;
  min-width: 0;
}

.vp-site-header .vpf-nav-list {
  display: flex;
  align-items: center;
  gap: 2px;
  margin: 0;
  padding: 0;
  list-style: none;
  background: none;
  border: 0;
  box-shadow: none;
}

.vp-site-header .vpf-nav-list > li {
  position: static;
  margin: 0;
}

.vp-site-header .vpf-nav-list > li.menu-item-has-children {
  position: relative;
}

.vp-site-header .vp-nav-link,
.vp-site-header .vpf-nav-list > li > a {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  min-height: 40px;
  padding: 0 12px;
  border: 0;
  border-radius: 10px;
  background: transparent;
  box-shadow: none;
  color: rgb(var(--vpf-ink-rgb) / .78);
  font: inherit;
  font-size: 15px;
  font-weight: 500;
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: color var(--vpf-dur-fast) var(--vpf-ease), background-color var(--vpf-dur-fast) var(--vpf-ease);
}

.vp-site-header .vp-nav-link:hover,
.vp-site-header .vpf-nav-list > li > a:hover,
.vp-site-header .vp-nav-item.is-open > .vp-nav-link,
.vp-site-header .vpf-nav-list > li:focus-within > a {
  background: rgb(var(--vpf-ink-rgb) / .05);
  color: var(--vpf-ink);
  transform: none;
}

.vp-site-header .vpf-nav-list > .current-menu-item > a,
.vp-site-header .vpf-nav-list > .current_page_item > a,
.vp-site-header .vpf-nav-list > .current-menu-ancestor > a,
.vp-site-header .vpf-nav-list > li.is-active > a {
  background: transparent;
  box-shadow: none;
  color: var(--vpf-ink);
  font-weight: 600;
}

.vp-site-header .vpf-nav-list a::before {
  content: none !important;
}

.vp-site-header .vp-nav-link:focus-visible,
.vp-site-header .vpf-nav-list > li > a:focus-visible {
  outline: none;
  box-shadow: var(--vpf-ring);
}

.vp-chevron {
  flex: none;
  opacity: .6;
  transition: transform var(--vpf-dur) var(--vpf-ease);
}

.vp-nav-item.is-open .vp-chevron {
  transform: rotate(180deg);
}

/* Sub-menus from a WordPress menu (Appearance → Menus). */
.vp-site-header .vpf-nav-list .sub-menu {
  position: absolute;
  top: calc(100% + 8px);
  left: 0;
  min-width: 240px;
  margin: 0;
  padding: 8px;
  list-style: none;
  border: 1px solid var(--vpf-line);
  border-radius: var(--vpf-radius);
  background: #fff;
  box-shadow: var(--vpf-shadow-lg);
  opacity: 0;
  visibility: hidden;
  transform: translateY(6px);
  transition: opacity var(--vpf-dur) var(--vpf-ease), transform var(--vpf-dur) var(--vpf-ease), visibility 0s linear var(--vpf-dur);
}

.vp-site-header .vpf-nav-list li:hover > .sub-menu,
.vp-site-header .vpf-nav-list li:focus-within > .sub-menu {
  opacity: 1;
  visibility: visible;
  transform: none;
  transition-delay: 0s;
}

.vp-site-header .vpf-nav-list .sub-menu a {
  display: block;
  padding: 10px 12px;
  border-radius: 8px;
  color: var(--vpf-ink);
  font-size: 14px;
  font-weight: 500;
  text-decoration: none;
}

.vp-site-header .vpf-nav-list .sub-menu a:hover {
  background: var(--vpf-cloud);
}

/* ------------------------------------------------------------ mega panel */

.vp-mega {
  position: absolute;
  top: 100%;
  left: 50%;
  width: min(1080px, calc(100vw - 2 * var(--vpf-gutter)));
  padding-top: 8px;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translate(calc(-50% + var(--vp-mega-shift, 0px)), 6px);
  transition: opacity var(--vpf-dur) var(--vpf-ease), transform var(--vpf-dur) var(--vpf-ease), visibility 0s linear var(--vpf-dur);
}

/* Hover opens with a short intent delay; the JS toggles .is-open for
   click, touch and keyboard. */
@media (hover: hover) {
  .vp-nav-item:hover .vp-mega {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transform: translate(calc(-50% + var(--vp-mega-shift, 0px)), 0);
    transition-delay: 60ms, 60ms, 0s;
  }
}

.vp-nav-item.is-open .vp-mega {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translate(calc(-50% + var(--vp-mega-shift, 0px)), 0);
  transition-delay: 0s;
}

.vp-mega-inner {
  display: grid;
  grid-template-columns: 1fr 1fr minmax(240px, .9fr);
  gap: 8px 24px;
  margin: 0;
  padding: 20px;
  border: 1px solid var(--vpf-line);
  border-radius: 20px;
  background: #fff;
  box-shadow: var(--vpf-shadow-lg);
}

.vp-mega-inner.is-types {
  grid-template-columns: repeat(3, 1fr) minmax(240px, .9fr);
}

.vp-mega-col {
  min-width: 0;
  padding: 4px;
}

.vp-mega-label {
  margin: 0 0 8px;
  padding: 0 10px;
  color: var(--vpf-muted);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
}

.vp-mega-link {
  display: block;
  margin: 0;
  padding: 10px;
  border-radius: 10px;
  color: inherit;
  text-decoration: none;
  transition: background-color var(--vpf-dur-fast) var(--vpf-ease);
}

.vp-mega-link::before {
  content: none;
}

.vp-mega-link:hover,
.vp-mega-link:focus-visible {
  background: var(--vpf-cloud);
}

.vp-mega-link b {
  display: block;
  color: var(--vpf-ink);
  font-size: 15px;
  font-weight: 600;
}

.vp-mega-link small {
  display: block;
  margin-top: 2px;
  color: var(--vpf-muted);
  font-size: 13px;
  line-height: 1.45;
}

.vp-mega-link.is-featured b {
  color: var(--vpf-ink);
}

.vp-type-link {
  display: block;
  padding: 8px 10px;
  border-radius: 8px;
  color: rgb(var(--vpf-ink-rgb) / .82);
  font-size: 15px;
  text-decoration: none;
  transition: background-color var(--vpf-dur-fast) var(--vpf-ease), color var(--vpf-dur-fast) var(--vpf-ease);
}

.vp-type-link:hover {
  background: var(--vpf-cloud);
  color: var(--vpf-ink);
}

.vp-mega-highlight {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  min-height: 200px;
  padding: 20px;
  border-radius: 14px;
  background:
    radial-gradient(120% 80% at 100% 0%, rgb(var(--vpf-accent-rgb) / .28), transparent 60%),
    var(--vpf-primary);
  color: #fff;
}

.vp-mega-highlight h4 {
  margin: 0 0 6px;
  color: #fff;
  font-size: 18px;
  line-height: 1.25;
}

.vp-mega-highlight p {
  margin: 0 0 14px;
  color: rgb(255 255 255 / .74);
  font-size: 14px;
  line-height: 1.5;
}

.vp-mega-highlight a {
  color: var(--vpf-accent);
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
}

.vp-mega-highlight a:hover {
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* --------------------------------------------------------------- actions */

.vp-site-header .vpf-header-actions {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  white-space: nowrap;
}

.vp-site-header .vpf-header-actions > .vpf-btn-primary,
.vp-site-header .vpf-header-actions > .vpf-btn-secondary {
  min-height: 42px;
  padding: 0 16px;
  font-size: 14px;
}

/* The secondary header CTA reads as a text link next to the primary. */
.vp-site-header .vpf-header-actions > .vpf-btn-ghost {
  border-color: transparent;
  background: transparent;
  box-shadow: none;
}

.vp-site-header .vpf-header-actions > .vpf-btn-ghost:hover {
  background: rgb(var(--vpf-ink-rgb) / .05);
}

/* ---------------------------------------------------------------- mobile */

.vp-mobile-toggle {
  display: none;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  min-height: 44px;
  padding: 0;
  border: 1px solid var(--vpf-line);
  border-radius: var(--vpf-radius-sm);
  background: #fff;
  box-shadow: none;
  color: var(--vpf-ink);
}

.vp-mobile-toggle:hover {
  background: var(--vpf-cloud);
  color: var(--vpf-ink);
}

.vp-mobile-toggle svg {
  display: block;
}

.vp-mobile-toggle[aria-expanded="true"] .vp-icon-open,
.vp-mobile-toggle[aria-expanded="false"] .vp-icon-close {
  display: none;
}

.vp-mobile-menu {
  max-height: calc(100dvh - var(--vpf-header-h));
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 8px 0 24px;
  border-top: 1px solid var(--vpf-line);
}

.vp-mobile-menu[hidden] {
  display: none;
}

.vp-mobile-list,
.vp-mobile-list .sub-menu {
  margin: 0;
  padding: 0;
  list-style: none;
}

.vp-mobile-list .sub-menu {
  padding-left: 12px;
}

.vp-mobile-list a {
  display: flex;
  align-items: center;
  min-height: 48px;
  padding: 0 8px;
  border-bottom: 1px solid var(--vpf-line);
  color: var(--vpf-ink);
  font-size: 17px;
  font-weight: 500;
  text-decoration: none;
}

.vp-mobile-list a:hover {
  color: var(--vpf-accent-dark);
}

.vp-mobile-actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-top: 20px;
}

.vp-mobile-actions:empty {
  display: none;
}

@media (max-width: 1100px) {
  .vp-site-header .vp-nav {
    display: none;
  }

  .vp-mobile-toggle {
    display: inline-flex;
  }

  .vp-site-header .vpf-header-shell {
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 12px;
    min-height: 64px;
  }

  .vp-site-header .vpf-header-actions > .vpf-btn-ghost {
    display: none;
  }
}

@media (min-width: 1101px) {
  .vp-mobile-menu {
    display: none !important;
  }
}

@media (max-width: 560px) {
  .vp-site-header .vpf-header-actions > .vpf-header-cta {
    display: none;
  }

  .vp-mobile-actions {
    grid-template-columns: 1fr;
  }
}

/* Tight desktop range: shrink the nav before anything collides. */
@media (min-width: 1101px) and (max-width: 1280px) {
  .vp-site-header .vpf-header-shell {
    gap: 12px;
  }

  .vp-site-header .vp-nav-link,
  .vp-site-header .vpf-nav-list > li > a {
    padding: 0 9px;
    font-size: 14px;
  }

  .vp-site-header .vpf-header-actions > .vpf-btn-ghost {
    display: none;
  }
}

/* ==========================================================================
 * Header styles — Customize → VPF Layout & Style → Header.
 * Same markup for all four; only the layout and the surface change.
 * ======================================================================= */

/* Nav hover: an accent underline that grows from the centre, instead of a
   grey pill that read as a disabled state. */
.vp-site-header .vp-nav-link,
.vp-site-header .vpf-nav-list > li > a {
  position: relative;
  background: transparent !important;
}

.vp-site-header .vp-nav-link::after,
.vp-site-header .vpf-nav-list > li > a::after {
  content: "";
  position: absolute;
  right: 12px;
  bottom: 6px;
  left: 12px;
  height: 2px;
  border-radius: 2px;
  background: var(--vpf-accent);
  transform: scaleX(0);
  transform-origin: center;
  transition: transform var(--vpf-dur) var(--vpf-ease);
}

.vp-site-header .vp-nav-link:hover::after,
.vp-site-header .vpf-nav-list > li > a:hover::after,
.vp-site-header .vp-nav-item.is-open > .vp-nav-link::after,
.vp-site-header .vpf-nav-list > .current-menu-item > a::after,
.vp-site-header .vpf-nav-list > .current_page_item > a::after,
.vp-site-header .vpf-nav-list > .current-menu-ancestor > a::after {
  transform: scaleX(1);
}

@media (hover: hover) {
  .vp-nav-item:hover > .vp-nav-link::after {
    transform: scaleX(1);
  }
}

.vp-site-header .vp-nav-link:hover,
.vp-site-header .vpf-nav-list > li > a:hover,
.vp-site-header .vp-nav-item.is-open > .vp-nav-link {
  color: var(--vpf-ink);
}

.vp-site-header .vpf-header-actions > .vpf-btn-ghost:hover {
  background: transparent;
  color: var(--vpf-accent-text);
}

/* --------------------------------------------------------------- minimal */

.vpf-header-minimal .vp-site-header .vpf-header-shell {
  grid-template-columns: auto 1fr auto;
}

.vpf-header-minimal .vp-site-header .vp-nav {
  justify-content: flex-end;
}

.vpf-header-minimal .vp-site-header .vpf-header-actions {
  padding-left: 16px;
  border-left: 1px solid var(--vpf-line);
}

/* --------------------------------------------------------------- stacked */

@media (min-width: 1101px) {
  .vpf-header-stacked .vp-site-header .vpf-header-shell {
    grid-template-areas: "brand . actions" "nav nav nav";
    grid-template-columns: auto 1fr auto;
    row-gap: 0;
    min-height: 0;
    padding-top: 14px;
  }

  .vpf-header-stacked .vp-site-header .vpf-brand { grid-area: brand; }
  .vpf-header-stacked .vp-site-header .vpf-header-actions { grid-area: actions; }

  .vpf-header-stacked .vp-site-header .vp-nav {
    grid-area: nav;
    justify-content: flex-start;
    margin-top: 12px;
    border-top: 1px solid var(--vpf-line);
  }

  .vpf-header-stacked .vp-site-header .vpf-nav-list {
    margin-left: -12px;
  }

  .vpf-header-stacked .vp-site-header .vp-nav-link,
  .vpf-header-stacked .vp-site-header .vpf-nav-list > li > a {
    min-height: 48px;
  }

  .vpf-header-stacked .vp-site-header .vp-nav-link::after,
  .vpf-header-stacked .vp-site-header .vpf-nav-list > li > a::after {
    bottom: 0;
  }

  .vpf-header-stacked .vp-mega {
    top: 100%;
  }
}

/* -------------------------------------------------------------- floating */
/* A capsule detached from the top edge. The <header> becomes a transparent
   rail; the shell carries the surface. */

.vpf-header-floating .vp-site-header {
  padding-top: 12px;
  border-bottom: 0;
  background: transparent;
  box-shadow: none;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
  pointer-events: none;
}

.vpf-header-floating .vp-site-header > .vpf-container {
  pointer-events: none;
}

.vpf-header-floating .vp-site-header .vpf-header-shell,
.vpf-header-floating .vp-mobile-menu {
  pointer-events: auto;
}

.vpf-header-floating .vp-site-header .vpf-header-shell {
  position: relative;
  min-height: 64px;
  padding: 0 10px 0 18px;
  border: 1px solid rgb(var(--vpf-ink-rgb) / .08);
  border-radius: var(--vpf-header-radius, 14px);
  background: rgb(255 255 255 / .82);
  box-shadow: 0 1px 2px rgb(var(--vpf-ink-rgb) / .04), 0 12px 32px -8px rgb(var(--vpf-ink-rgb) / .14);
  -webkit-backdrop-filter: saturate(1.8) blur(16px);
  backdrop-filter: saturate(1.8) blur(16px);
  transition: box-shadow var(--vpf-dur) var(--vpf-ease), background-color var(--vpf-dur) var(--vpf-ease), border-color var(--vpf-dur) var(--vpf-ease);
}

.vpf-header-floating .vp-site-header.is-scrolled {
  border-bottom: 0;
  background: transparent;
  box-shadow: none;
}

.vpf-header-floating .vp-site-header.is-scrolled .vpf-header-shell {
  background: rgb(255 255 255 / .94);
  box-shadow: 0 1px 2px rgb(var(--vpf-ink-rgb) / .05), 0 18px 40px -10px rgb(var(--vpf-ink-rgb) / .2);
}

.vpf-header-shape-pill.vpf-header-floating .vp-site-header .vpf-header-actions > .vpf-btn-primary,
.vpf-header-shape-pill.vpf-header-floating .vp-site-header .vpf-header-actions > .vpf-btn-secondary {
  border-radius: 999px;
}

.vpf-header-floating .vp-mobile-menu {
  margin-top: 8px;
  padding: 8px 18px 20px;
  border: 1px solid var(--vpf-line);
  border-radius: 24px;
  background: #fff;
  box-shadow: var(--vpf-shadow-lg);
}

.vpf-header-floating .vp-mega {
  padding-top: 14px;
}

.vpf-header-shape-pill.vpf-header-floating .vp-mobile-toggle {
  border-radius: 999px;
}

/* The floating header overlaps content by its top padding; the first section
   of the page simply starts underneath it. */
.vpf-header-floating:not(.vpf-header-overlay) .vpf-site-main {
  margin-top: -12px;
}

/* ===================================================== overlay (dark hero) */
/* The header sits on the hero with light text until the page scrolls, or a
   menu opens, at which point it takes the solid surface of its style. */

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) {
  --vpf-overlay-fg: #fff;
  border-bottom-color: transparent;
  background: transparent;
  box-shadow: none;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) .vpf-header-shell {
  border-color: rgb(255 255 255 / .12);
  background: rgb(255 255 255 / .04);
  box-shadow: none;
}

.vpf-header-overlay:not(.vpf-header-floating) .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) .vpf-header-shell {
  border: 0;
  background: transparent;
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) :is(.vpf-brand, .vp-nav-link, .vpf-nav-list > li > a, .vpf-btn-ghost) {
  color: rgb(255 255 255 / .86);
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) :is(.vp-nav-link, .vpf-nav-list > li > a, .vpf-btn-ghost):hover {
  color: #fff;
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) .vpf-brand {
  color: #fff;
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) .vpf-brand-mark {
  background: var(--vpf-accent);
  color: var(--vpf-primary);
  box-shadow: 0 0 24px rgb(var(--vpf-accent-rgb) / .45);
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) .vpf-header-actions > .vpf-btn-primary {
  border-color: var(--vpf-accent);
  background: var(--vpf-accent);
  color: var(--vpf-primary);
  box-shadow: 0 8px 24px rgb(var(--vpf-accent-rgb) / .3);
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) .vpf-header-actions > .vpf-btn-primary:hover {
  border-color: #fff;
  background: #fff;
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) .vp-mobile-toggle {
  border-color: rgb(255 255 255 / .2);
  background: rgb(255 255 255 / .06);
  color: #fff;
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) .vpf-header-actions > .vpf-btn-ghost:hover {
  color: #fff;
}

/* Pull the hero up under the header so the two read as one surface. */
.vpf-header-overlay .vpf-site-main > .vp-home-hero:first-child {
  margin-top: calc(-1 * (var(--vpf-header-h) + var(--vpf-header-offset, 0px)));
  padding-top: calc(var(--vpf-header-h) + var(--vpf-header-offset, 0px) + clamp(48px, 8vw, 104px));
}

.vpf-header-overlay.vpf-header-floating {
  --vpf-header-offset: 12px;
}

.vpf-header-overlay.vpf-header-stacked {
  --vpf-header-offset: 62px;
}

@media (max-width: 1100px) {
  .vpf-header-overlay {
    --vpf-header-h: 64px;
  }

  .vpf-header-overlay.vpf-header-stacked {
    --vpf-header-offset: 0px;
  }
}

.vpf-header-overlay .vp-site-header:not(.is-scrolled):not(:has(.vp-mega-open)):not(:has(.vp-mobile-menu:not([hidden]))) :is(.vp-nav, .vpf-header-actions) {
  border-color: rgb(255 255 255 / .14);
}


/* ==========================================================================
 * Header shape and motion — Customize → VPF Layout & Style → Header.
 * ======================================================================= */

.vpf-header-shape-rect {
  --vpf-header-radius: 14px;
}

.vpf-header-shape-pill {
  --vpf-header-radius: 999px;
}

.vpf-header-floating .vp-mobile-menu {
  border-radius: calc(var(--vpf-header-radius) + 4px);
}

.vpf-header-shape-pill.vpf-header-floating .vp-mobile-menu {
  border-radius: 24px;
}

/* Reading progress: a thin accent line along the bottom edge of the bar. */
.vp-header-progress {
  position: absolute;
  right: 0;
  bottom: -1px;
  left: 0;
  z-index: 1;
  height: 2px;
  background: linear-gradient(90deg, var(--vpf-accent-dark), var(--vpf-accent), #6fdcff);
  box-shadow: 0 0 10px rgb(var(--vpf-accent-rgb) / .6);
  transform: scaleX(var(--vpf-scroll, 0));
  transform-origin: left center;
  pointer-events: none;
  opacity: 0;
  transition: opacity var(--vpf-dur) var(--vpf-ease);
}

.vp-site-header.is-scrolled .vp-header-progress {
  opacity: 1;
}

/* Classic, minimal, stacked: the line runs the full viewport width. */
.vpf-header-shell {
  position: relative;
}

body:not(.vpf-header-floating) .vp-header-progress {
  right: calc(50% - 50vw);
  left: calc(50% - 50vw);
}

/* Floating: the line sits inside the rounded bar, clear of its corners. */
.vpf-header-floating .vp-header-progress {
  right: var(--vpf-header-radius);
  left: var(--vpf-header-radius);
  border-radius: 2px;
}

.vpf-header-shape-pill.vpf-header-floating .vp-header-progress {
  right: 32px;
  left: 32px;
}

/* Shrink: slimmer bar and a smaller logo once the page has scrolled. */
.vp-site-header .vpf-header-shell,
.vp-site-header .vpf-brand-mark,
.vp-site-header .vpf-brand .custom-logo {
  transition: min-height var(--vpf-dur) var(--vpf-ease), transform var(--vpf-dur) var(--vpf-ease), box-shadow var(--vpf-dur) var(--vpf-ease), background-color var(--vpf-dur) var(--vpf-ease), border-color var(--vpf-dur) var(--vpf-ease);
}

.vpf-header-anim-shrink .vp-site-header.is-scrolled .vpf-header-shell {
  min-height: calc(var(--vpf-header-h) - 12px);
}

.vpf-header-anim-shrink.vpf-header-floating .vp-site-header.is-scrolled .vpf-header-shell {
  min-height: 56px;
}

.vpf-header-anim-shrink .vp-site-header.is-scrolled .vpf-brand-mark,
.vpf-header-anim-shrink .vp-site-header.is-scrolled .vpf-brand .custom-logo {
  transform: scale(.9);
}

/* Hide on scroll down, back on scroll up. */
.vpf-header-anim-hide .vp-site-header {
  transition: transform .35s var(--vpf-ease), border-color var(--vpf-dur) var(--vpf-ease), box-shadow var(--vpf-dur) var(--vpf-ease), background-color var(--vpf-dur) var(--vpf-ease);
}

.vpf-header-anim-hide .vp-site-header.is-hidden {
  transform: translateY(calc(-100% - 16px));
}

/* Brand mark: a soft accent glow on hover. */
.vp-site-header .vpf-brand:hover .vpf-brand-mark {
  box-shadow: inset 0 -2px 0 var(--vpf-accent), 0 0 0 4px rgb(var(--vpf-accent-rgb) / .18);
}

/* Entrance: the bar drops in once, when the page opens. */
@media (prefers-reduced-motion: no-preference) {
  .vpf-motion .vp-site-header > .vpf-container > .vpf-header-shell {
    animation: vpf-header-in .7s var(--vpf-ease) both;
  }

  /*
   * The link is animated, never the <li>: an element with a transform
   * animation becomes the containing block of its positioned children, and
   * the mega panel would then centre on the menu item instead of the bar.
   */
  .vpf-motion .vp-site-header .vpf-nav-list > li > :is(a, button) {
    animation: vpf-header-item-in .5s var(--vpf-ease) both;
  }

  .vpf-motion .vp-site-header .vpf-nav-list > li:nth-child(1) > :is(a, button) { animation-delay: .15s; }
  .vpf-motion .vp-site-header .vpf-nav-list > li:nth-child(2) > :is(a, button) { animation-delay: .2s; }
  .vpf-motion .vp-site-header .vpf-nav-list > li:nth-child(3) > :is(a, button) { animation-delay: .25s; }
  .vpf-motion .vp-site-header .vpf-nav-list > li:nth-child(4) > :is(a, button) { animation-delay: .3s; }
  .vpf-motion .vp-site-header .vpf-nav-list > li:nth-child(5) > :is(a, button) { animation-delay: .35s; }
  .vpf-motion .vp-site-header .vpf-nav-list > li:nth-child(n+6) > :is(a, button) { animation-delay: .4s; }
}

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

@keyframes vpf-header-item-in {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: none; }
}

/* Mega panel: content rises slightly as it opens. */
.vp-mega-inner > * {
  transition: transform .3s var(--vpf-ease), opacity .3s var(--vpf-ease);
}

.vp-nav-item:not(.is-open):not(:hover) .vp-mega-inner > * {
  opacity: 0;
  transform: translateY(6px);
}

/* ==========================================================================
 * Height, width and the "reveal" behaviour.
 * ======================================================================= */

/* Height token: desktop value from the Customizer, compact on small screens.
   Declared here (after the inline Customizer tokens) so the media query wins. */
:root {
  --vpf-header-h: var(--vpf-header-h-desktop, 80px);
  --vpf-header-h-stuck: 68px;
}

@media (max-width: 1100px) {
  :root {
    --vpf-header-h: 64px;
    --vpf-header-h-stuck: 60px;
  }
}

/* Taller headers get a slightly larger brand and menu. */
@media (min-width: 1101px) {
  .vp-site-header .vpf-brand-mark {
    width: clamp(36px, calc(var(--vpf-header-h) * .45), 44px);
    height: clamp(36px, calc(var(--vpf-header-h) * .45), 44px);
    border-radius: 12px;
    font-size: 18px;
  }

  .vp-site-header .vpf-brand-text {
    font-size: clamp(18px, calc(var(--vpf-header-h) * .21), 20px);
  }

  .vp-site-header .vp-nav-link,
  .vp-site-header .vpf-nav-list > li > a {
    min-height: 44px;
    padding: 0 14px;
    font-size: 15.5px;
  }

  .vp-site-header .vpf-header-actions > .vpf-btn-primary,
  .vp-site-header .vpf-header-actions > .vpf-btn-secondary {
    min-height: 46px;
    padding: 0 20px;
    font-size: 15px;
  }

  .vp-site-header .vpf-nav-list {
    gap: 6px;
  }
}

/* Full page width: the bar's content spreads to the window edges, with the
   gutter as breathing room, instead of the content column. */
.vpf-header-full .vp-site-header > .vpf-container {
  max-width: none;
  padding-inline: clamp(20px, 3vw, 48px);
}

/* Reveal: in the flow at the top of the page... */
.vpf-header-anim-reveal .vp-site-header,
.vpf-header-anim-reveal .vp-site-header.is-sticky {
  position: relative;
  top: auto;
}

/* ...then fixed and compact once it comes back. */
.vpf-header-anim-reveal .vp-site-header.is-stuck {
  position: fixed;
  top: 0;
  right: 0;
  left: 0;
  z-index: 60;
  border-bottom-color: var(--vpf-line);
  background: rgb(255 255 255 / .92);
  box-shadow: 0 1px 0 rgb(var(--vpf-ink-rgb) / .03), 0 12px 32px -12px rgb(var(--vpf-ink-rgb) / .18);
  -webkit-backdrop-filter: saturate(1.6) blur(16px);
  backdrop-filter: saturate(1.6) blur(16px);
}

.admin-bar.vpf-header-anim-reveal .vp-site-header.is-stuck {
  top: 32px;
}

@media (max-width: 782px) {
  .admin-bar.vpf-header-anim-reveal .vp-site-header.is-stuck {
    top: 46px;
  }
}

.vpf-header-anim-reveal .vp-site-header.is-stuck .vpf-header-shell {
  min-height: var(--vpf-header-h-stuck);
}

.vpf-header-anim-reveal .vp-site-header.is-stuck .vpf-brand-mark {
  transform: scale(.9);
}

@media (prefers-reduced-motion: no-preference) {
  .vpf-header-anim-reveal .vp-site-header.is-stuck {
    animation: vpf-header-drop .55s cubic-bezier(.16, 1, .3, 1) both;
  }

  /* The menu items follow the bar down, a beat later. */
  .vpf-header-anim-reveal .vp-site-header.is-stuck .vpf-nav-list > li > :is(a, button),
  .vpf-header-anim-reveal .vp-site-header.is-stuck .vpf-header-actions > * {
    animation: vpf-header-item-drop .45s var(--vpf-ease) .12s both;
  }
}

/* A separate name from the page-load entrance, so it replays on every drop. */
@keyframes vpf-header-item-drop {
  from { opacity: 0; transform: translateY(-6px); }
  to { opacity: 1; transform: none; }
}

@keyframes vpf-header-drop {
  from {
    opacity: .4;
    transform: translateY(-100%);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

.vp-header-spacer {
  display: block;
  height: 0;
}

/* The floating style keeps its capsule when stuck. */
.vpf-header-floating.vpf-header-anim-reveal .vp-site-header.is-stuck {
  padding-top: 10px;
  border-bottom: 0;
  background: transparent;
  box-shadow: none;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

/* The menu items are never a positioning context for the mega panels. */
.vp-site-header .vpf-nav-list > li.vp-nav-item {
  position: static;
}

/* Mega columns always stack their links, one per line. */
.vp-mega-col {
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
