CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.
CYRA Solid Brass Knobs - meraki.

CYRA Solid Brass Knobs

Special offers 4
0% Available with interest-free installments via PayPal or Klarna.
Buy any 6+ hardware items, get 12% off
HANDLE12
automatically applied at checkout
Buy any 10+ hardware items, get 18% off
HANDLE18
automatically applied at checkout
Buy any 15+ hardware items, get 22% off
HANDLE22
automatically applied at checkout
¥4,400
Tax included.
Available to Order
SKU: KNO.KNB.10676 Trade & Bulk Discounts ? Enjoy exclusive bulk discounts, invoices & net terms.
Apply for a trade account.
Style:
Reset
No variants match your selected filters. Please try different options.
Knob
Knob
SKU: KNO.KNB.10676
¥4,400 JPY /each
5
10
25
50
+
Total: ¥0
Knob with Backplate
Knob with Backplate
SKU: KNO.KNB.10677
¥6,800 JPY /each
5
10
25
50
+
Total: ¥0
 More payment options
document.addEventListener('DOMContentLoaded', function() { // *** Quantity Controls *** // Increase/decrease quantity buttons document.querySelectorAll('.qty-btn.increase').forEach(button => { button.addEventListener('click', function() { const input = this.parentNode.querySelector('.qty-input'); const currentValue = parseInt(input.value) || 0; input.value = currentValue + 1; updateRowTotal(input); updateCartTotal(); updateRowAddButton(input); }); }); document.querySelectorAll('.qty-btn.decrease').forEach(button => { button.addEventListener('click', function() { const input = this.parentNode.querySelector('.qty-input'); const currentValue = parseInt(input.value) || 0; if (currentValue > 0) { input.value = currentValue - 1; updateRowTotal(input); updateCartTotal(); updateRowAddButton(input); } }); }); // Handle direct input on quantity fields document.querySelectorAll('.qty-input').forEach(input => { input.addEventListener('change', function() { let value = parseInt(this.value) || 0; if (value < 0) value = 0; this.value = value; updateRowTotal(this); updateCartTotal(); updateRowAddButton(this); }); // Show/hide quick quantity selectors on focus input.addEventListener('focus', function() { this.parentNode.classList.add('active'); }); input.addEventListener('blur', function() { setTimeout(() => { this.parentNode.classList.remove('active'); }, 200); }); }); // Quick quantity selectors document.querySelectorAll('.quick-qty-option').forEach(option => { option.addEventListener('click', function() { const value = parseInt(this.getAttribute('data-qty')); const input = this.closest('.qty-input-wrapper').querySelector('.qty-input'); input.value = value; input.dispatchEvent(new Event('change')); }); }); // *** Row Total Calculation Function *** function updateRowTotal(input) { const price = parseFloat(input.getAttribute('data-price')) / 100; // Convert cents to dollars const quantity = parseInt(input.value) || 0; const total = price * quantity; const variantId = input.getAttribute('data-variant-id'); const totalElement = document.querySelector(`[data-variant-total="${variantId}"]`); if (totalElement) { // Format total with currency (simplified for example) totalElement.textContent = formatMoney(total * 100); // Convert back to cents for formatter } } // *** Cart Total Calculation Function *** function updateCartTotal() { let total = 0; let originalTotal = 0; let hasDiscount = false; document.querySelectorAll('.qty-input').forEach(input => { const quantity = parseInt(input.value) || 0; if (quantity > 0) { const price = parseFloat(input.getAttribute('data-price')) / 100; total += price * quantity; // Check if there's a compare-at price (original price) if (input.hasAttribute('data-compare-price')) { const comparePrice = parseFloat(input.getAttribute('data-compare-price')) / 100; originalTotal += comparePrice * quantity; hasDiscount = true; } else { originalTotal += price * quantity; } } }); // Update the cart total display const cartTotalElement = document.getElementById('cart-running-total'); const cartOriginalTotalElement = document.getElementById('cart-original-total'); if (cartTotalElement) { cartTotalElement.textContent = formatMoney(total * 100); } if (cartOriginalTotalElement) { if (hasDiscount && originalTotal > total) { cartOriginalTotalElement.textContent = formatMoney(originalTotal * 100); cartOriginalTotalElement.style.display = 'block'; } else { cartOriginalTotalElement.style.display = 'none'; } } // Enable/disable the main Add to Cart button const addToCartBtn = document.getElementById('add-selected-to-cart'); if (addToCartBtn) { addToCartBtn.disabled = total <= 0; } } // Helper function to format money values function formatMoney(cents) { const formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }); return formatter.format(cents / 100); } // Enable/disable row-level add button based on quantity function updateRowAddButton(input) { const row = input.closest('.order-matrix-row'); const addButton = row.querySelector('.row-add-to-cart'); const quantity = parseInt(input.value) || 0; if (quantity > 0) { addButton.disabled = false; } else { addButton.disabled = true; } } // *** Row-level Add to Cart Buttons *** const rowAddButtons = document.querySelectorAll('.row-add-to-cart'); rowAddButtons.forEach(button => { button.addEventListener('click', function(e) { e.preventDefault(); const variantId = this.getAttribute('data-variant-id'); const row = this.closest('.order-matrix-row'); const qtyInput = row.querySelector('.qty-input'); const quantity = parseInt(qtyInput.value, 10); if (quantity > 0) { // Show loading state const originalButtonHTML = this.innerHTML; this.innerHTML = ' Adding...'; this.disabled = true; // Add to cart via AJAX fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ items: [{ id: variantId, quantity: quantity }] }) }) .then(response => response.json()) .then(data => { if (data.status && data.status !== 200) { throw new Error(data.description || 'Error adding product to cart'); } // Update button text this.innerHTML = ' Added'; // Update cart count - depends on your theme's cart implementation if (typeof updateCartCount === 'function') { updateCartCount(); } else { // Refresh cart drawer or icon (implement based on your theme) fetch('/cart.js') .then(res => res.json()) .then(cart => { // Update any cart counters on the page document.querySelectorAll('.cart-count').forEach(counter => { counter.textContent = cart.item_count; }); }); } // Reset button after delay setTimeout(() => { this.innerHTML = originalButtonHTML; this.disabled = false; }, 2000); }) .catch(error => { console.error('Error:', error); this.innerHTML = 'Error, try again'; setTimeout(() => { this.innerHTML = originalButtonHTML; this.disabled = false; }, 2000); }); } }); }); // *** Main "Add Selected to Cart" Button *** const addSelectedButton = document.getElementById('add-selected-to-cart'); if (addSelectedButton) { addSelectedButton.addEventListener('click', function() { const items = []; let hasItems = false; // Collect all variants with quantity > 0 document.querySelectorAll('.qty-input').forEach(input => { const quantity = parseInt(input.value) || 0; if (quantity > 0) { hasItems = true; items.push({ id: input.getAttribute('data-variant-id'), quantity: quantity }); } }); if (hasItems) { // Show loading state const originalButtonHTML = this.innerHTML; this.innerHTML = '
Adding...
'; this.disabled = true; // Add items to cart via AJAX fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ items: items }) }) .then(response => response.json()) .then(data => { if (data.status && data.status !== 200) { throw new Error(data.description || 'Error adding products to cart'); } // Update button text to show success this.innerHTML = '
Added to Cart ✓
'; // Update cart count if (typeof updateCartCount === 'function') { updateCartCount(); } else { fetch('/cart.js') .then(res => res.json()) .then(cart => { document.querySelectorAll('.cart-count').forEach(counter => { counter.textContent = cart.item_count; }); }); } // Optional: redirect to cart page // window.location.href = '/cart'; // Or reset button after delay setTimeout(() => { this.innerHTML = originalButtonHTML; this.disabled = false; }, 2000); }) .catch(error => { console.error('Error:', error); this.innerHTML = '
Error, try again
'; setTimeout(() => { this.innerHTML = originalButtonHTML; this.disabled = false; }, 2000); }); } }); } // *** View Options Toggle *** const viewOptionsToggle = document.getElementById('view-options-toggle'); if (viewOptionsToggle) { viewOptionsToggle.addEventListener('click', function() { this.classList.toggle('expanded'); const hiddenVariants = document.querySelectorAll('.hidden-variant'); hiddenVariants.forEach(variant => { if (this.classList.contains('expanded')) { variant.classList.remove('hidden-variant'); variant.style.display = ''; } else { variant.classList.add('hidden-variant'); variant.style.display = 'none !important'; } }); // Update toggle text if (this.classList.contains('expanded')) { this.innerHTML = ` Show fewer options `; } else { const variantCount = document.querySelectorAll('.order-matrix-row').length; this.innerHTML = ` View all options (${variantCount}) `; } }); } // *** Finish Filter Functionality *** const finishSwatches = document.querySelectorAll('.finish-swatch'); const allFinishesBtn = document.querySelector('.all-finishes-btn'); if (finishSwatches.length > 0 && allFinishesBtn) { // Initialize finish swatches with images (replace with your finish images) finishSwatches.forEach(swatch => { const finishName = swatch.getAttribute('data-finish-name'); const finishHandle = swatch.getAttribute('data-filter-value'); const imgElement = swatch.querySelector('img'); if (imgElement) { // Set a sample image URL based on finish name/handle // In a real implementation, you'd use actual finish images imgElement.src = `/assets/finish-${finishHandle}.jpg`; imgElement.onerror = function() { // Fallback to a colored background if image not found this.style.display = 'none'; swatch.style.backgroundColor = getColorForFinish(finishHandle); }; } }); // Helper function to generate colors for finishes when images are not available function getColorForFinish(finishHandle) { const colorMap = { 'black': '#000000', 'white': '#FFFFFF', 'silver': '#C0C0C0', 'gold': '#FFD700', 'bronze': '#CD7F32', 'copper': '#B87333', 'brass': '#B5A642', 'chrome': '#9E9E9E', 'nickel': '#727472', 'stainless': '#71797E', // Add more mappings as needed }; // Find a color match or use a default color for (const [key, value] of Object.entries(colorMap)) { if (finishHandle.includes(key)) { return value; } } // Random pastel color as fallback return `hsl(${Math.random() * 360}, 70%, 80%)`; } // Finish filter click handlers finishSwatches.forEach(swatch => { swatch.addEventListener('click', function() { const finishValue = this.getAttribute('data-filter-value'); const finishName = this.getAttribute('data-finish-name'); // Update active state document.querySelectorAll('.finish-swatch.active').forEach(el => { el.classList.remove('active'); }); allFinishesBtn.classList.remove('active'); this.classList.add('active'); // Update selected finish name display const selectedFinishNameEl = document.getElementById('selected-finish-name'); if (selectedFinishNameEl) { selectedFinishNameEl.textContent = finishName; } // Filter the product rows filterVariants(); }); }); // "All Finishes" button handler allFinishesBtn.addEventListener('click', function() { document.querySelectorAll('.finish-swatch.active').forEach(el => { el.classList.remove('active'); }); this.classList.add('active'); // Update selected finish name display const selectedFinishNameEl = document.getElementById('selected-finish-name'); if (selectedFinishNameEl) { selectedFinishNameEl.textContent = this.textContent.trim(); } // Show all variants (filtering will still respect other filters) filterVariants(); }); } // *** Other Options Filters *** const filterSelects = document.querySelectorAll('.filter-select'); const filterReset = document.querySelector('.filter-reset'); if (filterSelects.length > 0) { filterSelects.forEach(select => { select.addEventListener('change', function() { filterVariants(); }); }); if (filterReset) { filterReset.addEventListener('click', function() { filterSelects.forEach(select => { select.value = 'all'; }); // Reset finish filter too if (allFinishesBtn) { document.querySelectorAll('.finish-swatch.active').forEach(el => { el.classList.remove('active'); }); allFinishesBtn.classList.add('active'); const selectedFinishNameEl = document.getElementById('selected-finish-name'); if (selectedFinishNameEl) { selectedFinishNameEl.textContent = allFinishesBtn.textContent.trim(); } } filterVariants(); }); } } // *** Variant Filtering Function *** function filterVariants() { const rows = document.querySelectorAll('.order-matrix-row'); let visibleCount = 0; // Build filter criteria const filters = {}; // Get finish filter const activeFinishSwatch = document.querySelector('.finish-swatch.active'); if (activeFinishSwatch) { const finishGroup = activeFinishSwatch.closest('.finish-filter-section').getAttribute('data-filter-group'); filters[finishGroup] = activeFinishSwatch.getAttribute('data-filter-value'); } // Get dropdown filters document.querySelectorAll('.filter-select').forEach(select => { const value = select.value; const group = select.getAttribute('data-filter-name'); if (value !== 'all') { filters[group] = value; } }); // Apply filters to rows rows.forEach(row => { let showRow = true; // Check each filter criteria for (const [group, value] of Object.entries(filters)) { const rowValue = row.getAttribute(`data-option-${group}`); if (rowValue !== value) { showRow = false; break; } } // Show/hide based on filter match if (showRow) { row.style.display = ''; visibleCount++; } else { row.style.display = 'none'; } // Always remove the "hidden-variant" class when filtering row.classList.remove('hidden-variant'); }); // Show no results message if needed const noResultsMessage = document.querySelector('.no-results-message'); if (noResultsMessage) { if (visibleCount === 0) { noResultsMessage.style.display = 'block'; } else { noResultsMessage.style.display = 'none'; } } // Reset the "View all options" toggle state const viewOptionsToggle = document.getElementById('view-options-toggle'); if (viewOptionsToggle) { viewOptionsToggle.classList.remove('expanded'); // Update toggle text const totalVariants = rows.length; viewOptionsToggle.innerHTML = ` View all options (${totalVariants}) `; // Hide toggle if all variants are already visible due to filtering viewOptionsToggle.style.display = visibleCount === rows.length ? 'none' : ''; } } // *** "See finishes in motion" Link *** const seeFinishesLink = document.getElementById('seeFinishesLink'); const finishesExpandable = document.getElementById('finishesExpandable'); if (seeFinishesLink && finishesExpandable) { seeFinishesLink.addEventListener('click', function() { finishesExpandable.classList.toggle('active'); // Update the icon const iconPlus = this.querySelector('.icon-plus'); const iconX = this.querySelector('.icon-x'); if (finishesExpandable.classList.contains('active')) { iconPlus.style.opacity = '0'; iconX.style.opacity = '1'; } else { iconPlus.style.opacity = '1'; iconX.style.opacity = '0'; } // Initialize the Reeview widget if needed if (finishesExpandable.classList.contains('active')) { // This is a placeholder for integration with the Reeview app // In a real implementation, you would initialize the Reeview widget here console.log('Initializing Reeview widget'); } }); } // *** Variant Image Modal *** const variantImageContainers = document.querySelectorAll('.variant-image-container'); const imageModal = document.querySelector('.variant-image-modal'); const modalImage = imageModal ? imageModal.querySelector('.modal-image') : null; const modalClose = imageModal ? imageModal.querySelector('.modal-close') : null; if (variantImageContainers.length > 0 && imageModal && modalImage) { variantImageContainers.forEach(container => { container.addEventListener('click', function() { const fullImageUrl = this.getAttribute('data-full-img'); modalImage.src = fullImageUrl; imageModal.style.display = 'flex'; document.body.style.overflow = 'hidden'; // Prevent scrolling while modal is open }); }); if (modalClose) { modalClose.addEventListener('click', function() { imageModal.style.display = 'none'; document.body.style.overflow = ''; }); } // Close modal when clicking outside the image imageModal.addEventListener('click', function(e) { if (e.target === this) { this.style.display = 'none'; document.body.style.overflow = ''; } }); } // *** Quote Request Modal *** const requestQuoteBtn = document.getElementById('request-quote-btn'); const quoteModal = document.querySelector('.quote-modal'); const quoteClose = quoteModal ? quoteModal.querySelector('.modal-close') : null; const quoteCancel = quoteModal ? quoteModal.querySelector('.quote-cancel') : null; const quoteForm = quoteModal ? quoteModal.querySelector('.quote-form') : null; if (requestQuoteBtn && quoteModal) { requestQuoteBtn.addEventListener('click', function() { // Populate selected items in the quote form const quoteItemsList = document.getElementById('quote-items-list'); const quoteDetails = document.getElementById('quote-details'); if (quoteItemsList && quoteDetails) { quoteItemsList.innerHTML = ''; let itemsHTML = ''; let detailsText = 'Quote Request\n\nSelected Items:\n'; let hasItems = false; document.querySelectorAll('.qty-input').forEach(input => { const quantity = parseInt(input.value) || 0; if (quantity > 0) { hasItems = true; const variantTitle = input.getAttribute('data-variant-title'); const variantId = input.getAttribute('data-variant-id'); itemsHTML += `
${variantTitle}
Quantity: ${quantity}
`; detailsText += `\n- ${variantTitle} (Qty: ${quantity})`; } }); if (hasItems) { quoteItemsList.innerHTML = itemsHTML; quoteDetails.value = detailsText; // Show the modal quoteModal.style.display = 'flex'; document.body.style.overflow = 'hidden'; } else { alert('Please select at least one item before requesting a quote.'); } } }); // Close quote modal if (quoteClose) { quoteClose.addEventListener('click', function() { quoteModal.style.display = 'none'; document.body.style.overflow = ''; }); } if (quoteCancel) { quoteCancel.addEventListener('click', function() { quoteModal.style.display = 'none'; document.body.style.overflow = ''; }); } // Submit quote form if (quoteForm) { quoteForm.addEventListener('submit', function(e) { // Add any additional form validation here if needed // Get additional comments and append to details const comments = document.getElementById('quote-comments'); const quoteDetails = document.getElementById('quote-details'); if (comments && quoteDetails && comments.value.trim() !== '') { quoteDetails.value += '\n\nAdditional Comments:\n' + comments.value; } // Form will be submitted normally }); } // Close modal when clicking outside the form quoteModal.addEventListener('click', function(e) { if (e.target === this) { this.style.display = 'none'; document.body.style.overflow = ''; } }); } // Initialize the page on load function initializeMatrixOnLoad() { // Update totals for any pre-filled quantities document.querySelectorAll('.qty-input').forEach(input => { updateRowTotal(input); updateRowAddButton(input); }); // Update cart total updateCartTotal(); // Check for URL parameters const urlParams = new URLSearchParams(window.location.search); if (urlParams.has('quote_submitted') && urlParams.get('quote_submitted') === 'true') { // Show a success message for quote submission const quoteSuccessMessage = document.createElement('div'); quoteSuccessMessage.className = 'quote-success-message'; quoteSuccessMessage.style.cssText = 'padding: 15px; background-color: #f8f9fa; border: 1px solid #d1e7dd; color: #0f5132; margin-bottom: 20px; border-radius: 4px; text-align: center;'; quoteSuccessMessage.textContent = 'Your quote request has been submitted successfully. We will contact you shortly.'; const matrixContainer = document.querySelector('.order-matrix-container'); if (matrixContainer) { matrixContainer.insertBefore(quoteSuccessMessage, matrixContainer.firstChild); // Auto-dismiss after 5 seconds setTimeout(() => { quoteSuccessMessage.style.display = 'none'; }, 5000); } } } // Run initialization initializeMatrixOnLoad(); });
Complimentary Delivery
Two Year Warranty
Trade & Bulk Discounts
Carbon-neutral shipping on all orders More info

Introducing the CYRA Solid Brass Knobs, a sophisticated addition to any interior space, blending classic design with robust functionality. Crafted from 100% solid brass, these knobs come in a striking Distressed Antique Brass finish, offering both durability and timeless appeal.

The CYRA knobs are available in two styles: a standalone knob and a knob with a baseplate variation. The standalone knob provides a sleek and minimalist look, perfect for adding a touch of elegance to cabinets, drawers, and furniture. The knob with a baseplate variation offers additional practical benefits, including enhanced stability and protection for your surfaces. The baseplate is particularly useful for covering any existing holes or imperfections, ensuring a clean and polished appearance.

Ideal for a variety of applications, the CYRA Solid Brass Knobs are designed to complement a wide range of interior styles, from traditional to contemporary. Their solid construction and exquisite finish make them a standout choice for those looking to elevate their home decor with quality hardware.

Material

Brass

Interior / Exterior use

Interior

Included

M4 x 25mm screws (larger screw sizes available upon request, please message us if you need anything longer)

Compatibility

IKEA PAX, HEMNES, KOPPANG & all other Ikea furniture. If you have questions around compatibility please get in touch.

Warranty

2 year warranty included

HEIGHT DIAMETER BASE WIDTH OF BASE NET WEIGHT (G)
28MM 32MM 10MM 85
28MM 32MM 62MM 25MM 125
HEIGHT DIAMETER BASE WIDTH OF BASE NET WEIGHT (G)
28MM 32MM 10MM 85
28MM 32MM 62MM 25MM 125

Plated finishes

Distressed Antique Brass

We recommend the occasional use of a soft cloth and the use of a quality metal polish will help preserve the finish. We plate each handle to maintain the matte finish and slow down the natural process of oxidisation over time.

For all customers based in the UK, EU and North Americas, customs and duties are included as standard. There are no extra fees applied to your order. The price you see and pay at checkout is the final price.

This product is made to order as part of our commitment to sustainable manufacturing and shipped 10-28 working days from your order date.

All returns must be postmarked within ninety (90) days of the date of receipt. All returned items must be in be in new and unused condition, with all original tags and labels attached. For more information, please read our delivery and returns policy.

All our products come with a standard 2-year warranty covering manufacturing defects. Please contact our customer service team for warranty claims.

*Warranty terms and conditions apply. Warranty does not cover normal wear and tear or damage caused by improper use.


CYRA Solid Brass Knobs - meraki.

CYRA Solid Brass Knobs

 More payment options

Made from 100% solid brass

Budget-Friendly, Luxury Brassware

Premium quality finishes that don't cost a fortune. Don't compromise on your interior design goals.

Supreme Build Quality

Designed to stand the test of time, our hardware is an essential detail that'll elevate your living spaces and serve you for years to come.

90-Day Hassle-Free Returns

90 day returns and exchanges for all customers, providing you with total peace of mind.

Part ways with the mediocre hardware and achieve dream design goals.

We make beautiful, well-crafted brass handles and hardware for your home. Our mission is to fuel your creativity and help you bring your projects to life. Our products are designed to be simple, timeless, durable, sustainable and elegant, and we take pride in our attention to detail and craftsmanship.

221,878+

happy customers

Recently Viewed Products

Apply for a professional account

Apply for access to our trade pricing for industry professionals — designers, creators and developers.