<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#FF4F00">
<meta name="msapplication-TileColor" content="#0A1628">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mobile Marine Diesel Repair & Skilled Trades | Wisconsin & Chicago — WH&S</title>
<meta name="description" content="Wolfe, Hoover & Sons Engineering — mobile marine diesel repair, engine diagnostics, marine electrical, custom fabrication, and skilled-trade services across Wisconsin's lakeshore and the Chicago lakefront. Navy veteran-owned. We come to you.">
<meta name="keywords" content="mobile marine diesel repair Wisconsin, boat mechanic Milwaukee, marine diesel mechanic Madison, mobile boat repair Wisconsin, marine engine diagnostics, boat repair Sheboygan, mobile boat mechanic near me, marine electrical repair Wisconsin, winterization Wisconsin, custom fabrication Milwaukee, handyman Wisconsin, boat engine repair Green Bay, marine diesel Manitowoc, mobile mechanic Racine, boat repair Kenosha, marine services Wisconsin lakeshore, marine diesel mechanic Chicago, boat repair Chicago lakefront">
<link rel="canonical" href="https://wolfeandhoovermarine.com/">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
<meta name="author" content="Wolfe, Hoover & Sons Engineering">
<meta name="geo.region" content="US-WI">
<meta name="geo.placename" content="Wisconsin / Chicagoland">
<meta name="geo.position" content="43.0389;-87.9065">
<meta name="ICBM" content="43.0389, -87.9065">

<!-- Open Graph -->
<meta property="og:type" content="website">
<meta property="og:site_name" content="WH&S — Wolfe, Hoover & Sons Engineering">
<meta property="og:title" content="Mobile Marine Diesel Repair & Skilled Trades | Wisconsin & Chicago — WH&S">
<meta property="og:description" content="We come to you. Mobile marine diesel repair, engine diagnostics, marine electrical, custom fabrication, and skilled trades from a Navy veteran-owned crew. Wisconsin home base, Chicago batch-trips on a rolling cadence.">
<meta property="og:url" content="https://wolfeandhoovermarine.com/">
<meta property="og:image" content="https://wolfeandhoovermarine.com/img/yacht-stern.jpg">
<meta property="og:image:width" content="1400">
<meta property="og:image:height" content="1866">
<meta property="og:image:alt" content="WH&S mobile marine diesel repair service — yacht at dock">
<meta property="og:locale" content="en_US">

<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Mobile Marine Diesel Repair | Wisconsin & Chicago — WH&S">
<meta name="twitter:description" content="Navy veteran-owned mobile marine diesel repair, boat engine diagnostics, and skilled trades. We come to your slip, dock, or property across Wisconsin and the Chicago lakefront.">
<meta name="twitter:image" content="https://wolfeandhoovermarine.com/img/yacht-stern.jpg">

<!-- Structured Data: Local Business -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://wolfeandhoovermarine.com/#business",
  "name": "Wolfe, Hoover & Sons Engineering",
  "alternateName": "WH&S",
  "description": "Mobile marine diesel repair, engine diagnostics, marine electrical, custom fabrication, winterization, and skilled-trade services serving Wisconsin's lakeshore and the Chicago lakefront from a Navy veteran-owned boutique crew.",
  "url": "https://wolfeandhoovermarine.com",
  "email": "info@wolfeandhoovermarine.com",
  "telephone": "+1-773-835-4289",
  "image": "https://wolfeandhoovermarine.com/img/yacht-stern.jpg",
  "foundingDate": "2026",
  "numberOfEmployees": {"@type": "QuantitativeValue", "value": 2},
  "priceRange": "$$",
  "currenciesAccepted": "USD",
  "paymentAccepted": "Cash, Check",
  "address": {
    "@type": "PostalAddress",
    "addressRegion": "MI",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 42.031,
    "longitude": -85.340
  },
  "areaServed": [
    {"@type": "City", "name": "Chicago", "containedInPlace": {"@type": "State", "name": "Illinois"}},
    {"@type": "City", "name": "Milwaukee", "containedInPlace": {"@type": "State", "name": "Wisconsin"}},
    {"@type": "City", "name": "Madison", "containedInPlace": {"@type": "State", "name": "Wisconsin"}},
    {"@type": "City", "name": "Sheboygan", "containedInPlace": {"@type": "State", "name": "Wisconsin"}},
    {"@type": "City", "name": "Green Bay", "containedInPlace": {"@type": "State", "name": "Wisconsin"}},
    {"@type": "City", "name": "Racine", "containedInPlace": {"@type": "State", "name": "Wisconsin"}},
    {"@type": "City", "name": "Kenosha", "containedInPlace": {"@type": "State", "name": "Wisconsin"}},
    {"@type": "City", "name": "Waukegan", "containedInPlace": {"@type": "State", "name": "Illinois"}},
    {"@type": "State", "name": "Wisconsin"}
  ],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Marine & Skilled Trade Services",
    "itemListElement": [
      {"@type": "OfferCatalog", "name": "Marine Diesel Repair", "description": "Mobile diagnostics and repair for marine diesel engines — fuel systems, cooling, injectors, turbo"},
      {"@type": "OfferCatalog", "name": "Marine Electronics & Electrical", "description": "Fish finders, sonar, depth sounders, radar, GPS, nav systems, shore power, battery banks, panel diagnostics, wiring"},
      {"@type": "OfferCatalog", "name": "Engine Diagnostics", "description": "Compression testing, fuel analysis, and electronic fault tracing for gas and diesel marine engines"},
      {"@type": "OfferCatalog", "name": "Handyman & Maintenance", "description": "Plumbing, electrical, drywall, appliance install, and deck repair for Wisconsin lakeshore and Chicago-area homeowners"},
      {"@type": "OfferCatalog", "name": "Custom Fabrication", "description": "Broadcast sets, CNC-carved art, structural steel, custom bars and millwork"},
      {"@type": "OfferCatalog", "name": "Winterization & Commissioning", "description": "Full marine winterization and spring commissioning services"}
    ]
  },
  "founder": [
    {
      "@type": "Person",
      "name": "Brad",
      "jobTitle": "Co-Founder / Marine Systems Lead",
      "description": "U.S. Navy veteran, Fire Controlman, AEGIS combat weapon systems"
    },
    {
      "@type": "Person",
      "name": "Josh",
      "jobTitle": "Co-Founder / Fabrication & Operations",
      "description": "Custom fabrication specialist with national-level event and broadcast set experience"
    }
  ],
  "sameAs": []
}
</script>

<!-- Structured Data: Service -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Service",
  "serviceType": "Mobile Marine Repair & Skilled Trades",
  "provider": {"@id": "https://wolfeandhoovermarine.com/#business"},
  "areaServed": {
    "@type": "GeoCircle",
    "geoMidpoint": {"@type": "GeoCoordinates", "latitude": 42.031, "longitude": -85.340},
    "geoRadius": "300 mi"
  },
  "description": "We come to your slip, dock, or boatyard. Mobile diagnostics and repair for marine diesel engines across Wisconsin's lakeshore and the Chicago lakefront.",
  "offers": {
    "@type": "Offer",
    "availability": "https://schema.org/InStock",
    "areaServed": "Wisconsin Lakeshore & Chicagoland"
  }
}
</script>

<!-- Structured Data: WebSite with search -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "WH&S — Wolfe, Hoover & Sons Engineering",
  "url": "https://wolfeandhoovermarine.com",
  "description": "Mobile marine diesel repair, skilled trades, and free smart weather forecast tool"
}
</script>

<!-- Structured Data: FAQ for rich results -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do you come to my marina or dock?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. WH&S is fully mobile. We come to your slip, dock, boatyard, driveway, or property across Wisconsin's lakeshore (Milwaukee, Sheboygan, Green Bay, Madison, Racine, Kenosha) and the Chicago lakefront. No need to haul your boat."
      }
    },
    {
      "@type": "Question",
      "name": "What areas do you serve?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Wisconsin is our home base — Milwaukee, Racine, Kenosha, Sheboygan, Madison, Green Bay, Manitowoc, Fond du Lac, Appleton, and the lakeshore between. The Chicago lakefront and Chicagoland (Cook, Lake, McHenry, DuPage, Kane, and Will counties) are our second market — we batch trips on a rolling cadence. Skilled trades and property work throughout the same region."
      }
    },
    {
      "@type": "Question",
      "name": "What types of marine engines do you work on?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "We work on all major marine diesel and gas engines including Yanmar, Cummins, Caterpillar, Volvo Penta, MerCruiser, Detroit Diesel, John Deere, and more. From small sailboat auxiliaries to twin-engine sport fishers."
      }
    },
    {
      "@type": "Question",
      "name": "Do you offer handyman services for homes?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes. In addition to marine work, WH&S provides skilled handyman and maintenance services for homeowners across Wisconsin and the Chicago area: plumbing, electrical, drywall, appliance install, deck repair, custom fabrication."
      }
    },
    {
      "@type": "Question",
      "name": "What is the WH&S Smart Weather Forecast tool?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Our free Smart Weather Forecast tool provides worldwide weather intelligence with live radar, multi-model data analysis, tornado path projections, marine conditions, and an emergency PANIC button that finds nearby shelters. Available at wolfeandhoovermarine.com/weather for anyone to use."
      }
    }
  ]
}
</script>

<!-- Structured Data: BreadcrumbList -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {"@type": "ListItem", "position": 1, "name": "Home", "item": "https://wolfeandhoovermarine.com/"}
  ]
}
</script>

