{"title":"Racquet Grip","description":"","products":[{"product_id":"adhesa-grip","title":"Adhesa Grip (tacky overgrip)","description":"\u003cbody\u003e\n  \u003cmeta http-equiv=\"Content-Type\" content=\"text\/html; charset=iso-8859-1\"\u003e\n  \u003ctitle\u003eAdhesa Grip (overgrip)\u003c\/title\u003e\n  \u003cstyle type=\"text\/css\"\u003e\n    * {\n      box-sizing: border-box;\n    }\n    body {\n      font-size: 13px;\n      color: #333;\n      margin: 0;\n      background: #fff;\n    }\n    a {\n      color: #1a6496;\n      text-decoration: none;\n      cursor: pointer;\n    }\n    a:hover {\n      text-decoration: underline;\n    }\n\n    \/* ── Intro ── *\/\n    #intro-wrap {\n      font-size: 13px;\n      line-height: 1.6;\n      margin-bottom: 8px;\n    }\n\n    \/* Extra content that expands *\/\n    #intro-extra {\n      display: inline;\n    }\n    #intro-extra-wrap {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition:\n        max-height 0.45s ease,\n        opacity 0.4s ease;\n      display: block;\n    }\n    #intro-extra-wrap.open {\n      max-height: 300px;\n      opacity: 1;\n    }\n\n    #intro-set-link {\n      margin-top: 5px;\n    }\n\n    .toggle-link {\n      color: #1a6496;\n      cursor: pointer;\n      font-size: 13px;\n      white-space: nowrap;\n    }\n    .toggle-link:hover {\n      text-decoration: underline;\n    }\n\n    \/* ── Accordion ── *\/\n    .acc-wrapper {\n      background: #f5f5f5;\n      margin-top: 4px;\n    }\n\n    .acc-header {\n      background: #e8e8e8;\n      padding: 8px 12px;\n      font-size: 13px;\n      font-weight: bold;\n      cursor: pointer;\n      color: #333;\n      user-select: none;\n      transition: background 0.2s;\n    }\n    .acc-header:hover {\n      background: #ddd;\n    }\n\n    .acc-body {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition:\n        max-height 0.42s ease,\n        opacity 0.35s ease,\n        padding 0.3s ease;\n      padding: 0 14px;\n      line-height: 1.7;\n      font-size: 13px;\n      background: #fff;\n    }\n    .acc-body.open {\n      max-height: 600px;\n      opacity: 1;\n      padding: 12px 14px;\n    }\n\n    \/* ── Question mark icon ── *\/\n    .q-icon {\n      display: inline-block;\n      width: 13px;\n      height: 13px;\n      background: #fff;\n      color: #a07800;\n      font-size: 9px;\n      font-weight: bold;\n      text-align: center;\n      line-height: 13px;\n      cursor: pointer;\n      margin-left: 3px;\n      vertical-align: middle;\n      border: 1px solid #a07800;\n      border-radius: 1px;\n    }\n    .q-icon:hover {\n      background: #a07800;\n      color: #fff;\n    }\n\n    \/* ── Modal Overlay ── *\/\n    #modal-overlay {\n      display: none;\n      position: fixed;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background: rgba(0, 0, 0, 0);\n      z-index: 9998;\n      transition: background 0.3s ease;\n    }\n    #modal-overlay.visible {\n      background: rgba(0, 0, 0, 0.55);\n    }\n\n    \/* ── Modal Box ── *\/\n    .modal-box {\n      display: none;\n      position: fixed;\n      top: 50%;\n      left: 50%;\n      transform: translate(-50%, -56%) scale(0.92);\n      background: #fff;\n      width: 290px;\n      padding: 20px 22px 18px 22px;\n      z-index: 9999;\n      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);\n      opacity: 0;\n      transition:\n        opacity 0.28s ease,\n        transform 0.28s ease;\n    }\n    .modal-box.visible {\n      opacity: 1;\n      transform: translate(-50%, -50%) scale(1);\n    }\n\n    .modal-close {\n      position: absolute;\n      top: 6px;\n      right: 6px;\n      width: 20px;\n      height: 20px;\n      background: #888;\n      color: #fff;\n      font-size: 13px;\n      font-weight: bold;\n      line-height: 20px;\n      text-align: center;\n      cursor: pointer;\n      border-radius: 2px;\n      user-select: none;\n    }\n    .modal-close:hover {\n      background: #555;\n    }\n\n    .modal-title {\n      font-size: 16px;\n      font-weight: bold;\n      color: #222;\n      margin: 0 0 14px 0;\n      line-height: 1.35;\n      padding-right: 18px;\n    }\n\n    .modal-item {\n      margin-bottom: 11px;\n      font-size: 13px;\n      line-height: 1.45;\n      color: #333;\n    }\n    .modal-item .num {\n      color: #c8a200;\n      font-weight: bold;\n      font-style: italic;\n    }\n\n    .modal-more-link {\n      display: block;\n      color: #c8a200;\n      font-size: 13px;\n      text-decoration: underline;\n      margin-top: 12px;\n      margin-bottom: 14px;\n    }\n    .modal-more-link:hover {\n      color: #a07800;\n    }\n\n    .modal-logo {\n      text-align: center;\n      border-top: 1px solid #e5e5e5;\n      padding-top: 12px;\n      margin-top: 8px;\n    }\n    .modal-logo img {\n      display: block;\n      margin: 0 auto;\n      max-width: 200px;\n      height: auto;\n    }\n  \u003c\/style\u003e\n\n  \u003c!-- ══ INTRO TEXT ══ --\u003e\n  \u003cdiv id=\"intro-wrap\"\u003e\n    \u003c!-- Preview: shown when collapsed --\u003e\n    \u003cspan id=\"intro-preview\"\u003eDESCRIPTION: Premium quality extra tacky over-grip. Durable,\n      \u003ca class=\"toggle-link\" id=\"link-more\" onclick=\"introOpen()\"\u003e\n        more\u003c\/a\u003e\u003c\/span\u003e\n\n    \u003c!-- Full text: shown when expanded, hidden when collapsed --\u003e\n    \u003cdiv id=\"intro-extra-wrap\"\u003e\n      DESCRIPTION: Premium quality extra tacky over-grip. Durable, comfortable\n      and thin.\u003cbr\u003e\n      \u003ca class=\"toggle-link\" id=\"link-less\" onclick=\"introClose()\"\u003e less\u003c\/a\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ══ ACCORDION ══ --\u003e\n  \u003cdiv class=\"acc-wrapper\"\u003e\n    \u003cdiv class=\"acc-header\" id=\"spec-header\" onclick=\"toggleAcc()\"\u003e\n      Specifications\n    \u003c\/div\u003e\n    \u003cdiv class=\"acc-body\" id=\"spec-body\"\u003e\n      DIMENSIONS: : (WxLxT): 26mm x 1050mm x\u003cbr\u003e\n      0.60mm (1.02\" x 41.4\" x .023\")\n      \u003cbr\u003e\n      \u003cbr\u003e\n      COLORS: White or Black (includes gold finishing tape)\u003cbr\u003e\u003cbr\u003e\n      \u003c!-- AVAILABLE IN: 15-packs (re-sealable zip lock) or Buckets of 60 Overgrips --\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ══ OVERLAY ══ --\u003e\n  \u003cdiv id=\"modal-overlay\" onclick=\"closeAllModals()\"\u003e\u003c\/div\u003e\n\n  \u003cscript type=\"text\/javascript\"\u003e\n    var extraWrap = document.getElementById(\"intro-extra-wrap\");\n    var previewSpan = document.getElementById(\"intro-preview\");\n\n    function introOpen() {\n      previewSpan.style.display = \"none\"; \/* hide preview line *\/\n      extraWrap.classList.add(\"open\"); \/* expand full text with animation *\/\n    }\n\n    function introClose() {\n      extraWrap.classList.remove(\n        \"open\",\n      ); \/* collapse full text with animation *\/\n\n      \/* Animation complete hole preview line fire ashe transitionend listener diye *\/\n      var onTransitionEnd = function (e) {\n        if (e.propertyName === \"max-height\") {\n          previewSpan.style.display = \"inline\";\n          extraWrap.removeEventListener(\"transitionend\", onTransitionEnd);\n        }\n      };\n      extraWrap.addEventListener(\"transitionend\", onTransitionEnd);\n\n      \/* Fallback for safety *\/\n      setTimeout(function () {\n        if (!extraWrap.classList.contains(\"open\")) {\n          previewSpan.style.display = \"inline\";\n        }\n      }, 500);\n    }\n\n    \/* ── Accordion ── *\/\n    var accOpen = false;\n    function toggleAcc() {\n      accOpen = !accOpen;\n      var specBody = document.getElementById(\"spec-body\");\n      specBody.classList.toggle(\"open\", accOpen);\n    }\n\n    \/* ── Modals ── *\/\n    function openModal(id) {\n      closeAllModals(false);\n      var overlay = document.getElementById(\"modal-overlay\");\n      var box = document.getElementById(id);\n      overlay.style.display = \"block\";\n      box.style.display = \"block\";\n      box.offsetHeight; \/* force reflow *\/\n      overlay.classList.add(\"visible\");\n      box.classList.add(\"visible\");\n    }\n\n    function closeAllModals(animate) {\n      var overlay = document.getElementById(\"modal-overlay\");\n      var modals = document.querySelectorAll(\".modal-box\");\n      if (animate === false) {\n        overlay.style.display = \"none\";\n        overlay.classList.remove(\"visible\");\n        for (var i = 0; i \u003c modals.length; i++) {\n          modals[i].style.display = \"none\";\n          modals[i].classList.remove(\"visible\");\n        }\n        return;\n      }\n      overlay.classList.remove(\"visible\");\n      for (var i = 0; i \u003c modals.length; i++) {\n        modals[i].classList.remove(\"visible\");\n      }\n      setTimeout(function () {\n        overlay.style.display = \"none\";\n        for (var j = 0; j \u003c modals.length; j++) {\n          modals[j].style.display = \"none\";\n        }\n      }, 300);\n    }\n\n    document.addEventListener(\"keydown\", function (e) {\n      if (e.key === \"Escape\") closeAllModals();\n    });\n  \u003c\/script\u003e\n\u003c\/body\u003e","brand":"goldensettennis","offers":[{"title":"Adhesa Grip Bucket White -WA60","offer_id":50797155418398,"sku":"WA60","price":59.9,"currency_code":"USD","in_stock":true},{"title":"Adhesa Grip Bucket Black -BA60","offer_id":50797155451166,"sku":"BA60","price":59.9,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0990\/5615\/6958\/files\/ADHESA_GRIP_TACKY_OVER_GRIP.jpg?v=1776402228"},{"product_id":"elan-grip-replacement-grip","title":"Elan Grip (replacement grip), 12-Packs","description":"\u003cbody\u003e\n  \u003cmeta http-equiv=\"Content-Type\" content=\"text\/html; charset=iso-8859-1\"\u003e\n  \u003ctitle\u003eElan Grip\u003c\/title\u003e\n  \u003cstyle type=\"text\/css\"\u003e\n    * {\n      box-sizing: border-box;\n    }\n    body {\n      font-size: 13px;\n      color: #333;\n      margin: 0;\n      background: #fff;\n    }\n    a {\n      color: #1a6496;\n      text-decoration: none;\n      cursor: pointer;\n    }\n    a:hover {\n      text-decoration: underline;\n    }\n\n    \/* ── Intro ── *\/\n    #intro-wrap {\n      font-size: 13px;\n      line-height: 1.6;\n      margin-bottom: 8px;\n    }\n\n    \/* Extra content that expands *\/\n    #intro-extra {\n      display: inline;\n    }\n    #intro-extra-wrap {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition:\n        max-height 0.45s ease,\n        opacity 0.4s ease;\n      display: block;\n    }\n    #intro-extra-wrap.open {\n      max-height: 300px;\n      opacity: 1;\n    }\n\n    #intro-set-link {\n      margin-top: 5px;\n    }\n\n    .toggle-link {\n      color: #1a6496;\n      cursor: pointer;\n      font-size: 13px;\n      white-space: nowrap;\n    }\n    .toggle-link:hover {\n      text-decoration: underline;\n    }\n\n    \/* ── Accordion ── *\/\n    .acc-wrapper {\n      background: #f5f5f5;\n      margin-top: 4px;\n    }\n\n    .acc-header {\n      background: #e8e8e8;\n      padding: 8px 12px;\n      font-size: 13px;\n      font-weight: bold;\n      cursor: pointer;\n      color: #333;\n      user-select: none;\n      transition: background 0.2s;\n    }\n    .acc-header:hover {\n      background: #ddd;\n    }\n\n    .acc-body {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition:\n        max-height 0.42s ease,\n        opacity 0.35s ease,\n        padding 0.3s ease;\n      padding: 0 14px;\n      line-height: 1.7;\n      font-size: 13px;\n      background: #fff;\n    }\n    .acc-body.open {\n      max-height: 600px;\n      opacity: 1;\n      padding: 12px 14px;\n    }\n\n    \/* ── Question mark icon ── *\/\n    .q-icon {\n      display: inline-block;\n      width: 13px;\n      height: 13px;\n      background: #fff;\n      color: #a07800;\n      font-size: 9px;\n      font-weight: bold;\n      text-align: center;\n      line-height: 13px;\n      cursor: pointer;\n      margin-left: 3px;\n      vertical-align: middle;\n      border: 1px solid #a07800;\n      border-radius: 1px;\n    }\n    .q-icon:hover {\n      background: #a07800;\n      color: #fff;\n    }\n\n    \/* ── Modal Overlay ── *\/\n    #modal-overlay {\n      display: none;\n      position: fixed;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background: rgba(0, 0, 0, 0);\n      z-index: 9998;\n      transition: background 0.3s ease;\n    }\n    #modal-overlay.visible {\n      background: rgba(0, 0, 0, 0.55);\n    }\n\n    \/* ── Modal Box ── *\/\n    .modal-box {\n      display: none;\n      position: fixed;\n      top: 50%;\n      left: 50%;\n      transform: translate(-50%, -56%) scale(0.92);\n      background: #fff;\n      width: 290px;\n      padding: 20px 22px 18px 22px;\n      z-index: 9999;\n      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);\n      opacity: 0;\n      transition:\n        opacity 0.28s ease,\n        transform 0.28s ease;\n    }\n    .modal-box.visible {\n      opacity: 1;\n      transform: translate(-50%, -50%) scale(1);\n    }\n\n    .modal-close {\n      position: absolute;\n      top: 6px;\n      right: 6px;\n      width: 20px;\n      height: 20px;\n      background: #888;\n      color: #fff;\n      font-size: 13px;\n      font-weight: bold;\n      line-height: 20px;\n      text-align: center;\n      cursor: pointer;\n      border-radius: 2px;\n      user-select: none;\n    }\n    .modal-close:hover {\n      background: #555;\n    }\n\n    .modal-title {\n      font-size: 16px;\n      font-weight: bold;\n      color: #222;\n      margin: 0 0 14px 0;\n      line-height: 1.35;\n      padding-right: 18px;\n    }\n\n    .modal-item {\n      margin-bottom: 11px;\n      font-size: 13px;\n      line-height: 1.45;\n      color: #333;\n    }\n    .modal-item .num {\n      color: #c8a200;\n      font-weight: bold;\n      font-style: italic;\n    }\n\n    .modal-more-link {\n      display: block;\n      color: #c8a200;\n      font-size: 13px;\n      text-decoration: underline;\n      margin-top: 12px;\n      margin-bottom: 14px;\n    }\n    .modal-more-link:hover {\n      color: #a07800;\n    }\n\n    .modal-logo {\n      text-align: center;\n      border-top: 1px solid #e5e5e5;\n      padding-top: 12px;\n      margin-top: 8px;\n    }\n    .modal-logo img {\n      display: block;\n      margin: 0 auto;\n      max-width: 200px;\n      height: auto;\n    }\n  \u003c\/style\u003e\n\n  \u003c!-- ══ INTRO TEXT ══ --\u003e\n  \u003cdiv id=\"intro-wrap\"\u003e\n    \u003c!-- Preview: shown when collapsed --\u003e\n    \u003cspan id=\"intro-preview\"\u003eDESCRIPTION: Premium quality perforated replacement grip with a nice\n      combination of tack and cushion.\u003ca class=\"toggle-link\" id=\"link-more\" onclick=\"introOpen()\"\u003e\n        more\u003c\/a\u003e\u003c\/span\u003e\n\n    \u003c!-- Full text: shown when expanded, hidden when collapsed --\u003e\n    \u003cdiv id=\"intro-extra-wrap\"\u003e\n      DESCRIPTION: Premium quality perforated replacement grip with a nice\n      combination of tack and cushion. Durable and comfortable. Adhesive\n      backing.\u003cbr\u003e\n      \u003ca class=\"toggle-link\" id=\"link-less\" onclick=\"introClose()\"\u003e less\u003c\/a\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ══ ACCORDION ══ --\u003e\n  \u003cdiv class=\"acc-wrapper\"\u003e\n    \u003cdiv class=\"acc-header\" id=\"spec-header\" onclick=\"toggleAcc()\"\u003e\n      Specifications\n    \u003c\/div\u003e\n    \u003cdiv class=\"acc-body\" id=\"spec-body\"\u003e\n      DIMENSIONS: : (W x L x T): 25mm x 1100mm x \u003cbr\u003e\n      1.80mm (.98\" x 43.3\" x .071\")\n      \u003cbr\u003e\n      \u003cbr\u003e\n      COLORS: Black (includes black finishing tape)\u003cbr\u003e\u003cbr\u003e\n      \u003c!-- AVAILABLE IN: 12-Packs --\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ══ OVERLAY ══ --\u003e\n  \u003cdiv id=\"modal-overlay\" onclick=\"closeAllModals()\"\u003e\u003c\/div\u003e\n\n  \u003cscript type=\"text\/javascript\"\u003e\n    var extraWrap = document.getElementById(\"intro-extra-wrap\");\n    var previewSpan = document.getElementById(\"intro-preview\");\n\n    function introOpen() {\n      previewSpan.style.display = \"none\"; \/* hide preview line *\/\n      extraWrap.classList.add(\"open\"); \/* expand full text with animation *\/\n    }\n\n    function introClose() {\n      extraWrap.classList.remove(\n        \"open\",\n      ); \/* collapse full text with animation *\/\n\n      \/* Animation complete hole preview line fire ashe transitionend listener diye *\/\n      var onTransitionEnd = function (e) {\n        if (e.propertyName === \"max-height\") {\n          previewSpan.style.display = \"inline\";\n          extraWrap.removeEventListener(\"transitionend\", onTransitionEnd);\n        }\n      };\n      extraWrap.addEventListener(\"transitionend\", onTransitionEnd);\n\n      \/* Fallback for safety *\/\n      setTimeout(function () {\n        if (!extraWrap.classList.contains(\"open\")) {\n          previewSpan.style.display = \"inline\";\n        }\n      }, 500);\n    }\n\n    \/* ── Accordion ── *\/\n    var accOpen = false;\n    function toggleAcc() {\n      accOpen = !accOpen;\n      var specBody = document.getElementById(\"spec-body\");\n      specBody.classList.toggle(\"open\", accOpen);\n    }\n\n    \/* ── Modals ── *\/\n    function openModal(id) {\n      closeAllModals(false);\n      var overlay = document.getElementById(\"modal-overlay\");\n      var box = document.getElementById(id);\n      overlay.style.display = \"block\";\n      box.style.display = \"block\";\n      box.offsetHeight; \/* force reflow *\/\n      overlay.classList.add(\"visible\");\n      box.classList.add(\"visible\");\n    }\n\n    function closeAllModals(animate) {\n      var overlay = document.getElementById(\"modal-overlay\");\n      var modals = document.querySelectorAll(\".modal-box\");\n      if (animate === false) {\n        overlay.style.display = \"none\";\n        overlay.classList.remove(\"visible\");\n        for (var i = 0; i \u003c modals.length; i++) {\n          modals[i].style.display = \"none\";\n          modals[i].classList.remove(\"visible\");\n        }\n        return;\n      }\n      overlay.classList.remove(\"visible\");\n      for (var i = 0; i \u003c modals.length; i++) {\n        modals[i].classList.remove(\"visible\");\n      }\n      setTimeout(function () {\n        overlay.style.display = \"none\";\n        for (var j = 0; j \u003c modals.length; j++) {\n          modals[j].style.display = \"none\";\n        }\n      }, 300);\n    }\n\n    document.addEventListener(\"keydown\", function (e) {\n      if (e.key === \"Escape\") closeAllModals();\n    });\n  \u003c\/script\u003e\n\n\u003c\/body\u003e","brand":"goldensettennis","offers":[{"title":"Elan Grip Black 12-Pack -EB12","offer_id":50797148537118,"sku":"EB12","price":38.38,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0990\/5615\/6958\/files\/ELAN_GRIP_REPLACEMENT_GRIP.jpg?v=1776401422"},{"product_id":"hydrex-grip-absorbent-overgrip","title":"Hydrex Grip (absorbent overgrip)","description":"\u003cp\u003e \u003c\/p\u003e\n\u003cstyle type=\"text\/css\"\u003e\n    * {\n      box-sizing: border-box;\n    }\n    body {\n      font-size: 13px;\n      color: #333;\n      margin: 0;\n      background: #fff;\n    }\n    a {\n      color: #1a6496;\n      text-decoration: none;\n      cursor: pointer;\n    }\n    a:hover {\n      text-decoration: underline;\n    }\n\n    \/* ── Intro ── *\/\n    #intro-wrap {\n      font-size: 13px;\n      line-height: 1.6;\n      margin-bottom: 8px;\n    }\n\n    \/* Extra content that expands *\/\n    #intro-extra {\n      display: inline;\n    }\n    #intro-extra-wrap {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition:\n        max-height 0.45s ease,\n        opacity 0.4s ease;\n      display: block;\n    }\n    #intro-extra-wrap.open {\n      max-height: 300px;\n      opacity: 1;\n    }\n\n    #intro-set-link {\n      margin-top: 5px;\n    }\n\n    .toggle-link {\n      color: #1a6496;\n      cursor: pointer;\n      font-size: 13px;\n      white-space: nowrap;\n    }\n    .toggle-link:hover {\n      text-decoration: underline;\n    }\n\n    \/* ── Accordion ── *\/\n    .acc-wrapper {\n      background: #f5f5f5;\n      margin-top: 4px;\n    }\n\n    .acc-header {\n      background: #e8e8e8;\n      padding: 8px 12px;\n      font-size: 13px;\n      font-weight: bold;\n      cursor: pointer;\n      color: #333;\n      user-select: none;\n      transition: background 0.2s;\n    }\n    .acc-header:hover {\n      background: #ddd;\n    }\n\n    .acc-body {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition:\n        max-height 0.42s ease,\n        opacity 0.35s ease,\n        padding 0.3s ease;\n      padding: 0 14px;\n      line-height: 1.7;\n      font-size: 13px;\n      background: #fff;\n    }\n    .acc-body.open {\n      max-height: 600px;\n      opacity: 1;\n      padding: 12px 14px;\n    }\n\n    \/* ── Question mark icon ── *\/\n    .q-icon {\n      display: inline-block;\n      width: 13px;\n      height: 13px;\n      background: #fff;\n      color: #a07800;\n      font-size: 9px;\n      font-weight: bold;\n      text-align: center;\n      line-height: 13px;\n      cursor: pointer;\n      margin-left: 3px;\n      vertical-align: middle;\n      border: 1px solid #a07800;\n      border-radius: 1px;\n    }\n    .q-icon:hover {\n      background: #a07800;\n      color: #fff;\n    }\n\n    \/* ── Modal Overlay ── *\/\n    #modal-overlay {\n      display: none;\n      position: fixed;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background: rgba(0, 0, 0, 0);\n      z-index: 9998;\n      transition: background 0.3s ease;\n    }\n    #modal-overlay.visible {\n      background: rgba(0, 0, 0, 0.55);\n    }\n\n    \/* ── Modal Box ── *\/\n    .modal-box {\n      display: none;\n      position: fixed;\n      top: 50%;\n      left: 50%;\n      transform: translate(-50%, -56%) scale(0.92);\n      background: #fff;\n      width: 290px;\n      padding: 20px 22px 18px 22px;\n      z-index: 9999;\n      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);\n      opacity: 0;\n      transition:\n        opacity 0.28s ease,\n        transform 0.28s ease;\n    }\n    .modal-box.visible {\n      opacity: 1;\n      transform: translate(-50%, -50%) scale(1);\n    }\n\n    .modal-close {\n      position: absolute;\n      top: 6px;\n      right: 6px;\n      width: 20px;\n      height: 20px;\n      background: #888;\n      color: #fff;\n      font-size: 13px;\n      font-weight: bold;\n      line-height: 20px;\n      text-align: center;\n      cursor: pointer;\n      border-radius: 2px;\n      user-select: none;\n    }\n    .modal-close:hover {\n      background: #555;\n    }\n\n    .modal-title {\n      font-size: 16px;\n      font-weight: bold;\n      color: #222;\n      margin: 0 0 14px 0;\n      line-height: 1.35;\n      padding-right: 18px;\n    }\n\n    .modal-item {\n      margin-bottom: 11px;\n      font-size: 13px;\n      line-height: 1.45;\n      color: #333;\n    }\n    .modal-item .num {\n      color: #c8a200;\n      font-weight: bold;\n      font-style: italic;\n    }\n\n    .modal-more-link {\n      display: block;\n      color: #c8a200;\n      font-size: 13px;\n      text-decoration: underline;\n      margin-top: 12px;\n      margin-bottom: 14px;\n    }\n    .modal-more-link:hover {\n      color: #a07800;\n    }\n\n    .modal-logo {\n      text-align: center;\n      border-top: 1px solid #e5e5e5;\n      padding-top: 12px;\n      margin-top: 8px;\n    }\n    .modal-logo img {\n      display: block;\n      margin: 0 auto;\n      max-width: 200px;\n      height: auto;\n    }\n  \u003c\/style\u003e\n\u003c!-- ══ INTRO TEXT ══ --\u003e\n\u003cdiv id=\"intro-wrap\"\u003e\n\u003c!-- Preview: shown when collapsed --\u003e \u003cspan id=\"intro-preview\"\u003eDESCRIPTION: Premium quality extra absorbent over-grip with moderate tack.....\u003ca class=\"toggle-link\" id=\"link-more\"\u003e more\u003c\/a\u003e\u003c\/span\u003e \u003c!-- Full text: shown when expanded, hidden when collapsed --\u003e\n\u003cdiv id=\"intro-extra-wrap\"\u003ePremium quality extra absorbent over-grip with moderate tack. Durable, comfortable and thin.\u003cbr\u003e\u003ca class=\"toggle-link\" id=\"link-less\"\u003e less\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- ══ ACCORDION ══ --\u003e\n\u003cdiv class=\"acc-wrapper\"\u003e\n\u003cdiv class=\"acc-header\" id=\"spec-header\"\u003eSpecifications\u003c\/div\u003e\n\u003cdiv class=\"acc-body\" id=\"spec-body\"\u003eDIMENSIONS: (W x L x T): 29mm x 1050mm x \u003cbr\u003e0.60mm (1.14\" x 41.4\" x .023\") \u003cbr\u003e\u003cbr\u003eCOLORS: Dark Grey (includes gold finishing tape)\u003cbr\u003e\u003cbr\u003e\u003c!-- AVAILABLE IN: 15-packs (re-sealable zip lock) or Buckets of 60 Overgrips --\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- ══ OVERLAY ══ --\u003e\n\u003cdiv id=\"modal-overlay\"\u003e\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e","brand":"Golden Set ","offers":[{"title":"Hydrex Grip Bucket Dark Grey -HG60","offer_id":50802159845662,"sku":"HG60","price":59.9,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0990\/5615\/6958\/files\/download_23.png?v=1776665493"},{"product_id":"secure-grip-replacement-grip-12-packs","title":"Secure Grip (replacement grip), 12-Packs","description":"\u003cbody\u003e\n  \u003cmeta http-equiv=\"Content-Type\" content=\"text\/html; charset=iso-8859-1\"\u003e\n  \u003ctitle\u003eGolden Set Dampener - Golden Set Tennis\u003c\/title\u003e\n  \u003cstyle type=\"text\/css\"\u003e\n    * {\n      box-sizing: border-box;\n    }\n    body {\n      font-size: 13px;\n      color: #333;\n      margin: 0;\n      background: #fff;\n    }\n    a {\n      color: #1a6496;\n      text-decoration: none;\n      cursor: pointer;\n    }\n    a:hover {\n      text-decoration: underline;\n    }\n\n    \/* ── Intro ── *\/\n    #intro-wrap {\n      font-size: 13px;\n      line-height: 1.6;\n      margin-bottom: 8px;\n    }\n\n    \/* Extra content that expands *\/\n    #intro-extra {\n      display: inline;\n    }\n    #intro-extra-wrap {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition:\n        max-height 0.45s ease,\n        opacity 0.4s ease;\n      display: block;\n    }\n    #intro-extra-wrap.open {\n      max-height: 300px;\n      opacity: 1;\n    }\n\n    #intro-set-link {\n      margin-top: 5px;\n    }\n\n    .toggle-link {\n      color: #1a6496;\n      cursor: pointer;\n      font-size: 13px;\n      white-space: nowrap;\n    }\n    .toggle-link:hover {\n      text-decoration: underline;\n    }\n\n    \/* ── Accordion ── *\/\n    .acc-wrapper {\n      background: #f5f5f5;\n      margin-top: 4px;\n    }\n\n    .acc-header {\n      background: #e8e8e8;\n      padding: 8px 12px;\n      font-size: 13px;\n      font-weight: bold;\n      cursor: pointer;\n      color: #333;\n      user-select: none;\n      transition: background 0.2s;\n    }\n    .acc-header:hover {\n      background: #ddd;\n    }\n\n    .acc-body {\n      overflow: hidden;\n      max-height: 0;\n      opacity: 0;\n      transition:\n        max-height 0.42s ease,\n        opacity 0.35s ease,\n        padding 0.3s ease;\n      padding: 0 14px;\n      line-height: 1.7;\n      font-size: 13px;\n      background: #fff;\n    }\n    .acc-body.open {\n      max-height: 600px;\n      opacity: 1;\n      padding: 12px 14px;\n    }\n\n    \/* ── Question mark icon ── *\/\n    .q-icon {\n      display: inline-block;\n      width: 13px;\n      height: 13px;\n      background: #fff;\n      color: #a07800;\n      font-size: 9px;\n      font-weight: bold;\n      text-align: center;\n      line-height: 13px;\n      cursor: pointer;\n      margin-left: 3px;\n      vertical-align: middle;\n      border: 1px solid #a07800;\n      border-radius: 1px;\n    }\n    .q-icon:hover {\n      background: #a07800;\n      color: #fff;\n    }\n\n    \/* ── Modal Overlay ── *\/\n    #modal-overlay {\n      display: none;\n      position: fixed;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background: rgba(0, 0, 0, 0);\n      z-index: 9998;\n      transition: background 0.3s ease;\n    }\n    #modal-overlay.visible {\n      background: rgba(0, 0, 0, 0.55);\n    }\n\n    \/* ── Modal Box ── *\/\n    .modal-box {\n      display: none;\n      position: fixed;\n      top: 50%;\n      left: 50%;\n      transform: translate(-50%, -56%) scale(0.92);\n      background: #fff;\n      width: 290px;\n      padding: 20px 22px 18px 22px;\n      z-index: 9999;\n      box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);\n      opacity: 0;\n      transition:\n        opacity 0.28s ease,\n        transform 0.28s ease;\n    }\n    .modal-box.visible {\n      opacity: 1;\n      transform: translate(-50%, -50%) scale(1);\n    }\n\n    .modal-close {\n      position: absolute;\n      top: 6px;\n      right: 6px;\n      width: 20px;\n      height: 20px;\n      background: #888;\n      color: #fff;\n      font-size: 13px;\n      font-weight: bold;\n      line-height: 20px;\n      text-align: center;\n      cursor: pointer;\n      border-radius: 2px;\n      user-select: none;\n    }\n    .modal-close:hover {\n      background: #555;\n    }\n\n    .modal-title {\n      font-size: 16px;\n      font-weight: bold;\n      color: #222;\n      margin: 0 0 14px 0;\n      line-height: 1.35;\n      padding-right: 18px;\n    }\n\n    .modal-item {\n      margin-bottom: 11px;\n      font-size: 13px;\n      line-height: 1.45;\n      color: #333;\n    }\n    .modal-item .num {\n      color: #c8a200;\n      font-weight: bold;\n      font-style: italic;\n    }\n\n    .modal-more-link {\n      display: block;\n      color: #c8a200;\n      font-size: 13px;\n      text-decoration: underline;\n      margin-top: 12px;\n      margin-bottom: 14px;\n    }\n    .modal-more-link:hover {\n      color: #a07800;\n    }\n\n    .modal-logo {\n      text-align: center;\n      border-top: 1px solid #e5e5e5;\n      padding-top: 12px;\n      margin-top: 8px;\n    }\n    .modal-logo img {\n      display: block;\n      margin: 0 auto;\n      max-width: 200px;\n      height: auto;\n    }\n  \u003c\/style\u003e\n\n  \u003c!-- ══ INTRO TEXT ══ --\u003e\n  \u003cdiv id=\"intro-wrap\"\u003e\n    \u003c!-- Preview: shown when collapsed --\u003e\n    \u003cspan id=\"intro-preview\"\u003eDESCRIPTION: Premium quality replacement grip with a nice combination of\n      tack and cushion....\u003ca class=\"toggle-link\" id=\"link-more\" onclick=\"introOpen()\"\u003e\n        more\u003c\/a\u003e\u003c\/span\u003e\n\n    \u003c!-- Full text: shown when expanded, hidden when collapsed --\u003e\n    \u003cdiv id=\"intro-extra-wrap\"\u003e\n    DESCRIPTION : Premium quality replacement grip with a nice combination of tack and\n      cushion. Durable and comfortable. Adhesive backing.\u003cbr\u003e\n      \u003ca class=\"toggle-link\" id=\"link-less\" onclick=\"introClose()\"\u003e less\u003c\/a\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ══ ACCORDION ══ --\u003e\n  \u003cdiv class=\"acc-wrapper\"\u003e\n    \u003cdiv class=\"acc-header\" id=\"spec-header\" onclick=\"toggleAcc()\"\u003e\n      Specifications\n    \u003c\/div\u003e\n    \u003cdiv class=\"acc-body\" id=\"spec-body\"\u003e\n      DIMENSIONS: (W x L x T): 25mm x \u003cbr\u003e\n      1100mm x 2.00mm (.98\" x 43.3\" x .078\")\u003cbr\u003e \u003cbr\u003e\n      COLORS: Black (includes black finishing tape)\u003cbr\u003e\u003cbr\u003e\n      \u003c!-- AVAILABLE IN: 12-Packs --\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\n  \u003c!-- ══ OVERLAY ══ --\u003e\n  \u003cdiv id=\"modal-overlay\" onclick=\"closeAllModals()\"\u003e\u003c\/div\u003e\n\n  \u003cscript type=\"text\/javascript\"\u003e\n    var extraWrap = document.getElementById(\"intro-extra-wrap\");\n    var previewSpan = document.getElementById(\"intro-preview\");\n\n    function introOpen() {\n      previewSpan.style.display = \"none\"; \/* hide preview line *\/\n      extraWrap.classList.add(\"open\"); \/* expand full text with animation *\/\n    }\n\n    function introClose() {\n      extraWrap.classList.remove(\n        \"open\",\n      ); \/* collapse full text with animation *\/\n\n      \/* Animation complete hole preview line fire ashe transitionend listener diye *\/\n      var onTransitionEnd = function (e) {\n        if (e.propertyName === \"max-height\") {\n          previewSpan.style.display = \"inline\";\n          extraWrap.removeEventListener(\"transitionend\", onTransitionEnd);\n        }\n      };\n      extraWrap.addEventListener(\"transitionend\", onTransitionEnd);\n\n      \/* Fallback for safety *\/\n      setTimeout(function () {\n        if (!extraWrap.classList.contains(\"open\")) {\n          previewSpan.style.display = \"inline\";\n        }\n      }, 500);\n    }\n\n    \/* ── Accordion ── *\/\n    var accOpen = false;\n    function toggleAcc() {\n      accOpen = !accOpen;\n      var specBody = document.getElementById(\"spec-body\");\n      specBody.classList.toggle(\"open\", accOpen);\n    }\n\n    \/* ── Modals ── *\/\n    function openModal(id) {\n      closeAllModals(false);\n      var overlay = document.getElementById(\"modal-overlay\");\n      var box = document.getElementById(id);\n      overlay.style.display = \"block\";\n      box.style.display = \"block\";\n      box.offsetHeight; \/* force reflow *\/\n      overlay.classList.add(\"visible\");\n      box.classList.add(\"visible\");\n    }\n\n    function closeAllModals(animate) {\n      var overlay = document.getElementById(\"modal-overlay\");\n      var modals = document.querySelectorAll(\".modal-box\");\n      if (animate === false) {\n        overlay.style.display = \"none\";\n        overlay.classList.remove(\"visible\");\n        for (var i = 0; i \u003c modals.length; i++) {\n          modals[i].style.display = \"none\";\n          modals[i].classList.remove(\"visible\");\n        }\n        return;\n      }\n      overlay.classList.remove(\"visible\");\n      for (var i = 0; i \u003c modals.length; i++) {\n        modals[i].classList.remove(\"visible\");\n      }\n      setTimeout(function () {\n        overlay.style.display = \"none\";\n        for (var j = 0; j \u003c modals.length; j++) {\n          modals[j].style.display = \"none\";\n        }\n      }, 300);\n    }\n\n    document.addEventListener(\"keydown\", function (e) {\n      if (e.key === \"Escape\") closeAllModals();\n    });\n  \u003c\/script\u003e\n\n\u003c\/body\u003e","brand":"Golden Set ","offers":[{"title":"Secure Grip Black 12-Pack -SB12","offer_id":50802165219614,"sku":"SB12","price":38.38,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0990\/5615\/6958\/files\/SECURE_GRIP_REPLACEMENT_GRIP.jpg?v=1776933012"}],"url":"https:\/\/goldensettennis.com\/collections\/racquet-grip.oembed","provider":"Golden Set ","version":"1.0","type":"link"}