/* ==========================================================================
   StoneView Construction & Landscape — Header & Footer, v4
   --------------------------------------------------------------------------
   SELF-CONTAINED ON PURPOSE.

   This file is the single source of truth for the header and footer on BOTH
   targets:
     1. the static site (site-v3), loaded via <link> alongside site.css
     2. the WordPress site, enqueued by the Hello Elementor child theme and
        paired with the same markup inside an Elementor HTML widget

   Because target 2 has no site.css, this file must not depend on it. Every
   token it needs is declared below under an --sv- prefix, and every class is
   namespaced .sv-*, so it can never collide with site.css, with Hello
   Elementor, or with Elementor's own generated classes.

   Do not reference --forest/--bone/etc. from site.css in here. Do not drop
   the .sv- prefix. Both rules exist so the two targets stay identical.
   ========================================================================== */

/* --- Tokens --------------------------------------------------------------
   Same palette values as site.css v3, re-declared under an --sv- prefix so
   this file stands alone. Kept additive: declaring these on :root cannot
   affect any existing rule, because no existing rule reads these names.
   ------------------------------------------------------------------------ */
:root {
  --sv-forest:    #1F3A2E;
  --sv-forest-d:  #14251C;
  --sv-forest-dd: #0E1A13;
  --sv-moss:      #4F6F52;
  --sv-charcoal:  #242822;

  --sv-stone:     #4E6771;
  --sv-stone-l:   #7B939C;

  --sv-sand:      #C9B79C;
  --sv-sand-l:    #E4DACB;

  --sv-bone:      #F2F4F1;
  --sv-bone-d:    #E5EAE4;
  --sv-white:     #FFFFFF;
  --sv-ink:       #1D211C;
  --sv-muted:     #5F675E;
  --sv-line:      #D5DCD4;

  --sv-serif: Georgia, 'Iowan Old Style', 'Palatino Linotype', Palatino, 'Book Antiqua', serif;
  --sv-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Inter, Roboto, 'Helvetica Neue', Arial, sans-serif;

  --sv-wrap: 1240px;
  --sv-gut: 32px;

  --sv-r-sm: 4px;
  --sv-r: 8px;
  --sv-r-lg: 16px;

  --sv-sh-1: 0 1px 2px rgba(35,35,31,.06), 0 4px 12px rgba(35,35,31,.05);
  --sv-sh-2: 0 2px 6px rgba(35,35,31,.07), 0 12px 32px rgba(35,35,31,.09);
  --sv-sh-3: 0 8px 24px rgba(35,35,31,.10), 0 30px 60px rgba(35,35,31,.14);

  --sv-ease: cubic-bezier(.22,.61,.36,1);

  /* Header geometry. --sv-head-h is read by the scroll-padding rule below and
     by header-footer.js, so anchor links never land under the sticky bar. */
  --sv-util-h: 40px;
  --sv-bar-h: 84px;
  --sv-bar-h-sm: 64px;
  --sv-head-h: 84px;
}

/* Anchor targets must clear the sticky bar. Only the collapsed bar height is
   used: by the time the user is jumping to an anchor the page has scrolled and
   the utility strip is already retracted. */
html { scroll-padding-top: calc(var(--sv-bar-h-sm) + 16px); }

/* --- Scoped reset --------------------------------------------------------
   WordPress themes and Elementor both ship opinionated base styles. Rather
   than fight them globally, neutralise them inside our own scope only.

   Every selector here is wrapped in :where() so the whole reset carries ZERO
   specificity from the scope. This matters: written as `.sv-head a`, the
   `color: inherit` below would score 0-1-1 and beat `.sv-btn-primary`
   (0-1-0), silently repainting every button label back to body ink. With
   :where() the reset scores 0-0-1 and any real component rule wins.
   Keep the :where() wrappers if you add to this block.
   ------------------------------------------------------------------------ */
