/* ─── HERO ────────────────────────────────────────── */
    #hero {
      min-height: 100vh; /* fallback for browsers without svh support */
      min-height: 100svh; /* mobile: sized to the smallest guaranteed
        viewport (toolbar visible) so this box never resizes -- and
        shove the page content up/down -- as the address bar
        shows/hides while the user scrolls */
      display: flex;
      align-items: center;
      position: relative;
      overflow: hidden;
      /* Top padding must clear <nav>'s real un-scrolled height (~157px) —
         see the mobile #hero override in the MOBILE block for the same fix. */
      padding: 11rem 0 5rem;
    }

.hero-bg {
      position: absolute;
      inset: 0;
      background:
        radial-gradient(ellipse 70% 55% at 65% 45%, rgba(92,110,58,0.22) 0%, transparent 65%),
        radial-gradient(ellipse 50% 50% at 10% 75%, rgba(61,74,46,0.18) 0%, transparent 55%),
        radial-gradient(ellipse 35% 40% at 85% 15%, rgba(138,158,92,0.10) 0%, transparent 50%),
        radial-gradient(ellipse 60% 30% at 50% 100%, rgba(30,34,32,0.8) 0%, transparent 70%),
        linear-gradient(160deg, #0a0d0c 0%, #111a10 40%, #0d0f0e 100%);
    }

/* Noise grain overlay */
    .hero-bg::before {
      content: '';
      position: absolute;
      inset: 0;
      opacity: 0.045;
      background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='1'/%3E%3C/svg%3E");
      background-size: 200px 200px;
      pointer-events: none;
    }

/* Geometric grid pattern overlay */
    .hero-bg::after {
      content: '';
      position: absolute;
      inset: 0;
      background-image:
        linear-gradient(rgba(92,110,58,0.05) 1px, transparent 1px),
        linear-gradient(90deg, rgba(92,110,58,0.05) 1px, transparent 1px);
      background-size: 72px 72px;
      mask-image: radial-gradient(ellipse 90% 85% at 65% 40%, black 10%, transparent 75%);
    }

.hero-actions {
      display: flex;
      gap: 1rem;
      flex-wrap: wrap;
      align-items: center;
    }

/* In normal document flow (not absolutely positioned) so it can never
   overlap the hero-chat widget above it — that widget's height varies
   as its auto-playing demo reveals a result box, and an absolute
   bottom-anchored position can't adapt to that. See also: mobile no
   longer hides this — flex-wrap lets it reflow safely at any width. */
.hero-stats {
      display: flex;
      flex-wrap: wrap;
      justify-content: flex-end;
      gap: 2rem 2.5rem;
      margin-top: 3rem;
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
    }

/* In normal document flow (not absolutely pinned to #hero's bottom) for the
   same reason as .hero-stats above — it now sits after the stats row, so an
   absolute position tied to #hero's overall height could collide with it. */
.hero-scroll {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 0.5rem;
      width: fit-content;
      margin: 2.5rem auto 0;
      /* Bounces a few times to draw the eye, then holds still --
         infinite was reading as unwanted page motion, especially on
         mobile where this sits directly under the stats row people
         are trying to read. */
      animation: bounce 2s ease-in-out 3;
    }

@keyframes bounce {
      0%, 100% { transform: translateY(0); }
      50% { transform: translateY(8px); }
    }

/* ─── SERVICES ────────────────────────────────────── */
    #services {
      padding: var(--section-pad) 0;
      background: linear-gradient(170deg, #141a12 0%, #1a1e1c 60%, #111510 100%);
      position: relative;
      overflow: hidden;
    }

#services::before {
      content: 'SERVICES';
      position: absolute;
      top: -0.5rem;
      right: -1rem;
      font-family: var(--font-display);
      font-size: clamp(6rem, 14vw, 14rem);
      letter-spacing: 0.05em;
      color: rgba(255,255,255,0.02);
      pointer-events: none;
      white-space: nowrap;
    }

.services-header {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 3rem;
      margin-bottom: 4rem;
      align-items: end;
    }

.services-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
      gap: 1.25rem;
    }

.service-crops {
      display: flex;
      gap: 0.5rem;
      flex-wrap: wrap;
    }

.services-carousel-stage {
      display: flex;
      align-items: flex-end;
      justify-content: center;
      gap: 1.25rem;
      min-height: 380px;
    }

@media (max-width: 900px) {
      .carousel-slot-prev, .carousel-slot-next { flex-basis: 70px; }
      .carousel-slot-active { flex-basis: 78vw; }
    }

