/* ============================================================
   site-footer.css  --  SITE-WIDE
   Footer for all redesigned SOTA pages. Loaded site-wide via
   the CMS chrome (like site-menu.css). Scoped to .site-footer.
   Root anchor 18px (dominant Figma body size). Fluid values use
   single clamp() with px endpoints (slope from 1200/400 frames),
   each paired with a unitless line-height. Two breakpoints:
   1024 (column-count/layout), 767 (phone spacing). ASCII-clean.
   ============================================================ */
.site-footer {
  font-size: 18px;
  font-family: 'Roboto', sans-serif;
  color: #3b3b3b;
  text-align: left;

  /* Full-bleed: .site-footer is a direct child of <body>, which already spans
     the full content width (body margin is zeroed site-wide in site-menu.css).
     So no vw-based breakout is needed. The old calc(50% - 50vw) actually caused
     an ~8px overhang on each side: with a vertical scrollbar present, 50% (of
     the scrollbar-excluded body) and 50vw (scrollbar-included) do NOT cancel,
     leaving a negative margin that pushed the footer past the viewport and
     produced a horizontal scrollbar. Zero margins span edge-to-edge cleanly. */
  margin-left: 0;
  margin-right: 0;

  /* tokens */
  --sf-blue:   #4792bc;
  --sf-teal:   #59afb2;
  --sf-green:  #92ca6a;
  --sf-purple: #a194c7;
  --sf-ink:    #3b3b3b;
  --sf-max:    1200px;
  --sf-pad:    20px;     /* min side gutter; content caps at 1200 */
}

/* scoped resets (per project convention) */
.site-footer *,
.site-footer *::before,
.site-footer *::after { box-sizing: border-box; }
.site-footer a   { text-decoration: none; color: inherit; }
.site-footer ul  { margin: 0; padding: 0; list-style: none; }
.site-footer img { display: block; max-width: 100%; }
.site-footer h3  { margin: 0; font-weight: inherit; }
.site-footer p   { margin: 0; }
.site-footer button {
  cursor: pointer; border: none; background: none;
  font-family: inherit; font-size: inherit; line-height: inherit; color: inherit;
}
.site-footer header { font: inherit; }

/* shared inner-width helper */
.sf-stats__inner,
.sf-map__inner,
.sf-legal__inner {
  width: min(100% - (var(--sf-pad) * 2), var(--sf-max));
  margin-inline: auto;
}

/* ============================================================
   1. STATS BAND
   ============================================================ */
.sf-stats {
  background: var(--sf-blue);
  padding-bottom: clamp(24px, 2vw + 16px, 40px);
}
.sf-stats__inner {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: center;
  gap: clamp(30px, 2.5vw + 20px, 50px);
}
.sf-stat {
  flex: 1 1 0;
  min-width: 0;          /* shrink to fit; all three stay on one row down to 767 */
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.556em;          /* 10px */
  text-align: center;
}
.sf-stat__icon {
  width: 100px;
  height: auto;
}
.site-footer .sf-stat__label {
  font-size: 1.222em;    /* 22px */
  font-weight: 700;      /* beats .site-footer h3 { font-weight: inherit } */
  line-height: 1.2;
  color: #191818;
}
.sf-stat__num {
  font-size: 2.222em;    /* 40px */
  font-weight: 700;
  line-height: 1.1;
  color: #fff;
}

/* ============================================================
   2. NEWSLETTER
   ============================================================ */