:where(.sv-head, .sv-foot, .sv-drawer),
:where(.sv-head, .sv-foot, .sv-drawer) *,
:where(.sv-head, .sv-foot, .sv-drawer) *::before,
:where(.sv-head, .sv-foot, .sv-drawer) *::after {
  box-sizing: border-box;
}
:where(.sv-head, .sv-foot, .sv-drawer) ul {
  margin: 0; padding: 0; list-style: none;
}
:where(.sv-head, .sv-foot, .sv-drawer) li { margin: 0; list-style: none; }
:where(.sv-head, .sv-foot, .sv-drawer) p { margin: 0; }
:where(.sv-head, .sv-foot, .sv-drawer) a {
  color: inherit; text-decoration: none; box-shadow: none;
}
:where(.sv-head, .sv-foot, .sv-drawer) img {
  max-width: 100%; height: auto; display: block; border: 0;
}
:where(.sv-head, .sv-foot, .sv-drawer) button {
  font: inherit; color: inherit; background: none; border: 0;
  cursor: pointer; padding: 0; text-align: left;
}
:where(.sv-head, .sv-foot, .sv-drawer) svg { display: block; }
:where(.sv-head, .sv-foot, .sv-drawer) :is(h1, h2, h3, h4) {
  margin: 0; font-weight: 400; letter-spacing: -.015em; line-height: 1.15;
  font-family: var(--sv-serif); color: inherit;
}
.sv-head :focus-visible, .sv-foot :focus-visible, .sv-drawer :focus-visible {
  outline: 3px solid var(--sv-stone-l); outline-offset: 3px; border-radius: 3px;
}

.sv-wrap {
  width: 100%; max-width: var(--sv-wrap);
  margin-inline: auto; padding-inline: var(--sv-gut);
}

/* Visually hidden but available to screen readers. */
.sv-sr {
  position: absolute !important; width: 1px; height: 1px;
  padding: 0; margin: -1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
}

/* ==========================================================================
   HEADER
   ========================================================================== */

/* position: sticky only works if NO ancestor is a scroll container.
   site.css sets `body { overflow-x: hidden }`, which makes body compute to
   `overflow: hidden auto`. Per CSS overflow propagation that should still be
   safe here (html is `visible`, so body's overflow propagates to the viewport
   and body's own used value becomes `visible`) — but the behaviour is subtle
   and easy to break later by adding overflow to any wrapper.

   `overflow-x: clip` clips exactly like `hidden` WITHOUT ever creating a
   scroll container, so the sticky header cannot be broken by it. If you ever
   need a wrapper to hide horizontal overflow, use clip, not hidden. */
html { overflow-x: clip; }
body { overflow-x: clip; }

/* --- WordPress: make Elementor's wrapper the sticky element ---------------
   Inert on the static build — these selectors simply never match there.

   A sticky element can only stick WHILE ITS PARENT'S BOX IS STILL IN VIEW.
   On the static site .sv-head is a direct child of <body>, whose box spans the
   whole document, so it has the entire page to stick against.

   Elementor renders a header template as:
       <header class="elementor-location-header">     <- direct child of <body>
         <div class="e-con">                          <- only as tall as the header
           <div class="elementor-element">            <- only as tall as the header
             <header class="sv-head">

   Each of those wrappers hugs the header's own height, so .sv-head has zero
   travel room and scrolls away with them. Promoting the OUTERMOST wrapper —
   the one parented to <body> — restores the full-page travel.

   The inner .sv-head stays sticky too; harmless, and it is what the static
   build relies on. */
.elementor-location-header {
  position: sticky;
  top: 0;
  z-index: 500;
}
/* These wrappers must not clip or transform, or they would re-break sticky. */
.elementor-location-header > .e-con,
.elementor-location-header > .e-con > .elementor-element {
  overflow: visible;
}

.sv-head {
  position: sticky; top: 0; z-index: 500;
  font-family: var(--sv-sans);
  color: var(--sv-ink);
  --sv-bar-now: var(--sv-bar-h);
}

/* --- Utility strip ------------------------------------------------------- */
.sv-util {
  background: var(--sv-forest-dd);
  color: #A9BBAB;
  font-size: 13px;
  line-height: 1;
  height: var(--sv-util-h);
  overflow: hidden;
  transition: height .3s var(--sv-ease), opacity .25s var(--sv-ease);
}
.sv-util > .sv-wrap {
  display: flex; align-items: center; justify-content: space-between;
  gap: 20px; height: var(--sv-util-h);
}
/* The strip is a fixed 40px tall, so nothing in it may wrap to a second line.
   Items are dropped at breakpoints instead — see .sv-util-hide below. */