<!-- Performance -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="dns-prefetch" href="https://api.rainviewer.com">
<link rel="dns-prefetch" href="https://api.open-meteo.com">
<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Barlow:wght@300;400;500;600;700&family=Barlow+Condensed:wght@400;500;600;700&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
<style>
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  /* CTA / accents */
  --o:#E8851F; --ob:#FF9933;
  /* navy */
  --n:#0F2237; --nd:#091628; --nm:#1B3A52;
  /* grays */
  --s:#7A8693; --sl:#B8C5D2; --sd:#3D4A57;
  /* warm cream / chart paper */
  --c:#F5ECD5; --cd:#E8DCBF;
  /* khaki gold / brass */
  --g:#D4A93C; --gd:#A6831E;
  /* red / yellow */
  --r:#C84141; --y:#F2C94C;
  --accent:#D4A93C;
  --chart-cream:#F0E8D6;
  --fd:'Bebas Neue',sans-serif;
  --fh:'Barlow Condensed',sans-serif;
  --fb:'Barlow',sans-serif;
  --fm:'Space Mono',monospace;
  --nav:84px;
  
  /* === DARK THEME (default) === */
  --bg: var(--nd);
  --bg2: var(--n);
  --text: #F0E8D0;
  --text-dim: #8A95A2;
  --panel: rgba(15,34,55,0.94);
  --border: rgba(212,169,60,0.18);
  --chart-opacity: 0.10;
}
:root[data-theme="dark"]{--sl:#F0E8D4;--c:#FFF5E0;--s:#D2DCE6;--text:#FFF5E0;--text-dim:#CFD8E0;--chart-opacity:0.06}
:root[data-theme="light"]{
  /* Background colors flip to cream */
  --n:#F0E5C8; --nd:#F5ECD5; --nm:#E8DCBF;
  --bg:#F5ECD5; --bg2:#E8DCBF;
  /* Text colors flip to dark navy */
  --text:#0A1A2E; --text-dim:#3A4654;
  --c:#0A1A2E; --sl:#2A3848; --s:#3A4654; --sd:#5A6675;
  /* Accent stays orange but deeper for cream contrast */
  --o:#C76300; --ob:#E67514;
  /* Panel + borders */
  --panel:rgba(255,250,235,0.96);
  --border:rgba(15,34,55,0.2);
  --chart-opacity:0.22
}
/* Section backgrounds get inverted treatment in light mode */
:root[data-theme="light"] section[style*="background:var(--n)"],
:root[data-theme="light"] section[style*="background:var(--nd)"],
:root[data-theme="light"] .ab,
:root[data-theme="light"] .ft,
:root[data-theme="light"] .wt{background:#F0E5C8 !important}
:root[data-theme="light"] .pb::after{background:linear-gradient(to bottom,#F0E5C8 0%,transparent 20%,transparent 80%,#F0E5C8 100%) !important}
:root[data-theme="light"] .nav{background:#091628 !important;border-bottom-color:rgba(199,99,0,.25) !important}
:root[data-theme="light"] .hero-mobile-img::after{background:linear-gradient(90deg,#F0E5C8 0%,transparent 30%,transparent 70%,#F0E5C8 100%) !important}
/* Hero text scrim in light mode — subtle gradient so chart bg never overwhelms text */
:root[data-theme="light"] .hero{background:linear-gradient(180deg,rgba(245,236,213,0.5) 0%,rgba(245,236,213,0.85) 60%,rgba(245,236,213,0.5) 100%)}
/* Make sure hero text never inherits chart-bg-related transparency */
:root[data-theme="light"] .ht,:root[data-theme="light"] .hd{text-shadow:0 1px 0 rgba(255,250,235,0.8)}
html{scroll-behavior:smooth;font-size:16px;-webkit-font-smoothing:antialiased}
body{font-family:var(--fb);background:var(--bg);color:var(--text);line-height:1.6;overflow-x:hidden;position:relative;transition:background 0.4s ease,color 0.4s ease}
body::before{content:'';position:fixed;inset:0;background-image:var(--chart-bg-url, none);background-size:cover;background-position:center;background-repeat:no-repeat;opacity:var(--chart-opacity);pointer-events:none;z-index:0;transition:opacity 0.6s ease,background-image 1s ease;filter:saturate(1.2)}
body > *{position:relative;z-index:1}
:root[data-theme="light"] body::before{filter:saturate(0.9) brightness(1.1)}
a{color:var(--o);text-decoration:none}a:hover{color:var(--ob)}
img{max-width:100%;display:block}::selection{background:var(--o);color:#fff}
body::after{content:'';position:fixed;inset:0;z-index:9999;pointer-events:none;background:repeating-linear-gradient(0deg,transparent,transparent 2px,rgba(0,0,0,.02) 2px,rgba(0,0,0,.02) 4px)}
#particles{position:fixed;inset:0;z-index:-1;pointer-events:none}

/* === NAV === */
.nav{position:fixed;top:0;left:0;right:0;height:var(--nav);z-index:1000;background:#091628;border-bottom:1px solid rgba(255,79,0,.18);transition:all .3s;box-shadow:0 2px 14px rgba(0,0,0,0.35)}
.nav.scrolled{background:rgba(5,13,24,.97);border-bottom-color:rgba(255,79,0,.3)}
.ni{max-width:1400px;margin:0 auto;padding:0 1.25rem;height:100%;display:flex;align-items:center;justify-content:space-between}
.nl{font-family:var(--fd);font-size:1.8rem;letter-spacing:.15em;color:var(--o);line-height:1;text-decoration:none}
.nl span{color:var(--c);font-size:.5em;letter-spacing:.3em;display:block;margin-top:-2px}
.nt{font-family:var(--fm);font-size:.6rem;color:var(--sd);letter-spacing:.15em;text-transform:uppercase;border-left:1px solid var(--sd);padding-left:.75rem;margin-left:.75rem;display:none}
@media(min-width:768px){.nt{display:block}}
.nk{display:none;list-style:none;gap:1.25rem;align-items:center}
@media(min-width:960px){.nk{display:flex}}
.nk a{font-family:var(--fh);font-weight:600;font-size:.85rem;letter-spacing:.1em;text-transform:uppercase;color:var(--sl);position:relative;padding:4px 0;transition:color .2s}
.nk a::after{content:'';position:absolute;bottom:0;left:0;width:0;height:2px;background:var(--o);transition:width .3s}
.nk a:hover{color:var(--c)}.nk a:hover::after{width:100%}
.nc{background:var(--o)!important;color:#fff!important;padding:8px 18px!important;border-radius:2px;transition:all .2s!important}
.nc:hover{background:var(--ob)!important;transform:translateY(-1px);box-shadow:0 4px 20px rgba(255,79,0,.4)}.nc::after{display:none!important}
.ham{display:flex;flex-direction:column;gap:5px;cursor:pointer;padding:8px;background:none;border:none}
@media(min-width:960px){.ham{display:none}}
.ham span{display:block;width:24px;height:2px;background:var(--c);transition:all .3s}
.ham.open span:nth-child(1){transform:rotate(45deg) translate(5px,5px)}.ham.open span:nth-child(2){opacity:0}.ham.open span:nth-child(3){transform:rotate(-45deg) translate(5px,-5px)}
.mob{display:none;position:fixed;top:var(--nav);left:0;right:0;bottom:0;background:rgba(5,13,24,.98);backdrop-filter:blur(20px);z-index:999;padding:2rem 1.5rem;overflow-y:auto;-webkit-overflow-scrolling:touch}
.mob.open{display:flex;flex-direction:column;gap:1.25rem;padding-bottom:calc(4rem + env(safe-area-inset-bottom))}
.mob a{font-family:var(--fd);font-size:2rem;color:var(--c);letter-spacing:.08em;border-bottom:1px solid rgba(139,149,160,.1);padding:.5rem 0;display:block}.mob a:hover{color:var(--o)}

/* === BUTTONS === */
.btn{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--fh);font-weight:700;font-size:.9rem;letter-spacing:.1em;text-transform:uppercase;padding:12px 28px;border:none;border-radius:2px;cursor:pointer;transition:all .25s;text-decoration:none}
.bp{background:var(--o);color:#fff}.bp:hover{background:var(--ob);color:#fff;transform:translateY(-2px);box-shadow:0 8px 30px rgba(255,79,0,.35)}
.bo{background:transparent;color:var(--o);border:2px solid var(--o)}.bo:hover{background:var(--o);color:#fff;transform:translateY(-2px)}
.bl{padding:16px 36px;font-size:1rem}
.bw{background:#fff;color:var(--o)}.bw:hover{background:var(--c);color:#CC3F00;transform:translateY(-2px);box-shadow:0 8px 30px rgba(0,0,0,.2)}
.con{max-width:1400px;margin:0 auto;padding:0 1.25rem}
@media(min-width:768px){.con{padding:0 2rem}}

/* === HERO === */
.hero{min-height:100vh;min-height:100svh;display:flex;align-items:center;position:relative;overflow:hidden;padding-top:var(--nav);padding-bottom:2rem}
.hg{position:absolute;inset:-50%;z-index:0;background-image:linear-gradient(rgba(255,79,0,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(255,79,0,.04) 1px,transparent 1px);background-size:60px 60px;transform:perspective(500px) rotateX(60deg);transform-origin:center top;animation:gf 20s linear infinite}
@keyframes gf{0%{transform:perspective(500px) rotateX(60deg) translateY(0)}100%{transform:perspective(500px) rotateX(60deg) translateY(60px)}}
.hgl{position:absolute;top:10%;right:-15%;width:700px;height:700px;background:radial-gradient(circle,rgba(255,79,0,.08) 0%,transparent 70%);pointer-events:none;z-index:0;animation:gp 8s ease-in-out infinite}
@keyframes gp{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.1)}}
.hc{position:relative;z-index:1;max-width:1400px;margin:0 auto;padding:0 1.25rem;display:grid;grid-template-columns:1fr;gap:2rem;align-items:center}
@media(min-width:768px){.hc{padding:0 2rem}}
@media(min-width:1000px){.hc{grid-template-columns:1.2fr .8fr;gap:3rem}}
.he{font-family:var(--fm);font-size:.65rem;font-weight:700;letter-spacing:.25em;text-transform:uppercase;color:var(--o);margin-bottom:.75rem;display:flex;align-items:center;gap:.5rem;animation:su .8s cubic-bezier(.16,1,.3,1) forwards}
.pd{width:6px;height:6px;background:var(--g);border-radius:50%;animation:pu 2s infinite;box-shadow:0 0 8px rgba(0,200,83,.5)}
@keyframes pu{0%,100%{opacity:1}50%{opacity:.4}}
.ht{font-family:var(--fd);font-size:clamp(2.8rem,8vw,7rem);letter-spacing:.03em;line-height:.88;color:var(--c);margin-bottom:1.25rem;animation:su .8s .1s cubic-bezier(.16,1,.3,1) both}
.hl{color:var(--o);display:inline-block}
.hd{font-size:clamp(.95rem,2.5vw,1.15rem);color:var(--sl);line-height:1.7;max-width:520px;margin-bottom:2rem;animation:su .8s .2s cubic-bezier(.16,1,.3,1) both}
.ha{display:flex;gap:.75rem;flex-wrap:wrap;animation:su .8s .3s cubic-bezier(.16,1,.3,1) both}
@media(min-width:600px){.ha{flex-direction:row!important;max-width:none!important}.ha .btn{width:auto!important}}
@keyframes su{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}

/* Hero photos - desktop only */
.hp{display:none;position:relative;height:480px;animation:fi 1.2s .5s both}
@media(min-width:1000px){.hp{display:block}}
@keyframes fi{from{opacity:0}to{opacity:1}}
.hph{position:absolute;border-radius:4px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.5);border:1px solid rgba(255,79,0,.1);transition:all .5s cubic-bezier(.16,1,.3,1)}
.hph img{width:100%;height:100%;object-fit:cover}
.hph:hover{transform:scale(1.04)!important;z-index:10!important;border-color:rgba(255,79,0,.3)}
.hph.a{top:0;right:0;width:260px;height:340px;z-index:3;transform:rotate(2deg)}
.hph.b{top:60px;right:200px;width:200px;height:250px;z-index:2;transform:rotate(-3deg)}
.hph.c{bottom:10px;right:60px;width:240px;height:160px;z-index:1;transform:rotate(1deg)}

/* Hero mobile photo - single cinematic strip */
.hero-mobile-img{display:block;margin-top:1.5rem;border-radius:4px;overflow:hidden;height:180px;position:relative;animation:su .8s .4s cubic-bezier(.16,1,.3,1) both}
@media(min-width:1000px){.hero-mobile-img{display:none}}
.hero-mobile-img img{width:100%;height:100%;object-fit:cover;filter:brightness(.7) contrast(1.1)}
.hero-mobile-img::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,var(--nd) 0%,transparent 30%,transparent 70%,var(--nd) 100%)}

.si{position:absolute;bottom:1.5rem;left:50%;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:6px;z-index:1;animation:fi 1s 1.2s both}
@media(max-width:600px){.si{display:none}}
.si span{font-family:var(--fm);font-size:.5rem;letter-spacing:.3em;text-transform:uppercase;color:var(--sd)}
.sli{width:1px;height:30px;background:linear-gradient(to bottom,var(--o),transparent);animation:sp2 2s infinite}
@keyframes sp2{0%,100%{opacity:1;transform:scaleY(1)}50%{opacity:.3;transform:scaleY(.6)}}

/* === SECTIONS === */
.sec{padding:4rem 0;position:relative}
@media(min-width:768px){.sec{padding:6rem 0}}
.sl{font-family:var(--fm);font-size:.6rem;font-weight:700;letter-spacing:.3em;text-transform:uppercase;color:var(--o);margin-bottom:.75rem;display:flex;align-items:center;gap:.5rem}
.sl::before{content:'';width:20px;height:2px;background:var(--o)}
.st{font-family:var(--fd);font-size:clamp(2rem,5vw,3.5rem);letter-spacing:.05em;line-height:1;color:var(--c);margin-bottom:1.25rem}
.ss{font-size:clamp(1rem,2.2vw,1.2rem);color:var(--s);max-width:600px;line-height:1.7}

/* === CARDS === */
.card{background:#10243E;border:1px solid rgba(212,169,60,.22);border-radius:6px;padding:1.5rem;transition:all .3s cubic-bezier(.16,1,.3,1);position:relative;overflow:hidden;box-shadow:0 4px 16px rgba(0,0,0,0.35)}
:root[data-theme="light"] .card{background:#FFFFFF;border:1px solid rgba(15,34,55,.18);box-shadow:0 4px 16px rgba(15,34,55,0.1)}
.card::before{content:'';position:absolute;top:0;left:0;width:3px;height:0;background:var(--o);transition:height .4s}
.card:hover{border-color:rgba(255,79,0,.25);background:rgba(10,22,40,.8);transform:translateY(-4px);box-shadow:0 16px 50px rgba(0,0,0,.3),0 0 30px rgba(255,79,0,.04)}
.card:hover::before{height:100%}
.ci{width:44px;height:44px;background:rgba(255,79,0,.08);border:1px solid rgba(255,79,0,.15);border-radius:4px;display:flex;align-items:center;justify-content:center;margin-bottom:.75rem;font-size:1.3rem;transition:all .3s}
.card:hover .ci{background:rgba(255,79,0,.15);transform:scale(1.1)}
.ct{font-family:var(--fh);font-weight:700;font-size:1.15rem;letter-spacing:.05em;text-transform:uppercase;color:var(--c);margin-bottom:.55rem}
.cp{font-size:.95rem;color:var(--s);line-height:1.65}
.sg{display:grid;grid-template-columns:1fr;gap:.75rem}
@media(min-width:500px){.sg{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1000px){.sg{grid-template-columns:repeat(3,1fr)}}

/* === PHOTO BREAK === */
.pb{position:relative;height:clamp(320px,42vw,560px);overflow:hidden}
.pb img{width:100%;height:100%;object-fit:cover;object-position:center 60%;filter:brightness(.65) contrast(1.05)}
.pb::after{content:'';position:absolute;inset:0;background:linear-gradient(to bottom,var(--nd) 0%,transparent 20%,transparent 80%,var(--nd) 100%)}
.pbt{position:absolute;bottom:2rem;left:0;right:0;text-align:center;z-index:1;font-family:var(--fd);font-size:clamp(1.2rem,4vw,3rem);letter-spacing:.15em;color:rgba(255,255,255,.85);text-shadow:0 2px 12px rgba(0,0,0,0.7),0 0 2px rgba(0,0,0,0.9);font-weight:700}

/* === ABOUT === */
.ab{background:var(--n)}
.abg{display:grid;grid-template-columns:1fr;gap:2rem}
@media(min-width:900px){.abg{grid-template-columns:1fr 1fr;gap:4rem}}
.abt p{font-size:clamp(.9rem,2vw,1.05rem);color:var(--sl);line-height:1.8;margin-bottom:.75rem}
.hi{display:flex;gap:.75rem;align-items:flex-start;padding:.75rem;background:rgba(255,79,0,.03);border-left:2px solid var(--o);border-radius:0 4px 4px 0;transition:all .3s;margin-bottom:.5rem}
.hi:hover{background:rgba(255,79,0,.06);transform:translateX(4px)}
.hii{font-size:1.3rem;flex-shrink:0;width:36px;text-align:center}
.hi h4{font-family:var(--fh);font-weight:700;font-size:.9rem;letter-spacing:.05em;text-transform:uppercase;color:var(--c);margin-bottom:2px}
.hi p{font-size:.82rem;color:var(--s);line-height:1.45}

/* === AREA === */
.al{display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem;margin-top:1.25rem}
@media(min-width:600px){.al{grid-template-columns:repeat(3,1fr)}}
@media(min-width:900px){.al{grid-template-columns:repeat(4,1fr)}}
.ai{display:flex;align-items:center;gap:.4rem;font-family:var(--fh);font-weight:500;font-size:clamp(.8rem,2vw,.92rem);color:var(--sl);transition:color .2s}
.ai::before{content:'';width:5px;height:5px;background:var(--o);border-radius:50%;flex-shrink:0}
.ai:hover{color:var(--o)}

/* === CALENDAR === */
.cg{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;max-width:560px;margin-top:1rem}
.ch{font-family:var(--fm);font-size:.7rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--o);text-align:center;padding:.4rem .2rem}
.cd{aspect-ratio:1;display:flex;flex-direction:column;align-items:center;justify-content:center;background:#10243E;border:1px solid rgba(212,169,60,.25);border-radius:4px;font-family:var(--fh);font-size:1rem;font-weight:600;color:#FFF5E0;transition:all .2s;cursor:pointer;position:relative}
.cd:hover{background:#173353;border-color:var(--o);transform:translateY(-1px)}
.cd.td{background:var(--o);color:#FFF;border-color:var(--o);box-shadow:0 0 0 2px rgba(255,79,0,.3)}
.cd.av{background:#1A4A2E;border-color:#2D7F4D}
.cd.av::after{content:'OPEN';position:absolute;bottom:3px;font-family:var(--fm);font-size:.45rem;letter-spacing:.08em;color:#7CE5A4;font-weight:700}.cd.li{background:#4A3A12;border-color:#A88420}
.cd.li::after{content:'1 OPEN';position:absolute;bottom:3px;font-family:var(--fm);font-size:.45rem;letter-spacing:.08em;color:#F2C94C;font-weight:700}.cd.bk{background:#3A1414;border-color:#7A2A2A;color:#FFBEBE;cursor:default}
.cd.bk::after{content:'BOOKED';position:absolute;bottom:3px;font-family:var(--fm);font-size:.45rem;letter-spacing:.08em;color:#FF6B6B;font-weight:700}
.cd.em{background:transparent;border:none;cursor:default}.cd.pa{background:rgba(15,34,55,0.35);border-color:rgba(212,169,60,0.08);color:rgba(255,245,224,0.4);cursor:default;font-weight:400}
.cd.pa::after{display:none}
.cd.sun{background:#162D49;border-color:rgba(212,169,60,0.15);color:#A8B8C8}
.cd.sun::after{content:'OFF';position:absolute;bottom:3px;font-family:var(--fm);font-size:.45rem;letter-spacing:.08em;color:#7A8A99}
:root[data-theme="light"] .cd{background:#FFFFFF;color:#0A1A2E;border-color:rgba(15,34,55,0.2)}
:root[data-theme="light"] .cd:hover{background:#FFF8E8;border-color:var(--o)}
:root[data-theme="light"] .cd.av{background:#E8F5EC;border-color:#2D7F4D;color:#1A4A2E}
:root[data-theme="light"] .cd.av::after{color:#1A6B3A}
:root[data-theme="light"] .cd.li{background:#FFF4D5;border-color:#A88420;color:#5A4410}
:root[data-theme="light"] .cd.li::after{color:#8A6810}
:root[data-theme="light"] .cd.bk{background:#FCE8E8;border-color:#A82A2A;color:#5A1A1A}
:root[data-theme="light"] .cd.bk::after{color:#A82A2A}
:root[data-theme="light"] .cd.td{background:var(--o);color:#FFF;border-color:var(--o)}
:root[data-theme="light"] .cd.pa{background:#EDE3CB;color:rgba(15,34,55,0.4)}
:root[data-theme="light"] .cd.sun{background:#E8DFC2;color:#5A6675}.cd.sun{opacity:.25;cursor:default;border-bottom:none!important;background:transparent}
.dot{width:7px;height:7px;border-radius:50%;display:inline-block}
.dot.ga{background:var(--g);box-shadow:0 0 6px rgba(0,200,83,.5)}.dot.ya{background:var(--y);box-shadow:0 0 6px rgba(255,214,0,.5)}.dot.ra{background:var(--r);box-shadow:0 0 6px rgba(255,45,45,.5)}

/* === WEATHER TEASER === */
.wt{background:linear-gradient(135deg,var(--n),var(--nd));position:relative;overflow:hidden}
.wt::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at 20% 50%,rgba(255,79,0,.05) 0%,transparent 50%),radial-gradient(circle at 80% 50%,rgba(0,200,83,.03) 0%,transparent 50%)}
.wi{position:relative;z-index:1;display:grid;grid-template-columns:1fr;gap:2rem;align-items:center}
@media(min-width:900px){.wi{grid-template-columns:1fr 1fr;gap:3rem}}
.wf{display:flex;gap:.75rem;align-items:flex-start;margin-bottom:.75rem}
.wfi{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:rgba(255,79,0,.08);border-radius:4px;font-size:1rem;flex-shrink:0}
.wf h4{font-family:var(--fh);font-weight:600;font-size:.9rem;color:var(--c);margin-bottom:2px}
.wf p{font-size:.8rem;color:var(--s);line-height:1.45}
.pnk{margin-top:1.25rem;padding:.75rem;background:rgba(255,45,45,.06);border:1px solid rgba(255,45,45,.2);border-radius:4px;display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}
.pnkb{background:var(--r);color:#fff;font-family:var(--fh);font-weight:700;font-size:.8rem;letter-spacing:.12em;padding:8px 16px;border:none;border-radius:2px;cursor:pointer;animation:pp 2s infinite;text-decoration:none;white-space:nowrap}
@keyframes pp{0%,100%{box-shadow:0 0 0 0 rgba(255,45,45,.4)}50%{box-shadow:0 0 16px 3px rgba(255,45,45,.2)}}

/* === CTA === */
.cta{background:var(--o);position:relative;overflow:hidden;text-align:center;padding:3rem 0}
@media(min-width:768px){.cta{padding:4rem 0}}
.cta::before{content:'';position:absolute;inset:0;background:repeating-linear-gradient(-45deg,transparent,transparent 40px,rgba(0,0,0,.03) 40px,rgba(0,0,0,.03) 80px)}
.cta .st{color:#fff}.cta p{color:rgba(255,255,255,.85);font-size:clamp(.95rem,2vw,1.1rem);max-width:550px;margin:0 auto 1.25rem}

/* === FOOTER === */
.ft{background:var(--n);border-top:1px solid rgba(139,149,160,.08);padding:2.5rem 0 1.5rem}
.fg{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;margin-bottom:2rem}
@media(min-width:768px){.fg{grid-template-columns:2fr 1fr 1fr 1fr}}
.fh{font-family:var(--fh);font-weight:700;font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;color:var(--c);margin-bottom:.75rem}
.fl{list-style:none;display:flex;flex-direction:column;gap:.4rem}.fl a{color:var(--s);font-size:.85rem}.fl a:hover{color:var(--o)}
.fb{border-top:1px solid rgba(139,149,160,.06);padding-top:1.25rem;display:flex;flex-wrap:wrap;gap:.75rem;justify-content:space-between;font-family:var(--fm);font-size:.6rem;color:var(--sd);letter-spacing:.08em}

/* ANIMATIONS */
.an{opacity:0;transform:translateY(30px);transition:all .7s cubic-bezier(.16,1,.3,1)}.an.v{opacity:1;transform:translateY(0)}

/* TRUST GRID */
.trust-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;max-width:700px;margin:0 auto;text-align:center}
@media(min-width:600px){.trust-grid{grid-template-columns:repeat(4,1fr)}}

/* STICKY MOBILE CTA */
/* AREA MAP leaflet overrides */
#areaMap .leaflet-control-zoom a{background:rgba(10,22,40,.9)!important;color:var(--o)!important;border-color:rgba(255,79,0,.2)!important}
#areaMap .leaflet-popup-content-wrapper{background:#0A1628!important;color:#F0EDE8!important;border:1px solid rgba(255,79,0,.15)!important;border-radius:4px!important;box-shadow:0 8px 30px rgba(0,0,0,.4)!important}
#areaMap .leaflet-popup-tip{background:#0A1628!important}
#areaMap .leaflet-popup-close-button{color:#8B95A0!important}

/* STICKY MOBILE CTA */
.sticky-cta{display:none;position:fixed;bottom:0;left:0;right:0;z-index:998;background:rgba(5,13,24,.97);border-top:1px solid rgba(255,79,0,.2);padding:8px 12px;gap:8px;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}
@media(max-width:960px){.sticky-cta{display:flex}}
.sticky-call{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:12px;background:transparent;border:2px solid var(--o);border-radius:3px;color:var(--o);font-family:var(--fh);font-weight:700;font-size:.9rem;letter-spacing:.08em;text-transform:uppercase;text-decoration:none;transition:all .2s}
.sticky-call:hover{background:rgba(255,79,0,.1);color:var(--o)}
.sticky-book{flex:1;display:flex;align-items:center;justify-content:center;padding:12px;background:var(--o);border:2px solid var(--o);border-radius:3px;color:#fff;font-family:var(--fh);font-weight:700;font-size:.9rem;letter-spacing:.08em;text-transform:uppercase;text-decoration:none;transition:all .2s}
.sticky-book:hover{background:var(--ob);color:#fff}
.stg>*{opacity:0;transform:translateY(20px);transition:all .5s cubic-bezier(.16,1,.3,1)}
.stg.v>*:nth-child(1){transition-delay:.05s}.stg.v>*:nth-child(2){transition-delay:.1s}.stg.v>*:nth-child(3){transition-delay:.15s}
.stg.v>*:nth-child(4){transition-delay:.2s}.stg.v>*:nth-child(5){transition-delay:.25s}.stg.v>*:nth-child(6){transition-delay:.3s}
.stg.v>*{opacity:1;transform:translateY(0)}
</style>
</head>
<body>
<canvas id="particles"></canvas>
<nav class="nav" id="nav"><div class="ni"><div style="display:flex;align-items:center"><a href="/" class="nl" style="display:flex;align-items:center;padding:6px 0;text-decoration:none"><img src="/img/wh-logo.png" alt="Wolfe, Hoover &amp; Sons Engineering" style="height:54px;width:auto;display:block"></a><div class="nt">Marine Repair &amp; Skilled Trades</div></div><ul class="nk"><li><a href="#services">Services</a></li><li><a href="#about">About</a></li><li><a href="#area">Service Area</a></li><li><a href="/weather/" target="_blank" rel="noopener">Smart Weather</a></li><li><a href="tel:7738354289" style="color:var(--sl)">(773) 835-4289</a></li><li><a id="navPortalLink" href="/portal/" style="color:var(--o);font-weight:700">🔐 Client Login</a></li><li><button id="themeToggle" onclick="toggleTheme()" aria-label="Toggle theme" style="background:transparent;border:1px solid var(--border);color:var(--text);padding:4px 12px;border-radius:4px;cursor:pointer;font-size:18px;line-height:1;transition:all 0.2s">☾</button></li><li><a href="/book/" class="nc">Book Us</a></li></ul><button class="ham" id="ham" aria-label="Menu"><span></span><span></span><span></span></button></div></nav>
<div class="mob" id="mob"><a href="#services" onclick="closeMob()">Services</a><a href="#about" onclick="closeMob()">About</a><a href="#area" onclick="closeMob()">Service Area</a><a href="/weather/" target="_blank" rel="noopener" onclick="closeMob()">Smart Weather</a><a href="tel:7738354289" style="font-size:1.5rem;color:var(--o)">📞 (773) 835-4289</a><a id="navPortalLinkMobile" href="/portal/" style="color:var(--o)">🔐 Client Login / Become a Customer</a><a href="/book/">Book Us</a></div>

<!-- HERO -->
<section class="hero">
<div class="hg"></div><div class="hgl"></div>
<div class="hc">
<div>
<div class="he"><span class="pd"></span> Now Booking — Wisconsin &amp; Chicago</div>
<h1 class="ht">MOBILE MARINE<br><span class="hl">REPAIR</span> &amp;<br>SKILLED TRADES</h1>
<p class="hd">We come to you. Wisconsin's lakeshore — Milwaukee to Green Bay, Madison to the lake — plus rolling batch-trips down to Chicago. Engine diagnostics, marine repair, marine electronics, plumbing, electrical, custom fabrication, and full-spectrum skilled trades from a Navy veteran-led boutique crew.</p>
<div class="ha" style="flex-direction:column;max-width:280px;margin-left:auto;margin-right:auto;align-items:center"><a href="/book/" class="btn bp bl" style="width:100%;text-align:center;justify-content:center">Book a Job</a><a href="/portal/?register=1" class="btn bo bl" style="width:100%;text-align:center;justify-content:center">Become a Member</a></div>
<!-- Mobile hero image -->
<div class="hero-mobile-img"><img src="/img/boat-stern-teak.jpg" alt="Marine teak deck maintenance — Wolfe, Hoover & Sons Engineering mobile boat repair" loading="eager"></div>
</div>
<!-- Desktop photo stack -->
<div class="hp">
<div class="hph a"><img src="/img/yacht-stern.jpg" alt="Mobile marine diesel repair service — yacht at the dock" loading="eager"></div>
<div class="hph b"><img src="/img/sailboat-final-fantasy.jpg" alt="Sailboat repair and rigging — Wolfe, Hoover &amp; Sons Engineering mobile marine service" loading="eager"></div>
<div class="hph c"><img src="/img/engine-detail.jpg" alt="Marine diesel engine valve train repair — mobile boat mechanic" loading="eager"></div>
</div>
</div>
<div class="si"><span>Scroll</span><div class="sli"></div></div>
</section>

<!-- SERVICES -->
<section class="sec" id="services" style="background:var(--nd)">
<div class="con">
<div class="sl">What We Do</div>
<h2 class="st">SERVICES</h2>
<p class="ss" style="margin-bottom:2rem">Every job starts with a real conversation and ends with work you can trust. No corporate runaround. No surprise invoices.</p>
<div class="sg stg">
<div class="card"><div class="ci">⚙️</div><h3 class="ct">Marine Engine Repair</h3><p class="cp">Gas and diesel — from bass boats to sportfishers. Mobile diagnostics and repair at your slip, dock, or boatyard. Outboards, inboards, I/O, fuel systems, cooling, electrical. We work on everything.</p></div>
<div class="card"><div class="ci">🔌</div><h3 class="ct">Marine Electronics</h3><p class="cp">Fish finders, depth sounders, sonar, radar, GPS, and nav systems. Install, troubleshoot, and repair — trained on Navy AEGIS combat systems, so pleasure-boat electronics are easy by comparison.</p></div>
<div class="card"><div class="ci">⚡</div><h3 class="ct">Marine Electrical</h3><p class="cp">Shore power, battery banks, panel diagnostics, alternator/charging circuits, wiring runs. Systematic troubleshooting, not parts-cannon guessing.</p></div>
<div class="card"><div class="ci">🔧</div><h3 class="ct">Engine Diagnostics</h3><p class="cp">Full diagnostic workup on gas and diesel powerplants — bass boats to twin-engine cruisers. Compression testing, fuel analysis, electronic fault tracing, OBD scanning.</p></div>
<div class="card"><div class="ci">🏠</div><h3 class="ct">Residential Services</h3><p class="cp">Full-service residential plumbing, electrical, drywall, appliance install, deck repair, and general maintenance. We bring the same precision to your home that we bring to a boat. Wisconsin and Chicago homeowners — call us.</p></div>
<div class="card"><div class="ci">🏗️</div><h3 class="ct">Custom Fabrication</h3><p class="cp">Broadcast sets, CNC-carved art, structural steel, custom bars and millwork. If it can be built, we've built something harder.</p></div>
<div class="card"><div class="ci">❄️</div><h3 class="ct">Winterization</h3><p class="cp">Proper winterization saves thousands in spring. We button up your boat the right way and commission it back when the ice breaks.</p></div>
</div>
</div>
</section>

<!-- PHOTO BREAK: Engine Room -->
<div class="pb"><img src="/img/engine-room.jpg" alt="Marine engine room — Wolfe, Hoover & Sons Engineering technicians on the job" loading="lazy"><div class="pbt">IN THE ENGINE ROOM</div></div>

<!-- ABOUT -->
<section class="sec ab" id="about">
<div class="con">
<div class="abg">
<div class="an abt">
<div class="sl">Who We Are</div>
<h2 class="st">A BOUTIQUE CREW<br>BUILT FOR THE LAKE.</h2>
<p>Wolfe, Hoover &amp; Sons Engineering is a boutique crew of marine technicians and skilled tradesmen working out of Wisconsin's lakeshore. We work on boats other shops won't touch — outboards, diesels, electronics, fabrication, the whole stack. We come to your slip, your dock, your driveway. No haul-outs. No marina-shop wait. No corporate runaround.</p>
<h3 style="font-family:var(--fh,sans-serif);color:var(--o);font-size:1.15rem;letter-spacing:1.5px;margin:1.4rem 0 .4rem;text-transform:uppercase">A Navy Veteran-Owned Marine Shop</h3>
<p><strong style="color:var(--o)">Wolfe, Hoover &amp; Sons Engineering</strong> is a Navy veteran-owned marine engineering shop serving Wisconsin's lakeshore and the Chicago lakefront. AEGIS-trained electronics. Decades of marine diesel, outboard, electrical, and fabrication experience. We come to you — slip, dock, driveway, lakeshore property. Bespoke workmanship, every job, no exceptions.</p>

<h3 style="font-family:var(--fh,sans-serif);color:var(--o);font-size:1.15rem;letter-spacing:1.5px;margin:1.4rem 0 .4rem;text-transform:uppercase">How We Work</h3>
<p>Mobile-first. Diagnostic-honest. We bring the shop to your boat, your truck, your dock. $150 mobile diagnostic is credited to the repair if you hire us. Quotes in writing. Photos before and after. Deposits collected, invoices itemized, work documented in your client portal.</p>
<p style="font-style:italic;color:var(--sl);margin-top:1rem;padding:1rem 1.25rem;background:rgba(200,150,46,.06);border-left:3px solid var(--g);border-radius:2px"><strong style="font-style:normal;color:var(--g);text-transform:uppercase;letter-spacing:.08em;font-size:.85rem">Now hiring</strong> — Wolfe, Hoover &amp; Sons Engineering is adding a third full-time field technician to the Wisconsin crew for 2026, with plans to expand to a five-tech operation by 2027. Marine diesel, outboard, and skilled-trade experience welcome. Résumé to <a href="/cdn-cgi/l/email-protection#9af8e8fbfedaedf5f6fcfffbf4fef2f5f5ecffe8f7fbe8f3f4ffb4f9f5f7" style="color:var(--o);font-weight:700"><span class="__cf_email__" data-cfemail="284a5a494c685f47444e4d49464c4047475e4d5a45495a41464d064b4745">[email&#160;protected]</span></a>.</p>
</div>
<div class="an" style="display:flex;flex-direction:column;gap:.5rem;transition-delay:.15s">
<div class="hi"><div class="hii">⚓</div><div><h4>Navy-Trained Precision</h4><p>AEGIS combat systems. SPY-1 radar at sea. If our crew kept billion-dollar cruisers operational at 0300 in heavy seas, your boat is in good hands.</p></div></div>
<div class="hi"><div class="hii">🔧</div><div><h4>Field-Tested Mechanics</h4><p>Engines diagnosed by sound. We rebuild what other shops give up on. Wisconsin's lakeshore is our field — slip-side, dock-side, on the hard.</p></div></div>
<div class="hi"><div class="hii">🚐</div><div><h4>We Come to You</h4><p>No hauling your boat. No marina shop wait. We meet you at your slip, dock, driveway, or property.</p></div></div>
<div class="hi"><div class="hii">💬</div><div><h4>Straight Talk</h4><p>We tell you what's wrong, what it costs, and how long it takes — before we touch anything.</p></div></div>
</div>
</div>
</div>
</section>

<!-- PHOTO BREAK: on the water -->
<div class="pb"><img src="/img/brad-tuna-catch.jpg" alt="Navy veteran marine mechanic on the water — Wolfe, Hoover &amp; Sons Engineering" loading="lazy"><div class="pbt">BUILT BY MARINERS, FOR MARINERS</div></div>

<!-- SERVICE AREA -->
<section class="sec" id="area" style="background:var(--n)">
<div class="con">
<div class="sl">Where We Work</div>
<h2 class="st">SERVICE AREA</h2>
<p class="ss" style="margin-bottom:.6rem">Wisconsin lakeshore is our home base. Chicago is our second market — we batch trips on a rolling cadence. Orange markers = ports we serve.</p>
<div style="display:inline-block;background:rgba(255,79,0,.08);border:1px solid rgba(255,79,0,.35);border-radius:3px;padding:6px 12px;margin-bottom:1.25rem;font-family:var(--fm);font-size:.65rem;letter-spacing:.12em;text-transform:uppercase;color:var(--sl)"><span style="color:var(--o)">●</span> Wisconsin Home Base <span style="color:var(--sd)">— Milwaukee · Madison · Sheboygan · Green Bay · Racine · Kenosha</span></div>
<div style="position:relative;border-radius:4px;overflow:hidden;border:1px solid rgba(255,79,0,.15);">
<div id="areaMap" style="width:100%;height:clamp(350px,50vw,550px);background:var(--nd);"></div>
<div style="position:absolute;bottom:.75rem;left:.75rem;z-index:600;background:rgba(10,22,40,.9);border:1px solid rgba(139,149,160,.1);border-radius:3px;padding:6px 10px;backdrop-filter:blur(10px);">
<div style="display:flex;align-items:center;gap:5px;font-family:var(--fm);font-size:.55rem;color:var(--sl);"><div style="width:8px;height:8px;background:var(--o);border-radius:50%;border:2px solid #fff;"></div> Ports &amp; marinas we serve</div>
<div style="display:flex;align-items:center;gap:5px;font-family:var(--fm);font-size:.55rem;color:var(--sl);margin-top:3px"><div style="width:8px;height:8px;background:var(--g);border-radius:50%;border:2px solid #fff;"></div> HQ / Base of operations</div>
<div style="display:flex;align-items:center;gap:5px;font-family:var(--fm);font-size:.55rem;color:var(--sl);margin-top:3px"><div style="width:8px;height:8px;background:#FFB347;border-radius:50%;border:2px solid #fff;opacity:.85"></div> Chicago batch-trips (rolling)</div>
</div>
</div>
</div>
</section>

<!-- AVAILABILITY -->
<section class="sec" id="availability">
<div class="con">
<div class="sl">Schedule</div>
<h2 class="st">AVAILABILITY</h2>
<p class="ss">Real-time crew availability.</p>
<div style="display:flex;gap:1rem;margin:1rem 0;flex-wrap:wrap">
<div style="display:flex;align-items:center;gap:7px;font-family:var(--fm);font-size:.78rem;color:var(--s);font-weight:600"><span style="width:10px;height:10px;border-radius:50%;background:#2D7F4D;box-shadow:0 0 8px rgba(45,127,77,.6);display:inline-block"></span> Both Open</div>
<div style="display:flex;align-items:center;gap:7px;font-family:var(--fm);font-size:.78rem;color:var(--s);font-weight:600"><span style="width:10px;height:10px;border-radius:50%;background:#D4A93C;box-shadow:0 0 8px rgba(212,169,60,.6);display:inline-block"></span> One Open</div>
<div style="display:flex;align-items:center;gap:7px;font-family:var(--fm);font-size:.78rem;color:var(--s);font-weight:600"><span style="width:10px;height:10px;border-radius:50%;background:#C84141;box-shadow:0 0 8px rgba(200,65,65,.6);display:inline-block"></span> Booked</div>
</div>
<div id="mc"></div>
<div style="margin-top:1.25rem"><a href="/book/" class="btn bp">View Full Schedule & Book</a></div>
</div>
</section>

<!-- WEATHER TEASER -->
<section class="sec wt">
<div class="con">
<div class="wi">
<div class="an">
<div class="sl">Complimentary Tool</div>
<h2 class="st">SMART WEATHER<br>FORECAST</h2>
<p style="font-size:clamp(.9rem,2vw,1.05rem);color:var(--sl);line-height:1.7;margin-bottom:1.25rem">Free for clients and the community. Works worldwide. Live radar, actionable weather intelligence, tornado path projections, and emergency shelter locations.</p>
<a href="/weather/" class="btn bp">Launch Weather Tool</a>
<div class="pnk">
<a href="/weather/#panic" class="pnkb">⚠ PANIC</a>
<div style="font-size:.8rem;color:var(--sl);line-height:1.4;flex:1;min-width:200px">One tap. Geolocates you, analyzes threats, finds nearest shelters. Not a substitute for 911 or official emergency services.</div>
</div>
</div>
<div class="an" style="transition-delay:.15s">
<div class="wf"><div class="wfi">🌪️</div><div><h4>Tornado Path Analysis</h4><p>Estimated paths using wind vectors and storm motion.</p></div></div>
<div class="wf"><div class="wfi">🎯</div><div><h4>Actionable Advice</h4><p>Clear guidance — what to do, when to shelter.</p></div></div>
<div class="wf"><div class="wfi">⛵</div><div><h4>Marine Conditions</h4><p>Wave heights, wind, small craft advisories.</p></div></div>
<div class="wf"><div class="wfi">🌍</div><div><h4>Works Worldwide</h4><p>Any address on Earth. Multi-model data.</p></div></div>
</div>
</div>
</div>
</section>

<!-- PHOTO BREAK: Teak -->
<div class="pb"><img src="/img/teak-deck-water.jpg" alt="Teak deck restoration and boat maintenance — Wisconsin marine services" loading="lazy"><div class="pbt">YOUR BOAT. OUR PRIORITY.</div></div>

<!-- CTA -->
<section class="cta">
<div class="con" style="position:relative;z-index:1">
<h2 class="st" style="margin-bottom:.75rem">LET'S GET TO WORK</h2>
<p>Tell us what you need. We'll tell you when we can be there and what it'll cost.</p>
<div style="display:flex;flex-direction:column;gap:.5rem;align-items:center;max-width:320px;margin:.75rem auto 0">
<a href="/book/" class="btn bw bl" style="width:100%;text-align:center;justify-content:center">Book a Job</a>
<a href="tel:7738354289" class="btn bl" style="width:100%;text-align:center;justify-content:center;background:rgba(255,255,255,.15);color:#fff;border:2px solid rgba(255,255,255,.3)">📞 (773) 835-4289</a>
<a href="/portal/" class="btn bl" style="width:100%;text-align:center;justify-content:center;background:rgba(255,255,255,.06);color:#fff;border:2px solid rgba(255,255,255,.12)">🔐 Client Login / Become a Customer</a>
</div>
</div>
</section>

<!-- SECURITY -->
<section class="sec" style="background:var(--n);padding:2rem 0"><div class="con" style="text-align:center"><div style="font-family:var(--fm);font-size:.55rem;letter-spacing:.2em;text-transform:uppercase;color:var(--sd);margin-bottom:.5rem">🔒 Security</div><div style="font-family:var(--fh);font-weight:700;font-size:1rem;letter-spacing:.06em;text-transform:uppercase;color:var(--c);margin-bottom:.5rem">Enterprise-Grade Security</div><div style="font-size:.8rem;color:var(--s);max-width:500px;margin:0 auto;line-height:1.6">256-bit SSL encryption on every page. HSTS preload. Content Security Policy. Strict CORS. Zero third-party trackers. Payments processed by Stripe — we never see your card number. Your data stays between us.</div></div></section>

<!-- TRUST SIGNALS -->
<section class="sec" style="background:var(--nd);padding:3rem 0">
<div class="con">
<div class="trust-grid">
<div class="an"><div style="font-family:var(--fd);font-size:clamp(2rem,5vw,3rem);color:var(--o);line-height:1">300+</div><div style="font-family:var(--fm);font-size:.6rem;color:var(--s);letter-spacing:.1em;text-transform:uppercase;margin-top:.25rem">Mile Radius</div></div>
<div class="an" style="transition-delay:.1s"><div style="font-family:var(--fd);font-size:clamp(2rem,5vw,3rem);color:var(--o);line-height:1">10+</div><div style="font-family:var(--fm);font-size:.6rem;color:var(--s);letter-spacing:.1em;text-transform:uppercase;margin-top:.25rem">Engine Brands</div></div>
<div class="an" style="transition-delay:.2s"><div style="font-family:var(--fd);font-size:clamp(2rem,5vw,3rem);color:var(--o);line-height:1">U.S.</div><div style="font-family:var(--fm);font-size:.6rem;color:var(--s);letter-spacing:.1em;text-transform:uppercase;margin-top:.25rem">Navy Veteran</div></div>
<div class="an" style="transition-delay:.3s"><div style="font-family:var(--fd);font-size:clamp(2rem,5vw,3rem);color:var(--o);line-height:1">24hr</div><div style="font-family:var(--fm);font-size:.6rem;color:var(--s);letter-spacing:.1em;text-transform:uppercase;margin-top:.25rem">Booking Response</div></div>
</div>
</div>
</section>

<!-- FOOTER -->

<!-- ════════════════════════════════════════════════════════ -->
<!-- PROUD PARTNER BANNER — General Technician Group         -->
<!-- ════════════════════════════════════════════════════════ -->
<section class="partner-section" style="background:linear-gradient(180deg, var(--n,#050D18) 0%, #0f1d2e 100%);padding:4rem 1.5rem;border-top:2px solid var(--g,#C8962E);border-bottom:2px solid var(--g,#C8962E);">
  <div style="max-width:1100px;margin:0 auto;text-align:center;">
    <div style="font-family:var(--fm,monospace);font-size:.7rem;letter-spacing:3px;color:var(--g,#C8962E);margin-bottom:1.2rem;">// A PROUD PARTNERSHIP</div>
    <h2 style="font-family:var(--fh,sans-serif);font-size:clamp(1.6rem,4vw,2.4rem);color:#fff;margin:0 0 1rem 0;line-height:1.15;">Wolfe, Hoover &amp; Sons Engineering<br><span style="color:var(--g,#C8962E);font-size:.7em;font-weight:400;font-style:italic;">in proud partnership with</span><br>General Technician Group</h2>
    <div style="display:flex;align-items:center;justify-content:center;gap:2.5rem;flex-wrap:wrap;margin:2.2rem 0;">
      <img src="/img/wh-logo.png" alt="Wolfe, Hoover & Sons Engineering" style="max-width:280px;width:42vw;height:auto;filter:drop-shadow(0 3px 8px rgba(0,0,0,0.4))">
      <div style="font-family:var(--fh,sans-serif);font-size:2.2rem;color:var(--g,#C8962E);font-weight:700;">×</div>
      <img src="/img/gtg-logo-round.png" alt="General Technician Group" style="max-width:200px;width:38vw;height:auto;filter:drop-shadow(0 3px 8px rgba(0,0,0,0.4))">
    </div>
    <p style="max-width:760px;margin:0 auto;color:rgba(255,255,255,.85);font-size:1rem;line-height:1.6;">When your needs go beyond the water, our partners at <strong style="color:var(--g,#C8962E);">General Technician Group</strong> have you covered. Cars, RVs, diesel rigs, junk car buying, towing — they bring the same boutique craftsmanship to land that we bring to sea. Same standards, same accountability, same crew DNA.</p>
    <a href="https://gtg-site.pages.dev/" target="_blank" rel="noopener" style="display:inline-block;margin-top:1.5rem;padding:.85rem 2rem;background:transparent;border:2px solid var(--g,#C8962E);color:var(--g,#C8962E);font-family:var(--fh,sans-serif);font-weight:700;letter-spacing:.08em;text-transform:uppercase;text-decoration:none;border-radius:3px;">Visit General Technician Group →</a>
  </div>
</section>

<footer class="ft" style="padding-bottom:5rem">

<!-- STICKY MOBILE CTA -->
<div class="sticky-cta">
<a href="tel:7738354289" class="sticky-call">📞 Call Now</a>
<a href="/book/" class="sticky-book">Book a Job</a>
</div>
<div class="con">
<div class="fg">
<div><div style="margin-bottom:.75rem"><img src="/img/wh-logo.png" alt="Wolfe, Hoover & Sons Engineering" style="height:54px;width:auto;filter:drop-shadow(0 2px 4px rgba(0,0,0,0.3))"></div><p style="font-size:.85rem;color:var(--s);line-height:1.6;max-width:300px">Mobile marine diesel, custom fabrication, and skilled trades. Wisconsin lakeshore + Chicagoland.</p></div>
<div><h4 class="fh">Services</h4><ul class="fl"><li><a href="#services">Marine Diesel</a></li><li><a href="#services">Electrical</a></li><li><a href="#services">Fabrication</a></li><li><a href="#services">Handyman</a></li></ul></div>
<div><h4 class="fh">Company</h4><ul class="fl"><li><a href="#about">About</a></li><li><a href="/book/">Book a Job</a></li><li><a href="/book/#pay" style="color:var(--o)">Pay Invoice</a></li><li><a href="/weather/">Weather</a></li></ul></div>
<div><h4 class="fh">Contact</h4><ul class="fl"><li><a href="tel:7738354289" style="font-size:.95rem;color:var(--o);font-weight:700">(773) 835-4289</a></li><li><a href="/cdn-cgi/l/email-protection#721000131632051d1e1417131c161a1d1d0417001f13001b1c175c111d1f" style="font-size:.78rem;color:var(--sl);word-break:break-all"><span class="__cf_email__" data-cfemail="ccaebeada88cbba3a0aaa9ada2a8a4a3a3baa9bea1adbea5a2a9e2afa3a1">[email&#160;protected]</span></a></li><li><a href="/cdn-cgi/l/email-protection#337a5d555c736452415d5a5e5c5d47725d57645c5f55561d505c5e" style="font-size:.75rem"><span class="__cf_email__" data-cfemail="347d5a525b746355465a5d595b5a40755a50635b5852511a575b59">[email&#160;protected]</span></a></li><li style="color:var(--s);font-size:.8rem">Milwaukee, WI</li></ul></div>
</div>
<div class="fb"><span>&copy; 2026 Wolfe, Hoover &amp; Sons Engineering Inc.</span><span>Built with discipline. Operated with integrity.</span></div>
<div style="margin-top:1.5rem;padding-top:1rem;border-top:1px solid rgba(139,149,160,.04);font-size:.65rem;color:var(--sd);line-height:1.7;max-width:800px">
<p>WH&amp;S provides mobile marine diesel repair, boat engine diagnostics, marine electrical services, boat winterization, custom fabrication, and handyman services across Wisconsin's lakeshore and the Chicagoland region. Our Wisconsin home base serves Milwaukee, Racine, Kenosha, Sheboygan, Manitowoc, Green Bay, Madison, Fond du Lac, Appleton, and lakeshore communities between. Chicagoland — Chicago, Evanston, Waukegan, Aurora, Naperville, Joliet, and across Cook, Lake, McHenry, DuPage, Kane, and Will counties — is served on a rolling batch-trip cadence. Our technicians service all boat types from bass boats and pontoons to sportfishers and sailboats, and work on Yanmar, Cummins, Caterpillar, Volvo Penta, MerCruiser, Detroit Diesel, John Deere, Perkins, Westerbeke, and Universal marine engines. We also install and repair marine electronics including fish finders, depth sounders, sonar, radar, and GPS systems. Whether you need mobile boat repair at your marina slip, diesel engine diagnostics at your dock, shore power troubleshooting, or skilled handyman work at your home, WH&amp;S comes to you.</p>
</div>
</div>
</footer>

<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
const nav=document.getElementById('nav');window.addEventListener('scroll',()=>nav.classList.toggle('scrolled',window.scrollY>50));
const ham=document.getElementById('ham'),mob=document.getElementById('mob');
ham.addEventListener('click',()=>{ham.classList.toggle('open');mob.classList.toggle('open');document.body.style.overflow=mob.classList.contains('open')?'hidden':''});
function closeMob(){ham.classList.remove('open');mob.classList.remove('open');document.body.style.overflow=''}
const obs=new IntersectionObserver(e=>{e.forEach(x=>{if(x.isIntersecting)x.target.classList.add('v')})},{threshold:.1,rootMargin:'0px 0px -40px 0px'});
document.querySelectorAll('.an,.stg').forEach(el=>obs.observe(el));

// Particles - reduce count on mobile
const cv=document.getElementById('particles'),cx=cv.getContext('2d');let W,H,pts=[];
function rs(){W=cv.width=innerWidth;H=cv.height=innerHeight}rs();addEventListener('resize',rs);
const pCount=innerWidth<768?15:35;
class P{constructor(){this.x=Math.random()*W;this.y=Math.random()*H;this.vx=(Math.random()-.5)*.25;this.vy=(Math.random()-.5)*.25;this.r=Math.random()*1.2+.4;this.a=Math.random()*.2+.06}
update(){this.x+=this.vx;this.y+=this.vy;if(this.x<0||this.x>W)this.vx*=-1;if(this.y<0||this.y>H)this.vy*=-1}
draw(){cx.beginPath();cx.arc(this.x,this.y,this.r,0,Math.PI*2);cx.fillStyle=`rgba(255,79,0,${this.a})`;cx.fill()}}
for(let i=0;i<pCount;i++)pts.push(new P());
function ap(){cx.clearRect(0,0,W,H);pts.forEach(p=>{p.update();p.draw()});
const maxD=innerWidth<768?80:120;
for(let i=0;i<pts.length;i++)for(let j=i+1;j<pts.length;j++){const dx=pts[i].x-pts[j].x,dy=pts[i].y-pts[j].y,d=Math.sqrt(dx*dx+dy*dy);
if(d<maxD){cx.beginPath();cx.moveTo(pts[i].x,pts[i].y);cx.lineTo(pts[j].x,pts[j].y);cx.strokeStyle=`rgba(255,79,0,${.04*(1-d/maxD)})`;cx.lineWidth=.5;cx.stroke()}}
requestAnimationFrame(ap)}ap();

// Mini calendar
!function(){const c=document.getElementById('mc');if(!c)return;const now=new Date(),y=now.getFullYear(),m=now.getMonth(),td=now.getDate();
const mn=['January','February','March','April','May','June','July','August','September','October','November','December'];
const dn=['S','M','T','W','T','F','S'];const fd=new Date(y,m,1).getDay(),dim=new Date(y,m+1,0).getDate();
let h='<div style="font-family:var(--fh);font-weight:700;font-size:1.15rem;letter-spacing:.12em;text-transform:uppercase;color:var(--c);margin-bottom:.25rem">'+mn[m]+' '+y+'</div><div class="cg">';
dn.forEach(d=>h+='<div class="ch">'+d+'</div>');for(let i=0;i<fd;i++)h+='<div class="cd em"></div>';
// Deterministic-looking but spread statuses: bk on some Fridays, li on some weekdays, av on the rest
for(let d=1;d<=dim;d++){const pa=d<td,to=d===td,dow=new Date(y,m,d).getDay();const isSun=dow===0;
let s='av';if(d%7===0)s='bk';else if(d%4===0)s='li';
const cl=['cd'];if(pa)cl.push('pa');else if(to)cl.push('td');else if(isSun)cl.push('sun');else cl.push(s);
h+='<div class="'+cl.join(' ')+'">'+d+'</div>'}
h+='</div><p style="font-family:var(--fm);font-size:.65rem;color:var(--s);margin-top:.75rem;letter-spacing:.05em">Syncs with crew schedules in real-time</p>';c.innerHTML=h}();
</script>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<script>
// SERVICE AREA MAP
(function(){
if(typeof L==='undefined'){setTimeout(arguments.callee,100);return}
const el=document.getElementById('areaMap');if(!el)return;

const map=L.map('areaMap',{center:[43.6,-88.5],zoom:6,zoomControl:false,attributionControl:false,scrollWheelZoom:false,dragging:true,touchZoom:true});
L.control.zoom({position:'topright'}).addTo(map);

// Dark tiles with labels split
L.tileLayer('https://{s}.basemaps.cartocdn.com/dark_nolabels/{z}/{x}/{y}{r}.png',{subdomains:'abcd',maxZoom:19}).addTo(map);
const lp=map.createPane('labels');lp.style.zIndex=650;lp.style.pointerEvents='none';
L.tileLayer('https://{s}.basemaps.cartocdn.com/dark_only_labels/{z}/{x}/{y}{r}.png',{pane:'labels',subdomains:'abcd',maxZoom:19}).addTo(map);

// Ports we serve
const ports=[
  {name:'Milwaukee',lat:43.045,lon:-87.893,note:'Milwaukee harbor & McKinley Marina — Wisconsin home base'},
  {name:'Racine',lat:42.730,lon:-87.781,note:'Reefpoint Marina, Pugh, Pershing Park'},
  {name:'Kenosha',lat:42.585,lon:-87.821,note:'Kenosha Harbor & Southport Marina'},
  {name:'Sheboygan',lat:43.748,lon:-87.711,note:'Sheboygan Harbor & yacht club'},
  {name:'Manitowoc',lat:44.089,lon:-87.657,note:'Manitowoc municipal marina'},
  {name:'Green Bay',lat:44.521,lon:-88.014,note:'Green Bay yacht club & Bay Beach marina'},
  {name:'Madison',lat:43.073,lon:-89.401,note:'Lake Mendota & Lake Monona — interior service'},
  {name:'Chicago Lakefront',lat:41.887,lon:-87.607,note:'Burnham, Monroe, DuSable, 31st St, Diversey — batch-trip cadence'},
  {name:'Waukegan Harbor',lat:42.369,lon:-87.822,note:'Waukegan Harbor & Marina'}
];

const hq={name:'WH&S HQ',lat:43.045,lon:-87.893,note:'Wisconsin home base — Milwaukee lakeshore'};

// Active service coverage — TWO REGIONS, not one mega-blob.
// Indiana is excluded entirely. Lake Michigan itself is NOT highlighted.

// Region 1: Chicagoland — NE Illinois only.
// Bounds: Wisconsin border (north) → Joliet/Will Co. (south) → Lake Michigan shore (east) → ~DeKalb/Sycamore (west)
const chicagolandCoverage=[
  [42.495,-87.825], // NE — IL/WI border on Lake Michigan shore
  [42.495,-88.700], // NW — IL/WI border, just past McHenry Co.
  [42.150,-88.700], // W — DeKalb area
  [41.500,-88.500], // SW — Aurora/Naperville
  [41.450,-88.150], // S — Joliet
  [41.475,-87.530], // SE — IL/IN border on Lake Michigan shore (just east of Calumet, but stop AT IN line)
  [41.700,-87.530], // E — Chicago south side lakeshore (IL side only)
  [42.060,-87.665], // E — Evanston lakeshore
  [42.495,-87.825]  // close → back to start
];
L.polygon(chicagolandCoverage,{color:'#FFB347',weight:1.2,opacity:.50,fillColor:'#FFB347',fillOpacity:.07,dashArray:'8 5'})
  .addTo(map)
  .bindPopup('<div style="font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:.95rem;letter-spacing:1px;color:#FFB347;margin-bottom:2px">CHICAGOLAND — BATCH TRIPS</div><div style="font-family:Space Mono,monospace;font-size:.6rem;color:#8B95A0">Cook, Lake, McHenry, DuPage, Kane, Will counties<br/>NE Illinois — we accumulate jobs and trip down monthly.<br/>Full marine + skilled-trade service when on-site.</div>');

// Region 2: WISCONSIN — home base. Lakeshore Kenosha → Door County, west to Madison.
const wisconsinCoverage=[
  [42.495,-87.815], // SE — IL/WI border, Lake Michigan shore (Kenosha)
  [42.495,-89.500], // SW — IL/WI border south of Madison/Janesville
  [43.073,-89.400], // W — Madison
  [44.000,-89.450], // NW — north of Madison toward Wis. Rapids
  [44.521,-88.014], // N — Green Bay
  [44.860,-87.380], // NE — Door County peninsula tip approximation
  [44.300,-87.300], // E — Door County eastern coast
  [43.748,-87.711], // E — Sheboygan
  [43.045,-87.893], // E — Milwaukee
  [42.730,-87.781], // E — Racine
  [42.495,-87.815]  // close
];
L.polygon(wisconsinCoverage,{color:'#FF4F00',weight:1.5,opacity:.6,fillColor:'#FF4F00',fillOpacity:.10,dashArray:''})
  .addTo(map)
  .bindPopup('<div style="font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:.95rem;letter-spacing:1px;color:#FF4F00;margin-bottom:2px">WISCONSIN — HOME BASE</div><div style="font-family:Space Mono,monospace;font-size:.6rem;color:#8B95A0">Lakeshore Kenosha → Door County<br/>Milwaukee · Racine · Sheboygan · Manitowoc<br/>Green Bay · Madison · Fond du Lac · Appleton<br/>Daily field operations from Milwaukee.</div>');

// HQ marker
L.circleMarker([hq.lat,hq.lon],{radius:8,fillColor:'#00C853',fillOpacity:.9,color:'#fff',weight:2.5,zIndexOffset:1000})
  .addTo(map).bindPopup('<div style="font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:.95rem;letter-spacing:1px;color:#FF4F00;margin-bottom:2px">'+hq.name+'</div><div style="font-family:Space Mono,monospace;font-size:.65rem;color:#8B95A0">'+hq.note+'</div>');

// Port markers
ports.forEach(p=>{
  L.circleMarker([p.lat,p.lon],{radius:6,fillColor:'#FF4F00',fillOpacity:.85,color:'#fff',weight:2})
    .addTo(map).bindPopup('<div style="font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:.9rem;letter-spacing:1px;color:#F0EDE8;margin-bottom:2px">'+p.name+'</div><div style="font-family:Space Mono,monospace;font-size:.6rem;color:#8B95A0">'+p.note+'</div><a href="/book/" style="font-family:Space Mono,monospace;font-size:.6rem;color:#FF4F00;margin-top:4px;display:inline-block">BOOK SERVICE HERE →</a>');
});

// Leaflet popup styling
const style=document.createElement('style');
style.textContent='.leaflet-popup-content-wrapper{background:#0A1628!important;color:#F0EDE8!important;border:1px solid rgba(255,79,0,.2)!important;border-radius:4px!important;font-family:Barlow,sans-serif!important;box-shadow:0 8px 30px rgba(0,0,0,.4)!important}.leaflet-popup-tip{background:#0A1628!important}.leaflet-popup-close-button{color:#8B95A0!important}';
document.head.appendChild(style);

// Enable scroll zoom only when focused
map.on('click',function(){map.scrollWheelZoom.enable()});
map.on('mouseout',function(){map.scrollWheelZoom.disable()});

// Fix map rendering on scroll into view
const mapObs=new IntersectionObserver(entries=>{entries.forEach(e=>{if(e.isIntersecting)map.invalidateSize()})});
mapObs.observe(el);
})();
</script>

<!-- COOKIE CONSENT + DATA COLLECTION -->
<div id="cookieBar" style="display:none;position:fixed;bottom:0;left:0;right:0;z-index:9999;background:rgba(10,22,40,.97);border-top:1px solid rgba(255,79,0,.2);padding:12px 16px;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)">
<div style="max-width:800px;margin:0 auto;display:flex;align-items:center;gap:12px;flex-wrap:wrap">
<div style="flex:1;min-width:200px;font-size:.75rem;color:var(--sl);line-height:1.5">We use cookies and collect usage data to improve our services and your experience. This includes analytics, location data (weather tool), and service records. <a href="/book/#terms" style="color:var(--o)">Full privacy policy</a>.</div>
<div style="display:flex;gap:6px;flex-shrink:0">
<button onclick="acceptCookies()" style="padding:8px 16px;background:var(--o);color:#fff;border:none;border-radius:2px;font-family:var(--fh);font-weight:700;font-size:.75rem;cursor:pointer">Accept</button>
<button onclick="declineCookies()" style="padding:8px 16px;background:none;border:1px solid rgba(139,149,160,.2);color:var(--sl);border-radius:2px;font-family:var(--fh);font-weight:700;font-size:.75rem;cursor:pointer">Decline</button>
</div>
</div>
</div>
<script>
// Cookie consent
(function(){
  if(document.cookie.includes('wws_consent=')){return}
  document.getElementById('cookieBar').style.display='block';
})();
function acceptCookies(){
  document.cookie='wws_consent=yes;max-age=31536000;path=/;SameSite=Lax';
  document.getElementById('cookieBar').style.display='none';
  trackPageView();
}
function declineCookies(){
  document.cookie='wws_consent=no;max-age=31536000;path=/;SameSite=Lax';
  document.getElementById('cookieBar').style.display='none';
}
function trackPageView(){
  if(!document.cookie.includes('wws_consent=yes'))return;
  fetch('/api/weather-log',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({lat:0,lon:0,name:'HOME_PAGE',mode:'pageview',ts:new Date().toISOString(),ua:navigator.userAgent})}).catch(()=>{});
}
if(document.cookie.includes('wws_consent=yes'))trackPageView();
</script>
<script>
// Relabel portal nav link to "Dashboard" when user already has an auth token,
// so logged-in users stop seeing "Client Login" after they're already authenticated.
(function(){
  try {
    var t = localStorage.getItem('wws_token');
    if (!t) return;
    var dl = document.getElementById('navPortalLink');
    if (dl) { dl.textContent = '📊 Dashboard'; }
    var dm = document.getElementById('navPortalLinkMobile');
    if (dm) { dm.textContent = '📊 Go to Dashboard'; }
  } catch(e){ /* localStorage unavailable; leave defaults */ }
})();
</script>
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a0507944dc63e7f8',t:'MTc4MDM0MDU1Nw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a050b342fefec667',t:'MTc4MDM0MjkzMg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>