@media (max-width: 640px) {
      .carousel-slot-prev, .carousel-slot-next { display: none; }
      .carousel-slot-active { flex-basis: 100%; }
      .services-carousel-stage { min-height: auto; }
    }

.carousel-controls {
      display: flex;
      align-items: center;
      justify-content: center;
      gap: 1.5rem;
      margin-top: 2.5rem;
    }

.carousel-dots {
      display: flex;
      align-items: center;
      gap: 0.6rem;
    }

/* ─── TESTIMONIALS ────────────────────────────────── */
    #testimonials {
      padding: var(--section-pad) 0;
      background: var(--black);
      position: relative;
      overflow: hidden;
    }

.testimonials-header { margin-bottom: 3.5rem; text-align: center; }

.testimonials-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
      gap: 2rem;
    }

.testimonial-author {
      display: flex;
      align-items: center;
      gap: 1rem;
    }

/* ─── FREE CONSULTATION FORM ─────────────────────── */
    #consultation {
      padding: var(--section-pad) 0;
      background: linear-gradient(135deg, #111a10 0%, #1a1e1c 50%, #0d1510 100%);
      position: relative;
      overflow: hidden;
    }

#consultation::after {
      content: '';
      position: absolute;
      top: -20%;
      right: -10%;
      width: 600px;
      height: 600px;
      border-radius: 50%;
      background: radial-gradient(circle, rgba(92,110,58,0.08) 0%, transparent 70%);
      pointer-events: none;
    }

.consultation-layout {
      display: grid;
      grid-template-columns: 1fr 1.4fr;
      gap: 5rem;
      align-items: start;
    }

.consultation-info h2 { margin-bottom: 0; }

.consultation-info .divider { margin-bottom: 1.5rem; }

.consult-bullets {
      display: flex;
      flex-direction: column;
      gap: 1rem;
    }

.consult-bullet {
      display: flex;
      align-items: flex-start;
      gap: 1rem;
    }

.form-row {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 1rem;
      margin-bottom: 1rem;
    }

.form-group {
      display: flex;
      flex-direction: column;
      gap: 0.4rem;
      margin-bottom: 1rem;
    }

.form-group.full { grid-column: 1 / -1; }

.checkbox-group {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 0.5rem;
      margin-bottom: 1rem;
    }

/* Success message */
    .form-success {
      display: none;
      text-align: center;
      padding: 2rem;
    }

.form-success.show { display: block; }

/* ─── CONTACT ─────────────────────────────────────── */
    #contact {
      padding: var(--section-pad) 0;
      background: var(--black);
    }

/* ─── CERTIFICATIONS & LICENSES ──────────────────────── */
#certifications {
      padding: 3rem 0;
      background: var(--charcoal);
      border-top: 1px solid rgba(92,110,58,0.15);
    }

.cert-logos {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      justify-content: center;
      gap: 2rem;
    }

.contact-layout {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 5rem;
      align-items: start;
    }

.contact-items {
      display: flex;
      flex-direction: column;
      gap: 2rem;
      margin-top: 2.5rem;
    }

.contact-item {
      display: flex;
      gap: 1.25rem;
      align-items: flex-start;
    }

.service-counties {
      display: flex;
      flex-wrap: wrap;
      gap: 0.5rem;
    }

/* ─── FOOTER ──────────────────────────────────────── */
    footer {
      background: var(--charcoal);
      border-top: 1px solid rgba(92,110,58,0.15);
      padding: 3rem 0 2rem;
    }

.footer-layout {
      display: grid;
      grid-template-columns: 1.5fr 1fr 1fr;
      gap: 3rem;
      margin-bottom: 3rem;
    }

.footer-links {
      display: flex;
      flex-direction: column;
      gap: 0.65rem;
    }

.footer-bottom {
      border-top: 1px solid rgba(255,255,255,0.06);
      padding-top: 1.5rem;
      display: flex;
      justify-content: space-between;
      align-items: center;
      gap: 1rem;
      flex-wrap: wrap;
    }

.standalone-grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 1.25rem;
    }

@media (max-width: 768px) {
      .suite-card { grid-template-columns: 1fr; gap: 1.5rem; }
      .suite-tags { flex-direction: row; flex-wrap: wrap; min-width: unset; }
      .standalone-grid { grid-template-columns: 1fr; }
    }

/* ─── HERO 2-COL LAYOUT ───────────────────────────────── */
    /* Force container to fill hero flex parent */
    #hero > .container {
      width: 100%;
      align-self: center;
    }