.sf-news {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: clamp(40px, 5vw + 20px, 80px) clamp(16px, 3vw + 4px, 40px);
  background-image: url('https://www.sota.com/images/site/subscribe_background_landscape_1500.jpg');
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  text-align: center;
}
.sf-news__panel {
  width: 100%;
  max-width: 680px;
  border-radius: 8px;
  background: #59afb2;
  box-shadow: 2px 2px 10px #577352;
  padding: clamp(24px, 2vw + 16px, 40px) clamp(16px, 0.5vw + 14px, 20px);
}
.sf-news__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: clamp(20px, 1.25vw + 15px, 30px);
}
.sf-news__title {
  font-size: clamp(32px, 2.25vw + 23px, 50px);
  font-weight: 700;
  line-height: 1.2;
  color: #fbfaf9;
}
.sf-news__subtitle {
  font-size: clamp(20px, 0.625vw + 17.5px, 25px);
  font-weight: 700;
  line-height: 1.4;
  color: #3d3d3d;
}
.sf-news__form {
  width: 100%;
  max-width: 640px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 10px;
}
.sf-news__email {
  flex: 1;
  min-width: 200px;
  max-width: 340px;
  border: 0;
  border-radius: 36px;
  background: #fbfaf9;
  padding: 0.5em 1.111em;     /* 10/20 at 20px field font */
  font-size: 1.111em;          /* 20px */
  line-height: 1.8;
  color: #757575;
}
.site-footer .sf-news__submit {
  width: 100%;
  max-width: 240px;
  border-radius: 30px;
  background: #555;            /* beats .site-footer button {background:none} */
  padding: 0.4em 0.8em;
  font-size: 1.389em;          /* 25px -- beats button reset font-size:inherit */
  font-weight: 900;
  letter-spacing: 0.1em;
  line-height: 1.1;
  text-transform: uppercase;
  color: #fff;                 /* beats button reset color:inherit */
  transition: background-color 0.2s ease;
}
.site-footer .sf-news__submit:hover,
.site-footer .sf-news__submit:focus-visible { background: var(--sf-blue); }

/* ============================================================
   3. SITEMAP
   ============================================================ */
.sf-map {
  background: #fff;
  padding-block: clamp(40px, 5vw + 20px, 80px);
}
.sf-map__inner {
  display: flex;
  flex-direction: column;
  gap: clamp(30px, 2.5vw + 20px, 50px);
}

/* logo + description */
.sf-map__intro {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.556em;          /* 10px */
}
.sf-map__logo img {
  width: 124px;
  height: auto;
}
.sf-map__desc {
  font-size: 1em;        /* 18px */
  line-height: 1.667;    /* 30/18 */
  color: var(--sf-ink);
}
.sf-map__hours {
  font-size: 1em;
  font-weight: 700;
  line-height: 1.667;
  color: var(--sf-ink);
}

/* gradient divider */
.sf-map__rule {
  height: 3px;
  width: 100%;
  border-radius: 20px;
  background: linear-gradient(
    to right,
    var(--sf-blue)   0%,
    var(--sf-blue)   25%,
    var(--sf-teal)   25%,
    var(--sf-teal)   50%,
    var(--sf-green)  50%,
    var(--sf-green)  75%,
    var(--sf-purple) 75%,
    var(--sf-purple) 100%
  );
  opacity: 0.55;
}

/* link columns */
.sf-cols {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: clamp(24px, 0.75vw + 21px, 30px);
  align-items: start;
}
.sf-col {
  display: flex;
  flex-direction: column;
  gap: 1.667em;          /* 30px between groups */
  min-width: 0;
}
.sf-group {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.556em;          /* 10px between links */
}
.site-footer .sf-group__head {
  display: block;
  font-size: 1em;        /* 18px */
  font-weight: 900;
  letter-spacing: 0.1em;
  line-height: 1.944;    /* 35/18 */
  text-transform: uppercase;
  color: var(--sf-blue);   /* blue whether span (has sub-links) or a (solo); beats .site-footer a {color:inherit} */
}
a.sf-group__head:hover,
a.sf-group__head:focus-visible { text-decoration: underline; }
.sf-group--solo { gap: 0; }

