





No image available
In High Demand|5% Oat Oil Gentle Makeup & Sunscreen Cleansing Balm| Face & Eye Makeup
USD 9.59
Beauty & Personal Care / Makeup / Face & Eye Makeup
Cleansing Balm
Melt Away Makeup. Leave Skin Comfortably Soft.
A nourishing cleansing balm designed to effortlessly dissolve makeup, sunscreen, and daily buildup without leaving skin feeling tight or stripped. The silky balm melts into a lightweight oil upon application, then transforms into a milky emulsion when rinsed with water.
Why You'll Love It
Three reasons it's the smarter way to cleanse your skin.
15% Oat Kernel Oil
Cleansing doesn't have to leave your skin feeling dry or uncomfortable. With 5% oat kernel oil, this balm helps deliver a nourishing layer of moisture while cleansing away makeup, sunscreen, and everyday impurities. The result is skin that feels soft, balanced, and comfortably clean.
2Makeup & Sunscreen Melting Power
From long-wear foundation to sunscreen and daily buildup, the balm melts smoothly across the skin to loosen stubborn products without aggressive rubbing. Massage for around 30 seconds, add water to emulsify, then rinse for a fresh, comfortable finish.
3Silky Balm-To-Milk Texture
The buttery balm melts into a smooth oil as you massage it over dry skin, then transforms into a lightweight milky texture when mixed with water. This easy rinse-off formula makes cleansing feel more like a comforting skincare ritual than a harsh daily step.
‹
›
Perfect For
Perfect for morning and evening cleansing, removing makeup after a long day, taking off sunscreen after outdoor activities, or as the first step of a double-cleansing routine. It's especially suited to dry, sensitive, dehydrated, or easily uncomfortable-feeling skin, while the nourishing balm texture makes it a beautiful addition to a relaxing nighttime skincare ritual. For an extra comforting treatment, apply a thin layer for around 10 minutes before gently massaging and rinsing.
Product Specifications
Product Type
Cleansing Balm
Key Ingredients
5% Oat Kernel Oil, Sea Buckthorn Oil
Texture
Silky Balm-to-Oil-to-Milk
Primary Use
Makeup, Sunscreen & Daily Impurity Removal
Skin Feel
Soft, Nourished & Comfortable
Skin Types
Suitable for All Skin Types, Including Dry and Sensitive-Feeling Skin
Cleansing Method
Massage onto Dry Skin, Add Water to Emulsify, Then Rinse
Recommended Use
Morning and Evening
Double Cleansing
Suitable as the First Cleansing Step
Optional Mask Use
Can be left on for approximately 10 minutes before rinsing
Finish
Clean, Soft & Non-Stripped Feeling
Care Instructions
Keep container tightly closed and store in a cool, dry place away from direct sunlight.
Customer Reviews
Emily R.
"I've tried quite a few cleansing balms, but this one has such a lovely texture. It melts almost immediately when I massage it in and takes off my foundation and sunscreen without all the rubbing."
Sarah M.
"Really gentle and easy to rinse off. My skin feels clean but comfortable."
Olivia T.
"I've been using this as the first step in my nighttime routine and absolutely love how effortlessly it removes makeup. My face feels moisturized and fresh rather than dry after cleansing."
Rachel K.
"Lovely texture and perfect for removing sunscreen at the end of the day."
‹
›
Frequently Asked Questions
QWhat does this cleansing balm remove?+It is designed to dissolve everyday makeup, sunscreen, long-wear cosmetic products, excess oil, and daily surface impurities.
QHow do I use the cleansing balm?+Apply a small amount to dry skin and massage gently for around 30 seconds. Add a little water to emulsify the balm into a milky texture, then rinse thoroughly with water.
QCan I use it on sensitive skin?+The formula is designed to provide a gentle, comfortable cleansing experience and is suitable for sensitive-feeling, dry, dehydrated, and easily uncomfortable skin.
QCan I use it as part of double cleansing?+Yes. It works well as the first step of a double-cleansing routine, especially when removing sunscreen or makeup before following with a water-based cleanser.
QCan I use it as a cleansing mask?+Yes. For a more nourishing cleansing ritual, apply a thin layer to the face and leave it on for approximately 10 minutes before gently massaging with water and rinsing.
Turn Cleansing Into A Comforting Ritual.
Melt away makeup, sunscreen, and daily buildup while giving your skin a more nourishing cleansing experience with 5% oat kernel oil and a silky balm-to-milk texture.
Make It Your First Step To Softer, Happier-Looking Skin
(function(){ // Initialize every carousel on the page independently (feature carousel + reviews carousel) var carousels = document.querySelectorAll('[data-carousel]'); carousels.forEach(function(carousel){ // Guard against this script block accidentally running twice on the same // carousel (e.g. if pasted in twice) — that would create two independent // timers, and stopping one would never actually stop the autoplay. if (carousel.getAttribute('data-bwc-init') === '1') return; carousel.setAttribute('data-bwc-init', '1'); var track = carousel.querySelector('[data-track]'); var slides = track.querySelectorAll('.bwc-carousel-slide'); var dotsWrap = carousel.querySelector('[data-dots]'); var prevBtn = carousel.querySelector('[data-prev]'); var nextBtn = carousel.querySelector('[data-next]'); var activeIndex = 0; var AUTOPLAY_DELAY = parseInt(carousel.getAttribute('data-autoplay'), 10) || 0; var autoplayEnabled = AUTOPLAY_DELAY > 0; // data-autoplay="0" (or omitted) means manual-only, no autoplay var carouselInView = false; // becomes true only once the carousel scrolls into view var paused = false; // true while the user is hovering, touching, or has just interacted var autoplayTimer = null; var resumeTimer = null; slides.forEach(function(slide, i){ var dot = document.createElement('button'); dot.type = 'button'; dot.className = 'bwc-carousel-dot' + (i === 0 ? ' active' : ''); dot.setAttribute('aria-label', 'Go to slide ' + (i + 1)); dot.addEventListener('click', function(){ goToSlide(i); pauseThenResume(); }); dotsWrap.appendChild(dot); }); var dots = dotsWrap.querySelectorAll('.bwc-carousel-dot'); // Scroll the track itself (horizontal only). Never use scrollIntoView here — // it can also scroll the whole page vertically to "reveal" the slide, which // yanks the page back up to this section if the user has scrolled past it. function goToSlide(i){ var slide = slides[i]; track.scrollTo({ left: slide.offsetLeft, behavior: 'smooth' }); } function updateActive(){ var trackRect = track.getBoundingClientRect(); var closest = 0, closestDist = Infinity; slides.forEach(function(slide, i){ var dist = Math.abs(slide.getBoundingClientRect().left - trackRect.left); if (dist < closestDist) { closestDist = dist; closest = i; } }); activeIndex = closest; dots.forEach(function(d, i){ d.classList.toggle('active', i === closest); }); } var scrollTimer; track.addEventListener('scroll', function(){ clearTimeout(scrollTimer); scrollTimer = setTimeout(updateActive, 80); }); function stepWidth(){ if (slides.length > 1) { return slides[1].offsetLeft - slides[0].offsetLeft; } return slides[0].getBoundingClientRect().width; } prevBtn.addEventListener('click', function(){ track.scrollBy({left: -stepWidth(), behavior:'smooth'}); pauseThenResume(); }); nextBtn.addEventListener('click', function(){ track.scrollBy({left: stepWidth(), behavior:'smooth'}); pauseThenResume(); }); function nextSlide(){ var next = (activeIndex + 1) % slides.length; goToSlide(next); } // A single persistent interval per carousel — it just checks the 'paused' // and 'carouselInView' flags on every tick rather than being torn down and // rebuilt on every interaction. function startAutoplay(){ if (!autoplayEnabled || autoplayTimer) return; autoplayTimer = setInterval(function(){ if (!paused && carouselInView) nextSlide(); }, AUTOPLAY_DELAY); } // Pause immediately on any interaction (hover, press, or touch). function pauseNow(){ paused = true; clearTimeout(resumeTimer); } // Resume right away (used when the mouse actually leaves the carousel). function resumeNow(){ clearTimeout(resumeTimer); paused = false; } // Pause immediately, and schedule an automatic resume a few seconds later — // this is the fallback for touch devices, which have no "mouse left" event. function pauseThenResume(){ pauseNow(); resumeTimer = setTimeout(resumeNow, 3000); } carousel.addEventListener('mouseenter', pauseNow); carousel.addEventListener('mouseleave', resumeNow); carousel.addEventListener('pointerdown', pauseThenResume); carousel.addEventListener('touchstart', pauseThenResume, {passive:true}); // Only autoplay while the carousel is actually on screen — the countdown // only starts once the user has scrolled to this section, not on page load. if (autoplayEnabled && 'IntersectionObserver' in window) { var io = new IntersectionObserver(function(entries){ entries.forEach(function(entry){ carouselInView = entry.isIntersecting; }); }, { threshold: 0.4 }); io.observe(carousel); } else { carouselInView = true; } startAutoplay(); updateActive(); });})();
(function(){ var accordion = document.querySelector('[data-accordion]'); if(!accordion) return; var buttons = accordion.querySelectorAll('.bwc-faq-q'); buttons.forEach(function(btn){ btn.addEventListener('click', function(){ var item = btn.closest('.bwc-faq-item'); var isOpen = item.classList.contains('open'); item.classList.toggle('open', !isOpen); btn.setAttribute('aria-expanded', String(!isOpen)); }); });})();
(function(){ // Elements matching these are almost always "related / recommended / upsell" // product widgets elsewhere on the page — never treat a button/form inside // one of these as this landing page's own add-to-cart control. var EXCLUDE_SELECTOR = [ '[class*="related"]','[id*="related"]', '[class*="recommend"]','[id*="recommend"]', '[class*="upsell"]','[id*="upsell"]', '[class*="cross-sell"]','[id*="cross-sell"]', '[class*="also-like"]','[id*="also-like"]', '[class*="complementary"]','[id*="complementary"]', '[class*="bundle"]','[id*="bundle"]', '[class*="quick-add"]','[id*="quick-add"]', '[class*="quick-buy"]','[id*="quick-buy"]', '[class*="product-card"]','[class*="product-grid-item"]', '[class*="trending"]','[class*="carousel-card"]' ].join(','); function isInsideExcludedWidget(el){ return !!el.closest(EXCLUDE_SELECTOR); } function findRealAddToCartButton(){ // 1) Most specific & reliable: the standard Shopify add-to-cart control, // name="add", that isn't sitting inside a recommendations/upsell widget. var named = document.querySelectorAll('button[name="add"], input[name="add"]'); for (var i = 0; i < named.length; i++) { if (!isInsideExcludedWidget(named[i]) && !named[i].classList.contains('bwc-add-to-cart')) { return named[i]; } } // 2) A real cart/add form, again skipping anything inside an excluded widget. var forms = document.querySelectorAll('form[action*="/cart/add"]'); for (var f = 0; f < forms.length; f++) { if (isInsideExcludedWidget(forms[f])) continue; var btn = forms[f].querySelector('button[name="add"], button[type="submit"], input[type="submit"]'); if (btn) return btn; } // 3) Last resort: visible text match, still excluding recommendation widgets. var all = document.querySelectorAll('button, input[type="submit"]'); for (var j = 0; j < all.length; j++) { var txt = (all[j].textContent || all[j].value || '').trim().toLowerCase(); if (txt.indexOf('add to cart') !== -1 && !all[j].classList.contains('bwc-add-to-cart') && !isInsideExcludedWidget(all[j])) { return all[j]; } } return null; } function bwcAddToCart(btn){ var realBtn = findRealAddToCartButton(); if (realBtn) { realBtn.click(); return; } var fallbackId = btn.getAttribute('data-fallback-variant'); if (!fallbackId || fallbackId === 'VARIANT_ID') { alert('Could not find the add-to-cart form on this page.'); return; } fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: fallbackId, quantity: 1 }) }).then(function(){ window.location.href = '/cart'; }); } document.addEventListener('click', function(e){ var btn = e.target.closest('.bwc-add-to-cart'); if (!btn) return; e.preventDefault(); bwcAddToCart(btn); });})();
Brand:mysiteSKU:PL0112260811746- Sweaters to makeup.
View productMelt Away Makeup. Leave Skin Comfortably Soft.
A nourishing cleansing balm designed to effortlessly dissolve makeup, sunscreen, and daily buildup without leaving skin feeling tight or stripped. The silky balm melts into a lightweight oil upon application, then transforms into a milky emulsion when rinsed with water.
Why You'll Love It
Three reasons it's the smarter way to cleanse your skin.
15% Oat Kernel Oil
Cleansing doesn't have to leave your skin feeling dry or uncomfortable. With 5% oat kernel oil, this balm helps deliver a nourishing layer of moisture while cleansing away makeup, sunscreen, and everyday impurities. The result is skin that feels soft, balanced, and comfortably clean.
2Makeup & Sunscreen Melting Power
From long-wear foundation to sunscreen and daily buildup, the balm melts smoothly across the skin to loosen stubborn products without aggressive rubbing. Massage for around 30 seconds, add water to emulsify, then rinse for a fresh, comfortable finish.
3Silky Balm-To-Milk Texture
The buttery balm melts into a smooth oil as you massage it over dry skin, then transforms into a lightweight milky texture when mixed with water. This easy rinse-off formula makes cleansing feel more like a comforting skincare ritual than a harsh daily step.
‹
›
Perfect For
Perfect for morning and evening cleansing, removing makeup after a long day, taking off sunscreen after outdoor activities, or as the first step of a double-cleansing routine. It's especially suited to dry, sensitive, dehydrated, or easily uncomfortable-feeling skin, while the nourishing balm texture makes it a beautiful addition to a relaxing nighttime skincare ritual. For an extra comforting treatment, apply a thin layer for around 10 minutes before gently massaging and rinsing.
Product Specifications
Product Type
Cleansing Balm
Key Ingredients
5% Oat Kernel Oil, Sea Buckthorn Oil
Texture
Silky Balm-to-Oil-to-Milk
Primary Use
Makeup, Sunscreen & Daily Impurity Removal
Skin Feel
Soft, Nourished & Comfortable
Skin Types
Suitable for All Skin Types, Including Dry and Sensitive-Feeling Skin
Cleansing Method
Massage onto Dry Skin, Add Water to Emulsify, Then Rinse
Recommended Use
Morning and Evening
Double Cleansing
Suitable as the First Cleansing Step
Optional Mask Use
Can be left on for approximately 10 minutes before rinsing
Finish
Clean, Soft & Non-Stripped Feeling
Care Instructions
Keep container tightly closed and store in a cool, dry place away from direct sunlight.
Customer Reviews
Emily R.
"I've tried quite a few cleansing balms, but this one has such a lovely texture. It melts almost immediately when I massage it in and takes off my foundation and sunscreen without all the rubbing."
Sarah M.
"Really gentle and easy to rinse off. My skin feels clean but comfortable."
Olivia T.
"I've been using this as the first step in my nighttime routine and absolutely love how effortlessly it removes makeup. My face feels moisturized and fresh rather than dry after cleansing."
Rachel K.
"Lovely texture and perfect for removing sunscreen at the end of the day."
‹
›
Frequently Asked Questions
QWhat does this cleansing balm remove?+It is designed to dissolve everyday makeup, sunscreen, long-wear cosmetic products, excess oil, and daily surface impurities.
QHow do I use the cleansing balm?+Apply a small amount to dry skin and massage gently for around 30 seconds. Add a little water to emulsify the balm into a milky texture, then rinse thoroughly with water.
QCan I use it on sensitive skin?+The formula is designed to provide a gentle, comfortable cleansing experience and is suitable for sensitive-feeling, dry, dehydrated, and easily uncomfortable skin.
QCan I use it as part of double cleansing?+Yes. It works well as the first step of a double-cleansing routine, especially when removing sunscreen or makeup before following with a water-based cleanser.
QCan I use it as a cleansing mask?+Yes. For a more nourishing cleansing ritual, apply a thin layer to the face and leave it on for approximately 10 minutes before gently massaging with water and rinsing.
Turn Cleansing Into A Comforting Ritual.
Melt away makeup, sunscreen, and daily buildup while giving your skin a more nourishing cleansing experience with 5% oat kernel oil and a silky balm-to-milk texture.
Make It Your First Step To Softer, Happier-Looking Skin
(function(){ // Initialize every carousel on the page independently (feature carousel + reviews carousel) var carousels = document.querySelectorAll('[data-carousel]'); carousels.forEach(function(carousel){ // Guard against this script block accidentally running twice on the same // carousel (e.g. if pasted in twice) — that would create two independent // timers, and stopping one would never actually stop the autoplay. if (carousel.getAttribute('data-bwc-init') === '1') return; carousel.setAttribute('data-bwc-init', '1'); var track = carousel.querySelector('[data-track]'); var slides = track.querySelectorAll('.bwc-carousel-slide'); var dotsWrap = carousel.querySelector('[data-dots]'); var prevBtn = carousel.querySelector('[data-prev]'); var nextBtn = carousel.querySelector('[data-next]'); var activeIndex = 0; var AUTOPLAY_DELAY = parseInt(carousel.getAttribute('data-autoplay'), 10) || 0; var autoplayEnabled = AUTOPLAY_DELAY > 0; // data-autoplay="0" (or omitted) means manual-only, no autoplay var carouselInView = false; // becomes true only once the carousel scrolls into view var paused = false; // true while the user is hovering, touching, or has just interacted var autoplayTimer = null; var resumeTimer = null; slides.forEach(function(slide, i){ var dot = document.createElement('button'); dot.type = 'button'; dot.className = 'bwc-carousel-dot' + (i === 0 ? ' active' : ''); dot.setAttribute('aria-label', 'Go to slide ' + (i + 1)); dot.addEventListener('click', function(){ goToSlide(i); pauseThenResume(); }); dotsWrap.appendChild(dot); }); var dots = dotsWrap.querySelectorAll('.bwc-carousel-dot'); // Scroll the track itself (horizontal only). Never use scrollIntoView here — // it can also scroll the whole page vertically to "reveal" the slide, which // yanks the page back up to this section if the user has scrolled past it. function goToSlide(i){ var slide = slides[i]; track.scrollTo({ left: slide.offsetLeft, behavior: 'smooth' }); } function updateActive(){ var trackRect = track.getBoundingClientRect(); var closest = 0, closestDist = Infinity; slides.forEach(function(slide, i){ var dist = Math.abs(slide.getBoundingClientRect().left - trackRect.left); if (dist < closestDist) { closestDist = dist; closest = i; } }); activeIndex = closest; dots.forEach(function(d, i){ d.classList.toggle('active', i === closest); }); } var scrollTimer; track.addEventListener('scroll', function(){ clearTimeout(scrollTimer); scrollTimer = setTimeout(updateActive, 80); }); function stepWidth(){ if (slides.length > 1) { return slides[1].offsetLeft - slides[0].offsetLeft; } return slides[0].getBoundingClientRect().width; } prevBtn.addEventListener('click', function(){ track.scrollBy({left: -stepWidth(), behavior:'smooth'}); pauseThenResume(); }); nextBtn.addEventListener('click', function(){ track.scrollBy({left: stepWidth(), behavior:'smooth'}); pauseThenResume(); }); function nextSlide(){ var next = (activeIndex + 1) % slides.length; goToSlide(next); } // A single persistent interval per carousel — it just checks the 'paused' // and 'carouselInView' flags on every tick rather than being torn down and // rebuilt on every interaction. function startAutoplay(){ if (!autoplayEnabled || autoplayTimer) return; autoplayTimer = setInterval(function(){ if (!paused && carouselInView) nextSlide(); }, AUTOPLAY_DELAY); } // Pause immediately on any interaction (hover, press, or touch). function pauseNow(){ paused = true; clearTimeout(resumeTimer); } // Resume right away (used when the mouse actually leaves the carousel). function resumeNow(){ clearTimeout(resumeTimer); paused = false; } // Pause immediately, and schedule an automatic resume a few seconds later — // this is the fallback for touch devices, which have no "mouse left" event. function pauseThenResume(){ pauseNow(); resumeTimer = setTimeout(resumeNow, 3000); } carousel.addEventListener('mouseenter', pauseNow); carousel.addEventListener('mouseleave', resumeNow); carousel.addEventListener('pointerdown', pauseThenResume); carousel.addEventListener('touchstart', pauseThenResume, {passive:true}); // Only autoplay while the carousel is actually on screen — the countdown // only starts once the user has scrolled to this section, not on page load. if (autoplayEnabled && 'IntersectionObserver' in window) { var io = new IntersectionObserver(function(entries){ entries.forEach(function(entry){ carouselInView = entry.isIntersecting; }); }, { threshold: 0.4 }); io.observe(carousel); } else { carouselInView = true; } startAutoplay(); updateActive(); });})();
(function(){ var accordion = document.querySelector('[data-accordion]'); if(!accordion) return; var buttons = accordion.querySelectorAll('.bwc-faq-q'); buttons.forEach(function(btn){ btn.addEventListener('click', function(){ var item = btn.closest('.bwc-faq-item'); var isOpen = item.classList.contains('open'); item.classList.toggle('open', !isOpen); btn.setAttribute('aria-expanded', String(!isOpen)); }); });})();
(function(){ // Elements matching these are almost always "related / recommended / upsell" // product widgets elsewhere on the page — never treat a button/form inside // one of these as this landing page's own add-to-cart control. var EXCLUDE_SELECTOR = [ '[class*="related"]','[id*="related"]', '[class*="recommend"]','[id*="recommend"]', '[class*="upsell"]','[id*="upsell"]', '[class*="cross-sell"]','[id*="cross-sell"]', '[class*="also-like"]','[id*="also-like"]', '[class*="complementary"]','[id*="complementary"]', '[class*="bundle"]','[id*="bundle"]', '[class*="quick-add"]','[id*="quick-add"]', '[class*="quick-buy"]','[id*="quick-buy"]', '[class*="product-card"]','[class*="product-grid-item"]', '[class*="trending"]','[class*="carousel-card"]' ].join(','); function isInsideExcludedWidget(el){ return !!el.closest(EXCLUDE_SELECTOR); } function findRealAddToCartButton(){ // 1) Most specific & reliable: the standard Shopify add-to-cart control, // name="add", that isn't sitting inside a recommendations/upsell widget. var named = document.querySelectorAll('button[name="add"], input[name="add"]'); for (var i = 0; i < named.length; i++) { if (!isInsideExcludedWidget(named[i]) && !named[i].classList.contains('bwc-add-to-cart')) { return named[i]; } } // 2) A real cart/add form, again skipping anything inside an excluded widget. var forms = document.querySelectorAll('form[action*="/cart/add"]'); for (var f = 0; f < forms.length; f++) { if (isInsideExcludedWidget(forms[f])) continue; var btn = forms[f].querySelector('button[name="add"], button[type="submit"], input[type="submit"]'); if (btn) return btn; } // 3) Last resort: visible text match, still excluding recommendation widgets. var all = document.querySelectorAll('button, input[type="submit"]'); for (var j = 0; j < all.length; j++) { var txt = (all[j].textContent || all[j].value || '').trim().toLowerCase(); if (txt.indexOf('add to cart') !== -1 && !all[j].classList.contains('bwc-add-to-cart') && !isInsideExcludedWidget(all[j])) { return all[j]; } } return null; } function bwcAddToCart(btn){ var realBtn = findRealAddToCartButton(); if (realBtn) { realBtn.click(); return; } var fallbackId = btn.getAttribute('data-fallback-variant'); if (!fallbackId || fallbackId === 'VARIANT_ID') { alert('Could not find the add-to-cart form on this page.'); return; } fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: fallbackId, quantity: 1 }) }).then(function(){ window.location.href = '/cart'; }); } document.addEventListener('click', function(e){ var btn = e.target.closest('.bwc-add-to-cart'); if (!btn) return; e.preventDefault(); bwcAddToCart(btn); });})();
Brand:mysiteSKU:PL0112260811746- Sweaters to makeup.
Product details
Cleansing Balm
Melt Away Makeup. Leave Skin Comfortably Soft.
A nourishing cleansing balm designed to effortlessly dissolve makeup, sunscreen, and daily buildup without leaving skin feeling tight or stripped. The silky balm melts into a lightweight oil upon application, then transforms into a milky emulsion when rinsed with water.
Why You'll Love It
Three reasons it's the smarter way to cleanse your skin.
15% Oat Kernel Oil
Cleansing doesn't have to leave your skin feeling dry or uncomfortable. With 5% oat kernel oil, this balm helps deliver a nourishing layer of moisture while cleansing away makeup, sunscreen, and everyday impurities. The result is skin that feels soft, balanced, and comfortably clean.
2Makeup & Sunscreen Melting Power
From long-wear foundation to sunscreen and daily buildup, the balm melts smoothly across the skin to loosen stubborn products without aggressive rubbing. Massage for around 30 seconds, add water to emulsify, then rinse for a fresh, comfortable finish.
3Silky Balm-To-Milk Texture
The buttery balm melts into a smooth oil as you massage it over dry skin, then transforms into a lightweight milky texture when mixed with water. This easy rinse-off formula makes cleansing feel more like a comforting skincare ritual than a harsh daily step.
‹
›
Perfect For
Perfect for morning and evening cleansing, removing makeup after a long day, taking off sunscreen after outdoor activities, or as the first step of a double-cleansing routine. It's especially suited to dry, sensitive, dehydrated, or easily uncomfortable-feeling skin, while the nourishing balm texture makes it a beautiful addition to a relaxing nighttime skincare ritual. For an extra comforting treatment, apply a thin layer for around 10 minutes before gently massaging and rinsing.
Product Specifications
Product Type
Cleansing Balm
Key Ingredients
5% Oat Kernel Oil, Sea Buckthorn Oil
Texture
Silky Balm-to-Oil-to-Milk
Primary Use
Makeup, Sunscreen & Daily Impurity Removal
Skin Feel
Soft, Nourished & Comfortable
Skin Types
Suitable for All Skin Types, Including Dry and Sensitive-Feeling Skin
Cleansing Method
Massage onto Dry Skin, Add Water to Emulsify, Then Rinse
Recommended Use
Morning and Evening
Double Cleansing
Suitable as the First Cleansing Step
Optional Mask Use
Can be left on for approximately 10 minutes before rinsing
Finish
Clean, Soft & Non-Stripped Feeling
Care Instructions
Keep container tightly closed and store in a cool, dry place away from direct sunlight.
Customer Reviews
Emily R.
"I've tried quite a few cleansing balms, but this one has such a lovely texture. It melts almost immediately when I massage it in and takes off my foundation and sunscreen without all the rubbing."
Sarah M.
"Really gentle and easy to rinse off. My skin feels clean but comfortable."
Olivia T.
"I've been using this as the first step in my nighttime routine and absolutely love how effortlessly it removes makeup. My face feels moisturized and fresh rather than dry after cleansing."
Rachel K.
"Lovely texture and perfect for removing sunscreen at the end of the day."
‹
›
Frequently Asked Questions
QWhat does this cleansing balm remove?+It is designed to dissolve everyday makeup, sunscreen, long-wear cosmetic products, excess oil, and daily surface impurities.
QHow do I use the cleansing balm?+Apply a small amount to dry skin and massage gently for around 30 seconds. Add a little water to emulsify the balm into a milky texture, then rinse thoroughly with water.
QCan I use it on sensitive skin?+The formula is designed to provide a gentle, comfortable cleansing experience and is suitable for sensitive-feeling, dry, dehydrated, and easily uncomfortable skin.
QCan I use it as part of double cleansing?+Yes. It works well as the first step of a double-cleansing routine, especially when removing sunscreen or makeup before following with a water-based cleanser.
QCan I use it as a cleansing mask?+Yes. For a more nourishing cleansing ritual, apply a thin layer to the face and leave it on for approximately 10 minutes before gently massaging with water and rinsing.
Turn Cleansing Into A Comforting Ritual.
Melt away makeup, sunscreen, and daily buildup while giving your skin a more nourishing cleansing experience with 5% oat kernel oil and a silky balm-to-milk texture.
Make It Your First Step To Softer, Happier-Looking Skin
(function(){ // Initialize every carousel on the page independently (feature carousel + reviews carousel) var carousels = document.querySelectorAll('[data-carousel]'); carousels.forEach(function(carousel){ // Guard against this script block accidentally running twice on the same // carousel (e.g. if pasted in twice) — that would create two independent // timers, and stopping one would never actually stop the autoplay. if (carousel.getAttribute('data-bwc-init') === '1') return; carousel.setAttribute('data-bwc-init', '1'); var track = carousel.querySelector('[data-track]'); var slides = track.querySelectorAll('.bwc-carousel-slide'); var dotsWrap = carousel.querySelector('[data-dots]'); var prevBtn = carousel.querySelector('[data-prev]'); var nextBtn = carousel.querySelector('[data-next]'); var activeIndex = 0; var AUTOPLAY_DELAY = parseInt(carousel.getAttribute('data-autoplay'), 10) || 0; var autoplayEnabled = AUTOPLAY_DELAY > 0; // data-autoplay="0" (or omitted) means manual-only, no autoplay var carouselInView = false; // becomes true only once the carousel scrolls into view var paused = false; // true while the user is hovering, touching, or has just interacted var autoplayTimer = null; var resumeTimer = null; slides.forEach(function(slide, i){ var dot = document.createElement('button'); dot.type = 'button'; dot.className = 'bwc-carousel-dot' + (i === 0 ? ' active' : ''); dot.setAttribute('aria-label', 'Go to slide ' + (i + 1)); dot.addEventListener('click', function(){ goToSlide(i); pauseThenResume(); }); dotsWrap.appendChild(dot); }); var dots = dotsWrap.querySelectorAll('.bwc-carousel-dot'); // Scroll the track itself (horizontal only). Never use scrollIntoView here — // it can also scroll the whole page vertically to "reveal" the slide, which // yanks the page back up to this section if the user has scrolled past it. function goToSlide(i){ var slide = slides[i]; track.scrollTo({ left: slide.offsetLeft, behavior: 'smooth' }); } function updateActive(){ var trackRect = track.getBoundingClientRect(); var closest = 0, closestDist = Infinity; slides.forEach(function(slide, i){ var dist = Math.abs(slide.getBoundingClientRect().left - trackRect.left); if (dist < closestDist) { closestDist = dist; closest = i; } }); activeIndex = closest; dots.forEach(function(d, i){ d.classList.toggle('active', i === closest); }); } var scrollTimer; track.addEventListener('scroll', function(){ clearTimeout(scrollTimer); scrollTimer = setTimeout(updateActive, 80); }); function stepWidth(){ if (slides.length > 1) { return slides[1].offsetLeft - slides[0].offsetLeft; } return slides[0].getBoundingClientRect().width; } prevBtn.addEventListener('click', function(){ track.scrollBy({left: -stepWidth(), behavior:'smooth'}); pauseThenResume(); }); nextBtn.addEventListener('click', function(){ track.scrollBy({left: stepWidth(), behavior:'smooth'}); pauseThenResume(); }); function nextSlide(){ var next = (activeIndex + 1) % slides.length; goToSlide(next); } // A single persistent interval per carousel — it just checks the 'paused' // and 'carouselInView' flags on every tick rather than being torn down and // rebuilt on every interaction. function startAutoplay(){ if (!autoplayEnabled || autoplayTimer) return; autoplayTimer = setInterval(function(){ if (!paused && carouselInView) nextSlide(); }, AUTOPLAY_DELAY); } // Pause immediately on any interaction (hover, press, or touch). function pauseNow(){ paused = true; clearTimeout(resumeTimer); } // Resume right away (used when the mouse actually leaves the carousel). function resumeNow(){ clearTimeout(resumeTimer); paused = false; } // Pause immediately, and schedule an automatic resume a few seconds later — // this is the fallback for touch devices, which have no "mouse left" event. function pauseThenResume(){ pauseNow(); resumeTimer = setTimeout(resumeNow, 3000); } carousel.addEventListener('mouseenter', pauseNow); carousel.addEventListener('mouseleave', resumeNow); carousel.addEventListener('pointerdown', pauseThenResume); carousel.addEventListener('touchstart', pauseThenResume, {passive:true}); // Only autoplay while the carousel is actually on screen — the countdown // only starts once the user has scrolled to this section, not on page load. if (autoplayEnabled && 'IntersectionObserver' in window) { var io = new IntersectionObserver(function(entries){ entries.forEach(function(entry){ carouselInView = entry.isIntersecting; }); }, { threshold: 0.4 }); io.observe(carousel); } else { carouselInView = true; } startAutoplay(); updateActive(); });})();
(function(){ var accordion = document.querySelector('[data-accordion]'); if(!accordion) return; var buttons = accordion.querySelectorAll('.bwc-faq-q'); buttons.forEach(function(btn){ btn.addEventListener('click', function(){ var item = btn.closest('.bwc-faq-item'); var isOpen = item.classList.contains('open'); item.classList.toggle('open', !isOpen); btn.setAttribute('aria-expanded', String(!isOpen)); }); });})();
(function(){ // Elements matching these are almost always "related / recommended / upsell" // product widgets elsewhere on the page — never treat a button/form inside // one of these as this landing page's own add-to-cart control. var EXCLUDE_SELECTOR = [ '[class*="related"]','[id*="related"]', '[class*="recommend"]','[id*="recommend"]', '[class*="upsell"]','[id*="upsell"]', '[class*="cross-sell"]','[id*="cross-sell"]', '[class*="also-like"]','[id*="also-like"]', '[class*="complementary"]','[id*="complementary"]', '[class*="bundle"]','[id*="bundle"]', '[class*="quick-add"]','[id*="quick-add"]', '[class*="quick-buy"]','[id*="quick-buy"]', '[class*="product-card"]','[class*="product-grid-item"]', '[class*="trending"]','[class*="carousel-card"]' ].join(','); function isInsideExcludedWidget(el){ return !!el.closest(EXCLUDE_SELECTOR); } function findRealAddToCartButton(){ // 1) Most specific & reliable: the standard Shopify add-to-cart control, // name="add", that isn't sitting inside a recommendations/upsell widget. var named = document.querySelectorAll('button[name="add"], input[name="add"]'); for (var i = 0; i < named.length; i++) { if (!isInsideExcludedWidget(named[i]) && !named[i].classList.contains('bwc-add-to-cart')) { return named[i]; } } // 2) A real cart/add form, again skipping anything inside an excluded widget. var forms = document.querySelectorAll('form[action*="/cart/add"]'); for (var f = 0; f < forms.length; f++) { if (isInsideExcludedWidget(forms[f])) continue; var btn = forms[f].querySelector('button[name="add"], button[type="submit"], input[type="submit"]'); if (btn) return btn; } // 3) Last resort: visible text match, still excluding recommendation widgets. var all = document.querySelectorAll('button, input[type="submit"]'); for (var j = 0; j < all.length; j++) { var txt = (all[j].textContent || all[j].value || '').trim().toLowerCase(); if (txt.indexOf('add to cart') !== -1 && !all[j].classList.contains('bwc-add-to-cart') && !isInsideExcludedWidget(all[j])) { return all[j]; } } return null; } function bwcAddToCart(btn){ var realBtn = findRealAddToCartButton(); if (realBtn) { realBtn.click(); return; } var fallbackId = btn.getAttribute('data-fallback-variant'); if (!fallbackId || fallbackId === 'VARIANT_ID') { alert('Could not find the add-to-cart form on this page.'); return; } fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: fallbackId, quantity: 1 }) }).then(function(){ window.location.href = '/cart'; }); } document.addEventListener('click', function(e){ var btn = e.target.closest('.bwc-add-to-cart'); if (!btn) return; e.preventDefault(); bwcAddToCart(btn); });})();
Brand:mysiteSKU:PL0112260811746- Sweaters to makeup.
Melt Away Makeup. Leave Skin Comfortably Soft.
A nourishing cleansing balm designed to effortlessly dissolve makeup, sunscreen, and daily buildup without leaving skin feeling tight or stripped. The silky balm melts into a lightweight oil upon application, then transforms into a milky emulsion when rinsed with water.
Why You'll Love It
Three reasons it's the smarter way to cleanse your skin.
15% Oat Kernel Oil
Cleansing doesn't have to leave your skin feeling dry or uncomfortable. With 5% oat kernel oil, this balm helps deliver a nourishing layer of moisture while cleansing away makeup, sunscreen, and everyday impurities. The result is skin that feels soft, balanced, and comfortably clean.
2Makeup & Sunscreen Melting Power
From long-wear foundation to sunscreen and daily buildup, the balm melts smoothly across the skin to loosen stubborn products without aggressive rubbing. Massage for around 30 seconds, add water to emulsify, then rinse for a fresh, comfortable finish.
3Silky Balm-To-Milk Texture
The buttery balm melts into a smooth oil as you massage it over dry skin, then transforms into a lightweight milky texture when mixed with water. This easy rinse-off formula makes cleansing feel more like a comforting skincare ritual than a harsh daily step.
‹
›
Perfect For
Perfect for morning and evening cleansing, removing makeup after a long day, taking off sunscreen after outdoor activities, or as the first step of a double-cleansing routine. It's especially suited to dry, sensitive, dehydrated, or easily uncomfortable-feeling skin, while the nourishing balm texture makes it a beautiful addition to a relaxing nighttime skincare ritual. For an extra comforting treatment, apply a thin layer for around 10 minutes before gently massaging and rinsing.
Product Specifications
Product Type
Cleansing Balm
Key Ingredients
5% Oat Kernel Oil, Sea Buckthorn Oil
Texture
Silky Balm-to-Oil-to-Milk
Primary Use
Makeup, Sunscreen & Daily Impurity Removal
Skin Feel
Soft, Nourished & Comfortable
Skin Types
Suitable for All Skin Types, Including Dry and Sensitive-Feeling Skin
Cleansing Method
Massage onto Dry Skin, Add Water to Emulsify, Then Rinse
Recommended Use
Morning and Evening
Double Cleansing
Suitable as the First Cleansing Step
Optional Mask Use
Can be left on for approximately 10 minutes before rinsing
Finish
Clean, Soft & Non-Stripped Feeling
Care Instructions
Keep container tightly closed and store in a cool, dry place away from direct sunlight.
Customer Reviews
Emily R.
"I've tried quite a few cleansing balms, but this one has such a lovely texture. It melts almost immediately when I massage it in and takes off my foundation and sunscreen without all the rubbing."
Sarah M.
"Really gentle and easy to rinse off. My skin feels clean but comfortable."
Olivia T.
"I've been using this as the first step in my nighttime routine and absolutely love how effortlessly it removes makeup. My face feels moisturized and fresh rather than dry after cleansing."
Rachel K.
"Lovely texture and perfect for removing sunscreen at the end of the day."
‹
›
Frequently Asked Questions
QWhat does this cleansing balm remove?+It is designed to dissolve everyday makeup, sunscreen, long-wear cosmetic products, excess oil, and daily surface impurities.
QHow do I use the cleansing balm?+Apply a small amount to dry skin and massage gently for around 30 seconds. Add a little water to emulsify the balm into a milky texture, then rinse thoroughly with water.
QCan I use it on sensitive skin?+The formula is designed to provide a gentle, comfortable cleansing experience and is suitable for sensitive-feeling, dry, dehydrated, and easily uncomfortable skin.
QCan I use it as part of double cleansing?+Yes. It works well as the first step of a double-cleansing routine, especially when removing sunscreen or makeup before following with a water-based cleanser.
QCan I use it as a cleansing mask?+Yes. For a more nourishing cleansing ritual, apply a thin layer to the face and leave it on for approximately 10 minutes before gently massaging with water and rinsing.
Turn Cleansing Into A Comforting Ritual.
Melt away makeup, sunscreen, and daily buildup while giving your skin a more nourishing cleansing experience with 5% oat kernel oil and a silky balm-to-milk texture.
Make It Your First Step To Softer, Happier-Looking Skin
(function(){ // Initialize every carousel on the page independently (feature carousel + reviews carousel) var carousels = document.querySelectorAll('[data-carousel]'); carousels.forEach(function(carousel){ // Guard against this script block accidentally running twice on the same // carousel (e.g. if pasted in twice) — that would create two independent // timers, and stopping one would never actually stop the autoplay. if (carousel.getAttribute('data-bwc-init') === '1') return; carousel.setAttribute('data-bwc-init', '1'); var track = carousel.querySelector('[data-track]'); var slides = track.querySelectorAll('.bwc-carousel-slide'); var dotsWrap = carousel.querySelector('[data-dots]'); var prevBtn = carousel.querySelector('[data-prev]'); var nextBtn = carousel.querySelector('[data-next]'); var activeIndex = 0; var AUTOPLAY_DELAY = parseInt(carousel.getAttribute('data-autoplay'), 10) || 0; var autoplayEnabled = AUTOPLAY_DELAY > 0; // data-autoplay="0" (or omitted) means manual-only, no autoplay var carouselInView = false; // becomes true only once the carousel scrolls into view var paused = false; // true while the user is hovering, touching, or has just interacted var autoplayTimer = null; var resumeTimer = null; slides.forEach(function(slide, i){ var dot = document.createElement('button'); dot.type = 'button'; dot.className = 'bwc-carousel-dot' + (i === 0 ? ' active' : ''); dot.setAttribute('aria-label', 'Go to slide ' + (i + 1)); dot.addEventListener('click', function(){ goToSlide(i); pauseThenResume(); }); dotsWrap.appendChild(dot); }); var dots = dotsWrap.querySelectorAll('.bwc-carousel-dot'); // Scroll the track itself (horizontal only). Never use scrollIntoView here — // it can also scroll the whole page vertically to "reveal" the slide, which // yanks the page back up to this section if the user has scrolled past it. function goToSlide(i){ var slide = slides[i]; track.scrollTo({ left: slide.offsetLeft, behavior: 'smooth' }); } function updateActive(){ var trackRect = track.getBoundingClientRect(); var closest = 0, closestDist = Infinity; slides.forEach(function(slide, i){ var dist = Math.abs(slide.getBoundingClientRect().left - trackRect.left); if (dist < closestDist) { closestDist = dist; closest = i; } }); activeIndex = closest; dots.forEach(function(d, i){ d.classList.toggle('active', i === closest); }); } var scrollTimer; track.addEventListener('scroll', function(){ clearTimeout(scrollTimer); scrollTimer = setTimeout(updateActive, 80); }); function stepWidth(){ if (slides.length > 1) { return slides[1].offsetLeft - slides[0].offsetLeft; } return slides[0].getBoundingClientRect().width; } prevBtn.addEventListener('click', function(){ track.scrollBy({left: -stepWidth(), behavior:'smooth'}); pauseThenResume(); }); nextBtn.addEventListener('click', function(){ track.scrollBy({left: stepWidth(), behavior:'smooth'}); pauseThenResume(); }); function nextSlide(){ var next = (activeIndex + 1) % slides.length; goToSlide(next); } // A single persistent interval per carousel — it just checks the 'paused' // and 'carouselInView' flags on every tick rather than being torn down and // rebuilt on every interaction. function startAutoplay(){ if (!autoplayEnabled || autoplayTimer) return; autoplayTimer = setInterval(function(){ if (!paused && carouselInView) nextSlide(); }, AUTOPLAY_DELAY); } // Pause immediately on any interaction (hover, press, or touch). function pauseNow(){ paused = true; clearTimeout(resumeTimer); } // Resume right away (used when the mouse actually leaves the carousel). function resumeNow(){ clearTimeout(resumeTimer); paused = false; } // Pause immediately, and schedule an automatic resume a few seconds later — // this is the fallback for touch devices, which have no "mouse left" event. function pauseThenResume(){ pauseNow(); resumeTimer = setTimeout(resumeNow, 3000); } carousel.addEventListener('mouseenter', pauseNow); carousel.addEventListener('mouseleave', resumeNow); carousel.addEventListener('pointerdown', pauseThenResume); carousel.addEventListener('touchstart', pauseThenResume, {passive:true}); // Only autoplay while the carousel is actually on screen — the countdown // only starts once the user has scrolled to this section, not on page load. if (autoplayEnabled && 'IntersectionObserver' in window) { var io = new IntersectionObserver(function(entries){ entries.forEach(function(entry){ carouselInView = entry.isIntersecting; }); }, { threshold: 0.4 }); io.observe(carousel); } else { carouselInView = true; } startAutoplay(); updateActive(); });})();
(function(){ var accordion = document.querySelector('[data-accordion]'); if(!accordion) return; var buttons = accordion.querySelectorAll('.bwc-faq-q'); buttons.forEach(function(btn){ btn.addEventListener('click', function(){ var item = btn.closest('.bwc-faq-item'); var isOpen = item.classList.contains('open'); item.classList.toggle('open', !isOpen); btn.setAttribute('aria-expanded', String(!isOpen)); }); });})();
(function(){ // Elements matching these are almost always "related / recommended / upsell" // product widgets elsewhere on the page — never treat a button/form inside // one of these as this landing page's own add-to-cart control. var EXCLUDE_SELECTOR = [ '[class*="related"]','[id*="related"]', '[class*="recommend"]','[id*="recommend"]', '[class*="upsell"]','[id*="upsell"]', '[class*="cross-sell"]','[id*="cross-sell"]', '[class*="also-like"]','[id*="also-like"]', '[class*="complementary"]','[id*="complementary"]', '[class*="bundle"]','[id*="bundle"]', '[class*="quick-add"]','[id*="quick-add"]', '[class*="quick-buy"]','[id*="quick-buy"]', '[class*="product-card"]','[class*="product-grid-item"]', '[class*="trending"]','[class*="carousel-card"]' ].join(','); function isInsideExcludedWidget(el){ return !!el.closest(EXCLUDE_SELECTOR); } function findRealAddToCartButton(){ // 1) Most specific & reliable: the standard Shopify add-to-cart control, // name="add", that isn't sitting inside a recommendations/upsell widget. var named = document.querySelectorAll('button[name="add"], input[name="add"]'); for (var i = 0; i < named.length; i++) { if (!isInsideExcludedWidget(named[i]) && !named[i].classList.contains('bwc-add-to-cart')) { return named[i]; } } // 2) A real cart/add form, again skipping anything inside an excluded widget. var forms = document.querySelectorAll('form[action*="/cart/add"]'); for (var f = 0; f < forms.length; f++) { if (isInsideExcludedWidget(forms[f])) continue; var btn = forms[f].querySelector('button[name="add"], button[type="submit"], input[type="submit"]'); if (btn) return btn; } // 3) Last resort: visible text match, still excluding recommendation widgets. var all = document.querySelectorAll('button, input[type="submit"]'); for (var j = 0; j < all.length; j++) { var txt = (all[j].textContent || all[j].value || '').trim().toLowerCase(); if (txt.indexOf('add to cart') !== -1 && !all[j].classList.contains('bwc-add-to-cart') && !isInsideExcludedWidget(all[j])) { return all[j]; } } return null; } function bwcAddToCart(btn){ var realBtn = findRealAddToCartButton(); if (realBtn) { realBtn.click(); return; } var fallbackId = btn.getAttribute('data-fallback-variant'); if (!fallbackId || fallbackId === 'VARIANT_ID') { alert('Could not find the add-to-cart form on this page.'); return; } fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: fallbackId, quantity: 1 }) }).then(function(){ window.location.href = '/cart'; }); } document.addEventListener('click', function(e){ var btn = e.target.closest('.bwc-add-to-cart'); if (!btn) return; e.preventDefault(); bwcAddToCart(btn); });})();
Brand:mysiteSKU:PL0112260811746- Sweaters to makeup.
Product information
COL-18e847776fe5492f35fdaeed2488c57ba4c6ca43
Beauty & Personal Care / Makeup / Face & Eye Makeup
Beauty & Personal Care / Makeup / Face & Eye Makeup



















