<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="Evanhoff helps businesses across Southern Minnesota build better websites, make smarter digital decisions, and get more out of the tools they already have."><title>Evanhoff | Digital Services for the Modern Midwest</title><!-- Canonical --><link rel="canonical" href="https://evanhoff.com/"><!-- Fonts: Fraunces (serif), Inter Tight (sans), JetBrains Mono --><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;1,9..144,400;1,9..144,500&family=Inter+Tight:wght@400;500;600&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet"><!-- AOS --><link rel="stylesheet" href="https://unpkg.com/aos@2.3.4/dist/aos.css"><!-- Open Graph --><meta property="og:title" content="Evanhoff | Digital Services for the Modern Midwest"><meta property="og:description" content="Evanhoff helps businesses across Southern Minnesota build better websites, make smarter digital decisions, and get more out of the tools they already have."><meta property="og:type" content="website"><meta property="og:site_name" content="Evanhoff"><meta property="og:url" content="https://evanhoff.com/"><meta property="og:image" content="https://evanhoff.com/hero1.jpg"><meta property="og:image:alt" content="Evanhoff — Digital services for the modern Midwest"><meta property="og:locale" content="en_US"><!-- Twitter Card --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Evanhoff | Digital Services for the Modern Midwest"><meta name="twitter:description" content="Evanhoff helps businesses across Southern Minnesota build better websites, make smarter digital decisions, and get more out of the tools they already have."><meta name="twitter:image" content="https://evanhoff.com/hero1.jpg"><!-- Favicon --><link rel="icon" type="image/svg+xml" href="/favicon.svg"><!-- Structured Data: Organization --><script type="application/ld+json">{"@context":"https://schema.org","@type":"ProfessionalService","name":"Evanhoff","url":"https://evanhoff.com","email":"hello@evanhoff.com","description":"Evanhoff helps businesses across Southern Minnesota build better websites, make smarter digital decisions, and get more out of the tools they already have.","areaServed":{"@type":"Place","name":"Southern Minnesota"},"serviceType":["Web Design","Digital Strategy","App Development"],"knowsAbout":["Web Development","Digital Strategy","Small Business"],"sameAs":[]}</script><link rel="stylesheet" href="/_astro/Footer.Uz0al8Dh.css">
<link rel="stylesheet" href="/_astro/index@_@astro.yZVvAsne.css"></head> <body>   <nav class="absolute top-0 left-0 w-full py-6 z-[1000]"> <div class="container-max flex items-center justify-between"> <a href="/" class="text-text-on-dark font-semibold tracking-[0.06em] uppercase transition-colors duration-300" style="font-size: 1rem" data-menu-logo>
EVANHOFF
</a> <!-- Desktop Links --> <div class="hidden md:flex items-center gap-10"> <a href="/#services" class="text-text-on-dark transition-colors" style="font-size: 0.9375rem; transition-duration: var(--duration-fast)"> Services </a><a href="/about" class="text-text-on-dark transition-colors" style="font-size: 0.9375rem; transition-duration: var(--duration-fast)"> About </a><a href="/#contact" class="text-text-on-dark transition-colors" style="font-size: 0.9375rem; transition-duration: var(--duration-fast)"> Contact </a> </div> <!-- Mobile Hamburger --> <button class="md:hidden p-2 -mr-2" aria-label="Open menu" aria-expanded="false" data-menu-toggle> <svg class="text-text-on-dark transition-colors duration-300" data-menu-icon width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"> <line x1="3" y1="6" x2="21" y2="6"></line> <line x1="3" y1="12" x2="21" y2="12"></line> <line x1="3" y1="18" x2="21" y2="18"></line> </svg> <svg class="text-text-on-dark hidden" data-menu-icon-close width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"> <line x1="6" y1="6" x2="18" y2="18"></line> <line x1="18" y1="6" x2="6" y2="18"></line> </svg> </button> </div> </nav> <main data-astro-cid-j7pv25f6> <!-- Hero --> <section class="flex flex-col bg-bg-dark relative overflow-hidden" style="min-height: calc(100dvh + 1.5rem)" data-astro-cid-bbe6dxrz> <!-- Background Image --> <div class="absolute inset-0" data-astro-cid-bbe6dxrz> <img src="./hero1.jpg" alt="Southern Minnesota landscape" class="w-full h-full object-cover" loading="eager" data-astro-cid-bbe6dxrz> <!-- Gradient Overlay: transparent at top, dark at bottom --> <div class="absolute inset-0 bg-linear-to-b from-bg-dark/25 via-bg-dark/60 via-30% to-bg-dark/95 to-60%" data-astro-cid-bbe6dxrz></div> </div> <!-- Content anchored to bottom --> <div class="relative z-10 mt-auto w-full container-max pb-16 md:pb-20" data-astro-cid-bbe6dxrz> <!-- Headline Group --> <div class="flex flex-col gap-2 mb-8 hero-fade" style="--delay: 0ms" data-astro-cid-bbe6dxrz> <span class="font-mono text-text-on-dark-muted" style="font-size: var(--text-meta)" data-astro-cid-bbe6dxrz>
SOUTHERN MINNESOTA
</span> <p class="text-text-on-dark-muted font-medium" style="font-size: var(--text-hero-lead)" data-astro-cid-bbe6dxrz>
Digital services for the
</p> <h1 class="font-display italic text-text-on-dark" style="font-size: var(--text-hero); line-height: 1.05; letter-spacing: var(--tracking-display)" data-astro-cid-bbe6dxrz>
modern Midwest.
</h1> </div> <!-- Support + CTA --> <div class="flex flex-col gap-8 items-start hero-fade" style="--delay: 200ms" data-astro-cid-bbe6dxrz> <p class="text-text-on-dark-muted max-w-lg" style="font-size: var(--text-body)" data-astro-cid-bbe6dxrz>
Local businesses deserve better
        websites, smarter digital strategy, and a partner who actually shows
        up.