.sv-util-l, .sv-util-r { display: flex; align-items: center; gap: 18px; min-width: 0; }
.sv-util-l > *, .sv-util-r > * { white-space: nowrap; }
.sv-util a { display: inline-flex; align-items: center; gap: 7px; transition: color .2s; white-space: nowrap; }
.sv-util a:hover { color: var(--sv-white); }
.sv-util svg { width: 14px; height: 14px; fill: currentColor; opacity: .75; flex: none; }
.sv-util-sep { width: 1px; height: 14px; background: rgba(255,255,255,.14); flex: none; }

.sv-rating { display: inline-flex; align-items: center; gap: 7px; }
.sv-rating .sv-stars { color: #F0B429; letter-spacing: .5px; font-size: 12px; }
.sv-rating b { color: var(--sv-white); font-weight: 700; }

.sv-chip-24 {
  display: inline-flex; align-items: center; gap: 7px;
  background: rgba(201,183,156,.14); color: var(--sv-sand-l);
  padding: 5px 12px; border-radius: 100px;
  font-size: 11.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
}
.sv-chip-24::before {
  content: ''; width: 6px; height: 6px; border-radius: 50%;
  background: #6FCF97; flex: none;
  box-shadow: 0 0 0 0 rgba(111,207,151,.65);
  animation: sv-pulse 2.4s infinite;
}
@keyframes sv-pulse {
  0%   { box-shadow: 0 0 0 0 rgba(111,207,151,.6); }
  70%  { box-shadow: 0 0 0 7px rgba(111,207,151,0); }
  100% { box-shadow: 0 0 0 0 rgba(111,207,151,0); }
}

/* --- Main bar ------------------------------------------------------------ */
.sv-bar {
  background: rgba(242,244,241,.92);
  -webkit-backdrop-filter: saturate(1.7) blur(16px);
  backdrop-filter: saturate(1.7) blur(16px);
  border-bottom: 1px solid var(--sv-line);
  transition: box-shadow .3s var(--sv-ease), background .3s var(--sv-ease);
}
/* Direct child ONLY. The mega panel renders inside .sv-bar and has its own
   .sv-wrap; a descendant selector here would force that wrapper to
   display:flex at the bar's fixed height and collapse the whole panel. */
.sv-bar > .sv-wrap {
  display: flex; align-items: center; gap: 26px;
  height: var(--sv-bar-h);
  transition: height .3s var(--sv-ease);
}

.sv-brand { display: flex; align-items: center; flex: none; }
.sv-brand img {
  height: 54px; width: auto;
  transition: height .3s var(--sv-ease);
}

/* Condensed state, toggled by header-footer.js past 40px of scroll. */
/* Condensed state = a shadow only. The utility strip now lives OUTSIDE the
   sticky header and scrolls away on its own, and the bar keeps a CONSTANT
   height — so the sticky element never changes size on scroll. That removes
   the mid-transition flicker entirely (nothing to interrupt): the header is
   simply stuck or not, never caught half-collapsed. */
.sv-head.is-stuck .sv-bar { box-shadow: var(--sv-sh-2); background: rgba(242,244,241,.97); }

/* --- Desktop nav --------------------------------------------------------- */
.sv-nav { display: flex; align-items: center; gap: 2px; margin-left: auto; }
.sv-nav > li { position: static; }

/* border/background are restated explicitly (not left to the :where() reset)
   because Hello Elementor's reset.css targets [type="button"] at 0-1-0, which
   outranks a zero-specificity reset and would paint a #c36 border here. */
.sv-nav > li > a,
.sv-nav > li > button {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 11px 14px; border-radius: var(--sv-r);
  border: 0; background-color: transparent;
  font-size: 15px; font-weight: 560; letter-spacing: .005em;
  color: var(--sv-charcoal);
  transition: color .2s, background .2s;
  white-space: nowrap;
}
.sv-nav > li > a:hover,
.sv-nav > li > button:hover,
.sv-nav > li.is-open > button {
  color: var(--sv-forest); background: rgba(31,58,46,.07);
}
.sv-nav > li > a[aria-current="page"] {
  color: var(--sv-forest); background: rgba(31,58,46,.07); font-weight: 650;
}
.sv-caret {
  width: 8px; height: 8px; flex: none;
  border-right: 1.9px solid currentColor; border-bottom: 1.9px solid currentColor;
  transform: rotate(45deg) translate(-2px,-2px);
  opacity: .55; transition: transform .28s var(--sv-ease);
}
.sv-nav > li.is-open .sv-caret { transform: rotate(-135deg) translate(-3px,-3px); }

/* --- Mega menu -----------------------------------------------------------
   Full-bleed panel anchored to the header rather than a narrow card, so the
   eight services can be grouped by audience instead of listed flat.
   ------------------------------------------------------------------------ */
.sv-mega {
  position: absolute; left: 0; right: 0; top: 100%;
  background: var(--sv-white);
  border-top: 1px solid var(--sv-line);
  border-bottom: 1px solid var(--sv-line);
  box-shadow: var(--sv-sh-3);
  opacity: 0; visibility: hidden; pointer-events: none;
  transform: translateY(-8px);
  transition: opacity .24s var(--sv-ease), transform .24s var(--sv-ease), visibility .24s;
}
.sv-nav > li.is-open .sv-mega {
  opacity: 1; visibility: visible; pointer-events: auto; transform: translateY(0);
}
.sv-mega-in {
  display: grid; grid-template-columns: repeat(3, 1fr) 320px;
  gap: 0 36px; padding: 34px 0 38px;
}
.sv-mega-col + .sv-mega-col { position: relative; }
.sv-mega-col + .sv-mega-col::before {
  content: ''; position: absolute; left: -18px; top: 4px; bottom: 4px;
  width: 1px; background: var(--sv-line);
}
.sv-mega-h {
  display: flex; align-items: center; gap: 10px;
  font-family: var(--sv-sans);
  font-size: 11.5px; font-weight: 700; letter-spacing: .15em; text-transform: uppercase;
  color: var(--sv-stone); margin-bottom: 14px;
}
.sv-mega-h::after { content: ''; flex: 1; height: 1px; background: var(--sv-line); }

.sv-mega-col a {
  display: flex; gap: 13px; align-items: flex-start;
  padding: 10px 12px; margin-inline: -12px;
  border-radius: var(--sv-r);
  transition: background .18s var(--sv-ease);
}
.sv-mega-col a:hover { background: var(--sv-bone); }
.sv-mega-ic {
  width: 38px; height: 38px; flex: none;
  border-radius: var(--sv-r-sm);
  background: var(--sv-bone-d) center/cover no-repeat;
}
.sv-mega-col strong {
  display: block; font-size: 14.5px; font-weight: 650; color: var(--sv-forest); line-height: 1.3;
}
.sv-mega-col span {
  display: block; font-size: 12.5px; color: var(--sv-muted); line-height: 1.45; margin-top: 2px;
}

/* Feature panel on the right of the mega menu. */
.sv-mega-feat {
  position: relative; overflow: hidden;
  border-radius: var(--sv-r-lg);
  min-height: 218px;
  display: flex; flex-direction: column; justify-content: flex-end;
  padding: 22px;
  color: var(--sv-white);
  isolation: isolate;
}
.sv-mega-feat img {
  position: absolute; inset: 0; z-index: -2;
  width: 100%; height: 100%; object-fit: cover;
}
.sv-mega-feat::after {
  content: ''; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(to top, rgba(14,26,19,.92) 6%, rgba(14,26,19,.42) 52%, rgba(14,26,19,.12) 100%);
}
.sv-mega-feat .sv-eyebrow {
  font-size: 11px; font-weight: 700; letter-spacing: .15em; text-transform: uppercase;
  color: var(--sv-sand); margin-bottom: 8px;
}
.sv-mega-feat h3 { font-size: 21px; color: var(--sv-white); margin-bottom: 6px; }
.sv-mega-feat p { font-size: 13px; color: rgba(255,255,255,.84); line-height: 1.5; }
.sv-mega-feat .sv-feat-link {
  display: inline-flex; align-items: center; gap: 8px;
  margin-top: 14px; font-size: 13.5px; font-weight: 650; color: var(--sv-white);
  border-bottom: 1.5px solid rgba(255,255,255,.45); padding-bottom: 3px; align-self: flex-start;
  transition: gap .25s var(--sv-ease), border-color .25s var(--sv-ease);
}
.sv-mega-feat .sv-feat-link::after { content: '→'; }
.sv-mega-feat:hover .sv-feat-link { gap: 12px; border-color: var(--sv-sand); }

/* --- Header CTA cluster -------------------------------------------------- */
.sv-head-cta { display: flex; align-items: center; gap: 14px; flex: none; margin-left: 4px; }

.sv-tel {
  display: flex; align-items: center; gap: 10px;
  padding: 7px 4px;
}
.sv-tel-ic {
  width: 36px; height: 36px; flex: none;
  border-radius: 50%;
  background: rgba(31,58,46,.08);
  display: flex; align-items: center; justify-content: center;
  transition: background .2s;
}
.sv-tel-ic svg { width: 16px; height: 16px; fill: var(--sv-forest); }
.sv-tel:hover .sv-tel-ic { background: rgba(31,58,46,.15); }
.sv-tel-t { display: flex; flex-direction: column; line-height: 1.2; }
.sv-tel-t small {
  font-size: 10.5px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase;
  color: var(--sv-muted);
}
.sv-tel-t strong {
  font-size: 16.5px; font-weight: 700; color: var(--sv-forest);
  font-variant-numeric: tabular-nums;
}

.sv-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 13px 24px;
  font-family: var(--sv-sans); font-size: 14.5px; font-weight: 650; letter-spacing: .01em;
  border-radius: 100px; white-space: nowrap;
  transition: transform .25s var(--sv-ease), background .25s var(--sv-ease),
              box-shadow .25s var(--sv-ease), color .25s var(--sv-ease), border-color .25s var(--sv-ease);
}
.sv-btn:hover { transform: translateY(-2px); }
.sv-btn:active { transform: translateY(0); }
.sv-btn-primary { background: #20241E; color: var(--sv-white); box-shadow: var(--sv-sh-1); }
.sv-btn-primary:hover { background: var(--sv-forest); box-shadow: var(--sv-sh-2); }
.sv-btn-sand { background: var(--sv-sand); color: var(--sv-forest-d); }
.sv-btn-sand:hover { background: var(--sv-sand-l); box-shadow: var(--sv-sh-2); }
.sv-btn-ghost {
  border: 1.5px solid rgba(255,255,255,.42); color: var(--sv-white);
  background: rgba(255,255,255,.05);
}
.sv-btn-ghost:hover { background: rgba(255,255,255,.14); border-color: rgba(255,255,255,.8); }
.sv-btn-lg { padding: 16px 30px; font-size: 15.5px; }

/* --- Burger -------------------------------------------------------------- */
/* Scoped to .sv-head so it outranks reset.css's [type="button"] regardless of
   stylesheet order, rather than relying on winning a specificity tie. */
.sv-head .sv-burger {
  display: none;
  width: 46px; height: 46px; flex: none;
  border-radius: var(--sv-r);
  border: 1px solid var(--sv-line); background: var(--sv-white);
  color: var(--sv-charcoal);
  align-items: center; justify-content: center; flex-direction: column; gap: 5px;
  padding: 0;
}
.sv-burger i {
  display: block; width: 19px; height: 2px; border-radius: 2px;
  background: var(--sv-charcoal);
  transition: transform .3s var(--sv-ease), opacity .2s;
}

/* ==========================================================================
   MOBILE DRAWER
   ========================================================================== */
.sv-scrim {
  position: fixed; inset: 0; z-index: 900;
  background: rgba(14,26,19,.5);
  -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px);
  opacity: 0; visibility: hidden;
  transition: opacity .3s var(--sv-ease), visibility .3s;
}
.sv-scrim.is-open { opacity: 1; visibility: visible; }

