Skip Navigation



Countertops for Sale in Kelowna, BC

The countertops in your kitchen or bathroom play a variety of important roles in your space. These counters not only deliver a solid surface for you to use but also help to define the entire atmosphere and aesthetic of your room. That old, outdated countertop might still be the convenient, dependable surface you need, but the numerous nicks, scratches, and chips have dulled its luster, bringing down the entire aesthetic of your one beautiful kitchen. When it is time to update your counters, you need to turn to the professionals at Flooring Canada Kelowna. We provide countertops for sale in Kelowna, BC, that are going to help you create the look and feel you want for your space. Best of all, our quartz countertops remain affordable so you can feel confident in your purchase.

Quartz Stone Counters from Cambria™

There are many different brands of quartz stone countertops available to property owners, but we have found that nobody delivers the same quality as Cambria. That is why we are proud to exclusively work with this company to ensure that you only receive the finest countertop colors, designs, and options when you shop with us. With so many great Cambria quartz colors for you to choose from, you will find it easy to fall in love with your home all over again. These impressive designs help to breathe new life into your kitchen and bathrooms, which boosts the overall value of your home. Come and speak to one of the specialists at our showroom to discuss the ideas you have for your space, and learn how Cambria quartz countertops can easily fit into your design ideas and budget.

Say Goodbye to Temporary Fixes

Have you found yourself spending more and more time and money trying to fix issues with your current countertops? Instead of kicking the can down the street and wasting more of your precious resources, come and visit our showroom to find out how simple it is to maintain a brand-new quartz countertop. This resilient stone is naturally resistant to wear and tear and is non-porous, meaning it’s easy to keep clean. Remove that old and lifeless countertop by finding a brand-new Cambria quartz countertop at our showroom. We have something that is sure to fit your space and help you become proud of your kitchen, bathroom, or any other room with a countertop again. These new counters don’t just look great but can function well against almost any existing décor as well.

Contact us to learn more about the different Cambria countertops we have for sale. Our showroom is proud to provide high-quality countertops at affordable prices to homeowners throughout Kelowna, Summerland, Peachland, Penticton, and Naramata, British Columbia, as well as the surrounding area.

Contact Us

