{"product_id":"lumen-tkl-keyboard","title":"Lumen TKL Keyboard","description":"\u003cstyle\u003e\n:root {\n  --bg: #f5f5f7;\n  --card: #ffffff;\n  --text: #1d1d1f;\n  --text2: #3a3a3c;\n  --muted: #6e6e73;\n  --accent: #b00000;\n  --radius: 14px;\n}\n\n\/* PAGE *\/\n.pdp-wrap {\n  max-width: 920px;\n  margin: 24px auto;\n  padding: 28px 18px;\n\n  font-family: -apple-system, BlinkMacSystemFont, \"SF Pro Display\", sans-serif;\n\n  background: #ffffff;\n  color: #1d1d1f;\n\n  border-radius: 6px;\n\n  box-shadow: 0 12px 40px rgba(0,0,0,0.08);\n\n  border: 1px solid rgba(0,0,0,0.06);\n}\n\n\/* TYPOGRAPHY *\/\n.title {\n  font-size: 22px;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.subtitle {\n  font-size: 14px;\n  color: var(--text2);\n  line-height: 1.6;\n}\n\n\/* SECTIONS *\/\n.section {\n  margin-top: 22px;\n}\n\n.divider {\n  height: 1px;\n  background: rgba(0,0,0,0.08);\n  margin: 22px 0;\n}\n\n\/* SPECS *\/\n.specs {\n  font-size: 14px;\n  color: var(--text2);\n  line-height: 1.7;\n}\n\n\/* DISCLAIMER *\/\ndetails.card {\n  background: var(--card);\n  border-radius: var(--radius);\n  border: 1px solid rgba(0,0,0,0.06);\n  overflow: hidden;\n}\n\nsummary.card-summary {\n  padding: 14px 16px;\n  cursor: pointer;\n  display: flex;\n  justify-content: space-between;\n  font-weight: 600;\n  list-style: none;\n}\n\nsummary.card-summary::-webkit-details-marker {\n  display: none;\n}\n\n.summary-accent {\n  color: var(--accent);\n}\n\n.card-body {\n  padding: 14px 16px;\n  font-size: 14px;\n  color: var(--text2);\n  line-height: 1.6;\n}\n\n\/* CHECKBOX *\/\n.checkbox-row {\n  display: flex;\n  gap: 10px;\n  align-items: center;\n  margin-top: 14px;\n  font-size: 14px;\n}\n\n\/* WARNING *\/\n.warning {\n  display: none;\n  margin-top: 10px;\n  padding: 12px 14px;\n  border-radius: var(--radius);\n  background: rgba(176,0,0,0.06);\n  border: 1px solid rgba(176,0,0,0.15);\n  color: var(--accent);\n  font-size: 13px;\n}\n\n\/* DISABLED *\/\n.is-disabled {\n  opacity: 0.45 !important;\n  cursor: not-allowed !important;\n  pointer-events: none !important;\n}\n\n\/* VAT DISCLAIMER *\/\n.vat-disclaimer {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 8px 12px;\n  font-size: 12px;\n  color: var(--muted);\n  background: var(--bg);\n  border-radius: 8px;\n  margin-top: 4px;\n}\n\n\u003c\/style\u003e\n\n\u003cdiv class=\"pdp-wrap\"\u003e\n\n\u003c!-- TITLE --\u003e\n\u003cdiv class=\"title\"\u003eLumen TKL Keyboard Kit\u003c\/div\u003e\n\n\u003c!-- DESCRIPTION (UPDATED) --\u003e\n\u003cdiv class=\"subtitle\"\u003e\nThe final price will be determined based on the final sales volume. Product price is the lowest MOQ tier. If a higher tier is reached you will be refunded the difference minus transaction fees (PayPal\/Shopifiy Payments). Due to the volatile nature of the copper price, which directly reflects in the raw material prices of brass, which is mostly copper and zinc, we have calculated the weight with a 50% buffer. Any difference in price is subject to refund as well.\n\u003c\/div\u003e\n\n\u003cdiv class=\"subtitle\"\u003e\n\u003ctable width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eTier 1\u003c\/td\u003e\n\u003ctd\u003eMOQ 20\u003c\/td\u003e\n\u003ctd\u003e490 €\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTier 2\u003c\/td\u003e\n\u003ctd\u003eMOQ 30\u003c\/td\u003e\n\u003ctd\u003e460 €\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTier 3\u003c\/td\u003e\n\u003ctd\u003eMOQ 50\u003c\/td\u003e\n\u003ctd\u003e445 €\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\n\u003cdiv class=\"divider\"\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"section subtitle\"\u003e\n\u003cstrong\u003eGroup-Buy:\u003c\/strong\u003e June 6th - July 7th\u003cbr\u003e\n\u003cstrong\u003eShipping:\u003c\/strong\u003e Q4 2026\n\u003c\/div\u003e\n\n\u003cdiv class=\"divider\"\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"section specs\"\u003e\nLayout: TKL WK \/ WKL \/ True HHKB\u003cbr\u003e\nMaterial: Anodised Aluminium\u003cbr\u003e\nMount: Topmount \/ Gasketmount\u003cbr\u003e\nFirmware: VIAL + QMK\u003cbr\u003e\nFront Height: 18mm\u003cbr\u003e\nTyping Angle: 8°\u003cbr\u003e\nWeight: 2.1kg (unbuilt)\u003cbr\u003e\nPCB compatibility: H87 outline and JST position\n\u003c\/div\u003e\n\u003cdiv class=\"subtitle\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\n\u003cdiv class=\"subtitle\" style=\"margin-bottom: 16px;\"\u003e\nKit includes: Keyboard case, aluminium plate, PCB, DB, JST cable, NBH branded carrying case, fastening materials.\n\u003c\/div\u003e\n\u003cimg src=\"https:\/\/i.imgur.com\/vj2HybW.png\" alt=\"layout\" style=\"display:block;\"\u003e\n\n\n\u003cdiv class=\"subtitle\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"divider\"\u003e\u003c\/div\u003e\n\n  \u003c!-- VAT DISCLAIMER --\u003e\n  \u003cdiv class=\"vat-disclaimer\"\u003e\n    \u003csvg xmlns=\"[w3.org](http:\/\/www.w3.org\/2000\/svg)\" width=\"14\" height=\"14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" viewbox=\"0 0 24 24\"\u003e\n      \u003ccircle cx=\"12\" cy=\"12\" r=\"10\"\u003e\u003c\/circle\u003e\n      \u003cline x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"\u003e\u003c\/line\u003e\n      \u003cline x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"\u003e\u003c\/line\u003e\n    \u003c\/svg\u003e\n    No separate VAT is shown due to § 19 UStG (German VAT Act)\n  \u003c\/div\u003e\n\n\u003c!-- RAW DISCLAIMER --\u003e\n\u003cdiv id=\"raw-disclaimer-area\" style=\"display:none;\"\u003e\n\n  \u003cdetails class=\"card\" id=\"raw-details\"\u003e\n    \u003csummary class=\"card-summary\"\u003e\n      \u003cspan class=\"summary-accent\"\u003eRaw Finish Disclaimer\u003c\/span\u003e\n      \u003cspan style=\"opacity: 0.5;\"\u003e+\u003c\/span\u003e\n    \u003c\/summary\u003e\n\n    \u003cdiv class=\"card-body\"\u003e\n      Raw aluminium is intentionally left unfinished. Surface variation, machining marks, and tonal differences are expected. Each unit is unique and not cosmetically uniform. This is an industrial finish and not a cosmetic one.\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003cdiv class=\"checkbox-row\"\u003e\n    \u003cinput type=\"checkbox\" id=\"agree-terms\"\u003e\n\n    \u003clabel for=\"agree-terms\"\u003e\n      I have read and accept the\n      \u003cspan style=\"color: var(--accent); font-weight: 500;\"\u003eRaw Finish Disclaimer\u003c\/span\u003e\n    \u003c\/label\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"warning\" id=\"raw-warning\"\u003e\n    You must accept the Raw Finish Disclaimer to continue.\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\u003cscript\u003e\ndocument.addEventListener(\"DOMContentLoaded\", () =\u003e {\n\n  const checkbox = document.getElementById(\"agree-terms\");\n  const warning = document.getElementById(\"raw-warning\");\n  const details = document.getElementById(\"raw-details\");\n  const disclaimerArea = document.getElementById(\"raw-disclaimer-area\");\n\n  const addToCartBtn =\n    document.querySelector('button[name=\"add\"]') ||\n    document.querySelector('.product-form__submit');\n\n  if (!addToCartBtn || !checkbox) return;\n\n  function getDynamicButtons() {\n    return document.querySelectorAll(\n      '.shopify-payment-button button, .shopify-payment-button__button'\n    );\n  }\n\n  function getSelectedVariantText() {\n    const values = [];\n\n    document.querySelectorAll('input[type=\"radio\"]:checked, select')\n      .forEach(el =\u003e {\n        if (el.tagName === \"SELECT\") {\n          values.push(el.options[el.selectedIndex].text);\n        } else {\n          values.push(el.value);\n        }\n      });\n\n    return values.join(\" \").toLowerCase();\n  }\n\n  function isRaw() {\n    return getSelectedVariantText().includes(\"raw\");\n  }\n\n  function setDisabled(btn, state) {\n    if (!btn) return;\n\n    btn.disabled = state;\n\n    if (state) {\n      btn.classList.add(\"is-disabled\");\n    } else {\n      btn.classList.remove(\"is-disabled\");\n    }\n  }\n\n  function toggleFastCheckout(disabled) {\n    const container = document.querySelector('.shopify-payment-button');\n\n    if (!container) return;\n\n    if (disabled) {\n      container.style.opacity = '0.5';\n      container.style.pointerEvents = 'none';\n      container.style.cursor = 'not-allowed';\n    } else {\n      container.style.opacity = '';\n      container.style.pointerEvents = '';\n      container.style.cursor = '';\n    }\n  }\n\n  function updateUI() {\n\n    const raw = isRaw();\n\n    disclaimerArea.style.display = raw ? \"block\" : \"none\";\n\n    if (!raw) checkbox.checked = false;\n\n    if (raw \u0026\u0026 !checkbox.checked) {\n\n      setDisabled(addToCartBtn, true);\n\n      getDynamicButtons().forEach(btn =\u003e {\n        setDisabled(btn, true);\n      });\n\n      toggleFastCheckout(true);\n\n      warning.style.display = \"block\";\n\n    } else {\n\n      setDisabled(addToCartBtn, false);\n\n      getDynamicButtons().forEach(btn =\u003e {\n        setDisabled(btn, false);\n      });\n\n      toggleFastCheckout(false);\n\n      warning.style.display = \"none\";\n    }\n  }\n\n  addToCartBtn.addEventListener(\"click\", (e) =\u003e {\n    if (isRaw() \u0026\u0026 !checkbox.checked) {\n      e.preventDefault();\n      e.stopPropagation();\n      details.open = true;\n      alert(\"You must accept the Raw Finish Disclaimer before continuing.\");\n    }\n  });\n\n  document.addEventListener(\"click\", (e) =\u003e {\n\n    const fastCheckoutBtn = e.target.closest(\n      '.shopify-payment-button button, .shopify-payment-button__button'\n    );\n\n    if (!fastCheckoutBtn) return;\n\n    if (isRaw() \u0026\u0026 !checkbox.checked) {\n      e.preventDefault();\n      e.stopPropagation();\n      details.open = true;\n      alert(\"You must accept the Raw Finish Disclaimer before continuing.\");\n    }\n\n  });\n\n  checkbox.addEventListener(\"change\", updateUI);\n\n  document.addEventListener(\"change\", (e) =\u003e {\n    if (e.target.matches('input[type=\"radio\"], select')) {\n      updateUI();\n    }\n  });\n\n  setTimeout(updateUI, 500);\n  setTimeout(updateUI, 1500);\n  updateUI();\n\n});\n\u003c\/script\u003e","brand":"neighbourhood","offers":[{"title":"Seafoam \/ WKL \/ Solder","offer_id":61907468714314,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Seafoam \/ WK \/ Solder","offer_id":61907468747082,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Seafoam \/ True HHKB \/ Solder","offer_id":61907468779850,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Dark Taupe \/ WKL \/ Solder","offer_id":61907468812618,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Dark Taupe \/ WK \/ Solder","offer_id":61907468845386,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Dark Taupe \/ True HHKB \/ Solder","offer_id":61907468878154,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Sage Gray \/ WKL \/ Solder","offer_id":61907468910922,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Sage Gray \/ WK \/ Solder","offer_id":61907468943690,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Sage Gray \/ True HHKB \/ Solder","offer_id":61907468976458,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Raw \/ WKL \/ Solder","offer_id":61907469009226,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Raw \/ WK \/ Solder","offer_id":61907469041994,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Raw \/ True HHKB \/ Solder","offer_id":61907469074762,"sku":null,"price":490.0,"currency_code":"EUR","in_stock":false},{"title":"Seafoam \/ WKL \/ Hotswap","offer_id":62638908440906,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Seafoam \/ WK \/ Hotswap","offer_id":62638908473674,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Seafoam \/ True HHKB \/ Hotswap","offer_id":62638908506442,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Dark Taupe \/ WKL \/ Hotswap","offer_id":62638908539210,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Dark Taupe \/ WK \/ Hotswap","offer_id":62638908571978,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Dark Taupe \/ True HHKB \/ Hotswap","offer_id":62638908604746,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Sage Gray \/ WKL \/ Hotswap","offer_id":62638908637514,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Sage Gray \/ WK \/ Hotswap","offer_id":62638908670282,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Sage Gray \/ True HHKB \/ Hotswap","offer_id":62638908703050,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Raw \/ WKL \/ Hotswap","offer_id":62638908735818,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Raw \/ WK \/ Hotswap","offer_id":62638908768586,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false},{"title":"Raw \/ True HHKB \/ Hotswap","offer_id":62638908801354,"sku":null,"price":495.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0985\/0300\/0394\/files\/Lumen_SeaFoam_WKL_44a385f7-bef7-4266-8f6c-4cccbbc07fe8.jpg?v=1779823757","url":"https:\/\/nbh-keyboards.com\/products\/lumen-tkl-keyboard","provider":"neighbourhood","version":"1.0","type":"link"}