✦ Verified product
Lumen TKL Keyboard
EUR 490.00
neighbourhood
Verified independent store
→
:root { --bg: #f5f5f7; --card: #ffffff; --text: #1d1d1f; --text2: #3a3a3c; --muted: #6e6e73; --accent: #b00000; --radius: 14px; } /* PAGE */ .pdp-wrap { max-width: 920px; margin: 2
4px auto; padding: 28px 18px; font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", sans-serif; background: #ffffff; color: #1d1d1f; border-radius: 6px; box-shadow: 0 12px 40px rgba(0,0,0,0.08); border: 1px solid rgba(0,0,0,0.06); } /* TYPOGRAPHY */ .title { font-size: 22px; font-weight: 600; margin-bottom: 6px; } .subtitle { font-size: 14px; color: var(--text2); line-height: 1.6; } /* SECTIONS */ .section { margin-top: 22px; } .divider { height: 1px; background: rgba(0,0,0,0.08); margin: 22px 0; } /* SPECS */ .specs { font-size: 14px; color: var(--text2); line-height: 1.7; } /* DISCLAIMER */ details.card { background: var(--card); border-radius: var(--radius); border: 1px solid rgba(0,0,0,0.06); overflow: hidden; } summary.card-summary { padding: 14px 16px; cursor: pointer; display: flex; justify-content: space-between; font-weight: 600; list-style: none; } summary.card-summary::-webkit-details-marker { display: none; } .summary-accent { color: var(--accent); } .card-body { padding: 14px 16px; font-size: 14px; color: var(--text2); line-height: 1.6; } /* CHECKBOX */ .checkbox-row { display: flex; gap: 10px; align-items: center; margin-top: 14px; font-size: 14px; } /* WARNING */ .warning { display: none; margin-top: 10px; padding: 12px 14px; border-radius: var(--radius); background: rgba(176,0,0,0.06); border: 1px solid rgba(176,0,0,0.15); color: var(--accent); font-size: 13px; } /* DISABLED */ .is-disabled { opacity: 0.45 !important; cursor: not-allowed !important; pointer-events: none !important; } /* VAT DISCLAIMER */ .vat-disclaimer { display: inline-flex; align-items: center; gap: 6px; padding: 8px 12px; font-size: 12px; color: var(--muted); background: var(--bg); border-radius: 8px; margin-top: 4px; } Lumen TKL Keyboard Kit The 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. Tier 1 MOQ 20 490 € Tier 2 MOQ 30 460 € Tier 3 MOQ 50 445 € Group-Buy: June 6th - July 7th Shipping: Q4 2026 Layout: TKL WK / WKL / True HHKB Material: Anodised Aluminium Mount: Topmount / Gasketmount Firmware: VIAL + QMK Front Height: 18mm Typing Angle: 8° Weight: 2.1kg (unbuilt) PCB compatibility: H87 outline and JST position Kit includes: Keyboard case, aluminium plate, PCB, DB, JST cable, NBH branded carrying case, fastening materials. No separate VAT is shown due to § 19 UStG (German VAT Act) Raw Finish Disclaimer + 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. I have read and accept the Raw Finish Disclaimer You must accept the Raw Finish Disclaimer to continue. document.addEventListener("DOMContentLoaded", () => { const checkbox = document.getElementById("agree-terms"); const warning = document.getElementById("raw-warning"); const details = document.getElementById("raw-details"); const disclaimerArea = document.getElementById("raw-disclaimer-area"); const addToCartBtn = document.querySelector('button[name="add"]') || document.querySelector('.product-form__submit'); if (!addToCartBtn || !checkbox) return; function getDynamicButtons() { return document.querySelectorAll( '.shopify-payment-button button, .shopify-payment-button__button' ); } function getSelectedVariantText() { const values = []; document.querySelectorAll('input[type="radio"]:checked, select') .forEach(el => { if (el.tagName === "SELECT") { values.push(el.options[el.selectedIndex].text); } else { values.push(el.value); } }); return values.join(" ").toLowerCase(); } function isRaw() { return getSelectedVariantText().includes("raw"); } function setDisabled(btn, state) { if (!btn) return; btn.disabled = state; if (state) { btn.classList.add("is-disabled"); } else { btn.classList.remove("is-disabled"); } } function toggleFastCheckout(disabled) { const container = document.querySelector('.shopify-payment-button'); if (!container) return; if (disabled) { container.style.opacity = '0.5'; container.style.pointerEvents = 'none'; container.style.cursor = 'not-allowed'; } else { container.style.opacity = ''; container.style.pointerEvents = ''; container.style.cursor = ''; } } function updateUI() { const raw = isRaw(); disclaimerArea.style.display = raw ? "block" : "none"; if (!raw) checkbox.checked = false; if (raw && !checkbox.checked) { setDisabled(addToCartBtn, true); getDynamicButtons().forEach(btn => { setDisabled(btn, true); }); toggleFastCheckout(true); warning.style.display = "block"; } else { setDisabled(addToCartBtn, false); getDynamicButtons().forEach(btn => { setDisabled(btn, false); }); toggleFastCheckout(false); warning.style.display = "none"; } } addToCartBtn.addEventListener("click", (e) => { if (isRaw() && !checkbox.checked) { e.preventDefault(); e.stopPropagation(); details.open = true; alert("You must accept the Raw Finish Disclaimer before continuing."); } }); document.addEventListener("click", (e) => { const fastCheckoutBtn = e.target.closest( '.shopify-payment-button button, .shopify-payment-button__button' ); if (!fastCheckoutBtn) return; if (isRaw() && !checkbox.checked) { e.preventDefault(); e.stopPropagation(); details.open = true; alert("You must accept the Raw Finish Disclaimer before continuing."); } }); checkbox.addEventListener("change", updateUI); document.addEventListener("change", (e) => { if (e.target.matches('input[type="radio"], select')) { updateUI(); } }); setTimeout(updateUI, 500); setTimeout(updateUI, 1500); updateUI(); });