{"product_id":"magna-anchor™-magnetic-golf-towel-the-40-16-40","title":"Magna-Anchor™ Magnetic Golf Towel – The 40 (16×40)","description":"\u003c!--\nMETA TITLE:\nMagna-Anchor™ Magnetic Golf Towel — Large “The 40” (16×40)\n\nMETA DESCRIPTION:\nLarge-format magnetic golf towel built for cart rounds and all-weather play. Center magnet docking, scrub pad, waffle microfiber, and dual wash pockets for true wet\/dry workflow.\n--\u003e\n\u003cstyle\u003e\n\/* =========================\n   AF PDP — THE 40 TOWEL (CONVERSION + FINISH SWITCH + THEME-PROOF GALLERY)\n   SINGLE BLOCK • SCOPED • LOCKED BUTTONS\n   ========================= *\/\n#af-the40-pdp.af-product-desc{\n  font-family:system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n  background:#050509;\n  color:#f3f4f6;\n  line-height:1.7;\n  padding:1.35rem 1rem 1.9rem;\n  max-width:980px;\n  margin:0 auto;\n  box-sizing:border-box;\n}\n#af-the40-pdp.af-product-desc *,\n#af-the40-pdp.af-product-desc *::before,\n#af-the40-pdp.af-product-desc *::after{ box-sizing:inherit; }\n\n#af-the40-pdp h1{\n  font-size:clamp(2rem,4.8vw,2.95rem);\n  font-weight:950;\n  line-height:1.08;\n  margin:0 0 .55rem;\n  text-align:center;\n  letter-spacing:-0.02em;\n  background:linear-gradient(90deg,#fff,#cbd5e1);\n  -webkit-background-clip:text;\n  -webkit-text-fill-color:transparent;\n}\n#af-the40-pdp .af-kicker{\n  margin:.2rem auto 1rem;\n  text-align:center;\n  color:#cbd5e1;\n  font-size:1.05rem;\n  max-width:82ch;\n}\n#af-the40-pdp .af-muted{ color:#d1d5db; font-size:1.05rem; }\n#af-the40-pdp .af-small{ color:#9ca3af; font-size:.94rem; }\n\n#af-the40-pdp h2{\n  font-size:clamp(1.18rem,3.2vw,1.75rem);\n  margin:2rem 0 .85rem;\n  font-weight:900;\n  color:#f8fafc;\n  border-left:4px solid rgba(34,197,94,.85);\n  padding-left:1rem;\n}\n#af-the40-pdp h3{\n  font-size:1.12rem;\n  margin:1.15rem 0 .65rem;\n  font-weight:900;\n  color:#ffffff;\n}\n#af-the40-pdp p{ margin:.85rem 0; color:#e5e7eb; }\n\n#af-the40-pdp .af-rule{\n  height:1px;\n  background:linear-gradient(90deg, transparent, rgba(34,197,94,.35), transparent);\n  margin:1.35rem 0;\n}\n\n#af-the40-pdp .af-card{\n  background:rgba(2,6,23,.35);\n  border:1px solid rgba(148,163,184,.18);\n  border-radius:16px;\n  padding:1.1rem 1.15rem;\n  box-shadow:0 10px 28px rgba(0,0,0,.35);\n  margin:1rem 0;\n}\n\n\/* Exec summary \/ answer box *\/\n#af-the40-pdp .af-exec{\n  border:1px solid rgba(148,163,184,.22);\n  border-radius:16px;\n  padding:1.05rem 1.15rem 1rem;\n  background:linear-gradient(180deg, rgba(34,197,94,.08), rgba(2,6,23,.18));\n  box-shadow:0 10px 28px rgba(0,0,0,.35);\n  margin:.9rem 0 1.1rem;\n}\n#af-the40-pdp .af-exec .af-label{\n  margin:0 0 .45rem;\n  font-weight:900;\n  letter-spacing:.14em;\n  text-transform:uppercase;\n  font-size:.78rem;\n  color:#a7f3d0;\n}\n#af-the40-pdp .af-exec p{ margin:.35rem 0 0; color:#e5e7eb; }\n\n\/* Lists *\/\n#af-the40-pdp .af-list{\n  list-style:none;\n  padding-left:0;\n  margin:.75rem 0 0;\n}\n#af-the40-pdp .af-list li{\n  margin:0 0 .75rem;\n  padding-left:1.2rem;\n  position:relative;\n  color:#d1d5db;\n  font-size:1.02rem;\n}\n#af-the40-pdp .af-list li::before{\n  content:\"→\";\n  position:absolute;\n  left:0;\n  top:0;\n  color:#4ade80;\n  font-weight:900;\n}\n#af-the40-pdp .af-list li strong{ color:#22c55e; }\n\n\/* Two-up grid *\/\n#af-the40-pdp .af-grid{\n  display:grid;\n  grid-template-columns:1fr;\n  gap:.95rem;\n}\n@media (min-width:860px){\n  #af-the40-pdp .af-grid{ grid-template-columns:1fr 1fr; }\n}\n\n\/* ===== LOCKED BUTTON SYSTEM ===== *\/\n#af-the40-pdp .af-btn-wrap{\n  display:flex;\n  flex-wrap:wrap;\n  gap:.6rem;\n  margin-top:1rem;\n  justify-content:center;\n}\n#af-the40-pdp .af-btn{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  padding:.85rem 1.1rem;\n  border-radius:999px;\n  font-weight:900;\n  text-decoration:none !important;\n  line-height:1;\n  border:1px solid transparent;\n  transition:transform .12s ease, filter .12s ease, background .12s ease, border-color .12s ease;\n  user-select:none;\n  white-space:nowrap;\n  cursor:pointer;\n}\n#af-the40-pdp .af-btn:hover{ transform:translateY(-1px); filter:brightness(1.05); }\n#af-the40-pdp .af-btn:active{ transform:translateY(0px); filter:brightness(0.98); }\n#af-the40-pdp .af-btn-primary{\n  background:#22c55e;\n  color:#050509 !important;\n  border-color:rgba(34,197,94,0.55);\n}\n#af-the40-pdp .af-btn-secondary{\n  background:rgba(148,163,184,0.08);\n  color:#e5e7eb !important;\n  border-color:rgba(148,163,184,0.22);\n}\n\n\/* ===== NEW: HERO FINISH MODULE ===== *\/\n#af-the40-pdp .af-hero-module{\n  background: rgba(2,6,23,.38);\n  border: 1px solid rgba(148,163,184,.18);\n  border-radius: 16px;\n  padding: 1rem 1.05rem;\n  box-shadow: 0 10px 28px rgba(0,0,0,.35);\n  margin: 1rem auto 1.1rem;\n  max-width: 760px;\n}\n#af-the40-pdp .af-hero-module .af-label{\n  margin:0 0 .55rem;\n  font-weight:900;\n  letter-spacing:.14em;\n  text-transform:uppercase;\n  font-size:.78rem;\n  color:#a7f3d0;\n  text-align:center;\n}\n#af-the40-pdp .af-swatch-row{\n  display:flex;\n  justify-content:center;\n  gap:12px;\n  flex-wrap:wrap;\n  margin:.35rem 0 .65rem;\n}\n#af-the40-pdp .af-swatch{\n  width: 34px;\n  height: 34px;\n  border-radius: 999px;\n  border: 2px solid rgba(255,255,255,.18);\n  background:#111;\n  transition: transform .16s ease, border-color .16s ease, box-shadow .16s ease;\n  cursor:pointer;\n  padding:0;\n}\n#af-the40-pdp .af-swatch:hover{\n  transform: scale(1.08);\n  border-color: rgba(255,255,255,.55);\n}\n#af-the40-pdp .af-swatch[aria-selected=\"true\"]{\n  border-color: rgba(34,197,94,.95);\n  box-shadow: 0 0 0 4px rgba(34,197,94,.18);\n}\n#af-the40-pdp .af-swatch[data-af-finish=\"Black\"]{ background:#111; }\n#af-the40-pdp .af-swatch[data-af-finish=\"Blue\"]{ background:#1e3a8a; }\n#af-the40-pdp .af-swatch[data-af-finish=\"Grey\"]{ background:#4b5563; }\n#af-the40-pdp .af-swatch[data-af-finish=\"Green\"]{ background:#14532d; }\n\n#af-the40-pdp .af-status{\n  text-align:center;\n  color:#9ca3af;\n  font-size:.95rem;\n  margin:.35rem 0 0;\n}\n\n\/* FAQ *\/\n#af-the40-pdp .af-faq details{\n  border:1px solid rgba(148,163,184,.18);\n  border-radius:14px;\n  padding:1rem 1rem;\n  background:rgba(2,6,23,.32);\n  margin:.7rem 0;\n}\n#af-the40-pdp .af-faq summary{\n  cursor:pointer;\n  font-weight:900;\n  color:#f8fafc;\n}\n#af-the40-pdp .af-faq p{ margin:.6rem 0 0; color:#d1d5db; }\n\u003c\/style\u003e\n\u003cdiv class=\"af-product-desc\" id=\"af-the40-pdp\"\u003e\n\u003ch1\u003eMagna-Anchor™ Magnetic Towel — Large “The 40” (16×40)\u003c\/h1\u003e\n\u003cp class=\"af-kicker\"\u003e\u003cstrong\u003eHook:\u003c\/strong\u003e This isn’t “a bigger towel.” It’s a \u003cem\u003eworkflow\u003c\/em\u003e: wet zone stays wet, dry zone stays usable, and the towel docks dead-center so it doesn’t behave like a wet flag in a hurricane.\u003c\/p\u003e\n\u003cdiv class=\"af-exec\"\u003e\n\u003cp class=\"af-label\"\u003eTest Verdict\u003c\/p\u003e\n\u003cp\u003eThe 40 is the default large-format choice for cart golfers and mixed conditions because it’s designed around \u003cstrong\u003eseparation\u003c\/strong\u003e: dual wash pockets support a true wet\/dry routine, the center-mounted Magna-Anchor™ keeps the towel balanced, and the scrub pad handles compacted groove grime without turning the entire towel into a gritty sponge.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c!-- Finish + ATC module --\u003e\n\u003cdiv class=\"af-hero-module\" data-af-variant-sync=\"\"\u003e\n\u003cp class=\"af-label\"\u003ePick Your Finish\u003c\/p\u003e\n\u003cdiv class=\"af-swatch-row\" role=\"listbox\" aria-label=\"Choose finish\"\u003e\n\u003cbutton class=\"af-swatch\" type=\"button\" data-af-finish=\"Black\" aria-label=\"Black finish\" aria-selected=\"false\"\u003e\u003c\/button\u003e \u003cbutton class=\"af-swatch\" type=\"button\" data-af-finish=\"Blue\" aria-label=\"Blue finish\" aria-selected=\"false\"\u003e\u003c\/button\u003e \u003cbutton class=\"af-swatch\" type=\"button\" data-af-finish=\"Grey\" aria-label=\"Grey finish\" aria-selected=\"false\"\u003e\u003c\/button\u003e \u003cbutton class=\"af-swatch\" type=\"button\" data-af-finish=\"Green\" aria-label=\"Green finish\" aria-selected=\"false\"\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"af-btn-wrap\"\u003e\n\u003cbutton type=\"button\" class=\"af-btn af-btn-primary\" data-af-atc=\"\"\u003eAdd to cart\u003c\/button\u003e \u003ca class=\"af-btn af-btn-secondary\" href=\"\/pages\/golf-towel-cleaning-science-grooves-debris-gsm-magnet-physics\"\u003eCleaning Science\u003c\/a\u003e \u003ca class=\"af-btn af-btn-secondary\" href=\"\/pages\/our-golf-gear-testing-design-standards\"\u003eTesting Standards\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"af-status\" data-af-status=\"\"\u003ePick a finish. I’ll sync the variant and force the gallery to switch.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"af-btn-wrap\"\u003e\n\u003ca class=\"af-btn af-btn-secondary\" href=\"\/pages\/strongest-magnetic-golf-towel-test-magna-anchor%E2%84%A2-vs-ghost-stickit-blue-tees\"\u003eHead-to-Head Test\u003c\/a\u003e \u003ca class=\"af-btn af-btn-secondary\" href=\"\/products\/magnetic-landing-pad\"\u003eAdd Landing Pad Dock\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"af-rule\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003ch2\u003eConflict: why most “big towels” still fail\u003c\/h2\u003e\n\u003cdiv class=\"af-grid\"\u003e\n\u003cdiv class=\"af-card\"\u003e\n\u003ch3 style=\"margin-top: .15rem;\"\u003eThe real failure mode\u003c\/h3\u003e\n\u003cp class=\"af-muted\" style=\"margin: .35rem 0 0;\"\u003eMost towels become useless for the same reason: once the “cleaning zone” gets wet and gritty, \u003cstrong\u003eeverything\u003c\/strong\u003e gets wet and gritty. Then you’re wiping grips with swamp water and wondering why the clubface still looks like a crime scene.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"af-card\"\u003e\n\u003ch3 style=\"margin-top: .15rem;\"\u003eThe fix The 40 is built around\u003c\/h3\u003e\n\u003cp class=\"af-muted\" style=\"margin: .35rem 0 0;\"\u003eThe 40 is engineered to keep tasks separated: \u003cstrong\u003etwo wash pockets\u003c\/strong\u003e for controlled moisture, a dedicated scrub pad for packed debris, and enough surface area to maintain a “clean side” through a full round.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch2\u003eJourney: the on-course workflow\u003c\/h2\u003e\n\u003cul class=\"af-list\"\u003e\n\u003cli\u003e\n\u003cstrong\u003eDock\u003c\/strong\u003e the towel in one consistent spot (Landing Pad recommended if your bag isn’t magnet-friendly).\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eWet one pocket\u003c\/strong\u003e for true cleaning tasks. Keep the rest of the towel drier for hands and grips.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eScrub\u003c\/strong\u003e compacted debris with the built-in pad (grooves + soles, where crud loves to hide).\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eFinish\u003c\/strong\u003e with waffle microfiber to lift debris and wipe faces\/balls clean.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eRe-dock\u003c\/strong\u003e to the center magnet. Same place, every time. Your brain stays on golf.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv class=\"af-card\" style=\"border-color: rgba(148,163,184,.22);\"\u003e\n\u003ch3 style=\"margin-top: .15rem;\"\u003eDefault Choice Logic\u003c\/h3\u003e\n\u003cp class=\"af-small\" style=\"margin: .35rem 0 0;\"\u003eChoose The 40 by default if you ride, play early dew, deal with mud\/sand, or want a real wet\/dry routine. Skip it if you want maximum compactness or you walk and hate any extra bulk on the bag.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"af-rule\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003ch2\u003eInsight: what makes The 40 different\u003c\/h2\u003e\n\u003cul class=\"af-list\"\u003e\n\u003cli\u003e\n\u003cstrong\u003e16×40 coverage:\u003c\/strong\u003e enough surface area to stay functional all round without “soaking out.”\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCenter magnet placement:\u003c\/strong\u003e balanced hang and faster re-dock (less swing, less drag, less chaos).\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCarabiner top-center:\u003c\/strong\u003e consistent grab point; towel behaves instead of flopping.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eScrub pad bottom-left (front):\u003c\/strong\u003e high-friction zone for compacted debris.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eTwo wash pockets (back):\u003c\/strong\u003e lower-left + lower-right for moisture control and separation.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eWaffle microfiber:\u003c\/strong\u003e built to lift debris instead of just smearing it.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv class=\"af-card\"\u003e\n\u003ch3 style=\"margin-top: .15rem;\"\u003eCare instructions (so it keeps working)\u003c\/h3\u003e\n\u003cp class=\"af-muted\" style=\"margin: .35rem 0 0;\"\u003eWash cold on low spin and air dry. Avoid high heat. Hot dryers can degrade microfiber performance over time. The magnet is integrated under a silicone patch for routine use and washing.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch2\u003eTransformation: what changes after you switch\u003c\/h2\u003e\n\u003cul class=\"af-list\"\u003e\n\u003cli\u003e\n\u003cstrong\u003eFewer wipe failures:\u003c\/strong\u003e you stop re-wiping because the towel is contaminated.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCleaner grips\/hands:\u003c\/strong\u003e because you’re not forced to use one wet gritty zone for everything.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLess mental noise:\u003c\/strong\u003e the towel has a home, and cleaning becomes automatic instead of annoying.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eMore predictable contact:\u003c\/strong\u003e clean grooves + clean face equals more consistent outcomes.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv class=\"af-btn-wrap\"\u003e\n\u003ca class=\"af-btn af-btn-secondary\" href=\"\/products\/magnetic-golf-towel-small-stubby-v2-with-scrub-pad\"\u003ePrefer Compact? Stubby\u003c\/a\u003e \u003ca class=\"af-btn af-btn-secondary\" href=\"\/products\/magnetic-landing-pad\"\u003eAdd the Landing Pad Dock\u003c\/a\u003e \u003ca class=\"af-btn af-btn-secondary\" href=\"\/collections\/magnetic-towels\"\u003eShop Magnetic Towels\u003c\/a\u003e \u003ca class=\"af-btn af-btn-secondary\" href=\"\/collections\/on-course-systems\"\u003eShop On-Course Systems\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"af-rule\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003ch2\u003eFAQ\u003c\/h2\u003e\n\u003csection class=\"af-faq\" aria-label=\"FAQ\"\u003e\n\u003cdetails\u003e\n\u003csummary\u003eIs The 40 too big for walking rounds?\u003c\/summary\u003e\n\u003cp\u003eIt can be, depending on your tolerance for bulk. The 40 is built for coverage and wet\/dry separation (cart golfers love it). If you want compact, pick the Stubby.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhy two wash pockets?\u003c\/summary\u003e\n\u003cp\u003eSo you can keep a true wet cleaning zone without soaking the entire towel. That separation is the whole point.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhere is the magnet on The 40?\u003c\/summary\u003e\n\u003cp\u003eCentered on the towel (horizontally and vertically) under the silicone logo patch, with a top-center loop and carabiner for predictable access.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eDo I need the Landing Pad?\u003c\/summary\u003e\n\u003cp\u003eIf your bag doesn’t give you a reliable magnetic “home,” the Landing Pad makes docking consistent. Consistency is what prevents drops, drag, and wandering towels.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eWhat’s the best “default” pick?\u003c\/summary\u003e\n\u003cp\u003eIf you ride or play wet\/variable conditions: The 40. If you want compact and light: Stubby.\u003c\/p\u003e\n\u003c\/details\u003e\n\u003c\/section\u003e\n\u003cscript type=\"application\/ld+json\"\u003e\n  {\n    \"@context\":\"https:\/\/schema.org\",\n    \"@type\":\"FAQPage\",\n    \"mainEntity\":[\n      {\"@type\":\"Question\",\"name\":\"Is The 40 too big for walking rounds?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"It can be, depending on your tolerance for bulk. The 40 is built for coverage and wet\/dry separation (cart golfers love it). If you want compact, pick the Stubby.\"}},\n      {\"@type\":\"Question\",\"name\":\"Why two wash pockets?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"So you can keep a true wet cleaning zone without soaking the entire towel. That separation is the whole point.\"}},\n      {\"@type\":\"Question\",\"name\":\"Where is the magnet on The 40?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Centered on the towel (horizontally and vertically) under the silicone logo patch, with a top-center loop and carabiner for predictable access.\"}},\n      {\"@type\":\"Question\",\"name\":\"Do I need the Landing Pad?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"If your bag doesn’t give you a reliable magnetic home, the Landing Pad makes docking consistent. Consistency helps prevent drops, drag, and wandering towels.\"}},\n      {\"@type\":\"Question\",\"name\":\"What’s the best default pick?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"If you ride or play wet\/variable conditions: The 40. If you want compact and light: Stubby.\"}}\n    ]\n  }\n  \u003c\/script\u003e\n\u003csection class=\"af-card\" style=\"border-color: rgba(34,197,94,.28); background: linear-gradient(180deg, rgba(34,197,94,.06), rgba(2,6,23,.22));\"\u003e\n\u003ch2 style=\"margin-top: 0;\"\u003eCall to action\u003c\/h2\u003e\n\u003cp class=\"af-muted\" style=\"margin: .65rem 0 0;\"\u003eStop letting a contaminated towel decide how clean your clubs are. If you want a large towel that behaves like a system, The 40 is the move.\u003c\/p\u003e\n\u003cdiv class=\"af-btn-wrap\"\u003e\n\u003cbutton type=\"button\" class=\"af-btn af-btn-primary\" data-af-atc=\"\"\u003e Add The 40 to Cart \u003c\/button\u003e \u003ca class=\"af-btn af-btn-secondary\" href=\"\/products\/magnetic-landing-pad\"\u003eAdd Landing Pad\u003c\/a\u003e \u003ca class=\"af-btn af-btn-secondary\" href=\"\/pages\/strongest-magnetic-golf-towel-test-magna-anchor%E2%84%A2-vs-ghost-stickit-blue-tees\"\u003eSee Test vs Ghost\u003c\/a\u003e \u003ca class=\"af-btn af-btn-secondary\" href=\"\/pages\/our-golf-gear-testing-design-standards\"\u003eRead Testing Standards\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cscript\u003e\n  (function(){\n    \/\/ Finish -\u003e Image mapping\n    const finishToImage = {\n      \"Green\": \"https:\/\/cdn.shopify.com\/s\/files\/1\/0555\/0830\/3915\/files\/mAIN_IMAGE_UPDATE_29.jpg?v=1767904750\",\n      \"Grey\":  \"https:\/\/cdn.shopify.com\/s\/files\/1\/0555\/0830\/3915\/files\/mAIN_IMAGE_UPDATE_26.jpg?v=1764811297\",\n      \"Blue\":  \"https:\/\/cdn.shopify.com\/s\/files\/1\/0555\/0830\/3915\/files\/mAIN_IMAGE_UPDATE_27.jpg?v=1767904750\",\n      \"Black\": \"https:\/\/cdn.shopify.com\/s\/files\/1\/0555\/0830\/3915\/files\/mAIN_IMAGE_UPDATE_28.jpg?v=1767904750\"\n    };\n\n    const scope = document.getElementById('af-the40-pdp');\n    if(!scope) return;\n\n    const module = scope.querySelector('[data-af-variant-sync]');\n    if(!module) return;\n\n    const status = module.querySelector('[data-af-status]');\n    const swatches = Array.from(module.querySelectorAll('[data-af-finish]'));\n    const atcButtons = Array.from(scope.querySelectorAll('[data-af-atc]'));\n\n    function setStatus(msg){ if(status) status.textContent = msg; }\n    function norm(s){ return (s||'').toLowerCase().replace(\/\\s+\/g,' ').trim(); }\n    function stripQuery(url){ return (url||'').split('?')[0]; }\n\n    \/\/ Find Shopify variant select\n    const variantSelect =\n      document.querySelector('form[action^=\"\/cart\/add\"] select[name=\"id\"]') ||\n      document.querySelector('form[action*=\"\/cart\/add\"] select[name=\"id\"]') ||\n      document.querySelector('select[name=\"id\"]');\n\n    \/\/ Find native add to cart in theme (we click it, we don't reinvent it)\n    const nativeAtc =\n      document.querySelector('form[action^=\"\/cart\/add\"] button[type=\"submit\"], form[action^=\"\/cart\/add\"] [type=\"submit\"]') ||\n      document.querySelector('form[action*=\"\/cart\/add\"] button[type=\"submit\"], form[action*=\"\/cart\/add\"] [type=\"submit\"]') ||\n      document.querySelector('button[name=\"add\"], button[type=\"submit\"][name=\"add\"]');\n\n    function findOptionByFinish(finishLabel){\n      if(!variantSelect || !variantSelect.options) return null;\n      const f = norm(finishLabel);\n      return Array.from(variantSelect.options).find(o =\u003e norm(o.text).includes(f)) || null;\n    }\n\n    function setSelectedSwatch(finishLabel){\n      swatches.forEach(btn =\u003e btn.setAttribute('aria-selected', btn.dataset.afFinish === finishLabel ? 'true' : 'false'));\n    }\n\n    \/\/ Keep us inside the product area to avoid clicking random images elsewhere\n    function getProductRoot(){\n      const addForm = document.querySelector('form[action^=\"\/cart\/add\"], form[action*=\"\/cart\/add\"]');\n      if(addForm) return addForm.closest('section, .shopify-section, main, body') || document;\n      return document;\n    }\n\n    \/\/ Best strategy: click the actual gallery thumbnail\/media control that contains the image URL\n    function clickGalleryItemByUrl(url){\n      const root = getProductRoot();\n      const target = stripQuery(url);\n\n      const candidates = Array.from(root.querySelectorAll(\n        'button, a, img, source, [data-src], [data-zoom], [data-image], [href]'\n      ));\n\n      for(const el of candidates){\n        const attrs = [\n          el.getAttribute('src'),\n          el.getAttribute('href'),\n          el.getAttribute('data-src'),\n          el.getAttribute('data-zoom'),\n          el.getAttribute('data-image'),\n          el.getAttribute('srcset')\n        ].filter(Boolean);\n\n        if(attrs.some(a =\u003e stripQuery(a).includes(target))){\n          const clickable = el.closest('button, a') || ((el.tagName === 'BUTTON' || el.tagName === 'A') ? el : null);\n          if(clickable){\n            clickable.click();\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    \/\/ Fallback: brute swap active media nodes\n    function bruteSwapActiveMedia(url, finishLabel){\n      const root = getProductRoot();\n      const imgCandidates = [];\n\n      const activeWrappers = Array.from(root.querySelectorAll(\n        '[aria-current=\"true\"], .is-selected, .is-active, .active, [data-active=\"true\"], [data-selected=\"true\"]'\n      ));\n\n      activeWrappers.forEach(w =\u003e {\n        imgCandidates.push(...Array.from(w.querySelectorAll('img')));\n        const pics = Array.from(w.querySelectorAll('picture'));\n        pics.forEach(p =\u003e {\n          Array.from(p.querySelectorAll('source')).forEach(s =\u003e s.setAttribute('srcset', url));\n        });\n      });\n\n      if(imgCandidates.length === 0){\n        imgCandidates.push(...Array.from(root.querySelectorAll('img')).filter(i =\u003e {\n          const s = (i.getAttribute('src') || '');\n          return s.includes('cdn.shopify.com') \u0026\u0026 !s.includes('logo') \u0026\u0026 !s.includes('icon');\n        }).slice(0, 3));\n      }\n\n      if(imgCandidates.length === 0) return false;\n\n      imgCandidates.forEach(img =\u003e {\n        img.src = url;\n        img.removeAttribute('srcset');\n        img.removeAttribute('sizes');\n        const oldAlt = img.getAttribute('alt') || 'Magna-Anchor The 40 towel';\n        const baseAlt = oldAlt.split('—')[0].trim();\n        img.setAttribute('alt', baseAlt + ' — ' + finishLabel);\n      });\n\n      return true;\n    }\n\n    function selectFinish(finishLabel){\n      const url = finishToImage[finishLabel];\n      if(!url){\n        setSelectedSwatch(finishLabel);\n        setStatus('Selected: ' + finishLabel + '. No image mapped.');\n        return;\n      }\n\n      \/\/ 1) Sync actual Shopify variant\n      if(variantSelect){\n        const opt = findOptionByFinish(finishLabel);\n        if(opt){\n          variantSelect.value = opt.value;\n          variantSelect.dispatchEvent(new Event('change', { bubbles:true }));\n        }\n      }\n\n      \/\/ 2) Force gallery switch\n      setSelectedSwatch(finishLabel);\n\n      const clicked = clickGalleryItemByUrl(url);\n\n      setTimeout(() =\u003e {\n        if(clicked){\n          setStatus('Selected: ' + finishLabel + '.');\n          return;\n        }\n        const ok = bruteSwapActiveMedia(url, finishLabel);\n        setStatus(ok\n          ? ('Selected: ' + finishLabel + '.')\n          : ('Selected: ' + finishLabel + '. Gallery element not found in this theme.')\n        );\n      }, 80);\n    }\n\n    \/\/ Swatch clicks\n    swatches.forEach(btn =\u003e btn.addEventListener('click', () =\u003e selectFinish(btn.dataset.afFinish)));\n\n    \/\/ ATC clicks\n    atcButtons.forEach(btn =\u003e {\n      btn.addEventListener('click', () =\u003e {\n        if(nativeAtc){ nativeAtc.click(); }\n        else { setStatus('Theme Add to Cart button not found. Use the main Add to Cart above.'); window.scrollTo({ top: 0, behavior: 'smooth' }); }\n      });\n    });\n\n    setStatus('Pick a finish. I’ll sync the variant and force the gallery to switch.');\n  })();\n  \u003c\/script\u003e\n\u003c\/div\u003e","brand":"Aiming Fluid Golf","offers":[{"title":"Black","offer_id":51392264241448,"sku":"AFMLT2-B","price":39.69,"currency_code":"USD","in_stock":true},{"title":"Blue","offer_id":51392264274216,"sku":"AFMLT2-BL","price":39.69,"currency_code":"USD","in_stock":true},{"title":"Grey","offer_id":51392264306984,"sku":"AFMLT2-G","price":39.69,"currency_code":"USD","in_stock":true},{"title":"Green","offer_id":51392264339752,"sku":"AFMLT2-GR","price":39.69,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0854\/2152\/3240\/files\/mAIN_IMAGE_UPDATE_26.jpg?v=1778891261","url":"https:\/\/www.golfleaguellc.com\/products\/magna-anchor%e2%84%a2-magnetic-golf-towel-the-40-16-40","provider":"GOLF LEAGUE","version":"1.0","type":"link"}