Products

ZO Complexion Clearing Program Kit for Acne

ZO products are only available through specialist clinics and a phone consultation before purchase. Please submit your enquiry below and our skin will be in touch to discuss the best products for your needs.

The ZO Complexion Clearing kit from ZO Skin Health, helps you combat acne . By combining different products, this program treats clogged pores, blackheads (comedones), papules and pustules (pimples/spots) and cysts. It can also be used to help defend against acne breakouts.

The ZO Skin Health Program is a regimen to reduce oil, unclog pores, Nasolabial Fold (Smile Line Fillers) and cleanse skin to stop outbreaks in the future.

Fresh stock and the newest packaging of the ZO Skin Health Skin Normalizing System are offered Face the Future, a ZO-approved skin clinic, as well as other authorised ZO .

ZO Complexion Clearing Program benefits include:

Included in the ZO Skin Health Program are:

ZO Skin Health Exfoliating Cleanser: This gentle targets surface oil and is ideal for normal to oily skin types. It leaves the skin feeling clean without being stripped or dry.

Exfoliating Polish by ZO Skin Health – Dead skin cells are by magnesium crystals, resulting in a that is clear, smooth, and evenly toned.

Pads for complexion from ZO Skin Health – pads help reduce surface oil and scrub away debris and dead skin cells that block pores.

An treatment for acne-prone skin, ZO Skin Health Complexion Clearing Masque surface oils, dead skin cells, and removes debris that can clog pores.

? Why not try the to go with it!

The kit the from ZO Skin Health:

– 200ml

Polish – 65g

Renewal Pads – 60 Pads

Sulfur Masque – 85g


Please refer to product for instructions.

Please refer to product for ingredients.

Reviews

There are no reviews yet.

You must be to post a review.

Related products

ZO Soothing Hydro Mist

ZO Peptide Facial Refining Concentrate

Intradermology Synergy6 SPF50

Vie Aesthetics Hyaluronic Acid Gold Eye Patches

No reviews

var hasJQuery = document.getElementById(‘yext-jquery’);

var head = document.getElementsByTagName(‘head’)[0];

if (hasJQuery === null)

var jQueryScript = document.createElement(‘script’);

jQueryScript.type = ‘text/javascript’;

jQueryScript.src = ‘//sites.yext.com/static/jquery-1.12.4.min.js’;

jQueryScript.id = ‘yext-jquery’;

var loaded = false;

