Cash on Delivery to Japan,Taiwan HongKong and Singapore ,Free shipping over USD$59
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
1 / 12
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
✨Tile Grout Cleaner Sprayer✨
You May Also Like Don't Like These?
mysite

✨Tile Grout Cleaner Sprayer✨

$12.99 $24.99
0 sold
QTY
Qty 998 in stock

Tile crevices are often the hardest to clean, and this powerful tile cleaner makes it easy and efficient!

FEATURES

  • The Ultimate Grout Cleaner: tile cleaner removes tough stains in no time, acid-free safe deep cleaner and stain remover for the dirtiest grout, the best way to clean ceramic and marble grout. Wait 3-5 minutes for the cleaner to blend with the stain, then gently rub the stain with a brush and rag for a thorough clean. Leaves you with clean floors and a refreshed house in no time!

  • Guaranteed to clean the dirtiest grout: This is the best professional grout cleaner for tile floors! It makes dirt, grease, food spills and soap scum disappear without a trace. works wonders on tile, grout, fixtures, sinks, toilet seats, bathtubs, even on your shower's walls, doors and curtains. Save money and do it yourself!

  • When the floors are clean, the whole house is clean. Our formula will protect the grout and restore the color to like new. It can be used with a grout brush or a grout steam cleaner.With a steady, focused stream, this grout cleaner is made with no petroleum solvents, chlorine or bleach, added parabens, SLS or SLES - making it gentler on your eyes, nose and skin.

  • EARTH FRIENDLY PRODUCTS: Give a better life to the next generation and avoid the use of harsh industrial ingredients. Our line of gentle bathroom cleaning supplies uses some plant-derived elements that are kinder to children and pets.We control the entire process. We formulate, test, fill, label and ship all of our own formulas. You can rest assured that Ultimate Grout Cleaner will exceed your expectations every time you use it.

  • FOR BEST RESULTS: Apply and let sit for 3 to 5 minutes.

  • Ingredients: deionized water, surfactants, lemon extract, baking soda, sodium percarbonate, tea tree oil, harmless for grout, tile surface, wood floor, etc

SPECIFICATIONS

  • Capacity: 100 ml

  • Weight: 139g

  • Ingredients: Deionized Water, Surfactants, Lemon Extract, Baking Soda, Sodium Percarbonate, Tea Tree Oil

  • Size:

  • Package: 1 * Tile Grout Cleaner Sprayer 

NOTE

  • Please allow slight measurement deviations due to manual measurement.

  • Due to the different monitor and light effect, the actual color of the item might be slightly different from the color showed in the pictures.

You May Also Like Don't Like These?
const TAG = 'spz-custom-painter-button-animation'; const MAX_ITERATION_COUNT = 99999999; const SITE = (window.C_SETTINGS && window.C_SETTINGS.routes && window.C_SETTINGS.routes.root) || ''; const ADD_TO_CART_ANIMATION_SETTING = `${SITE}/api/marketing_atmosphere_app/add_to_cart_btn_animation/setting`; class SpzCustomPainterButtonAnimation extends SPZ.BaseElement { /**@override */ static deferredMount() { return false; } /** @param {!SpzElement} element */ constructor(element) { super(element); /** @private {!../../src/service/xhr-impl.Xhr} */ this.xhr_ = SPZServices.xhrFor(this.win); /** @private {Object} */ this.data_ = null; /** @private {Element} */ this.addToCartButton_ = null; /** @private {boolean} */ this.productAvailable_ = true; /** @private {number} */ this.timerId_ = null; /** @private {number} */ this.animationExecutionCount_ = 0; /** @private {boolean} */ this.selectedVariantAvailable_ = true; /** @private {number} */ this.delay_ = 5000; /** @private {number} */ this.iterationCount_ = 5; /** @private {string} */ this.animationClass_ = ''; } /** @override */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** @override */ buildCallback() { this.productAvailable_ = this.element.hasAttribute('product-available'); this.selectedVariantAvailable_ = this.element.hasAttribute('selected-variant-available'); } /** @override */ mountCallback() { this.render_(); } /** @private */ render_() { if (!this.productAvailable_) { return; } this.fetch_().then((data) => { if (!data) { return; } this.data_ = data; this.animationClass_ = `painter-${data.animation_name}-animation`; this.iterationCount_ = data.animation_iteration_count === 'infinite' ? MAX_ITERATION_COUNT : data.animation_iteration_count; const animationDuration = 1; const animationDelay = data.animation_delay || 5; this.delay_ = (animationDuration + animationDelay) * 1000; this.handleButtonEffect_(); }); } /** * @param {JsonObject} data * @return {(null|Object)} * @private */ parseJson_(data) { try { return JSON.parse(data); } catch (e) { return null; } } /** * @return {Promise} * @private */ fetch_() { return this.xhr_.fetchJson(ADD_TO_CART_ANIMATION_SETTING).then((data) => { if (!data || !data.enabled) { return null; } return this.parseJson_(data.detail); }); } /** @private */ getAddToCartButton_() { this.addToCartButton_ = SPZCore.Dom.scopedQuerySelector( document.body, '[data-section-type="product"] [role="addToCart"], [data-section-type="product_detail"] [role="addToCart"], [data-section-type="product_detail"] [data-click="addToCart"], [data-section-type="product"] [data-click="addToCart"]' ); } /** @private */ restartAnimation_() { this.addToCartButton_.classList.remove(this.animationClass_); this.addToCartButton_./* OK */ offsetWidth; this.addToCartButton_.classList.add(this.animationClass_); this.animationExecutionCount_++; } /** @private */ clearTimer_() { this.win.clearInterval(this.timerId_); this.timerId_ = null; } /** @private */ setupTimer_() { this.timerId_ = this.win.setInterval(() => { this.restartAnimation_(); if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); this.clearTimer_(); } }, this.delay_); } /** @private */ restartTimer_() { if (this.animationExecutionCount_ >= this.iterationCount_) { this.removeAnimationClass_(); return; } this.setupTimer_(); } /** @private */ listenVariantChange_() { SPZUtils.Event.listen(self.document, 'dj.variantChange', (e) => { const selectedVariant = e.detail && e.detail.selected; if (!selectedVariant) { return; } const {available} = selectedVariant; if (this.selectedVariantAvailable_ !== available) { this.selectedVariantAvailable_ = available; this.clearTimer_(); if (available) { this.restartTimer_(); } } }); } /** @private */ removeAnimationClass_() { this.win.setTimeout(() => { this.addToCartButton_.classList.remove(this.animationClass_); }, 1000); } /** @private */ handleButtonEffect_() { this.getAddToCartButton_(); if (!this.addToCartButton_) { return; } if (this.selectedVariantAvailable_) { ++this.animationExecutionCount_; this.addToCartButton_.classList.add(this.animationClass_); if (this.iterationCount_ === 1) { this.removeAnimationClass_(); return; } this.setupTimer_(); } this.listenVariantChange_(); } } SPZ.defineElement(TAG, SpzCustomPainterButtonAnimation);