.sv-drawer {
  position: fixed; top: 0; right: 0; bottom: 0; z-index: 1000;
  width: min(420px, 92vw);
  background: var(--sv-bone);
  font-family: var(--sv-sans); color: var(--sv-ink);
  display: flex; flex-direction: column;
  transform: translateX(100%);
  transition: transform .36s var(--sv-ease);
  box-shadow: -20px 0 60px rgba(8,14,10,.28);
}
.sv-drawer.is-open { transform: translateX(0); }

.sv-drawer-top {
  display: flex; align-items: center; justify-content: space-between;
  gap: 16px; padding: 16px 20px;
  border-bottom: 1px solid var(--sv-line);
  background: var(--sv-white); flex: none;
}
.sv-drawer-top img { height: 42px; width: auto; }
.sv-drawer .sv-close {
  width: 42px; height: 42px; flex: none;
  border-radius: var(--sv-r); border: 1px solid var(--sv-line);
  background: var(--sv-white);
  color: var(--sv-charcoal); padding: 0;
  display: flex; align-items: center; justify-content: center;
}
.sv-close svg { width: 17px; height: 17px; stroke: var(--sv-charcoal); stroke-width: 2; fill: none; }

.sv-drawer-body { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 8px 0 20px; }

.sv-acc > a,
.sv-acc > button {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  width: 100%; padding: 16px 22px;
  font-size: 16.5px; font-weight: 600; color: var(--sv-charcoal);
  border: 0; border-radius: 0; background-color: transparent;
  border-bottom: 1px solid var(--sv-bone-d);
}
.sv-acc > button .sv-caret { opacity: .5; }
.sv-acc.is-open > button { color: var(--sv-forest); }
.sv-acc.is-open > button .sv-caret { transform: rotate(-135deg) translate(-3px,-3px); }