.site-footer .sf-link {
  font-size: 1em;        /* 18px */
  font-weight: 500;      /* Roboto Medium */
  line-height: 1.389;    /* 25/18 */
  color: var(--sf-ink);
  text-decoration: underline;            /* scoped to beat .site-footer a {text-decoration:none} */
  text-decoration-color: transparent;
  text-decoration-thickness: 1.5px;
  text-decoration-skip-ink: none;
  text-underline-offset: 4px;   /* sits below descenders, per Figma */
  transition: text-decoration-color 0.15s ease;
}
.site-footer a.sf-link:hover,
.site-footer a.sf-link:focus-visible { text-decoration-color: var(--sf-blue); }
.sf-link--parent {
  color: var(--sf-ink);
  cursor: default;
  text-decoration: none;
}
/* Nested product children: lighter weight + bullet, per Figma (node 8129:1957) */
.site-footer .sf-link--child {
  position: relative;
  margin-left: 27px;            /* bullet indent (Figma ms-27) */
  font-weight: 400;             /* Roboto Regular -- lighter than the 500 siblings */
}
.sf-link--child::before {
  content: "";
  position: absolute;
  left: -16px; top: 0.6em;
  width: 4px; height: 4px;
  border-radius: 50%;
  background: currentColor;
}

/* "Coming Soon" treatment (matches sitemap Main Pages): green label,
   grayed + struck-through items, optional " Soon" tag beside an item */
.sf-soon {
  color: #92ca6a;
  font-weight: 700;
}
.site-footer .sf-link--soon {
  color: #888;
  text-decoration: line-through;
  text-decoration-color: #888;   /* keep strike visible (base sf-link sets it transparent) */
  cursor: default;
}
.site-footer a.sf-link--soon:hover,
.site-footer a.sf-link--soon:focus-visible {
  text-decoration: line-through;  /* no blue hover underline on disabled items */
  text-decoration-color: #888;
}
.sf-soon-tag {
  color: #92ca6a;
  font-weight: 700;
}

/* social */
.sf-social {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.556em;          /* 10px */
}
.sf-social__rule {
  display: flex;
  gap: 5px;
}
.sf-social__rule span {
  width: 25px;
  height: 3px;
  border-radius: 20px;
}
.sf-social__rule span:nth-child(1) { background: var(--sf-green); }
.sf-social__rule span:nth-child(2) { background: var(--sf-purple); }
.sf-social__rule span:nth-child(3) { background: var(--sf-teal); }
.sf-social__label {
  font-size: 1em;
  font-weight: 700;
  line-height: 1.667;
  color: var(--sf-ink);
}
.sf-social__links {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 1.667em;          /* 30px */
}
.sf-social__item {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 1em;
  font-weight: 500;
  line-height: 1.389;
  color: var(--sf-ink);
}
.sf-social__item img { width: 40px; height: 40px; }
.sf-social__item span { text-decoration: underline; text-decoration-color: transparent; text-decoration-thickness: 1.5px; text-decoration-skip-ink: none; text-underline-offset: 4px; transition: text-decoration-color 0.15s ease; }
.sf-social__item:hover span,
.sf-social__item:focus-visible span { text-decoration-color: var(--sf-blue); }

/* ============================================================
   4. LIGHT-BLUE WAVE
   ============================================================ */
.sf-wave-light {
  display: block;
  width: 100%;
  height: auto;
  /* no background: the PNG is transparent above the crest, so the white
     social section (.sf-map) shows through; the wave fill meets the legal band */
  margin-bottom: -1px;          /* close sub-pixel seam against the legal band */
}

/* ============================================================
   5. LEGAL BAND
   ============================================================ */
.sf-legal {
  background: #d6effa;
  padding-bottom: clamp(40px, 5vw + 20px, 80px);
}
.sf-legal__inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.667em;          /* 30px */
  text-align: center;
}
.sf-legal__copy {
  font-size: 1em;        /* 18px */
  line-height: 1.944;    /* 35/18 */
  color: var(--sf-ink);
}
.sf-legal__disclaimer {
  font-size: 0.889em;    /* 16px */
  line-height: 1.5;      /* 24/16 */
  color: var(--sf-ink);
}

