{"product_id":"metal-table-legs-havana","title":"Metal Table Legs (Havana)","description":"\u003cp\u003eThe Havana metal table legs combine tropical flair with industrial durability. These versatile legs are perfect for dining tables, coffee tables, and custom furniture projects.\u003c\/p\u003e\n\n\u003ch3\u003eSize Specifications — \u003cspan id=\"bhs-m-size-label\" style=\"color: #555; font-weight: normal; font-size: 0.9em;\"\u003e16\"\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cp style=\"margin: -4px 0 10px; font-size: 0.82em; color: #555; font-style: italic;\"\u003eTo see specifications for a different size, select a height above.\u003c\/p\u003e\n\u003ctable style=\"width: 100%; border-collapse: collapse; height: auto;\"\u003e\n\u003ctbody\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px; background-color: rgb(242, 242, 242); font-weight: bold;\"\u003eUse Case\u003c\/td\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px;\" id=\"bhs-m-use\"\u003eCoffee \/ Bench\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px; background-color: rgb(242, 242, 242); font-weight: bold;\"\u003eMounting Width\u003c\/td\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px;\" id=\"bhs-m-mnt\"\u003e14″\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px; background-color: rgb(242, 242, 242); font-weight: bold;\"\u003eFootprint (widest point)\u003c\/td\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px;\" id=\"bhs-m-ft\"\u003e14″\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px; background-color: rgb(242, 242, 242); font-weight: bold;\"\u003eWeight per Leg\u003c\/td\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px;\" id=\"bhs-m-wt\"\u003eN\/A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px; background-color: rgb(242, 242, 242); font-weight: bold;\"\u003eWeight Capacity\u003c\/td\u003e\n\u003ctd style=\"border: 1px solid rgb(204, 204, 204); padding: 8px; height: 19.5938px;\" id=\"bhs-m-cap\"\u003eN\/A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cscript\u003e\n(function () {\n  'use strict';\n\n  var SPECS = {\n    '16\"': { use: 'Coffee \/ Bench', mnt: '14″', ft: '14″', wt: 'N\/A', cap: 'N\/A' },\n    '18\"': { use: 'Coffee \/ Bench', mnt: 'N\/A', ft: 'N\/A', wt: 'N\/A', cap: 'N\/A' },\n    '22\"': { use: 'End Table', mnt: 'N\/A', ft: 'N\/A', wt: 'N\/A', cap: 'N\/A' },\n    '28\"': { use: 'Dining Table', mnt: '28″', ft: '28″', wt: 'N\/A', cap: 'N\/A' },\n    '34\"': { use: 'Counter Height', mnt: 'N\/A', ft: 'N\/A', wt: 'N\/A', cap: 'N\/A' }\n  };\n\n  var CELLS = [\n    ['bhs-m-use', 'use'],\n    ['bhs-m-mnt', 'mnt'],\n    ['bhs-m-ft',  'ft'],\n    ['bhs-m-wt',  'wt'],\n    ['bhs-m-cap', 'cap']\n  ];\n\n  function isSizeVal(v) { return Object.prototype.hasOwnProperty.call(SPECS, v); }\n\n  function render(size) {\n    var d = SPECS[size];\n    if (!d) return;\n    CELLS.forEach(function (pair) {\n      var el = document.getElementById(pair[0]);\n      if (el) el.textContent = d[pair[1]];\n    });\n    var lbl = document.getElementById('bhs-m-size-label');\n    if (lbl) lbl.textContent = size;\n  }\n\n  function renderFromVariantId(vid) {\n    document.querySelectorAll('script[type=\"application\/json\"]').forEach(function (s) {\n      try {\n        var obj = JSON.parse(s.textContent);\n        var variants = obj.variants || (obj.product \u0026\u0026 obj.product.variants);\n        if (!variants) return;\n        var match = variants.find(function (v) { return String(v.id) === String(vid); });\n        if (match \u0026\u0026 isSizeVal(match.option1)) render(match.option1);\n      } catch (e) {}\n    });\n  }\n\n  function setup() {\n    var selects = document.querySelectorAll('select');\n    for (var i = 0; i \u003c selects.length; i++) {\n      var sel = selects[i];\n      var vals = Array.prototype.map.call(sel.options, function (o) { return o.value; });\n      if (vals.some(isSizeVal)) {\n        if (isSizeVal(sel.value)) render(sel.value);\n        sel.addEventListener('change', function () { if (isSizeVal(this.value)) render(this.value); });\n        break;\n      }\n    }\n\n    var radios = Array.prototype.slice.call(\n      document.querySelectorAll('input[type=\"radio\"]')\n    ).filter(function (r) { return isSizeVal(r.value); });\n\n    radios.forEach(function (r) {\n      r.addEventListener('change', function () { if (this.checked) render(this.value); });\n    });\n    var checked = radios.find(function (r) { return r.checked; });\n    if (checked) render(checked.value);\n\n    document.addEventListener('change', function (e) {\n      var val = e.target \u0026\u0026 e.target.value;\n      if (val \u0026\u0026 isSizeVal(val)) render(val);\n    });\n\n    ['variant:changed', 'variantchange', 'on:variant:change'].forEach(function (evtName) {\n      document.addEventListener(evtName, function (e) {\n        var d = e.detail;\n        if (!d) return;\n        var v = d.variant || d;\n        if (v \u0026\u0026 v.option1 \u0026\u0026 isSizeVal(v.option1)) render(v.option1);\n      });\n    });\n\n        \/\/ Gusto theme fix: watch input[name=\"id\"] for variant changes\n    var variantInput = document.querySelector('input[name=\"id\"]');\n    if (variantInput) {\n      if (variantInput.value) renderFromVariantId(variantInput.value);\n      variantInput.addEventListener('change', function () {\n        if (this.value) renderFromVariantId(this.value);\n      });\n      var observer = new MutationObserver(function (mutations) {\n        mutations.forEach(function (m) {\n          if (m.type === 'attributes' \u0026\u0026 m.attributeName === 'value') {\n            var val = variantInput.getAttribute('value');\n            if (val) renderFromVariantId(val);\n          }\n        });\n      });\n      observer.observe(variantInput, { attributes: true, attributeFilter: ['value'] });\n      var descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');\n      if (descriptor \u0026\u0026 descriptor.set) {\n        var originalSet = descriptor.set;\n        Object.defineProperty(variantInput, 'value', {\n          set: function (val) {\n            originalSet.call(this, val);\n            if (val) renderFromVariantId(val);\n          },\n          get: descriptor.get\n        });\n      }\n    }\n    try {\n      var urlVid = new URL(location.href).searchParams.get('variant');\n      if (urlVid) renderFromVariantId(urlVid);\n    } catch (e) {}\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', setup);\n  } else {\n    setup();\n  }\n})();\n\u003c\/script\u003e","brand":"Bear Hollow Supply","offers":[{"title":"16\" \/ 1 Set (2 Legs)","offer_id":48544971653371,"sku":"HAV-16-BLK","price":165.0,"currency_code":"USD","in_stock":true},{"title":"16\" \/ Bulk Pack: 5 Sets (10 Legs)","offer_id":48544971718907,"sku":"HAV-16-BLK-5PK","price":701.25,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0118\/9160\/5604\/files\/CopyofCopyofCopyofCopyofUntitled_46b45c66-c846-46d4-9987-6a5740b0ea7b.png?v=1774293735","url":"https:\/\/bearhollowsupply.com\/products\/metal-table-legs-havana","provider":"Bear Hollow Supply","version":"1.0","type":"link"}