.sv-acc-panel {
  display: grid; grid-template-rows: 0fr;
  transition: grid-template-rows .32s var(--sv-ease);
  background: var(--sv-bone-d);
}
.sv-acc.is-open .sv-acc-panel { grid-template-rows: 1fr; }
.sv-acc-panel > div { overflow: hidden; }
.sv-acc-panel a {
  display: flex; gap: 12px; align-items: center;
  padding: 13px 22px 13px 26px;
  font-size: 15px; color: var(--sv-ink);
  border-bottom: 1px solid rgba(0,0,0,.05);
}
.sv-acc-panel a:last-child { border-bottom: 0; }
.sv-acc-panel .sv-mega-ic { width: 32px; height: 32px; }
.sv-acc-grp {
  padding: 14px 22px 6px;
  font-size: 11px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase;
  color: var(--sv-stone);
}

.sv-drawer-foot {
  flex: none; padding: 16px 20px calc(16px + env(safe-area-inset-bottom, 0px));
  border-top: 1px solid var(--sv-line); background: var(--sv-white);
  display: grid; grid-template-columns: 1fr 1fr; gap: 10px;
}
.sv-drawer-foot .sv-btn { width: 100%; padding: 15px 12px; }
.sv-drawer-meta {
  grid-column: 1 / -1; text-align: center;
  font-size: 12.5px; color: var(--sv-muted); margin-top: 2px;
}