</p> <a href="#contact" class="inline-block w-fit bg-accent-cta text-bg-primary px-8 py-4 rounded-[var(--card-radius)] font-medium transition-transform hover:scale-[1.02]" style="transition-timing-function: var(--ease-out); transition-duration: var(--duration-fast)"> Let&#39;s talk </a> </div> </div> </section> <!-- Services --> <section id="services" class="bg-bg-primary rounded-t-3xl relative z-10 -mt-6 py-[120px] pb-[140px]" data-astro-cid-j7pv25f6> <div class="container-max flex flex-col gap-16" data-astro-cid-j7pv25f6> <div class="flex flex-col gap-4" data-aos="fade-up"> <span class="label text-text-muted">SERVICES</span> <h2 class="font-display" style="font-size: var(--text-section); line-height: var(--leading-display); letter-spacing: var(--tracking-display)"> What we do for businesses like yours </h2> </div> <div class="grid grid-cols-1 md:grid-cols-3 gap-6" data-astro-cid-j7pv25f6> <article class="svc-card" data-aos="fade-up" data-aos-delay="0" data-astro-cid-uhzbvkqe> <div class="svc-card__top" data-astro-cid-uhzbvkqe> <span class="svc-card__icon" data-astro-cid-uhzbvkqe> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-uhzbvkqe><path d="M21.54 15H17a2 2 0 0 0-2 2v4.54"/><path d="M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17"/><path d="M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05"/><circle cx="12" cy="12" r="10"/></svg> </span> <span class="svc-card__tag" data-astro-cid-uhzbvkqe>WEB · 01</span> </div> <h3 class="svc-card__heading" data-astro-cid-uhzbvkqe>Websites that actually work for you</h3> <p class="svc-card__body" data-astro-cid-uhzbvkqe>Your website is often the first thing a customer sees — and for most local businesses, it isn&#39;t doing them any favors. We build sites that look professional, work on every device, and bring people in.</p> <div class="svc-card__footer" data-astro-cid-uhzbvkqe> <ul class="svc-card__list" data-astro-cid-uhzbvkqe> <li data-astro-cid-uhzbvkqe>Design &amp; build</li><li data-astro-cid-uhzbvkqe>Copy &amp; photography direction</li><li data-astro-cid-uhzbvkqe>Hosting &amp; ongoing care</li> </ul> </div> </article> <article class="svc-card" data-aos="fade-up" data-aos-delay="120" data-astro-cid-uhzbvkqe> <div class="svc-card__top" data-astro-cid-uhzbvkqe> <span class="svc-card__icon" data-astro-cid-uhzbvkqe> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-uhzbvkqe><path d="m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z"/><circle cx="12" cy="12" r="10"/></svg> </span> <span class="svc-card__tag" data-astro-cid-uhzbvkqe>STRATEGY · 02</span> </div> <h3 class="svc-card__heading" data-astro-cid-uhzbvkqe>A digital strategy team in your corner</h3> <p class="svc-card__body" data-astro-cid-uhzbvkqe>You don&#39;t need a full-time CTO. You need a partner who helps you figure out what&#39;s worth doing and what isn&#39;t — whether that&#39;s new tools, better process, or knowing when to leave something alone.</p> <div class="svc-card__footer" data-astro-cid-uhzbvkqe> <ul class="svc-card__list" data-astro-cid-uhzbvkqe> <li data-astro-cid-uhzbvkqe>Systems audit</li><li data-astro-cid-uhzbvkqe>Tooling &amp; vendor review</li><li data-astro-cid-uhzbvkqe>Roadmap &amp; quarterly check-ins</li> </ul> </div> </article> <article class="svc-card" data-aos="fade-up" data-aos-delay="240" data-astro-cid-uhzbvkqe> <div class="svc-card__top" data-astro-cid-uhzbvkqe> <span class="svc-card__icon" data-astro-cid-uhzbvkqe> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-uhzbvkqe><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg> </span> <span class="svc-card__tag" data-astro-cid-uhzbvkqe>PRODUCTS · 03</span> </div> <h3 class="svc-card__heading" data-astro-cid-uhzbvkqe>Apps and tools built to solve real problems</h3> <p class="svc-card__body" data-astro-cid-uhzbvkqe>Beyond client work, we design and build our own digital products — apps and tools that solve real problems for real people. We don&#39;t just advise on software. We ship it, every week.</p> <div class="svc-card__footer" data-astro-cid-uhzbvkqe> <ul class="svc-card__list" data-astro-cid-uhzbvkqe> <li data-astro-cid-uhzbvkqe>Custom internal tools</li><li data-astro-cid-uhzbvkqe>Native &amp; web apps</li><li data-astro-cid-uhzbvkqe>From prototype to launch</li> </ul> </div> </article> </div> </div> </section> <!-- Manifesto --> <section class="bg-bg-dark"> <div class="container-max section-padding flex flex-col gap-10"> <p class="text-text-on-dark-muted prose-width" style="font-size: var(--text-body); line-height: var(--leading-body)" data-aos="fade-up">
You could go with a big platform. You'd get a template, a chatbot,
      and a 1-800 number nobody answers.