jQueryScript.onload = jQueryScript.onreadystatechange = function() var state = this.readyState; if (!loaded && (!state ; head.appendChild(jQueryScript);

onJQuery(function() var hasYextFotorama = document.getElementById(‘yext-fotorama’) !== null;

if (!hasYextFotorama) var fotorama = document.createElement(“script”); fotorama.id = ‘yext-fotorama’; fotorama.type = “text/javascript”; fotorama.src = “//sites.yext.com/static/fotorama-4.4.4.js”; head.appendChild(fotorama);

var script = document.createElement(“script”);

script.type = “text/javascript”;

head.appendChild(script); script.text = ‘yext.$(\u0022#yext-widget .js-yext-reviews.yext-widget-uuid-c6f8b24c-a2b4-40cd-a2e6-fd9a229f9e11\u0022).ready(function() var $ = yext.$, $widget = $(\u0022#yext-widget .js-yext-reviews.yext-widget-uuid-c6f8b24c-a2b4-40cd-a2e6-fd9a229f9e11\u0022), $buttonsWrapper = $widget.find(\u0022.yext-reviews-body\u0022).find(\u0022.yext-pagination\u0022), $buttons = $buttonsWrapper.find(\u0022.js-yext-pagination-button\u0022), $page = $widget.find(\u0022.yext-reviews-page\u0022), $popup = $widget.find(\u0022.popup-body\u0022), $popupButtonsWrapper = $popup.find(\u0022.yext-pagination\u0022), $popupButtons = $popupButtonsWrapper.find(\u0022.js-yext-pagination-button\u0022), $star = $widget.find(\u0022.yext-reviews-star\u0022); var paginationIndex = 0, size = 5, maxScore = 5, total = $widget.data(\u0022review-total\u0022), numPages = Math.ceil(total\/size), numLinks = Math.min(5, numPages); \/** * Wait for widget to load and then fire the \u0022yext-widget-loaded\u0022 event *\/ var waitForWidgetReady = function() setTimeout(function() if ($widget.is(\u0022:visible\u0022)) $widget.trigger(\u0022yext-widget-loaded\u0022); else waitForWidgetReady(); , 200); ; \/** * Update the pagination buttons based on the current page number *\/ var updatePaginationButtons = function($buttons) \/* Only show pagination buttons if there is more than one page. *\/ const $paginationSection = $buttons.parent(); if (numPages \u003e 1) const selectedButtonClasses = \u0022yext-bg-color-text yext-text-color-bg selected\u0022; $buttons .removeAttr(\u0022style\u0022) .hide() .removeClass(selectedButtonClasses); var offset = Math.min(numPages – numLinks, Math.max(0, Math.ceil(paginationIndex – numLinks\/2))); for (var i = offset; i \u003c offset \u002b numLinks; i\u002b\u002b) var $button = $buttons.eq(i); if (paginationIndex === i) $button.addClass(selectedButtonClasses); $button.show(); $(\u0022.js-yext-back\u0022).toggleClass(\u0022arrow-invisible\u0022, paginationIndex === 0); $(\u0022.js-yext-forward\u0022).toggleClass(\u0022arrow-invisible\u0022, paginationIndex === numPages – 1); $paginationSection.fadeIn(\u0022slow\u0022); else $paginationSection.hide(); ; \/* * Truncates reviews that are too long. Clicking a long review expands it. *\/ var handleLongReviews = function($widget) $widget.find(\u0022.js-review-message\u0022).each(function() var $self = $(this); var $reviewContent = $self.find(\u0022.review-content\u0022); var originalContent = $reviewContent.text(); var truncatedContent = originalContent.substr(0, 255); if (truncatedContent !== originalContent) $reviewContent.text(truncatedContent \u002b \u0022…\u0022); $reviewContent.css(\u0022cursor\u0022, \u0022pointer\u0022); $reviewContent.on(\u0022click\u0022, function() $reviewContent.text(originalContent); $reviewContent.css(\u0022cursor\u0022, \u0022\u0022); ); ); ; \/* * Bind forward\/back listeners for reviews. *\/ var bindMoveReviews = function($widget) $widget.on(\u0022click\u0022, \u0022.js-yext-back\u0022, function() if (paginationIndex === 0) return; paginationIndex–; updatePage(); ); $widget.on(\u0022click\u0022, \u0022.js-yext-forward\u0022, function() if (paginationIndex === numPages-1) return; paginationIndex\u002b\u002b; updatePage(); ); $widget.on(\u0022click\u0022, \u0022.js-yext-pagination-button\u0022, function() const clickedPageNumber = $(this).data(\u0022page-number\u0022); if (paginationIndex !== clickedPageNumber) paginationIndex = clickedPageNumber; updatePage(); ); ; \/* * Binds the popup navigation link *\/ var bindPopupNavigation = function() var $popupContent = $widget.find(\u0022.js-yext-reviews-popup\u0022); $widget.on(\u0022click\u0022, \u0022.js-yext-review-nav-popup\u0022, function() $popupContent.dialog( closeOnEscape: false, draggable: false, modal: true, resizable: false, title: \u0022Reviews\u0022, height: 550, width: 375, dialogClass: \u0022yext-widget-popup yext-reviews js-yext-reviews\u0022 ); ); ; \/** * Update stars based on its score stored in data tag. *\/ var updateStars = function() $(\u0022.js-stars\u0022).each(function() var $self = $(this); if ($self.hasClass(\u0022header-stars\u0022) \u0026\u0026 $self.html().length) return true; var score = $self.data(\u0022score\u0022); $self.empty(); for (var i = 1; i \u003c= Math.floor(score); i \u002b\u002b) $self.append($star.filter(\u0022.full\u0022).clone().show()); if (Math.floor(score) != Math.ceil(score)) $self.append($star.filter(\u0022.half\u0022).clone().show()); for (var i = Math.ceil(score); i \u003c maxScore; i \u002b\u002b) $self.append($star.filter(\u0022.empty\u0022).clone().show()); $self.find(\u0022\u003e:first-child\u0022).attr(\u0022alt\u0022, score \u002b \u0022 stars out of 5\u0022) ); ; \/** * Send cross-domain ajax call to fetch reviews in the new page. *\/ var updatePage = function() if (paginationIndex \u003e numPages – 1) return; $page.fadeOut(\u0022slow\u0022, function() var script = document.createElement(\u0022script\u0022); script.src = \u0022\/\/sites.yext.com\/reviews\/343050?callback=yext_render_reviews_343050\u0026\u0026pageNumber=\u0022\u002bpaginationIndex; var scriptParent = getScriptParentElement_(); scriptParent.appendChild(script); $buttonsWrapper.hide(); $popupButtonsWrapper.hide(); ); ; \/** * Gets the DOM element under which we should add new script elements. * How? Take the first head element, and if not found take doc.documentElement, * which always exists. * source: https:\/\/github.com\/google\/closure-library\/blob\/f1343d3b4f7673a2f2d829da635f8c4a331dd124\/closure\/goog\/net\/jsloader.js#L305 * * @return !Element The script parent element. * @private *\/ var getScriptParentElement_ = function() headElements.length == 0) return document.documentElement; else return headElements[0]; ; \/** * Ajax callback function to render reviews. * * @param html string callback html *\/ window.yext_render_reviews_ = function(html) $page .html(html) .fadeIn(\u0022slow\u0022); updateStars(); updatePaginationButtons($buttons); updatePaginationButtons($popupButtons); handleLongReviews($page); ; var bindPageButtons = function(page) bindMoveReviews(page); handleLongReviews(page); ; \/** Handle the initialization of the yext widget. *\/ waitForWidgetReady(); $widget.on(\u0022yext-widget-loaded\u0022, function() bindPageButtons($widget); bindPageButtons($popup); bindPopupNavigation(); updateStars(); updatePaginationButtons($buttons); updatePaginationButtons($popupButtons); ); ); ‘;

);

function onJQuery(cb)

if (!window.yext_jQuery) setTimeout(function() onJQuery(cb); , 100);

else cb();

(function()

function firePixel() var img = document.createElement(“img”); img.setAttribute(“src”, “//us.yextevents.com/plpixel?pid=jLO3skWo0D&action=impression&businessids= &source=reviews”); img.style.display = “none”; img.setAttribute(“width”, “1”); img.setAttribute(“height”, “1”); img.setAttribute(“alt”, “”); document.getElementsByTagName(“body”)[0].appendChild(img);

firePixel();

)();

About Author

Leave a Reply

Leave a Reply

Your email address will not be published. Required fields are marked *