/* Locks the page behind an open drawer without losing scroll position. */
body.sv-locked { overflow: hidden; }

/* ==========================================================================
   FOOTER
   ========================================================================== */
.sv-foot { font-family: var(--sv-sans); background: var(--sv-forest-d); color: #B7C5B8; }

/* --- CTA strip ----------------------------------------------------------- */
.sv-foot-cta {
  background: linear-gradient(100deg, var(--sv-forest) 0%, #2A4D3B 52%, var(--sv-stone) 190%);
  border-bottom: 1px solid rgba(255,255,255,.09);
}
.sv-foot-cta .sv-wrap {
  display: flex; align-items: center; justify-content: space-between;
  gap: 30px; padding: 30px 32px; flex-wrap: wrap;
}
.sv-foot-cta h2 { font-size: clamp(1.35rem, 2.4vw, 1.9rem); color: var(--sv-white); }
.sv-foot-cta p { font-size: 14.5px; color: rgba(255,255,255,.76); margin-top: 7px; }
.sv-foot-cta-btns { display: flex; gap: 12px; flex-wrap: wrap; flex: none; }

/* --- Main grid ----------------------------------------------------------- */
.sv-foot-main { padding: 62px 0 46px; }
.sv-foot-grid {
  display: grid;
  grid-template-columns: 1.7fr 1fr 1fr 1.25fr;
  gap: 44px 36px;
}
.sv-foot h4 {
  font-family: var(--sv-sans);
  font-size: 11.5px; font-weight: 700; letter-spacing: .15em; text-transform: uppercase;
  color: var(--sv-sand); margin-bottom: 18px;
}
.sv-foot-links li + li { margin-top: 11px; }
.sv-foot-links a {
  font-size: 14.5px; color: #B7C5B8;
  transition: color .2s, padding-left .2s var(--sv-ease);
  display: inline-block;
}
.sv-foot-links a:hover { color: var(--sv-white); padding-left: 5px; }

.sv-foot-brand img { height: 62px; width: auto; margin-bottom: 20px; }
.sv-foot-brand p { font-size: 14.5px; line-height: 1.68; color: #A5B4A6; max-width: 42ch; }

.sv-foot-badges { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 20px; }
.sv-foot-badges span {
  display: inline-flex; align-items: center; gap: 7px;
  background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.1);
  padding: 6px 12px; border-radius: 100px;
  font-size: 12px; color: #C4D0C5;
}
.sv-foot-badges svg { width: 13px; height: 13px; fill: var(--sv-sand); flex: none; }

.sv-socials { display: flex; gap: 10px; margin-top: 22px; }
.sv-socials a {
  width: 40px; height: 40px; border-radius: 50%;
  background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.1);
  display: flex; align-items: center; justify-content: center;
  transition: background .22s, border-color .22s, transform .22s var(--sv-ease);
}
.sv-socials a:hover { background: var(--sv-sand); border-color: var(--sv-sand); transform: translateY(-2px); }
.sv-socials svg { width: 17px; height: 17px; fill: #C4D0C5; transition: fill .22s; }
.sv-socials a:hover svg { fill: var(--sv-forest-d); }

/* --- Contact column ------------------------------------------------------ */
.sv-foot-contact li {
  display: flex; gap: 12px; align-items: flex-start;
  font-size: 14.5px; line-height: 1.55;
}
.sv-foot-contact li + li { margin-top: 14px; }
.sv-foot-contact svg { width: 16px; height: 16px; fill: var(--sv-moss); flex: none; margin-top: 3px; }
.sv-foot-contact a { transition: color .2s; }
.sv-foot-contact a:hover { color: var(--sv-white); }
.sv-foot-contact .sv-big-tel {
  font-size: 19px; font-weight: 700; color: var(--sv-white);
  font-variant-numeric: tabular-nums; letter-spacing: .01em;
}

.sv-hours {
  margin-top: 22px; padding-top: 18px;
  border-top: 1px solid rgba(255,255,255,.1);
  font-size: 13.5px;
}
.sv-hours div { display: flex; justify-content: space-between; gap: 16px; padding: 4px 0; }
.sv-hours span:first-child { color: #96A697; }
.sv-hours span:last-child { color: #C4D0C5; font-variant-numeric: tabular-nums; }
.sv-hours .sv-hours-em span { color: var(--sv-sand); font-weight: 650; }

/* --- Service-area chips -------------------------------------------------- */
.sv-foot-areas {
  border-top: 1px solid rgba(255,255,255,.09);
  border-bottom: 1px solid rgba(255,255,255,.09);
  padding: 26px 0;
}
.sv-foot-areas .sv-wrap { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
.sv-foot-areas h4 { margin-bottom: 0; flex: none; }
.sv-area-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.sv-area-chips a {
  display: inline-block; padding: 7px 15px; border-radius: 100px;
  background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.11);
  font-size: 13px; color: #B7C5B8;
  transition: background .2s, color .2s, border-color .2s;
}
.sv-area-chips a:hover { background: var(--sv-moss); border-color: var(--sv-moss); color: var(--sv-white); }
.sv-area-chips a.sv-area-hq { border-style: solid; border-color: rgba(201,183,156,.4); color: var(--sv-sand-l); }

/* --- Bottom bar ---------------------------------------------------------- */
.sv-foot-bot { padding: 22px 0 28px; }
.sv-foot-bot .sv-wrap {
  display: flex; align-items: center; justify-content: space-between;
  gap: 20px; flex-wrap: wrap;
  font-size: 13px; color: #8E9E8F;
}
.sv-foot-legal { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.sv-foot-legal a { transition: color .2s; }
.sv-foot-legal a:hover { color: var(--sv-white); }
.sv-foot-legal { row-gap: 4px; }
.sv-legal-copy { order: 1; }
.sv-legal-link { order: 2; color: #B9C6BA; font-weight: 600; text-decoration: none; }
.sv-legal-link:hover { color: var(--sv-white); text-decoration: underline; }
.sv-legal-note { order: 3; flex-basis: 100%; font-size: 12px; color: #78877A; line-height: 1.5; margin-top: 2px; }
.sv-legal-credit { order: 4; flex-basis: 100%; font-size: 12px; color: #6E7D70; margin-top: 2px; }
.sv-pay { display: flex; align-items: center; gap: 9px; }
.sv-pay span {
  height: 25px; padding: 0 8px; border-radius: var(--sv-r-sm);
  background: rgba(255,255,255,.9);
  display: inline-flex; align-items: center; justify-content: center;
}
.sv-pay svg { height: 13px; width: auto; }

/* ==========================================================================
   RESPONSIVE
   ========================================================================== */

/* Utility strip sheds items in stages so it never overflows its 40px row.
   Order of sacrifice: address -> insured line -> email. */
@media (max-width: 1300px) { .sv-util-hide-lg { display: none; } }
@media (max-width: 1120px) { .sv-util-hide-md { display: none; } }

/* Mega menu tightens before the nav collapses. */
@media (max-width: 1180px) {
  .sv-mega-in { grid-template-columns: repeat(3, 1fr); }
  .sv-mega-feat { display: none; }
  .sv-nav > li > a, .sv-nav > li > button { padding: 11px 11px; font-size: 14.5px; }
  .sv-head-cta { gap: 10px; }
}

/* Collapse to the drawer. */
@media (max-width: 1024px) {
  :root { --sv-bar-h: 74px; --sv-bar-h-sm: 62px; }
  .sv-nav { display: none; }
  /* Must match the base rule's specificity (.sv-head .sv-burger). */
  .sv-head .sv-burger { display: flex; }
  .sv-head-cta { margin-left: auto; }
  .sv-tel-t small { display: none; }
  .sv-tel-t strong { font-size: 15.5px; }
  .sv-foot-grid { grid-template-columns: 1fr 1fr; gap: 40px 32px; }
  .sv-foot-brand { grid-column: 1 / -1; }
}

@media (max-width: 860px) {
  .sv-util-l .sv-util-hide, .sv-util-r .sv-util-hide { display: none; }
  .sv-foot-cta .sv-wrap { flex-direction: column; align-items: flex-start; }
  .sv-foot-cta-btns { width: 100%; }
  .sv-foot-cta-btns .sv-btn { flex: 1; }
}

@media (max-width: 720px) {
  :root { --sv-gut: 20px; }
  .sv-util { display: none; }
  .sv-brand img { height: 42px; }
  /* The phone number collapses to an icon-only tap target. */
  .sv-tel-t { display: none; }
  .sv-head-cta .sv-btn-primary { display: none; }
  .sv-foot-main { padding: 46px 0 36px; }
  .sv-foot-grid { grid-template-columns: 1fr; gap: 34px; }
  .sv-foot-areas .sv-wrap { flex-direction: column; align-items: flex-start; gap: 14px; }
  .sv-foot-bot .sv-wrap { flex-direction: column; align-items: flex-start; gap: 14px; }
  .sv-drawer-foot { grid-template-columns: 1fr; }
}

/* ==========================================================================
   MOTION / PRINT
   ========================================================================== */
@media (prefers-reduced-motion: reduce) {
  .sv-head *, .sv-foot *, .sv-drawer *, .sv-scrim {
    transition-duration: .01ms !important;
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
  }
  .sv-btn:hover { transform: none; }
}

@media print {
  .sv-head, .sv-drawer, .sv-scrim, .sv-foot-cta { display: none !important; }
  .sv-foot { background: none; color: #000; }
}