Name
Address
Make An Appointment
document.querySelectorAll("form:not(.filter-dropdown-wrapper)").forEach(elem => { elem.addEventListener('submit', function (event) { return handleFormSubmit(event, this); }) }); $(document).ready(function () { $("div.custom-form").each((index, element) => { const formData = $(element).data(); Object.keys(formData).forEach(key => { if (formData[key] == null || formData[key] === "") { delete formData[key]; } }); const queryString = $.param(formData); $.get("/custom/ajax/form?" + queryString, (response) => { $(element).html(response); // if any col-md-6 elements are present, and there are odd number of them switch the last one to col-md-12 const colMd6Elements = $(element).find('.col-md-6'); if (colMd6Elements.length > 0 && colMd6Elements.length % 2 !== 0) { colMd6Elements.last().removeClass('col-md-6').addClass('col-md-12'); } // Initialize Parsley validation const form = $(element).find("form"); form.parsley(); // Attach submit handler to the custom form form.on('submit', function (event) { return handleFormSubmit(event, this); }); //update hidden input PageURL and LeadSourceUrl to the current page URL const pageUrl = window.location.href; $(element).find('input[name="PageURL"]').val(pageUrl); $(element).find('input[name="LeadSourceUrl"]').val(pageUrl); }).fail(() => { console.error("Failed to load custom form."); }); }); }); function handleFormSubmit(event, cForm) { if (window.jQuery && $(cForm).parsley().isValid()) { event.preventDefault(); fetchLeadOrigin(cForm).then(() => { leadCleanUp(cForm); if (window.grecaptcha && window.globalRecaptchaKey) { grecaptcha.ready(function () { grecaptcha.execute(window.globalRecaptchaKey, { action: 'submit' }).then(function (token) { $(cForm).find('.g-recaptcha-response').val(token); handleFormSubmission(event, cForm); }); }); } else { handleFormSubmission(event, cForm); } }); } return false; } function leadCleanUp(cForm) { if ($("input[name='Phone']", $(cForm)).length > 0) { var cleanphone = $("input[name='Phone']", $(cForm)).val(); $("input[name='Phone']", $(cForm)).val(cleanphone.replace(/\D/g, '')) } if ($("input[name='CleanHomePhone']", $(cForm)).length > 0) { var cleanphone = $("input[name='CleanHomePhone']", $(cForm)).val(); $("input[name='CleanHomePhone']", $(cForm)).val(cleanphone.replace(/\D/g, '')) } if ($("input[name='CleanMobilePhone']", $(cForm)).length > 0) { var cleanphone = $("input[name='CleanMobilePhone']", $(cForm)).val(); $("input[name='CleanMobilePhone']", $(cForm)).val(cleanphone.replace(/\D/g, '')) } var notesField = $("input[name=OpportunityNotes]", $(cForm)); if (notesField.length == 0) { notesField = $("textarea[name=OpportunityNotes]", $(cForm)); } if (notesField, length > 0) { let messageField = $("textarea[name=MyMessage]", $(cForm)); if (messageField.length == 0) { messageField = $("textarea[name=Message]", $(cForm)); } var notesVal = ""; if (messageField && messageField.length > 0) { notesVal += messageField.val(); } $(".add-to-notes").each(function () { if ($(this).find("input").attr("name") && $(this).find("input").attr("name") !== undefined) { notesVal += "\n\n" + $(this).find("input").attr("name") + ": " + $(this).find("input").val(); } // Also check for select elements within .add-to-notes if ($(this).find("textarea").attr("name") && $(this).find("textarea").attr("name") !== undefined) { notesVal += "\n\n" + $(this).find("textarea").attr("name") + ": " + $(this).find("textarea").val(); } //if ($(this).find("input[type=checkbox]").attr("name") && $(this).find("input[type=checkbox]").attr("name") !== undefined) { // notesVal += "\n\n" + $(this).find("input[type=checkbox]").attr("name") + ": " + ($(this).find("input[type=checkbox]").is(":checked") ? "Yes" : "No"); //} //if ($(this).find("input[type=radio]:checked").attr("name") && $(this).find("input[type=radio]:checked").attr("name") !== undefined) { // notesVal += "\n\n" + $(this).find("input[type=radio]:checked").attr("name") + ": " + $(this).find("input[type=radio]:checked").val(); //} if ($(this).find("select").attr("name") && $(this).find("select").attr("name") !== undefined) { notesVal += "\n\n" + $(this).find("select").attr("name") + ": " + $(this).find("select").val(); } }) $(notesField).val(notesVal); } } function handleFormSubmission(event, cForm) { if (event.target.className.indexOf("external-form-handling") == -1) { if (event.target.className.indexOf("gnix-ajax-form") > -1) { submitViaAjax(cForm); } else { cForm.submit(); } } } function submitViaAjax(formElem) { /* get the action attribute from theelement */ var $form = $(formElem), url = $form.attr('action'); /* Send the data using post with element id name and name2*/ $form.children('[type=submit]').addClass("disabled"); var origText = $form.children('[type=submit]').html(); $form.children('[type=submit]').html(`
Loading...
`); if (!url) { url = window.location; } $.ajax({ url: url, type: 'POST', data: $form.serialize() }).done(function (result) { $form.addClass("d-none"); $form.parent().children("div.form-thank-you").removeClass("d-none"); }).fail(function (result) { // Try to parse the response text as JSON try { if (result.responseText) { const errorResponse = JSON.parse(result.responseText); handleServerValidationErrors($form, errorResponse); } } catch (e) { console.error("Could not parse error response:", e); } $form.children('[type=submit]').removeClass("disabled"); $form.children('[type=submit]').html(origText); }).always(function (result) { $form.children('[type=submit]').removeClass("disabled"); $form.children('[type=submit]').html(origText); }); } function handleServerValidationErrors($form, response) { // Check if we have errors to display in the ValidationProblemDetails format if (response && response.errors) { // Get all error fields const errorFields = Object.keys(response.errors); // Check if the only error is related to g-recaptcha const isOnlyCaptchaError = errorFields.length === 1 && errorFields[0] === "g-recaptcha"; // Only show captcha modal if it's the only error if (isOnlyCaptchaError) { showCaptchaModal(); } // Process each error field errorFields.forEach(function (fieldName) { const errorMessages = response.errors[fieldName]; if (fieldName && errorMessages && errorMessages.length > 0) { // Find the field by name const $field = $form.find(`[name="${fieldName}"]`); if ($field.length > 0) { // Get the Parsley instance for this field const fieldInstance = $field.parsley(); if (fieldInstance) { // Create a unique error name to avoid conflicts const errorName = fieldName + "-custom"; // Remove any existing errors with this name fieldInstance.removeError(errorName, { updateClass: true }); // Add the new error message fieldInstance.addError(errorName, { message: errorMessages[0], // Use the first error message updateClass: true }); // Remove existing event handlers to prevent duplicates $field.off('focus.customError input.customError change.customError'); // Add event handlers to clear errors when field is focused and then changed $field.on('focus.customError', function () { // Store reference to the field for the change event $(this).data('focused', true); }); // Handle input/change events $field.on('input.customError change.customError', function () { // Only process if field was previously focused if ($(this).data('focused') && $(this).val().trim() !== '') { const fieldInstance = $(this).parsley(); if (fieldInstance) { // Remove the custom error fieldInstance.removeError(errorName, { updateClass: true }); // If no other errors exist, remove error class if (fieldInstance.isValid()) { $(this).removeClass('parsley-error'); $(this).addClass('parsley-success'); } } } }); } } } }); // Focus on the first field with an error const $firstErrorField = $form.find('.parsley-error').first(); if ($firstErrorField.length > 0) { $firstErrorField.focus(); } } } async function fetchLeadOrigin(formElem) { var hiddenInput = $(formElem).find('input[name="__leadOrigin"]'); if (hiddenInput.length === 0) { // If the hidden input doesn't exist, create it hiddenInput = $('', { type: 'hidden', name: '__leadOrigin' }).appendTo(formElem); } try { const response = await fetch("https://api.ipify.org/?format=json"); const data = await response.json(); if (data) { // && data.serverVariables && data.serverVariables.RemoteIpAddress) { let leadOrigin = btoa(data.ip); hiddenInput.val(leadOrigin); } else { hiddenInput.val(btoa("0.0.0.0")); } } catch (error) { hiddenInput.val(btoa("0.0.0.0")); } }