</p> <h2 class="display display--lg italic text-text-on-dark max-w-4xl" data-aos="fade-up" data-aos-delay="100">
You deserve a <span class="text-accent">partner</span> who actually shows up.
</h2> <p class="text-text-on-dark-muted prose-width" style="font-size: var(--text-body); line-height: var(--leading-body)" data-aos="fade-up" data-aos-delay="200">
When you work with us, you get a real person who picks up the phone,
      knows your business, and builds things that last. Not a ticket
      number. Not a chatbot. A partner who's right here in your community.
</p> </div> </section> <!-- Approach --> <section class="bg-bg-primary" data-astro-cid-j7pv25f6> <div class="container-max section-padding" data-astro-cid-j7pv25f6> <div class="approach-head" data-aos="fade-up" data-astro-cid-j7pv25f6> <div class="approach-head__left" data-astro-cid-j7pv25f6> <span class="label text-text-secondary" data-astro-cid-j7pv25f6>APPROACH</span> <h2 class="display display--lg approach-head__title" data-astro-cid-j7pv25f6>
Simple, honest, <em data-astro-cid-j7pv25f6>effective.</em> </h2> </div> <p class="approach-head__lede" data-astro-cid-j7pv25f6>
Three steps, in order. Nothing skipped, nothing padded — it's how we work on every engagement, from a one-page site to a year-long product build.
</p> </div> <hr class="approach-rule" data-astro-cid-j7pv25f6> <div class="flex flex-col" data-astro-cid-j7pv25f6> <div class="step-row" data-aos="fade-up" data-astro-cid-jptz7ure> <div class="step-row__num" data-astro-cid-jptz7ure>01</div> <div class="step-row__middle" data-astro-cid-jptz7ure> <div class="step-row__kind" data-astro-cid-jptz7ure> <span data-astro-cid-jptz7ure>DISCOVERY</span> <span class="step-row__kind-dash" aria-hidden="true" data-astro-cid-jptz7ure></span> </div> <h3 class="step-row__title" data-astro-cid-jptz7ure> We <em data-astro-cid-jptz7ure>learn.</em> </h3> </div> <div class="step-row__right" data-astro-cid-jptz7ure> <p class="step-row__desc" data-astro-cid-jptz7ure>We start by understanding your business, your customers, and what&#39;s actually getting in the way. No questionnaires. A real conversation.</p> <div class="step-row__meta" data-astro-cid-jptz7ure> <div class="step-row__meta-rule" aria-hidden="true" data-astro-cid-jptz7ure></div> <div class="step-row__meta-text" data-astro-cid-jptz7ure> <span class="step-row__meta-label" data-astro-cid-jptz7ure>TYPICALLY</span> <span class="step-row__meta-value" data-astro-cid-jptz7ure>A CALL, A VISIT, A WALK-THROUGH</span> </div> </div> </div> </div> <div class="step-row" data-aos="fade-up" data-astro-cid-jptz7ure> <div class="step-row__num" data-astro-cid-jptz7ure>02</div> <div class="step-row__middle" data-astro-cid-jptz7ure> <div class="step-row__kind" data-astro-cid-jptz7ure> <span data-astro-cid-jptz7ure>BUILD</span> <span class="step-row__kind-dash" aria-hidden="true" data-astro-cid-jptz7ure></span> </div> <h3 class="step-row__title" data-astro-cid-jptz7ure> We build what <em data-astro-cid-jptz7ure>matters.</em> </h3> </div> <div class="step-row__right" data-astro-cid-jptz7ure> <p class="step-row__desc" data-astro-cid-jptz7ure>No unnecessary features, no extra complexity. We focus on the things that will make the biggest difference for your business right now.</p> <div class="step-row__meta" data-astro-cid-jptz7ure> <div class="step-row__meta-rule" aria-hidden="true" data-astro-cid-jptz7ure></div> <div class="step-row__meta-text" data-astro-cid-jptz7ure> <span class="step-row__meta-label" data-astro-cid-jptz7ure>TYPICALLY</span> <span class="step-row__meta-value" data-astro-cid-jptz7ure>2–8 WEEKS, DEPENDING ON SCOPE</span> </div> </div> </div> </div> <div class="step-row" data-aos="fade-up" data-astro-cid-jptz7ure> <div class="step-row__num" data-astro-cid-jptz7ure>03</div> <div class="step-row__middle" data-astro-cid-jptz7ure> <div class="step-row__kind" data-astro-cid-jptz7ure> <span data-astro-cid-jptz7ure>CARE</span> <span class="step-row__kind-dash" aria-hidden="true" data-astro-cid-jptz7ure></span> </div> <h3 class="step-row__title" data-astro-cid-jptz7ure> We <em data-astro-cid-jptz7ure>stick around.</em> </h3> </div> <div class="step-row__right" data-astro-cid-jptz7ure> <p class="step-row__desc" data-astro-cid-jptz7ure>We don&#39;t hand off a project and disappear. We maintain, advise, and evolve your digital presence as your business grows.</p> <div class="step-row__meta" data-astro-cid-jptz7ure> <div class="step-row__meta-rule" aria-hidden="true" data-astro-cid-jptz7ure></div> <div class="step-row__meta-text" data-astro-cid-jptz7ure> <span class="step-row__meta-label" data-astro-cid-jptz7ure>TYPICALLY</span> <span class="step-row__meta-value" data-astro-cid-jptz7ure>ONGOING, QUARTERLY CHECK-INS</span> </div> </div> </div> </div> </div> </div> </section>  <div class="bg-bg-primary" data-astro-cid-j7pv25f6> <div class="container-max" data-astro-cid-j7pv25f6> <hr class="approach-rule" style="margin: 0;" data-astro-cid-j7pv25f6> </div> </div> <!-- About Teaser --> <section class="bg-bg-primary" data-astro-cid-j7pv25f6> <div class="container-max section-padding flex flex-col gap-6" data-aos="fade-up" data-astro-cid-j7pv25f6> <h2 class="font-display" style="font-size: var(--text-section); line-height: var(--leading-display); letter-spacing: var(--tracking-display)" data-astro-cid-j7pv25f6>
Built in Southern Minnesota
</h2> <p class="text-text-secondary prose-width" style="font-size: var(--text-body); line-height: var(--leading-body)" data-astro-cid-j7pv25f6>
We see a gap between where businesses are in Southern Minnesota
          and where they could be. Websites don't have to be hard. Digital
          strategy doesn't have to be confusing. We started Evanhoff to bring
          thoughtful design and honest digital advice to the communities we
          live in.