.hero-grid {
      display: grid;
      grid-template-columns: minmax(0, 1fr) 380px;
      gap: 2.5rem;
      align-items: start;
      width: 100%;
      position: relative;
      z-index: 2;
    }

/* Remove fixed max-width so hero-content fills its grid column */
    .hero-grid .hero-content {
      max-width: none;
      width: 100%;
    }

@media (max-width: 1000px) {
  .hero-grid { grid-template-columns: 1fr; }
}

/* ─── WHO WE ARE BAND (#about) ────────────────────────
   Previously styled entirely via inline style="" attributes
   on the section/containers below; consolidated here during
   the file split so index.html carries no presentation. */
#about {
  padding: 5rem 0;
  background: var(--black);
  border-bottom: 1px solid rgba(92,110,58,0.12);
  position: relative;
  overflow: hidden;
}

/* Content wrapper that sits above a section's decorative aurora-field/glow-orb layer */
.section-inner {
  position: relative;
  z-index: 1;
}

.about-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 5rem;
  align-items: center;
}

.about-features {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

.about-feature-card {
  padding: 1.5rem;
  display: flex;
  gap: 1.25rem;
  align-items: flex-start;
}

/* ─── HOW WE WORK (#process) ──────────────────────────
   Also previously styled entirely via inline style="" attributes. */
#process {
  padding: var(--section-pad) 0;
  background: var(--black);
  overflow: hidden;
  position: relative;
}

.process-grid-bg {
  position: absolute;
  top: 0; left: 0; right: 0; bottom: 0;
  background-image:
    linear-gradient(rgba(92,110,58,0.04) 1px, transparent 1px),
    linear-gradient(90deg, rgba(92,110,58,0.04) 1px, transparent 1px);
  background-size: 80px 80px;
  pointer-events: none;
}

.process-header {
  text-align: center;
  margin-bottom: 4rem;
}

.divider--center { justify-content: center; }

.process-steps {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 3rem 2rem;
  position: relative;
}

.process-step {
  text-align: center;
  padding: 0 1.5rem;
}

/* ─── MOBILE ──────────────────────────────────────── */
/* Kept at the end of the file, after every base rule it overrides,
   so cascade order can't silently cancel it (see hero-stats/nav-toggle
   comments elsewhere for the same class of bug this caused before). */
@media (max-width: 900px) {
      .nav-links { display: none; }
      .hero-stats { justify-content: center; gap: 1.5rem 2rem; margin-top: 2rem; }
      .services-header { grid-template-columns: 1fr; }
      .consultation-layout { grid-template-columns: 1fr; gap: 3rem; }
      .contact-layout { grid-template-columns: 1fr; gap: 3rem; }
      .footer-layout { grid-template-columns: 1fr 1fr; }
      .footer-brand { grid-column: 1 / -1; }
      /* Process steps: 5 items → 2-col grid, last item spans full width */
      .process-steps { grid-template-columns: 1fr 1fr; gap: 2rem; }
      .process-steps > .process-step:nth-child(5) { grid-column: 1 / -1; }
      /* About grid: collapse to single column */
      .about-grid { grid-template-columns: 1fr; gap: 3rem; }
      /* .hero-content's own mobile padding override lives in components.css,
         next to its base rule — that file loads after this one, so a
         padding override placed here would be silently canceled. */
      /* Top padding must clear <nav> in its taller, un-scrolled state
         (~157px on phones) — not just its compact "scrolled" state —
         since the page can load or return to scrollY 0 at any time. */
      #hero { padding: 12.5rem 0 4rem; }
    }

@media (max-width: 600px) {
      .form-row { grid-template-columns: 1fr; }
      .checkbox-group { grid-template-columns: 1fr; }
      .footer-layout { grid-template-columns: 1fr; }
      /* .form-card's own mobile padding override lives in components.css
         for the same file-load-order reason as .hero-content above. */
      /* Process: single column on small phones */
      .process-steps { grid-template-columns: 1fr; }
      .process-steps > .process-step:nth-child(5) { grid-column: auto; }
      /* Tighter container padding on small screens */
      .container { padding: 0 1.25rem; }
      /* 3 stats don't fit on one row at phone widths without either
         shrinking text illegibly or wrapping unevenly (2 + 1, lopsided).
         Stack them instead — full-width, evenly spaced, genuinely symmetric. */
      .hero-stats { flex-direction: column; align-items: center; gap: 1.25rem; }
    }