/* ============================================================
   RESPONSIVE
   1024: column-count (5 -> 3 -> 2 handled here + 767), layout
   767:  phone spacing / single column
   ============================================================ */
@media (max-width: 1024px) {
  .sf-cols { grid-template-columns: repeat(3, 1fr); }
  /* re-flow: keep groups readable when columns repack */
  .sf-col { gap: 1.667em; }
}

@media (max-width: 767px) {
  .sf-cols {
    grid-template-columns: repeat(2, 1fr);
    gap: 1.667em;        /* 30px */
  }
  .sf-stats__inner { flex-direction: column; }   /* stats stack below 767 */
  .sf-stat { width: 100%; }

  /* On mobile the sitemap links and social icons live in the hamburger menu
     instead (see site-menu). Hide them here; keep the intro (logo/desc/hours),
     stats, newsletter, wave, and legal band. */
  .sf-cols,
  .sf-social,
  .sf-map__rule { display: none; }

  /* The fixed 56px mobile bottom nav bar (site-menu .menu-bottomnav, plus the
     safe-area inset) overlaps the very bottom of the page and was hiding the
     last line of the legal disclaimer. Reserve clearance below it so the full
     disclaimer stays visible above the bar. */
  .sf-legal {
    padding-bottom: calc(56px + 30px + env(safe-area-inset-bottom, 0px));
  }
}

/* ============================================================
   PAGE-BOTTOM WAVE
   Lives as the LAST element inside a page's final section (NOT in
   the footer). Its transparent upper area reveals that section's
   background; its blue crest tucks against the footer stats band.
   Full-bleed: breaks out of section padding to span the viewport.

   Placement: put <div class="page-wave"> as the final child of the
   last section, AND add class "section--wave" to that section so its
   side/bottom padding is removed where the wave sits (the wave is
   full-bleed and must touch the footer with no gap).
   ============================================================ */
.section--wave {
  padding-bottom: 0 !important;   /* wave tucks straight onto the footer, no gap */
}
.page-wave {
  /* Nested full-bleed: unlike .site-footer, this lives inside padded sections
     (.section > .container), so it MUST break out with a vw-based negative
     margin to escape that padding. With a vertical scrollbar present this
     overhangs the viewport by ~half the scrollbar width — there is no static,
     container-agnostic CSS breakout that is scrollbar-exact for a nested
     element. That residual overhang is absorbed by html { overflow-x: clip }
     (see site-menu.css); it must NOT be "fixed" by zeroing these margins, or
     the wave will be trapped inside the section padding. */
  margin-left: calc(50% - 50vw);  /* full-bleed regardless of section padding */
  margin-right: calc(50% - 50vw);
  margin-bottom: -1px;            /* close sub-pixel seam against the footer */
  line-height: 0;                 /* kill inline-svg descender gap */
  pointer-events: none;
  position: relative;             /* anchor the seam-bridge ::after below */
}
/* Seam bridge. A full-bleed wave scaled to viewport width can render a
   fractional bottom pixel row that anti-aliases to a light sliver -- a white
   line that flickers in and out as the viewport width changes. A fixed
   negative margin cannot track a rounding artifact that shifts with width, so
   a solid strip bridges the boundary instead: it sits in the wave's already-
   filled bottom band and overlaps a few px into the footer, so the seam is
   always covered by opaque blue regardless of the sub-pixel edge. Colour must
   match the wave's bottom fill / footer band; it is the literal value because
   .page-wave lives OUTSIDE .site-footer (last child of the page's final
   section), where the --sf-blue token is out of scope. */
.page-wave::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -3px;                   /* extend into the footer to cover the seam */
  height: 8px;
  background: #4792bc;            /* TODO(#8): match divider_waves_dark_blue.png bottom-fill / footer band. Currently the old --sf-blue; if the wave PNG and footer band are darker, update this hex to match or a light strip shows at the seam. */
  pointer-events: none;
}
.page-wave__img {
  display: block;
  width: 100%;
  height: auto;   /* PNG keeps its natural aspect ratio full-bleed */
}