</p> <a href="/about" class="text-accent font-medium text-sm hover:text-accent-hover transition-colors underline underline-offset-[0.15em]" style="transition-duration: var(--duration-fast); transition-timing-function: var(--ease-out)"> More about us → </a> </div> </section> <!-- Contact CTA + Footer: fills remaining viewport like the hero bookend --> <div class="min-h-dvh flex flex-col bg-bg-dark" data-astro-cid-j7pv25f6> <section id="contact" class="bg-bg-dark"> <div class="container-max flex flex-col items-center text-center gap-6" style="padding: var(--section-pad-y) var(--section-pad-x) calc(var(--section-pad-y) * 0.6)"> <h2 class="font-display text-text-on-dark max-w-2xl" style="font-size: var(--text-section); line-height: 1.2; letter-spacing: var(--tracking-display)" data-aos="fade-up">
Let's figure out what your business needs.
</h2> <p class="text-text-on-dark-muted max-w-lg" style="font-size: var(--text-body); line-height: var(--leading-body)">
No pitch, no pressure. Just a conversation about where your business
      is and where it could go.
</p> <a href="/cdn-cgi/l/email-protection#6109040d0d0e210417000f090e07074f020e0c" class="inline-block w-fit bg-accent-cta text-bg-primary px-8 py-4 rounded-[var(--card-radius)] font-medium transition-transform hover:scale-[1.02]" style="transition-timing-function: var(--ease-out); transition-duration: var(--duration-fast)"> Start a conversation </a> <span class="font-mono text-text-on-dark-muted" style="font-size: var(--text-meta)">
Or email us at <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6e060b0202012e0b180f0006010808400d0103">[email&#160;protected]</a>
</span> </div> </section> <div class="mt-auto" data-astro-cid-j7pv25f6> <footer class="bg-bg-dark"> <div class="container-max py-20"> <!-- Top --> <div class="flex flex-col md:flex-row justify-between gap-12 md:gap-16"> <!-- Brand --> <div class="flex flex-col gap-3 max-w-sm"> <span class="text-text-on-dark font-semibold text-xl tracking-[0.06em]">EVANHOFF</span> <span class="font-display italic text-text-on-dark-muted text-lg">Digital strategy that works for your business.</span> <a href="/cdn-cgi/l/email-protection#b1d9d4dddddef1d4c7d0dfd9ded7d79fd2dedc" class="text-text-on-dark text-sm hover:text-accent transition-colors"><span class="__cf_email__" data-cfemail="fe969b929291be9b889f9096919898d09d9193">[email&#160;protected]</span></a> <span class="text-text-on-dark-muted text-sm">Minnesota</span> </div> <!-- Nav Columns --> <div class="flex gap-16"> <!-- Company --> <div class="flex flex-col gap-3"> <span class="label text-text-on-dark-muted" style="font-size: 0.6875rem">COMPANY</span> <a href="/#services" class="text-text-on-dark text-sm hover:text-accent transition-colors">Services</a> <a href="/about" class="text-text-on-dark text-sm hover:text-accent transition-colors">About</a> <a href="/#contact" class="text-text-on-dark text-sm hover:text-accent transition-colors">Contact</a> </div> <!-- Legal --> <div class="flex flex-col gap-3"> <span class="label text-text-on-dark-muted" style="font-size: 0.6875rem">LEGAL</span> <a href="/privacy" class="text-text-on-dark text-sm hover:text-accent transition-colors">Privacy Policy</a> <a href="/terms" class="text-text-on-dark text-sm hover:text-accent transition-colors">Terms of Service</a> </div> </div> </div> <!-- Divider --> <div class="border-t border-[var(--color-border-on-dark)] mt-12 pt-12"> <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4"> <span class="text-text-on-dark-muted text-sm">&copy; 2026 Evanhoff LLC</span> <div class="flex items-center gap-2"> <span class="w-2 h-2 rounded-full bg-green-400 animate-pulse" aria-hidden="true"></span> <span class="font-mono text-text-on-dark-muted" style="font-size: var(--text-label)">Accepting new clients</span> </div> </div> </div> </div> </footer> </div> </div> </main>  <!-- Rendered at the root of <body> so no parent stacking context can trap it --><div class="fixed inset-0 z-[999] hidden" data-menu-overlay aria-hidden="true"> <!-- Dark panel background --> <div class="absolute inset-0 bg-bg-dark"></div> <!-- Menu content --> <div class="relative h-full flex flex-col"> <!-- Spacer to clear the navbar --> <div style="height: 5rem"></div> <!-- Links --> <div class="container-max flex flex-col items-start gap-8 pt-8"> <a href="/#services" class="text-text-on-dark font-display italic opacity-0 translate-y-4 transition-all duration-[450ms] ease-out" style="font-size: clamp(2rem, 6vw, 3.25rem); line-height: var(--leading-display)" data-menu-link data-link-index="0"> Services </a><a href="/about" class="text-text-on-dark font-display italic opacity-0 translate-y-4 transition-all duration-[450ms] ease-out" style="font-size: clamp(2rem, 6vw, 3.25rem); line-height: var(--leading-display)" data-menu-link data-link-index="1"> About </a><a href="/#contact" class="text-text-on-dark font-display italic opacity-0 translate-y-4 transition-all duration-[450ms] ease-out" style="font-size: clamp(2rem, 6vw, 3.25rem); line-height: var(--leading-display)" data-menu-link data-link-index="2"> Contact </a> </div> <!-- Bottom location tag --> <div class="mt-auto container-max pb-12 opacity-0 translate-y-4 transition-all duration-[450ms] ease-out" data-menu-footer> <span class="font-mono text-text-on-dark-muted" style="font-size: var(--text-meta)">
Southern Minnesota
</span> </div> </div> </div> <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
  document.addEventListener("DOMContentLoaded", () => {
    const toggle = document.querySelector("[data-menu-toggle]");
    const overlay = document.querySelector("[data-menu-overlay]");
    const menuLinks = document.querySelectorAll("[data-menu-link]");
    const menuFooter = document.querySelector("[data-menu-footer]");
    const logo = document.querySelector("[data-menu-logo]");
    const iconOpen = document.querySelector("[data-menu-icon]");
    const iconClose = document.querySelector("[data-menu-icon-close]");
    // Save original icon color so it restores correctly on dark-variant pages
    const iconOriginalColor = iconOpen?.classList.contains("text-text-on-dark")
      ? "text-text-on-dark"
      : "text-text-primary";

    let isOpen = false;
    // Save the original logo color class so we can restore it on close
    const logoOriginalColor = logo?.classList.contains("text-text-on-dark")
      ? "text-text-on-dark"
      : "text-text-primary";

    function openMenu() {
      isOpen = true;

      // Show the overlay
      overlay?.classList.remove("hidden");
      overlay?.setAttribute("aria-hidden", "false");
      toggle?.setAttribute("aria-expanded", "true");
      toggle?.setAttribute("aria-label", "Close menu");
      document.body.style.overflow = "hidden";

      // Swap icons
      iconOpen?.classList.add("hidden");
      iconClose?.classList.remove("hidden");

      // Ensure logo is cream on the dark overlay
      logo?.classList.remove("text-text-primary");
      logo?.classList.add("text-text-on-dark");

      // Stagger the links in
      requestAnimationFrame(() => {
        menuLinks.forEach((link, i) => {
          setTimeout(() => {
            link.classList.remove("opacity-0", "translate-y-4");
            link.classList.add("opacity-100", "translate-y-0");
          }, 100 + i * 70);
        });

        setTimeout(() => {
          menuFooter?.classList.remove("opacity-0", "translate-y-4");
          menuFooter?.classList.add("opacity-100", "translate-y-0");
        }, 100 + menuLinks.length * 70);
      });
    }

    function closeMenu() {
      isOpen = false;

      // Snap links back (no stagger on close)
      menuLinks.forEach((link) => {
        link.classList.add("opacity-0", "translate-y-4");
        link.classList.remove("opacity-100", "translate-y-0");
      });
      menuFooter?.classList.add("opacity-0", "translate-y-4");
      menuFooter?.classList.remove("opacity-100", "translate-y-0");

      // Swap icons back and restore original color
      iconClose?.classList.add("hidden");
      iconOpen?.classList.remove("hidden");
      iconOpen?.classList.remove("text-text-on-dark", "text-text-primary");
      iconOpen?.classList.add(iconOriginalColor);

      // Restore logo to its original color
      logo?.classList.remove("text-text-on-dark", "text-text-primary");
      logo?.classList.add(logoOriginalColor);

      // Wait for fade out, then hide overlay
      setTimeout(() => {
        if (!isOpen) {
          overlay?.classList.add("hidden");
          overlay?.setAttribute("aria-hidden", "true");
          toggle?.setAttribute("aria-expanded", "false");
          toggle?.setAttribute("aria-label", "Open menu");
          document.body.style.overflow = "";
        }
      }, 300);
    }

    toggle?.addEventListener("click", () => {
      isOpen ? closeMenu() : openMenu();
    });

    menuLinks.forEach((link) => link.addEventListener("click", closeMenu));

    document.addEventListener("keydown", (e) => {
      if (e.key === "Escape" && isOpen) closeMenu();
    });
  });
</script>  <script src="https://unpkg.com/aos@2.3.4/dist/aos.js"></script> <script>
  AOS.init({
    duration: 600,
    easing: 'ease-out-cubic',
    once: true,
    offset: 60,
  });
</script></body></html>