{"product_id":"custom-ceiling-mounted-brass-shelving","title":"Custom Ceiling-Mounted Brass Shelving","description":"\u003cscript\u003e\n(function() {\n  var configuratorBaseUrl = \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAEBS2gB-wEA\u0026step=2\";\n  var CDN = \"https:\/\/cdn.shopify.com\/s\/files\/1\/0551\/5660\/5085\/files\/\";\n  var VIEWS = [\"front\",\"side\",\"top\",\"detail\"];\n\n  var configuratorLinks = {\n    \"1-1\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAEBS2gB-wEA\u0026step=2\",\n    \"1-2\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAECS2gB-wEA\u0026step=2\",\n    \"1-3\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQATiQ-gBLAgUAEDS2gB-wEA\u0026step=2\",\n    \"1-4\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAXcA-gBLAgUAEES2gB-wEA\u0026step=2\",\n    \"2-1\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAIBJbQB-wIAAQ\u0026step=2\",\n    \"2-2\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAICJbQB-wIAAQ\u0026step=2\",\n    \"2-3\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAXcA-gBLAgUAIDJbQB-wIAAQ\u0026step=2\",\n    \"2-4\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAXcA-gBLAgUAIEJbQB-wIAAQ\u0026step=2\",\n    \"3-1\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAMBGSMB-wMAAQI\u0026step=2\",\n    \"3-2\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAMCGSMB-wMAAQI\u0026step=2\",\n    \"3-3\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAXcA-gBLAgUAMDGSMB-wMAAQI\u0026step=2\",\n    \"3-4\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAXcA-gBLAgUAMEGSMB-wMAAQI\u0026step=2\",\n    \"4-1\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAQBEtoB-wQAAQID\u0026step=2\",\n    \"4-2\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAQCEtoB-wQAAQID\u0026step=2\",\n    \"4-3\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAXcA-gBLAgUAQDEtoB-wQAAQID\u0026step=2\",\n    \"4-4\": \"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAXcA-gBLAgUAQEEtoB-wQAAQID\u0026step=2\"\n  };\n\n  var dimMap = {\n    \"1-1\": \"35X40X12\", \"1-2\": \"45X40X12\", \"1-3\": \"50X40X12\", \"1-4\": \"55X40X12\",\n    \"2-1\": \"35X40X12\", \"2-2\": \"45X40X12\", \"2-3\": \"50X40X12\", \"2-4\": \"55X40X12\",\n    \"3-1\": \"35X50X12\", \"3-2\": \"45X50X12\", \"3-3\": \"50X50X12\", \"3-4\": \"55X50X12\",\n    \"4-1\": \"35X50X12\", \"4-2\": \"45X50X12\", \"4-3\": \"50X50X12\", \"4-4\": \"55X50X12\"\n  };\n\n  function galleryFor(k) {\n    var p = k.split(\"-\");\n    var shelves = p[0], bays = p[1];\n    return VIEWS.map(function(v) {\n      return CDN + \"c-\" + shelves + \"s-\" + bays + \"b-\" + v + \".webp\";\n    });\n  }\n\n  var state = { shelves: 1, sections: 1 };\n\n  function lockBuyBox() {\n    var submitBtn = document.querySelector(\".product-form__submit\");\n    if (submitBtn) submitBtn.style.display = \"none\";\n    var qty = document.querySelector(\".product-form__quantity\");\n    if (qty) qty.style.display = \"none\";\n    var payWrap = document.querySelector(\".shopify-payment-button\");\n    if (payWrap) payWrap.style.display = \"none\";\n  }\n  lockBuyBox();\n  var lockObserver = new MutationObserver(lockBuyBox);\n  lockObserver.observe(document.body, { childList: true, subtree: true });\n  setTimeout(function(){ lockObserver.disconnect(); }, 8000);\n\n  function key() { return state.shelves + \"-\" + state.sections; }\n\n  function setImg(img, url) {\n    if (!img || !url) return;\n    img.setAttribute(\"data-bs-src\", url);\n    img.src = url;\n    img.removeAttribute(\"srcset\");\n    if (img.hasAttribute(\"data-src\")) img.setAttribute(\"data-src\", url);\n    if (img.hasAttribute(\"data-srcset\")) img.removeAttribute(\"data-srcset\");\n    var parent = img.closest(\"li, .product__media-item, .product-media-container, .product__media, media-gallery, .thumbnail, button\") || img.parentElement;\n    if (parent) {\n      parent.querySelectorAll(\"source\").forEach(function(s) {\n        s.removeAttribute(\"srcset\");\n        if (s.hasAttribute(\"data-srcset\")) s.removeAttribute(\"data-srcset\");\n      });\n    }\n  }\n\n  function collectGalleryImgs() {\n    var imgs = [];\n    var seen = new Set();\n    function add(node) {\n      if (!node || seen.has(node)) return;\n      seen.add(node);\n      imgs.push(node);\n    }\n    var primarySelectors = [\n      \".product__media-item img\",\n      \"media-gallery .product__media img\",\n      \".product__media-list img\",\n      \".product-media-container img\",\n      'ul[role=\"list\"] .product__media-item img'\n    ];\n    for (var i = 0; i \u003c primarySelectors.length; i++) {\n      var nodes = document.querySelectorAll(primarySelectors[i]);\n      if (nodes \u0026\u0026 nodes.length) {\n        nodes.forEach(add);\n        break;\n      }\n    }\n    document.querySelectorAll(\".thumbnail img, .product__thumbnails img, button.thumbnail img, .slider-button img, [data-thumbnail] img\").forEach(add);\n    if (!imgs.length) {\n      document.querySelectorAll(\".product img, main .product__info-wrapper ~ * img\").forEach(add);\n    }\n    return imgs;\n  }\n\n  function updateGallery(k) {\n    var urls = galleryFor(k);\n    if (!urls || !urls.length) return;\n    var imgs = collectGalleryImgs();\n    var n = Math.min(urls.length, imgs.length);\n    for (var i = 0; i \u003c n; i++) setImg(imgs[i], urls[i]);\n    if (imgs.length \u0026\u0026 urls[0]) setImg(imgs[0], urls[0]);\n  }\n\n  function updateCta() {\n    var k = key();\n    var url = configuratorLinks[k] || configuratorBaseUrl;\n    document.querySelectorAll(\".js-configure-cta\").forEach(function(a) { a.href = url; });\n    var summary = document.getElementById(\"config-summary\");\n    if (summary) {\n      var shelfWord = state.shelves === 1 ? \"shelf\" : \"shelves\";\n      var secWord = state.sections === 1 ? \"section\" : \"sections\";\n      var dim = dimMap[k] || \"\";\n      summary.textContent = state.shelves + \" \" + shelfWord + \", \" + state.sections + \" \" + secWord + (dim ? \" · catalog \" + dim + \" in\" : \"\");\n    }\n    updateGallery(k);\n  }\n\n  window.addEventListener(\"DOMContentLoaded\", function() {\n    document.querySelectorAll(\".option-btn\").forEach(function(btn) {\n      btn.addEventListener(\"click\", function() {\n        var group = btn.getAttribute(\"data-group\");\n        if (btn.getAttribute(\"data-more\") === \"true\") {\n          window.location.href = configuratorBaseUrl;\n          return;\n        }\n        var val = parseInt(btn.getAttribute(\"data-value\"), 10);\n        document.querySelectorAll('.option-btn[data-group=\"' + group + '\"]').forEach(function(b) {\n          b.classList.remove(\"option-btn--selected\");\n        });\n        btn.classList.add(\"option-btn--selected\");\n        state[group] = val;\n        updateCta();\n      });\n    });\n    updateCta();\n  });\n})();\n\u003c\/script\u003e\n\u003cstyle\u003e\n  .option-group { margin-bottom: 22px; }\n  .option-group__label { font-size: 14px; font-weight: 600; color: #2c2c2c; margin-bottom: 8px; display: block; }\n  .option-row { display: flex; flex-wrap: wrap; gap: 8px; }\n  .option-btn { min-width: 44px; height: 44px; padding: 0 14px; border: 1px solid #d8d2c4; border-radius: 6px; background: #fff; color: #2c2c2c; font-size: 14px; font-weight: 500; cursor: pointer; }\n  .option-btn:hover { border-color: #2c2c2c; }\n  .option-btn--selected { background: #2c2c2c; border-color: #2c2c2c; color: #fff; }\n  .option-btn--more { border-style: dashed; color: #8a8272; font-size: 13px; }\n\u003c\/style\u003e\n\u003ch2 style=\"font-size: 28px; font-weight: 600; color: #2c2c2c; margin: 0 0 20px 0;\"\u003eCustom Ceiling-Mounted Brass Shelving, Made to Your Exact Space\u003c\/h2\u003e\n\u003cp style=\"font-size: 16px; line-height: 1.6; color: #333;\"\u003eSolid brass frame, pipes, and fittings (not plated). Unlacquered satin or unlacquered polished brass that develops a natural patina. Choose shelves and sections, then continue in the configurator for exact dimensions, finish, technical drawing, and AR. Glass is not included; source it locally from our specs.\u003c\/p\u003e\n\u003cdiv style=\"background: #f7f3ec; border: 1px solid #e2d9c8; border-radius: 8px; padding: 24px; margin: 28px 0;\"\u003e\n  \u003cdiv class=\"option-group\"\u003e\n    \u003cspan class=\"option-group__label\"\u003eNumber of Shelves\u003c\/span\u003e\n    \u003cdiv class=\"option-row\"\u003e\n      \u003cbutton type=\"button\" class=\"option-btn option-btn--selected\" data-group=\"shelves\" data-value=\"1\"\u003e1 Shelf\u003c\/button\u003e\n      \u003cbutton type=\"button\" class=\"option-btn\" data-group=\"shelves\" data-value=\"2\"\u003e2 Shelves\u003c\/button\u003e\n      \u003cbutton type=\"button\" class=\"option-btn\" data-group=\"shelves\" data-value=\"3\"\u003e3 Shelves\u003c\/button\u003e\n      \u003cbutton type=\"button\" class=\"option-btn\" data-group=\"shelves\" data-value=\"4\"\u003e4 Shelves\u003c\/button\u003e\n      \u003cbutton type=\"button\" class=\"option-btn option-btn--more\" data-group=\"shelves\" data-more=\"true\"\u003eMore shelves →\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"option-group\"\u003e\n    \u003cspan class=\"option-group__label\"\u003eNumber of Sections\u003c\/span\u003e\n    \u003cdiv class=\"option-row\"\u003e\n      \u003cbutton type=\"button\" class=\"option-btn option-btn--selected\" data-group=\"sections\" data-value=\"1\"\u003e1 Section\u003c\/button\u003e\n      \u003cbutton type=\"button\" class=\"option-btn\" data-group=\"sections\" data-value=\"2\"\u003e2 Sections\u003c\/button\u003e\n      \u003cbutton type=\"button\" class=\"option-btn\" data-group=\"sections\" data-value=\"3\"\u003e3 Sections\u003c\/button\u003e\n      \u003cbutton type=\"button\" class=\"option-btn\" data-group=\"sections\" data-value=\"4\"\u003e4 Sections\u003c\/button\u003e\n      \u003cbutton type=\"button\" class=\"option-btn option-btn--more\" data-group=\"sections\" data-more=\"true\"\u003eMore sections →\u003c\/button\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cp style=\"margin: 4px 0 18px 0; font-size: 13px; color: #999; text-align: center;\"\u003eSelected: \u003cspan id=\"config-summary\"\u003e1 shelf, 1 section · catalog 35X40X12 in\u003c\/span\u003e. Final price depends on size and finish.\u003c\/p\u003e\n  \u003cp style=\"margin: 0 0 14px 0; font-size: 14px; color: #666; text-align: center;\"\u003eYour shelf and section choices carry into the configurator. Gallery updates with front, side, top, and detail views.\u003c\/p\u003e\n  \u003cdiv style=\"text-align: center;\"\u003e\n    \u003ca href=\"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAEBS2gB-wEA\u0026amp;step=2\" class=\"js-configure-cta\" style=\"display: inline-block; background: #2c2c2c; color: #fff; padding: 14px 32px; border-radius: 4px; text-decoration: none; font-weight: 600; font-size: 15px;\"\u003eContinue to Configurator\u003c\/a\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch3 style=\"font-size: 18px; font-weight: 600; color: #2c2c2c; margin: 32px 0 14px 0;\"\u003eSpecifications\u003c\/h3\u003e\n\u003ctable style=\"width: 100%; border-collapse: collapse; font-size: 15px;\"\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee; color: #666; width: 40%;\"\u003eMaterial\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee;\"\u003e100% solid brass (not plated)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee; color: #666;\"\u003eFinishes\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee;\"\u003eUnlacquered satin brass or unlacquered polished brass\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee; color: #666;\"\u003eIncluded\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee;\"\u003eFrame, pipes, fittings only. Glass not included.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee; color: #666;\"\u003eCatalog sizes (W×H×D)\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee;\"\u003eWidth 35\/45\/50\/55\" by sections; height 40\" (1-2 shelves) or 50\" (3-4); depth 12\"; equal spacing. Custom sizes in configurator.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee; color: #666;\"\u003eLoad\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee;\"\u003eTypically 80-140 lbs per shelf by configuration and anchor\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee; color: #666;\"\u003eLead time\u003c\/td\u003e\n\u003ctd style=\"padding: 10px 12px; border-bottom: 1px solid #eee;\"\u003eAbout 7 days production; express shipping to the U.S.\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/table\u003e\n\u003cul style=\"font-size: 15px; line-height: 1.8; color: #333; padding-left: 20px; margin-top: 24px;\"\u003e\n\u003cli\u003e\n\u003cstrong\u003eGlass is not included.\u003c\/strong\u003e We provide specs for local glass or wood.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCeiling anchoring matters.\u003c\/strong\u003e Brass flanges into joists are strongest; other substrates need the right anchor.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eUnlacquered brass patinas\u003c\/strong\u003e over time. That living finish is intentional.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdiv style=\"background: #f7f3ec; border: 1px solid #e2d9c8; border-radius: 8px; padding: 24px; margin: 28px 0; text-align: center;\"\u003e\n  \u003cp style=\"margin: 0 0 14px 0; font-size: 16px; color: #2c2c2c; font-weight: 600;\"\u003eReady for exact dimensions and price?\u003c\/p\u003e\n  \u003ca href=\"https:\/\/brassshelf.com\/pages\/pages-custom-shelf-configurator?c=AQAPoA-gBLAgUAEBS2gB-wEA\u0026amp;step=2\" class=\"js-configure-cta\" style=\"display: inline-block; background: #2c2c2c; color: #fff; padding: 14px 32px; border-radius: 4px; text-decoration: none; font-weight: 600; font-size: 15px;\"\u003eContinue to Configurator\u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp style=\"font-size: 15px; color: #333;\"\u003e\u003cstrong\u003eIs glass included?\u003c\/strong\u003e\u003cbr\u003eNo. Frame, pipes, and fittings only.\u003c\/p\u003e\n\u003cp style=\"font-size: 15px; color: #333;\"\u003e\u003cstrong\u003eCan I customize size?\u003c\/strong\u003e\u003cbr\u003eYes. Catalog sizes above are starting points; the configurator accepts full custom dimensions.\u003c\/p\u003e\n\u003cscript type=\"application\/ld+json\"\u003e{\"@context\":\"https:\/\/schema.org\",\"@type\":\"Product\",\"name\":\"Custom Ceiling-Mounted Brass Shelving\",\"description\":\"Custom ceiling-mounted solid brass shelving frame. Unlacquered satin or polished. Frame only; glass not included.\",\"brand\":{\"@type\":\"Brand\",\"name\":\"BrassShelf\"},\"material\":\"Solid Brass\",\"offers\":{\"@type\":\"Offer\",\"priceCurrency\":\"USD\",\"price\":\"800.00\",\"availability\":\"https:\/\/schema.org\/InStock\",\"url\":\"https:\/\/brassshelf.com\/products\/custom-ceiling-mounted-brass-shelving\"}}\u003c\/script\u003e\n","brand":"Brassshelf","offers":[{"title":"Default Title","offer_id":48779819712669,"sku":null,"price":800.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0551\/5660\/5085\/files\/1Bay_1Raf_Home.jpg?v=1772363263","url":"https:\/\/brassshelf.com\/en-ca\/products\/custom-ceiling-mounted-brass-shelving","provider":"Brassshelf","version":"1.0","type":"link"}