>

All products featured on Glamour are independently selected by our editors. However, when you buy something through our retail links, we may earn an affiliate commission.

Acne is one of the most confusing (and not to mention distressing) skin conditions out there, as is figuring out the best acne treatment to address it. Take it from someone who’s been there, what works for one person can turn a minor breakout into a full-blown situation for another.

But not all hope is lost. While it can feel like you’re the only one dealing with acne, 90% of Americans experience it at some point in their life (around 20% of them being women 26 and older). And while not all skin reacts the same, there are some key similarities in both why you’re experiencing breakouts, as well as the products you should look for to calm them. Before you even try to find the best acne treatment, it’s important to know exactly what type of acne you’re dealing with so you can target your treatment accordingly.

What Causes Acne?

According to New York City dermatologist Shari Marchbein, M.D., all acne can be traced back to four main causes: Clogged pores thanks to “sticky” cells, bacteria, oil production, and hormones. All of these factors combine to cause a different type of acne, but some cause certain types more than others.

When trying to treat acne, Marchbein notes that it’s just as important to keep the intensity of your acne in mind, not just the type. For anything above mild acne (meaning, occasional breakouts that aren’t inflamed), you should make an appointment with a dermatologist sooner rather than later. “I never think it can be too early to go see a dermatologist,” she says. “If you’re getting hyperpigmentation—darkening of the skin from the inflammation left from the acne—you want to seek care immediately.” Another way to know it’s time to make a trip to the derm? You’ve tried over-the-counter products, and they don’t seem to be making a change. “Most acne treatments will clear your skin in three months, so if by two months you’re not seeing good results, you need to see your dermatologist,” says Marchbein.

Ahead, we break down the most common types of acne you might be dealing with, as well as how to treat it at home, and when to see the derm.

Blackheads

Beauty53 Cool Things to Do With Your Nails This Summer

StyleRita Ora Just Took Her Sheer Dress Obsession to the Next Level

StyleJennifer Lawrence Is Dressed Like Every Girl I Know in Bushwick

When bacteria mixes with clogged pores and creates inflammation, you get your papules (no pus head) and pustles (pus head). “These red bumps are inflammatory papules,” says Hale. “They don’t necessarily have a whitehead, and they’re likely to scar.” Since they’re inflamed (red, raised, and swollen from the inside out), they are sensitive to the touch, so keep your hands off them. While it might be tempting to pop those with a white pus head, don’t, because it can spread bacteria (raising your chance of breaking out even more) and lead to scarring.

These are generally more closely related to bacteria than your hormones or a lack of exfoliation, so papular pustules require a different plan of attack. “Inflammatory acne types really respond to antibiotics, either topical or systemic,” says Hale. These, of course, require a trip to your dermatologist. If you’ve tried over-the-counter products and aren’t seeing any improvement, it’s time to make an appointment. To tide you over, you could also try applying hydrocortisone cream, which temporarily takes down redness and swelling, or a pimple patch to keep from picking. These products will help in the short term, but if you deal with papules consistently, you should go to the derm.

The Best Acne Treatments for Papules and Pustles

Beauty53 Cool Things to Do With Your Nails This Summer

StyleRita Ora Just Took Her Sheer Dress Obsession to the Next Level

StyleJennifer Lawrence Is Dressed Like Every Girl I Know in Bushwick

Having a consistent skin-care routine as well as a trusty spot treatment with calming ingredients like oat extract and aloe can help mild acne heal faster—or Hale likes a home remedy of crushed aspirin and water—and using a retinol can help with cell turnover and fade dark marks.

The Best Hormonal Acne Treatments

Big Beauty QuestionsLili Reinhart Wants to End the Stigma Against Acne

Skin CareThe Unfair Reason You’re Still Breaking Out in Your 20s and 30s

iconGallery Skin Care Hyaluronic Acid and Retinol Are Skin Care’s Latest Power Duo

BeautyAdult Acne Isn’t Just Annoying—It’s Holding Women Back at Work

iframe”);t&&!n.length&&e(!0),n.length&&e(!1)}function connectionBait(e,t){const n=new XMLHttpRequest;n.open(“GET”,”https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js”,!0),n.onreadystatechange=function(){4===n.readyState&&0===n.status&&e(!0),4===n.readyState&&200===n.status&&(t||e(!1))},n.send()}function detect(e,t){let n=!1;const r={},o={};function i(){return function(t){n||(n=!0,cleanUp(o,r),e(t))}}function s(){setTimeout((()=>{cosmeticBait(i(),r,o)}),1)}function a(){setTimeout((()=>{adServerLoaded(i(),t)}),4e3)}connectionBait(i(),t),”complete”===document.readyState?(s(),a()):”interactive”===document.readyState?(s(),window.addEventListener(“load”,a,!1)):(window.addEventListener(“DOMContentLoaded”,s,!1),window.addEventListener(“load”,a,!1))}function AdBlockDetect(e,t){const n=t.getSingleInstance().getPageDefinition().slotNames;detect((t=>{t?e.emit(“ads.environment.adblock.detected”):e.emit(“ads.environment.adblock.notdetected”),set$1(window,”cns.pageContext.adBlock”,t),sparrowCollector.onAdBlockDetected(t),snowplowCollector.onAdBlockDetected(t)}),(null==n?void 0:n.length)>0)}function isPlainObject(e){return!!e&&e.constructor===Object}function concatUniques(e){if(!(e=e.filter(Array.isArray)).length)return[];const t=e.shift();return Array.from(new Set(t.concat.apply(t,e)))}function mergeBase(e,t,n,r){let o;if(isPlainObject(t)?o=e.filter((e=>isPlainObject(e[n]))):Array.isArray(t)&&(o=e.filter((e=>Array.isArray(e[n])))),o&&o.length){t=merge(o.map((e=>e[n])),r)}return t}function merge(e,t){const n=e.filter((e=>!!e));if(n<2)return e[0];const r=concatUniques(n.filter((e=>!!e)).map(Object.keys)),o=n[0];return r.reduce(((e,r)=>{let o=n.filter((e=>void 0!==e[r]));if(t){let n=!1,i=o[0][r];for(let e=1;e=0;o–){let i=n[o][r];if(void 0!==i)return e[r]=mergeBase(n,i,r,t),e}return e}),o)}function mergeViewportSizes(e,t){const n={};return Object.keys(e).forEach((r=>{if(n[r]=e[r]||[],t&&void 0!==t[r])if(!1===t[r]||!t[r]&&!1===e[r])n[r]=!1;else{n[r]=concatUniques([e[r],t[r]]);const o=n[r].filter((e=>e&&”-“===e[0])),i=o.map((e=>e.slice(1))),s=o.concat(i);n[r]=difference(n[r],s)}})),n}function mergeObjectsOfArrays(e){return concatUniques(e.map(Object.keys)).reduce(((t,n)=>{const r=e.map((e=>e[n])).filter(Array.isArray);return r.length&&(t[n]=concatUniques(r)),t}),{})}const isRunningOnClient=”undefined”!=typeof window;function isObject(e){return”object”==typeof e&&e.constructor===Object}function getRender(e){return pick(e,[“desktop”,”tablet”,”mobile”,”constellation”,”slot”])}function stringToFunction(string){return eval(“(“+string+”)”)}function updateSlotBlock(e){e.when&&(e.when=isRunningOnClient&&stringToFunction(e.when)||e.when.toString()),e.in&&e.in.el&&e.in.when&&(e.in.when=isRunningOnClient&&stringToFunction(e.in.when)||e.in.when.toString())}function slotComplexRenderPreProcessor(e){Object.values(e||{}).forEach((e=>{isObject(e)&&e.every&&e.el&&updateSlotBlock(e)}))}function slotComplexRenderProcessor(e){e&&(e.slot?slotComplexRenderPreProcessor(e.slot):Object.values(e).forEach((e=>{slotComplexRenderPreProcessor(e.slot)})))}function mergePlugins(e,t){return Object.keys(t).reduce(((n,r)=>{const o=merge([{},e[r],t[r]],((e,t)=>{if(!1!==e&&!0===t)return e}));return o&&(n[r]=o),n}),{})}function mergeSlotTypeDefinitions(e,t){return Object.keys(t).reduce(((n,r)=>{const o=mergeAdTechConfigs(e[r],t[r]);return o&&(n[r]=o),n}),{})}const specialKeys={types:(e,t)=>{if(isObject(e))return mergeSlotTypeDefinitions(e,t)},groups:(e,t)=>e?isObject(e)?concatUniques([e,t]):void 0:t,targeting:(e,t)=>e?isObject(e)?mergeObjectsOfArrays([e,t]):void 0:t,position:(e,t)=>e?isObject(e)?mergeObjectsOfArrays([e,t]):void 0:t,content_type:(e,t)=>e?isObject(e)?mergeObjectsOfArrays([e,t]):void 0:t,sizes:(e,t)=>{if(isObject(e))return mergeViewportSizes(e,t)},render:(e,t)=>(slotComplexRenderProcessor(e),slotComplexRenderProcessor(t),getRender(e?t||e:t)),plugins:mergePlugins};function adConfigMerger(e,t,n){let r;return specialKeys[n]?r=specialKeys[n](e,t):Array.isArray(e)&&Array.isArray(t)&&(r=t),r}function mergeAdTechConfigs(e,t){return merge([{},e,t],adConfigMerger)}const errorMessage=”Ads — Ad unit path generation error : “,matcher$1=”[^A-Za-z0-9]”;function dashSlugify(e){const t=new RegExp(matcher$1,”g”);return e&&e.toString().toLowerCase().replace(t,”-“).replace(/-+/g,”-“).replace(/(^-|-$)/g,””)}function evalPath(fnString,options){try{const pathFn=eval(“(“+fnString+”)”);if(“function”==typeof pathFn)return pathFn(options);error$1(`${errorMessage} generation function is not a function`)}catch(e){error$1(`${errorMessage} generation function cannot be evaluated`)}}function searchMap(e,t){return Object.keys(e).reduce(((n,r)=>find$1(e[r],(e=>e===t))?r:n),!1)}function findCategory(e){let t=e.channel,n=t?dashSlugify(t):”misc”;return n=”home”===n?”homepage”:n,n}function findContentType(e){const t=get$1(e,”adUnit.map.contentType”);t||error$1(`${errorMessage} Content type map is missing in the config`);const n=searchMap(t,e.templateType);return n||error$1(`${errorMessage} contentType is undefined`),n}function matchAdUnitPathComponent(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:””;t.sort(((e,t)=>{const n=Array.isArray(e)?e[0].length:e.length;return(Array.isArray(t)?t[0].length:t.length)-n}));for(let n=0;n{e[t]=e[t]||0;const n=e[t];return e[t]++,n},this.current=t=>e[t]||0},PositionCounter=function(){let e={};this.next=t=>{e[t]=e[t]||1;const n=e[t];return e[t]++,n}},Store=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=new Map(Object.entries(e));this.getState=e=>t.has(e)?t.get(e):{},this.setState=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=t.has(e)?t.get(e):{},o=Object.freeze(_objectSpread2(_objectSpread2({},r),n));return t.set(e,o),o},this.getStore=()=>t},SlotStore=function(){const e=new Store,t=new Set;this.getSlotState=t=>e.getState(t),this.setSlotState=(t,n)=>e.setState(t,n),this.isSpacerCreative=e=>t.has(e),this.setSpacerCreativeId=e=>{t.add(e)},this.getStore=()=>e.getStore()},matcher=”[^A-Za-z0-9]”;function slugify(e){const t=new RegExp(matcher,”g”);return e.toString().toLowerCase().replace(t,”_”).replace(/_+/g,”_”).replace(/(^_|_$)/g,””)}function defineReadOnlyProperties(e,t){const n=Object.keys(t),r={};for(let e=0;e{!n&&e[t]&&(n=e[t])})),n||e._default||e.__default}function getSpecificityPattern(e){let t=e.slug,n=e.channel,r=e.subChannel,o=e.templateType;return[t,`${n}_${r}_${o}`,`${n}_${o}`,`${o}`]}function getSlotNamesForPage(e,t){const n=getSpecificityPattern(e);return matchVariantPattern(get$1(t,”slot.sets”),n)}function getConfig(){return get$1(window,”cns.config.config”)}function getBrandAdUnitId(){return get$1(getConfig(),”slot.__auid_one”)}function getAdUnit(){const e=get$1(window,”cns.config.config.ad_unit”)||{};return{generatePath:e.generate_path,categoryMatch:e.category_match,contentTypeMatch:e.content_type_match,map:{contentType:get$1(e,”map.content_type”)}}}function getNetwork(){return get$1(window,”cns.config.config.network”)}function getViewportRange(e,t,n){const r=getConfig()[n],o=r&&matchVariantPattern(r,e);return o&&o[t]||o||0}function getPathOverride(){return queryParameters&&queryParameters.ao_iu}function getVersoFlag(e){const t=get$1(e,”keywords.platform”)||[];return!!(t.length&&”verso”===t[0])}function getOverrideVpRange(e,t){return get$1(t,`request_vp_range.${e}`)}function getPageRefreshTime(){return getConfig().refresh}function CompleteDefiner(e,t,n){const r=new SlotCounter,o=new PositionCounter,i=new SlotStore,s=getSpecificityPattern(e),a=getConfig(),c=a.slot.types,l=getSlotNamesForPage(e,a),d=c._default||{},u=(a||{}).useBlueprintTargeting,g=getTargetingKeyTranslator(void 0!==u&&u),p=”for_children”,f=”static_refresh_size”,m=”can_be_hidden”,y=”insert_after_react_ready”,b=”is_sticky”,h=”required_targeting”,w=”wait_for_oop”;function $(e){const t=e.render;return t&&(t.slot||t[n]&&t[n].slot)}function S(e,t,r,o){e||warn(`Invalid sizes: unable to define ‘${r}’ on ${n}.`,{definition:o,slotName:r}),t||warn(`Invalid render: unable to define: ‘${r}’ on ${n}`,{definition:o,slotName:r})}const v=freeze(l.reduce(((e,r)=>{const o=mergeAdTechConfigs(d,c[r]._default),i=function(e){const n=matchVariantPattern(c[e],s);return t?mergeAdTechConfigs(n,t):n}(r),a=mergeAdTechConfigs(o,i);return function(e,t,n){const r=t.sizes,o=r&&r[n]&&r[n].length,i=r&&!1===r[n],s=$(t),a=o&&!i;return!!t.isOutOfPage||(S(a,s,e,t),o&&!i&&s)}(r,a,n)&&(e[r]=freeze(a)),e}),{})),T=freeze(Object.keys(v));const P=new function(){defineReadOnlyProperties(this,{slug:e.slug,server:e.server,keywords:e.keywords,channel:e.channel||”misc”,subChannel:e.subChannel,subSubChannel:e.subSubChannel,device:n,templateType:e.templateType,contentType:e.contentType,forChildren:e[p],slotNames:T,network:getNetwork(),brand:getBrandAdUnitId(),requestViewportRange:getViewportRange(s,n,”request_vp_range”),adUnit:getAdUnit(),isVerso:getVersoFlag(e),useRoadblock:getConfig().useRoadblock,lazyloadSettings:getViewportRange(s,n,”lazyload_settings”),pageRefresh:getPageRefreshTime()}),freeze(this)};function A(t){const i=v[t]?v[t]:{sizes:{}};function s(e,n){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};e=void 0!==e?e:r.next(t);const s=`${t}_${e}`;n=void 0!==n?n:o.next(this.position);const a=this.position&&slugify(this.position),c=`${a}_${n}`;defineReadOnlyProperties(this,{id:s,slotCount:e,positionCount:n,positionId:c,data:i}),this.getAdUnitPath=()=>getAdUnitPath(this,P),freeze(this)}this.getRenderBlock=()=>$(i),this.getSizes=()=>i.sizes[n],this.getSizesArray=()=>sizesToArray(i.sizes[n]),this.getSizeMapping=()=>{const e=window.googletag.sizeMapping();return e.addSize([1024,0],sizesToArray(i.sizes.desktop)).addSize([768,0],sizesToArray(i.sizes.tablet)).addSize([0,0],sizesToArray(i.sizes.mobile)),e.build()},this.shouldWaitUntilVisibleBeforeDisplay=()=>!i[m],this.getCustomData=()=>i.data,s.prototype=this,this.getSlotDefinition=function(){for(var e=arguments.length,t=new Array(e),n=0;n{const t=g(“pos_instance”),n=g(“ctx_slot_instance”),r=parseInt(e.getTargeting(t)[0],10);return new s(parseInt(e.getTargeting(n)[0],10),r)},this.getSlotRefreshTime=(e,t,n)=>{let r;return r=void 0!==t?t:e,r&&r[n]&&(r=r[n]),r},defineReadOnlyProperties(this,{slotName:t,isOutOfPage:!!i.isOutOfPage,refresh:this.getSlotRefreshTime(P.pageRefresh,i.refresh,n),isSticky:isStickyDeviceEnabled(i[b],n),hasStaticRefreshSize:!!i[f],suffix:i.suffix,channel:e.channel,subChannel:e.subChannel,subSubChannel:e.subSubChannel,templateType:e.templateType,override:getPathOverride(),brand:getBrandAdUnitId(),network:getNetwork(),shouldWaitForOOP:i[w],shouldWaitForReact:!!i[y],requiredTargeting:i[h]||[],position:i.position,overrideRequestViewportRange:getOverrideVpRange(n,i)}),freeze(this)}this.getSlotTypeDefinition=e=>new A(e),this.getSlotDefinitionFromGPTSlot=e=>{const t=e.getSlotElementId().split(“_”);t.pop();return new A(t.join(“_”)).getSlotDefinitionFromGPTSlot(e)},this.getSlotStateStore=()=>i,this.getPageDefinition=()=>P,freeze(this)}const reactReadyEvent=”react.ready”;function onReactReady(){set$1(window,”_cne.pageCreated”,!0)}function enableCNE(e){if(e.history(reactReadyEvent).length)return onReactReady();e.on(reactReadyEvent,onReactReady)}const eval2=eval;function getText(e){let t=””;const n=e.childNodes;for(let e=0;ee.previousSibling,above:e=>e.previousSibling,after:e=>e.nextSibling,below:e=>e.nextSibling,prepend:e=>e.firstElementChild,append:e=>e.lastElementChild};function getInsertionTarget(e,t){if(insertionMethods[t])return insertionMethods[t](e)}function alreadyExists(e,t){const n=getInsertionTarget(e,t),r=n&&n.classList&&n.classList.contains(“cns-ads-stage”),o=n&&n.firstChild,i=o&&o.classList&&o.classList.contains(“cns-ads-stage”);return!(!r&&!i)}function checkEvery(e){let t=e.injectionBlock,n=e.index;return”number”==typeof t.every&&!!t.every&&”number”==typeof n}function checkCustomCondition(e){return”function”==typeof e.customConditionFn}const shouldAddSlotConditions=[{name:”every”,check:checkEvery,fn:e=>(e.index+1)%e.injectionBlock.every==0},{name:”custom condition”,check:checkCustomCondition,fn:e=>(0,e.customConditionFn)(e.domNode,e.meta)}];function shouldAddSlot(e){for(let t=0;t{const r=e[n];let o;return”string”==typeof r?o=findAll(r):isValidComplexInjection(r)?o=getDomNodesForInjectionBlock(r):(o=[],error$1(“invalid”,r)),n=normalizeMethod(n),o=o.filter((e=>!alreadyExists(e,n))),o&&o.length&&(t[n]=o),t}),{})}const PromiseLock=function(){let e;return function(t){return function(){for(var n=arguments.length,r=new Array(n),o=0;ot(…r)));return e=n.then((()=>{})),n}return e=t(…r),e}}};function createContainerEl(e,t,n){const r=createElement(“div”,{id:`${e}_${t}`});return addClasses(r,[“cns-ads-container”]),setStyle(r,{margin:”0px auto”,boxSizing:”content-box”}),n&&setElementData(r,n),r}function createAdDivs(e,t,n,r){const o=”cns-ads-slot-type-“,i=e.replace(new RegExp(“_”,”g”),”-“).toLowerCase(),s=createElement(“div”,{id:`${o}${i}-${t}`});addClasses(s,[“cns-ads-stage”,o+i,`${o+i}-${t}`]),setElementData(s,{name:`${e}_${t}`,”slot-type”:e}),r||setStyle(s,{fontSize:0,lineHeight:0,overflow:”hidden”}),”_out_of_page”===e&&addClasses(s,[“cns-ads-slot-type-out-of-page”]);const a=createElement(“div”);return addClasses(a,[“cns-ads-flex-sizer”]),s.appendChild(a),s.appendChild(createContainerEl(e,t,n)),s}function InjectRefreshDisplayInjectionStrategy(e,t,n,r){window.googletag=window.googletag||{};const o=window.googletag,i={after:(e,t)=>e.parentNode.insertBefore(t,e.nextSibling),prepend:(e,t)=>e.insertBefore(t,e.children[0]),append:(e,t)=>e.appendChild(t),before:(e,t)=>e.parentNode.insertBefore(t,e)};this.insertSlot=function(s,a,c,l,d){fastdom.mutate((()=>{const u=createAdDivs(a.slotName,a.slotCount,_objectSpread2(_objectSpread2({},a.getCustomData()),a.data),r);!function(e,t,n){i[t]?i[t](e,n):e[t](n)}(c,l,u),d(u,a,(()=>{((r,i)=>{const s=t.getSingleInstance().getPageDefinition();e([“refreshLC-serviceLT”],{pageDefinition:s},(t=>(applyTargeting(o.pubads(),t),e([“refresh”],{slotDefinition:i,slot:r,pageDefinition:s},(e=>{e?(applyTargeting(r,e),n.reset(i),get$1(window,”cns.config.config.useRoadblock”)||o.pubads().refresh([r],{changeCorrelator:!1}),debug$1(`refreshing.${r.getSlotElementId()}`)):error$1(“slot targeting is missing”,s,i)})))))})(s,a)}))}))}}const allowedIntersectionOptions=[“threshold”,”rootMargin”],defaultIntersectionObserverOptions={threshold:0,rootMargin:”0px 0px”},_EventEmitter=new EventEmitter(“VisibilityObserver”),debug=_EventEmitter.debug,error=_EventEmitter.error;function isIntersecting(e){return any(e,(e=>e.isIntersecting))}function hasHigherIntersectionRatio(e,t){return void 0===e||any(t,(t=>t.intersectionRatio>=(e||0)))}function getIntersectionObserverOptions(e){return Object.assign({},defaultIntersectionObserverOptions,pick(e,allowedIntersectionOptions))}function observeEvents(e,t,n,r){fastdom.measure((()=>{try{const r=new IntersectionObserver((o=>{hasHigherIntersectionRatio(t.intersectionRatio,o)&&isIntersecting(o)?(debug(“visible”,{el:e,entries:o}),n(!0,r)):(debug(“notVisible”,{el:e,entries:o}),n(!1,r))}),getIntersectionObserverOptions(t));r.observe(e)}catch(e){r(e)}}))}function onIntersection(e,t,n){observeEvents(e,t,(e=>n(e)),(e=>error(“onIntersection”,e)))}function onceVisible(e,t){return new Promise(((n,r)=>{observeEvents(e,t,((e,t)=>{e&&(n(),t.disconnect())}),r)}))}function reactRule(e,t){return!e||t}function targetingRule(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];const r=Object.keys(t);return all(e,(e=>find$1(n,(t=>t===e))||find$1(r,(t=>t===e))))}function canRequest(e){let t=e.slotTypeDefinition,n=e.pageTargeting,r=e.slotTargeting,o=e.reactReady,i=e.oopHasRendered,s=e.excludedPositions;const a=!!r,c=targetingRule(t.requiredTargeting,r,n),l=reactRule(t.shouldWaitForReact,o),d=t.shouldWaitForOOP,u=t.position,g=s.has(u);let p=a&&c&&l&&!g&&!(d&&!i);return debug$1(`canRequest.${t.slotName}.${p}`,{slotTypeDefinition:t,pageTargeting:n,slotTargeting:r,reactReady:o,oopHasRendered:i,excludedPositions:s}),p}function UnassumingInsert(e,t,n,r){window.googletag=window.googletag||{};const o=window.googletag,i=t.withTargeting,s=r.getSingleInstance().getPageDefinition().isVerso,a=new InjectRefreshDisplayInjectionStrategy(i,r,n,s),c=new Set;let l=!1,d=!1;function u(e,t){let n;return r.getSingleInstance().getSlotStateStore().setSlotState(e.id,{nodeId:e.data&&e.data[“node-id”]}),n=t?o.defineOutOfPageSlot(e.getAdUnitPath(),e.id):o.defineSlot(e.getAdUnitPath(),e.getSizesArray(),e.id).defineSizeMapping(e.getSizeMapping()),n}function g(e,t){return(n,r,i)=>{const s=function(e){if(e.shouldWaitUntilVisibleBeforeDisplay())return onceVisible}(r),a=()=>{const e=r.id;debug$1(“insert.display”,e),o.display(e),i()},c=e.requestViewportRange,l=t.overrideRequestViewportRange;if(s)return s(n,{rootMargin:`${void 0!==l?l:c}% 0%`}).then(a);a()}}const p=(new PromiseLock)((e=>{const t=e.getSingleInstance().getPageDefinition();return i([“service”],{pageDefinition:t},(n=>{if(n)return applyTargeting(o.pubads(),n),Promise.all(t.slotNames.map((r=>{const s=e.getSingleInstance().getSlotTypeDefinition(r);return function(e,t){let n;const r=e.getRenderBlock();return n=getCandidateElementsFromRenderBlock(r),Promise.all(Object.keys(n).map((r=>(debug$1(“candidatesByMethod.”+e.slotName,{method:r,els:n[r],definition:e}),Promise.all(n[r].map((e=>t(e,r))))))))}(s,((e,r)=>i([“slot”],{pageTargeting:n,slotTypeDefinition:s,reactReady:d,el:e},(p=>{if(!p)return void error$1(“slot type targeting is missing”,t,s);const f=o.pubads().getTargetingKeys();if(!canRequest({slotTypeDefinition:s,pageTargeting:f,slotTargeting:p,reactReady:d,oopHasRendered:l,excludedPositions:c}))return void debug$1(`${s.slotName}.notRequestable`,s,d,n,p);const m=e.dataset.nodeId,y=s.getSlotDefinition(void 0,void 0,_objectSpread2({},m&&{“node-id”:m})),b=y.isOutOfPage,h=u(y,b);if(!h)return void error$1(“the slot cannot be defined”,y,h);h.addService(window.googletag.pubads()),b&&h.addService(window.googletag.companionAds());const w=_objectSpread2({},p);h.updateTargetingFromMap(w),i([“define”],{slot:h,slotDefinition:y},(e=>{applyTargeting(h,e)})),a.insertSlot(h,y,e,r,g(t,s))}))))})));error$1(“page targeting is missing”,t)})).catch(handlePromiseError(“insert error”)).then((()=>new Promise((e=>fastdom.mutate((()=>setTimeout(e,1e3))))))).catch(handlePromiseError(“impossible mutate error”))}));var f;f=()=>{d=!0},e.history(“react.ready”).length?f():e.on(“react.ready”,f),function(){const t=e.on(“#.slotRenderEnded.#”,((n,r)=>{r.topic&&r.topic.includes(“out_of_page”)&&(l=!0,t(),e.emit(“ads.componentDidUpdate”))}))}(),e.on(“ads.excludePositions”,(e=>{e.forEach(c.add,c)})),this.insert=t=>{!function(t){o.pubadsReady?t():e.on(“ads.pubadsReady”,t)}((()=>{p(t),function(t){e.on(“react.ready”,t),e.on(“#.componentDidMount.#”,t),e.on(“#.componentDidUpdate.#”,t)}(debounce((()=>p(t)),500))}))}}function UniqueTimerStore(){const e={};function t(t){const n=e[t];n&&(clearTimeout(n),e[t]=null)}this.startTimer=function(n,r,o){t(n),e[n]=setTimeout((()=>{t(n),r()}),o)},this.endTimer=t}function KeyCounter(){let e={};this.increment=t=>{e[t]||(e[t]=0),e[t]+=1},this.remove=t=>{e[t]&&delete e[t]},this.getCount=t=>e[t]||0}function RefreshControl(e,t){const n=t.withTargeting,r=new EventEmitter(“RefreshControl”).debug,o=new KeyCounter,i=new KeyCounter,s=new Set,a=new Set,c=new Set,l=new UniqueTimerStore,d=[[“aged”,e=>s.has(e)],[“impressions”,e=>i.getCount(e)],[“visible”,e=>c.has(e)]],u=e=>`${e}.refresh_${o.getCount(e)}`,g=t=>e.getSingleInstance().getSlotDefinitionFromGPTSlot(t);function p(t){const i=e.getSingleInstance().getPageDefinition(),s=getSlotById(t),a=g(s);r(`setTargeting.${u(t)}`);const c=getConfig$1(window).config.useBlueprintTargeting,l=getTargetingKeyTranslator(void 0!==c&&c)(“ctx_slot_rn”);return s.setTargeting(l,o.getCount(t)),n([“refreshLC-serviceLT”],{pageDefinition:i},(e=>(applyTargeting(window.googletag.pubads(),e),n([“refresh”],{pageDefinition:i,slotDefinition:a,slot:s},(e=>{applyTargeting(s,e)})))))}function f(e){return void 0===e?3e4:!Number.isNaN(parseInt(e,10))&&e>0?e:0}const m=cumulativeArgumentDebounce((e=>{const t=uniq(e.map((e=>e[0])));if(window.cns.flags.shouldNotRefresh)r(“window.cns.flags.shouldNotRefresh”);else if(r(`refreshing.${t.map((e=>u(e))).join(“,”)}`),t.forEach((e=>h(g(getSlotById(e))))),!get$1(window,”cns.config.config.useRoadblock”)){const e=t.map(getSlotById);window.googletag.pubads().refresh(e,{changeCorrelator:!1})}}),100);function y(e){r(`onChange.${e}.(${d.map((t=>t[0]+”:”+t[1](e))).join(“,”)})`),all(d,(t=>t[1](e)))&&p(e).then((()=>{m(e)}))}function b(e,t){0===(t=f(t))?y(e):l.startTimer(e,(()=>{s.add(e),y(e)}),t),r(`willRefreshIn.${e}.${t}`)}function h(e){const t=e.id;i.remove(t),s.delete(t),b(t,e.refresh)}function w(e){return!e.isOutOfPage&&!window.cns.flags.shouldNotRefresh&&!1!==e.refresh}this.reset=function(e){w(e)?h(e):r(`slotNotRefreshable.${e.id}`)},this.onSlotRenderEnded=function(e){const t=e.slot,n=g(t).id;o.increment(n)},this.onImpressionViewable=function(e){const t=e.slot.getSlotElementId();i.increment(t),r(`${t}.impressionIncremented`),y(t),w(g(e.slot))&&function(e){if(!a.has(e)){const t=getElementById(e);a.add(e),onIntersection(t,{},(t=>{t?(c.add(e),y(e)):c.delete(e)}))}}(t)},this.disableRefresh=function(e){l.endTimer(e)},this.delayRefresh=b,this.normalizeRefreshTimeout=f}function ShareOfVoice(){let e=!1,t=””;this.getTargeting=function(){const e={};return t&&(e.ctx_line_items=[t]),e},this.onSlotRenderEnded=function(n){e||(e=!0,t=n.lineItemId)}}function cnsMetricsApi(){return e=>{e({emit:pixel})}}var updateRefresh=e=>{let t=e.refreshControl;return e=>{let n=e.slotName,r=e.refresh;”number”==typeof r&&r>0?t.delayRefresh(n,r):t.disableRefresh(n)}};function CNSAdsAPI(e,t,n,r){function o(e){let t=e.device,n=void 0===t?”desktop”:t,r=e.server,o=void 0===r?”staging”:r;return new Promise(((e,t)=>{o&&n||t(),e()}))}function i(){return!0===get$1(window,”cns.pageContext.adBlock”)}const s=updateRefresh({refreshControl:t});function a(e,t){const n=e.frameElement.parentElement.parentElement.id;s({slotName:n,refresh:t})}function c(e){const t=window.cns.pageContext,o=new CompleteDefiner(Object.assign({},t,e),null,getViewportTemplate());n.reset((()=>o)),r.insert(n)}function l(){resetUserData(),window.googletag.cmd.push((()=>{window.googletag.pubads().clear(),window.googletag.destroySlots()})),fastdom.mutate((()=>{const e=document.querySelectorAll(“.cns-ads-stage”);for(let t=0;t{}),”adblock.installed”),blocked:deprecated(i,”adblock.blocked”)},pages:{create:c,destroy:l,get:()=>({slots:{add:deprecated(d,”slots.add”),get:deprecated((()=>{}),”slots.get”),refresh:deprecated((()=>{}),”slots.refresh”),destroy:deprecated((()=>{}),”slots.destroy”)}})}})}}function CNSShim(e,t,n,r){const o=new CNSAdsAPI(e,t,n,r);var i;i={ads:o.executeCallback,metrics:cnsMetricsApi()},window.cns.async=function(e,t){i[e](t)},window.cns.queue.forEach((e=>{let t=e.service,n=e.callback;window.cns.async(t,n)})),delete window.cns.queue}var spacerCreative=e=>{let t=e.definer;return e=>{let n=e.creativeId;const r=t.getSingleInstance().getSlotStateStore();r.setSpacerCreativeId(n);const o=r.getStore();window.cnBus&&Array.from(o.values()).forEach((e=>{let t=e.creativeId,r=e.nodeId;r&&t&&n===t&&window.cnBus.emit(`ads.creative.${r}.spacer`,{})}))}};function SafeFrameMessageListener(e){const t=function(t){const n=new Map(Object.keys(t).map((n=>[n,t[n](e)])));return e=>{const t=e.data,r=t.cnsAdEvent,o=t.payload;if(r&&n.has(r)){return n.get(r)(o,e)}}}({updateRefresh:updateRefresh,”ads.creative.spacer”:spacerCreative});window.addEventListener(“message”,t)}function SourceOfTruth(e){let t;this.getSingleInstance=function(){return t||(t=e()),t},this.reset=function(n){t=n?n():e()}}const _window=window,cns=_window.cns,cnBus=_window.cnBus;function about(){return{buildDate:cns.buildDate,fastAdsHead:cns.fastAdsHead,fastAdsFooter:cns.fastAdsFooter,runtimeId:queryParameters.runtimeId||runtimeId}}function attachListeners(e,t){const n=getConfig$1(window),r=new ShareOfVoice,o=new TargetingLifecycle(n,r),i=new RefreshControl(t,o),s=new UnassumingInsert(e,o,i,t);new CNSShim(e,i,t,s),new GPTRouter(t,i,r,e),new SafeFrameMessageListener({refreshControl:i,definer:t}),emitBoomPixel(“adsReady”),cns.addTargeting=o.register,AdBlockDetect(e,t);s.insert(t),sparrowCollector.onRoadblockRendered(cnBus),snowplowCollector.onRoadblockDetected(cnBus)}function initAdsLibrary(){sendBoomerangAdLibraryInformation();const e=new SourceOfTruth((()=>{const e=getViewportTemplate();return new CompleteDefiner(getPageContext(window),null,e)}));setupPermutive(),attachListeners(cnBus,e),enableCNE(cnBus)}function startFooter(){if(addDefaultSubscriptions(cnBus,featureFlags.bus_log),”info”===queryParameters.ao_tools&&append({src:`https://ad-tools.condenastdigital.com/ads-${queryParameters.ao_tools}/prod/index.js`,targ:document.head}),!queryParameters.ap_noads){if(hasPII())return sparrowCollector.onPIIDetected(),void snowplowCollector.onPIIDetected();setupIAS(),setupMoat(),til((()=>cns.pageContext),(()=>{shouldWaitForConsent()?onConsent(initAdsLibrary):initAdsLibrary()}))}}set$1(window,”cns.buildDate”,getConfig$1(window).buildDate),set$1(window,”cns.fastAdsFooter”,version),set$1(window,”cns.runtimeId”,queryParameters.runtimeId||runtimeId),set$1(window,”cns.about”,about),set$1(window,”cns.timing.footerStart”,Date.now()),set$1(window,”cns.addTargeting”,(()=>{})),startFooter()})();

>

All products featured on Glamour are independently selected by our editors. However, when you buy something through our retail links, we may earn an affiliate commission.

Acne is one of the most confusing (and not to mention distressing) skin conditions out there, as is figuring out the best acne treatment to address it. Take it from someone who’s been there, what works for one person can turn a minor breakout into a full-blown situation for another.

But not all hope is lost. While it can feel like you’re the only one dealing with acne, 90% of Americans experience it at some point in their life (around 20% of them being women 26 and older). And while not all skin reacts the same, there are some key similarities in both why you’re experiencing breakouts, as well as the products you should look for to calm them. Before you even try to find the best acne treatment, it’s important to know exactly what type of acne you’re dealing with so you can target your treatment accordingly.

What Causes Acne?

According to New York City dermatologist Shari Marchbein, M.D., all acne can be traced back to four main causes: Clogged pores thanks to “sticky” cells, bacteria, oil production, and hormones. All of these factors combine to cause a different type of acne, but some cause certain types more than others.

When trying to treat acne, Marchbein notes that it’s just as important to keep the intensity of your acne in mind, not just the type. For anything above mild acne (meaning, occasional breakouts that aren’t inflamed), you should make an appointment with a dermatologist sooner rather than later. “I never think it can be too early to go see a dermatologist,” she says. “If you’re getting hyperpigmentation—darkening of the skin from the inflammation left from the acne—you want to seek care immediately.” Another way to know it’s time to make a trip to the derm? You’ve tried over-the-counter products, and they don’t seem to be making a change. “Most acne treatments will clear your skin in three months, so if by two months you’re not seeing good results, you need to see your dermatologist,” says Marchbein.

Ahead, we break down the most common types of acne you might be dealing with, as well as how to treat it at home, and when to see the derm.

Blackheads

Beauty53 Cool Things to Do With Your Nails This Summer

StyleRita Ora Just Took Her Sheer Dress Obsession to the Next Level

StyleJennifer Lawrence Is Dressed Like Every Girl I Know in Bushwick

When bacteria mixes with clogged pores and creates inflammation, you get your papules (no pus head) and pustles (pus head). “These red bumps are inflammatory papules,” says Hale. “They don’t necessarily have a whitehead, and they’re likely to scar.” Since they’re inflamed (red, raised, and swollen from the inside out), they are sensitive to the touch, so keep your hands off them. While it might be tempting to pop those with a white pus head, don’t, because it can spread bacteria (raising your chance of breaking out even more) and lead to scarring.

These are generally more closely related to bacteria than your hormones or a lack of exfoliation, so papular pustules require a different plan of attack. “Inflammatory acne types really respond to antibiotics, either topical or systemic,” says Hale. These, of course, require a trip to your dermatologist. If you’ve tried over-the-counter products and aren’t seeing any improvement, it’s time to make an appointment. To tide you over, you could also try applying hydrocortisone cream, which temporarily takes down redness and swelling, or a pimple patch to keep from picking. These products will help in the short term, but if you deal with papules consistently, you should go to the derm.

The Best Acne Treatments for Papules and Pustles

Beauty53 Cool Things to Do With Your Nails This Summer

StyleRita Ora Just Took Her Sheer Dress Obsession to the Next Level

StyleJennifer Lawrence Is Dressed Like Every Girl I Know in Bushwick

Having a consistent skin-care routine as well as a trusty spot treatment with calming ingredients like oat extract and aloe can help mild acne heal faster—or Hale likes a home remedy of crushed aspirin and water—and using a retinol can help with cell turnover and fade dark marks.

The Best Hormonal Acne Treatments

Big Beauty QuestionsLili Reinhart Wants to End the Stigma Against Acne

Skin CareThe Unfair Reason You’re Still Breaking Out in Your 20s and 30s

iconGallery Skin Care Hyaluronic Acid and Retinol Are Skin Care’s Latest Power Duo

BeautyAdult Acne Isn’t Just Annoying—It’s Holding Women Back at Work

iframe”);t&&!n.length&&e(!0),n.length&&e(!1)}function connectionBait(e,t){const n=new XMLHttpRequest;n.open(“GET”,”https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js”,!0),n.onreadystatechange=function(){4===n.readyState&&0===n.status&&e(!0),4===n.readyState&&200===n.status&&(t||e(!1))},n.send()}function detect(e,t){let n=!1;const r={},o={};function i(){return function(t){n||(n=!0,cleanUp(o,r),e(t))}}function s(){setTimeout((()=>{cosmeticBait(i(),r,o)}),1)}function a(){setTimeout((()=>{adServerLoaded(i(),t)}),4e3)}connectionBait(i(),t),”complete”===document.readyState?(s(),a()):”interactive”===document.readyState?(s(),window.addEventListener(“load”,a,!1)):(window.addEventListener(“DOMContentLoaded”,s,!1),window.addEventListener(“load”,a,!1))}function AdBlockDetect(e,t){const n=t.getSingleInstance().getPageDefinition().slotNames;detect((t=>{t?e.emit(“ads.environment.adblock.detected”):e.emit(“ads.environment.adblock.notdetected”),set$1(window,”cns.pageContext.adBlock”,t),sparrowCollector.onAdBlockDetected(t),snowplowCollector.onAdBlockDetected(t)}),(null==n?void 0:n.length)>0)}function isPlainObject(e){return!!e&&e.constructor===Object}function concatUniques(e){if(!(e=e.filter(Array.isArray)).length)return[];const t=e.shift();return Array.from(new Set(t.concat.apply(t,e)))}function mergeBase(e,t,n,r){let o;if(isPlainObject(t)?o=e.filter((e=>isPlainObject(e[n]))):Array.isArray(t)&&(o=e.filter((e=>Array.isArray(e[n])))),o&&o.length){t=merge(o.map((e=>e[n])),r)}return t}function merge(e,t){const n=e.filter((e=>!!e));if(n<2)return e[0];const r=concatUniques(n.filter((e=>!!e)).map(Object.keys)),o=n[0];return r.reduce(((e,r)=>{let o=n.filter((e=>void 0!==e[r]));if(t){let n=!1,i=o[0][r];for(let e=1;e=0;o–){let i=n[o][r];if(void 0!==i)return e[r]=mergeBase(n,i,r,t),e}return e}),o)}function mergeViewportSizes(e,t){const n={};return Object.keys(e).forEach((r=>{if(n[r]=e[r]||[],t&&void 0!==t[r])if(!1===t[r]||!t[r]&&!1===e[r])n[r]=!1;else{n[r]=concatUniques([e[r],t[r]]);const o=n[r].filter((e=>e&&”-“===e[0])),i=o.map((e=>e.slice(1))),s=o.concat(i);n[r]=difference(n[r],s)}})),n}function mergeObjectsOfArrays(e){return concatUniques(e.map(Object.keys)).reduce(((t,n)=>{const r=e.map((e=>e[n])).filter(Array.isArray);return r.length&&(t[n]=concatUniques(r)),t}),{})}const isRunningOnClient=”undefined”!=typeof window;function isObject(e){return”object”==typeof e&&e.constructor===Object}function getRender(e){return pick(e,[“desktop”,”tablet”,”mobile”,”constellation”,”slot”])}function stringToFunction(string){return eval(“(“+string+”)”)}function updateSlotBlock(e){e.when&&(e.when=isRunningOnClient&&stringToFunction(e.when)||e.when.toString()),e.in&&e.in.el&&e.in.when&&(e.in.when=isRunningOnClient&&stringToFunction(e.in.when)||e.in.when.toString())}function slotComplexRenderPreProcessor(e){Object.values(e||{}).forEach((e=>{isObject(e)&&e.every&&e.el&&updateSlotBlock(e)}))}function slotComplexRenderProcessor(e){e&&(e.slot?slotComplexRenderPreProcessor(e.slot):Object.values(e).forEach((e=>{slotComplexRenderPreProcessor(e.slot)})))}function mergePlugins(e,t){return Object.keys(t).reduce(((n,r)=>{const o=merge([{},e[r],t[r]],((e,t)=>{if(!1!==e&&!0===t)return e}));return o&&(n[r]=o),n}),{})}function mergeSlotTypeDefinitions(e,t){return Object.keys(t).reduce(((n,r)=>{const o=mergeAdTechConfigs(e[r],t[r]);return o&&(n[r]=o),n}),{})}const specialKeys={types:(e,t)=>{if(isObject(e))return mergeSlotTypeDefinitions(e,t)},groups:(e,t)=>e?isObject(e)?concatUniques([e,t]):void 0:t,targeting:(e,t)=>e?isObject(e)?mergeObjectsOfArrays([e,t]):void 0:t,position:(e,t)=>e?isObject(e)?mergeObjectsOfArrays([e,t]):void 0:t,content_type:(e,t)=>e?isObject(e)?mergeObjectsOfArrays([e,t]):void 0:t,sizes:(e,t)=>{if(isObject(e))return mergeViewportSizes(e,t)},render:(e,t)=>(slotComplexRenderProcessor(e),slotComplexRenderProcessor(t),getRender(e?t||e:t)),plugins:mergePlugins};function adConfigMerger(e,t,n){let r;return specialKeys[n]?r=specialKeys[n](e,t):Array.isArray(e)&&Array.isArray(t)&&(r=t),r}function mergeAdTechConfigs(e,t){return merge([{},e,t],adConfigMerger)}const errorMessage=”Ads — Ad unit path generation error : “,matcher$1=”[^A-Za-z0-9]”;function dashSlugify(e){const t=new RegExp(matcher$1,”g”);return e&&e.toString().toLowerCase().replace(t,”-“).replace(/-+/g,”-“).replace(/(^-|-$)/g,””)}function evalPath(fnString,options){try{const pathFn=eval(“(“+fnString+”)”);if(“function”==typeof pathFn)return pathFn(options);error$1(`${errorMessage} generation function is not a function`)}catch(e){error$1(`${errorMessage} generation function cannot be evaluated`)}}function searchMap(e,t){return Object.keys(e).reduce(((n,r)=>find$1(e[r],(e=>e===t))?r:n),!1)}function findCategory(e){let t=e.channel,n=t?dashSlugify(t):”misc”;return n=”home”===n?”homepage”:n,n}function findContentType(e){const t=get$1(e,”adUnit.map.contentType”);t||error$1(`${errorMessage} Content type map is missing in the config`);const n=searchMap(t,e.templateType);return n||error$1(`${errorMessage} contentType is undefined`),n}function matchAdUnitPathComponent(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:””;t.sort(((e,t)=>{const n=Array.isArray(e)?e[0].length:e.length;return(Array.isArray(t)?t[0].length:t.length)-n}));for(let n=0;n{e[t]=e[t]||0;const n=e[t];return e[t]++,n},this.current=t=>e[t]||0},PositionCounter=function(){let e={};this.next=t=>{e[t]=e[t]||1;const n=e[t];return e[t]++,n}},Store=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=new Map(Object.entries(e));this.getState=e=>t.has(e)?t.get(e):{},this.setState=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=t.has(e)?t.get(e):{},o=Object.freeze(_objectSpread2(_objectSpread2({},r),n));return t.set(e,o),o},this.getStore=()=>t},SlotStore=function(){const e=new Store,t=new Set;this.getSlotState=t=>e.getState(t),this.setSlotState=(t,n)=>e.setState(t,n),this.isSpacerCreative=e=>t.has(e),this.setSpacerCreativeId=e=>{t.add(e)},this.getStore=()=>e.getStore()},matcher=”[^A-Za-z0-9]”;function slugify(e){const t=new RegExp(matcher,”g”);return e.toString().toLowerCase().replace(t,”_”).replace(/_+/g,”_”).replace(/(^_|_$)/g,””)}function defineReadOnlyProperties(e,t){const n=Object.keys(t),r={};for(let e=0;e{!n&&e[t]&&(n=e[t])})),n||e._default||e.__default}function getSpecificityPattern(e){let t=e.slug,n=e.channel,r=e.subChannel,o=e.templateType;return[t,`${n}_${r}_${o}`,`${n}_${o}`,`${o}`]}function getSlotNamesForPage(e,t){const n=getSpecificityPattern(e);return matchVariantPattern(get$1(t,”slot.sets”),n)}function getConfig(){return get$1(window,”cns.config.config”)}function getBrandAdUnitId(){return get$1(getConfig(),”slot.__auid_one”)}function getAdUnit(){const e=get$1(window,”cns.config.config.ad_unit”)||{};return{generatePath:e.generate_path,categoryMatch:e.category_match,contentTypeMatch:e.content_type_match,map:{contentType:get$1(e,”map.content_type”)}}}function getNetwork(){return get$1(window,”cns.config.config.network”)}function getViewportRange(e,t,n){const r=getConfig()[n],o=r&&matchVariantPattern(r,e);return o&&o[t]||o||0}function getPathOverride(){return queryParameters&&queryParameters.ao_iu}function getVersoFlag(e){const t=get$1(e,”keywords.platform”)||[];return!!(t.length&&”verso”===t[0])}function getOverrideVpRange(e,t){return get$1(t,`request_vp_range.${e}`)}function getPageRefreshTime(){return getConfig().refresh}function CompleteDefiner(e,t,n){const r=new SlotCounter,o=new PositionCounter,i=new SlotStore,s=getSpecificityPattern(e),a=getConfig(),c=a.slot.types,l=getSlotNamesForPage(e,a),d=c._default||{},u=(a||{}).useBlueprintTargeting,g=getTargetingKeyTranslator(void 0!==u&&u),p=”for_children”,f=”static_refresh_size”,m=”can_be_hidden”,y=”insert_after_react_ready”,b=”is_sticky”,h=”required_targeting”,w=”wait_for_oop”;function $(e){const t=e.render;return t&&(t.slot||t[n]&&t[n].slot)}function S(e,t,r,o){e||warn(`Invalid sizes: unable to define ‘${r}’ on ${n}.`,{definition:o,slotName:r}),t||warn(`Invalid render: unable to define: ‘${r}’ on ${n}`,{definition:o,slotName:r})}const v=freeze(l.reduce(((e,r)=>{const o=mergeAdTechConfigs(d,c[r]._default),i=function(e){const n=matchVariantPattern(c[e],s);return t?mergeAdTechConfigs(n,t):n}(r),a=mergeAdTechConfigs(o,i);return function(e,t,n){const r=t.sizes,o=r&&r[n]&&r[n].length,i=r&&!1===r[n],s=$(t),a=o&&!i;return!!t.isOutOfPage||(S(a,s,e,t),o&&!i&&s)}(r,a,n)&&(e[r]=freeze(a)),e}),{})),T=freeze(Object.keys(v));const P=new function(){defineReadOnlyProperties(this,{slug:e.slug,server:e.server,keywords:e.keywords,channel:e.channel||”misc”,subChannel:e.subChannel,subSubChannel:e.subSubChannel,device:n,templateType:e.templateType,contentType:e.contentType,forChildren:e[p],slotNames:T,network:getNetwork(),brand:getBrandAdUnitId(),requestViewportRange:getViewportRange(s,n,”request_vp_range”),adUnit:getAdUnit(),isVerso:getVersoFlag(e),useRoadblock:getConfig().useRoadblock,lazyloadSettings:getViewportRange(s,n,”lazyload_settings”),pageRefresh:getPageRefreshTime()}),freeze(this)};function A(t){const i=v[t]?v[t]:{sizes:{}};function s(e,n){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};e=void 0!==e?e:r.next(t);const s=`${t}_${e}`;n=void 0!==n?n:o.next(this.position);const a=this.position&&slugify(this.position),c=`${a}_${n}`;defineReadOnlyProperties(this,{id:s,slotCount:e,positionCount:n,positionId:c,data:i}),this.getAdUnitPath=()=>getAdUnitPath(this,P),freeze(this)}this.getRenderBlock=()=>$(i),this.getSizes=()=>i.sizes[n],this.getSizesArray=()=>sizesToArray(i.sizes[n]),this.getSizeMapping=()=>{const e=window.googletag.sizeMapping();return e.addSize([1024,0],sizesToArray(i.sizes.desktop)).addSize([768,0],sizesToArray(i.sizes.tablet)).addSize([0,0],sizesToArray(i.sizes.mobile)),e.build()},this.shouldWaitUntilVisibleBeforeDisplay=()=>!i[m],this.getCustomData=()=>i.data,s.prototype=this,this.getSlotDefinition=function(){for(var e=arguments.length,t=new Array(e),n=0;n{const t=g(“pos_instance”),n=g(“ctx_slot_instance”),r=parseInt(e.getTargeting(t)[0],10);return new s(parseInt(e.getTargeting(n)[0],10),r)},this.getSlotRefreshTime=(e,t,n)=>{let r;return r=void 0!==t?t:e,r&&r[n]&&(r=r[n]),r},defineReadOnlyProperties(this,{slotName:t,isOutOfPage:!!i.isOutOfPage,refresh:this.getSlotRefreshTime(P.pageRefresh,i.refresh,n),isSticky:isStickyDeviceEnabled(i[b],n),hasStaticRefreshSize:!!i[f],suffix:i.suffix,channel:e.channel,subChannel:e.subChannel,subSubChannel:e.subSubChannel,templateType:e.templateType,override:getPathOverride(),brand:getBrandAdUnitId(),network:getNetwork(),shouldWaitForOOP:i[w],shouldWaitForReact:!!i[y],requiredTargeting:i[h]||[],position:i.position,overrideRequestViewportRange:getOverrideVpRange(n,i)}),freeze(this)}this.getSlotTypeDefinition=e=>new A(e),this.getSlotDefinitionFromGPTSlot=e=>{const t=e.getSlotElementId().split(“_”);t.pop();return new A(t.join(“_”)).getSlotDefinitionFromGPTSlot(e)},this.getSlotStateStore=()=>i,this.getPageDefinition=()=>P,freeze(this)}const reactReadyEvent=”react.ready”;function onReactReady(){set$1(window,”_cne.pageCreated”,!0)}function enableCNE(e){if(e.history(reactReadyEvent).length)return onReactReady();e.on(reactReadyEvent,onReactReady)}const eval2=eval;function getText(e){let t=””;const n=e.childNodes;for(let e=0;ee.previousSibling,above:e=>e.previousSibling,after:e=>e.nextSibling,below:e=>e.nextSibling,prepend:e=>e.firstElementChild,append:e=>e.lastElementChild};function getInsertionTarget(e,t){if(insertionMethods[t])return insertionMethods[t](e)}function alreadyExists(e,t){const n=getInsertionTarget(e,t),r=n&&n.classList&&n.classList.contains(“cns-ads-stage”),o=n&&n.firstChild,i=o&&o.classList&&o.classList.contains(“cns-ads-stage”);return!(!r&&!i)}function checkEvery(e){let t=e.injectionBlock,n=e.index;return”number”==typeof t.every&&!!t.every&&”number”==typeof n}function checkCustomCondition(e){return”function”==typeof e.customConditionFn}const shouldAddSlotConditions=[{name:”every”,check:checkEvery,fn:e=>(e.index+1)%e.injectionBlock.every==0},{name:”custom condition”,check:checkCustomCondition,fn:e=>(0,e.customConditionFn)(e.domNode,e.meta)}];function shouldAddSlot(e){for(let t=0;t{const r=e[n];let o;return”string”==typeof r?o=findAll(r):isValidComplexInjection(r)?o=getDomNodesForInjectionBlock(r):(o=[],error$1(“invalid”,r)),n=normalizeMethod(n),o=o.filter((e=>!alreadyExists(e,n))),o&&o.length&&(t[n]=o),t}),{})}const PromiseLock=function(){let e;return function(t){return function(){for(var n=arguments.length,r=new Array(n),o=0;ot(…r)));return e=n.then((()=>{})),n}return e=t(…r),e}}};function createContainerEl(e,t,n){const r=createElement(“div”,{id:`${e}_${t}`});return addClasses(r,[“cns-ads-container”]),setStyle(r,{margin:”0px auto”,boxSizing:”content-box”}),n&&setElementData(r,n),r}function createAdDivs(e,t,n,r){const o=”cns-ads-slot-type-“,i=e.replace(new RegExp(“_”,”g”),”-“).toLowerCase(),s=createElement(“div”,{id:`${o}${i}-${t}`});addClasses(s,[“cns-ads-stage”,o+i,`${o+i}-${t}`]),setElementData(s,{name:`${e}_${t}`,”slot-type”:e}),r||setStyle(s,{fontSize:0,lineHeight:0,overflow:”hidden”}),”_out_of_page”===e&&addClasses(s,[“cns-ads-slot-type-out-of-page”]);const a=createElement(“div”);return addClasses(a,[“cns-ads-flex-sizer”]),s.appendChild(a),s.appendChild(createContainerEl(e,t,n)),s}function InjectRefreshDisplayInjectionStrategy(e,t,n,r){window.googletag=window.googletag||{};const o=window.googletag,i={after:(e,t)=>e.parentNode.insertBefore(t,e.nextSibling),prepend:(e,t)=>e.insertBefore(t,e.children[0]),append:(e,t)=>e.appendChild(t),before:(e,t)=>e.parentNode.insertBefore(t,e)};this.insertSlot=function(s,a,c,l,d){fastdom.mutate((()=>{const u=createAdDivs(a.slotName,a.slotCount,_objectSpread2(_objectSpread2({},a.getCustomData()),a.data),r);!function(e,t,n){i[t]?i[t](e,n):e[t](n)}(c,l,u),d(u,a,(()=>{((r,i)=>{const s=t.getSingleInstance().getPageDefinition();e([“refreshLC-serviceLT”],{pageDefinition:s},(t=>(applyTargeting(o.pubads(),t),e([“refresh”],{slotDefinition:i,slot:r,pageDefinition:s},(e=>{e?(applyTargeting(r,e),n.reset(i),get$1(window,”cns.config.config.useRoadblock”)||o.pubads().refresh([r],{changeCorrelator:!1}),debug$1(`refreshing.${r.getSlotElementId()}`)):error$1(“slot targeting is missing”,s,i)})))))})(s,a)}))}))}}const allowedIntersectionOptions=[“threshold”,”rootMargin”],defaultIntersectionObserverOptions={threshold:0,rootMargin:”0px 0px”},_EventEmitter=new EventEmitter(“VisibilityObserver”),debug=_EventEmitter.debug,error=_EventEmitter.error;function isIntersecting(e){return any(e,(e=>e.isIntersecting))}function hasHigherIntersectionRatio(e,t){return void 0===e||any(t,(t=>t.intersectionRatio>=(e||0)))}function getIntersectionObserverOptions(e){return Object.assign({},defaultIntersectionObserverOptions,pick(e,allowedIntersectionOptions))}function observeEvents(e,t,n,r){fastdom.measure((()=>{try{const r=new IntersectionObserver((o=>{hasHigherIntersectionRatio(t.intersectionRatio,o)&&isIntersecting(o)?(debug(“visible”,{el:e,entries:o}),n(!0,r)):(debug(“notVisible”,{el:e,entries:o}),n(!1,r))}),getIntersectionObserverOptions(t));r.observe(e)}catch(e){r(e)}}))}function onIntersection(e,t,n){observeEvents(e,t,(e=>n(e)),(e=>error(“onIntersection”,e)))}function onceVisible(e,t){return new Promise(((n,r)=>{observeEvents(e,t,((e,t)=>{e&&(n(),t.disconnect())}),r)}))}function reactRule(e,t){return!e||t}function targetingRule(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];const r=Object.keys(t);return all(e,(e=>find$1(n,(t=>t===e))||find$1(r,(t=>t===e))))}function canRequest(e){let t=e.slotTypeDefinition,n=e.pageTargeting,r=e.slotTargeting,o=e.reactReady,i=e.oopHasRendered,s=e.excludedPositions;const a=!!r,c=targetingRule(t.requiredTargeting,r,n),l=reactRule(t.shouldWaitForReact,o),d=t.shouldWaitForOOP,u=t.position,g=s.has(u);let p=a&&c&&l&&!g&&!(d&&!i);return debug$1(`canRequest.${t.slotName}.${p}`,{slotTypeDefinition:t,pageTargeting:n,slotTargeting:r,reactReady:o,oopHasRendered:i,excludedPositions:s}),p}function UnassumingInsert(e,t,n,r){window.googletag=window.googletag||{};const o=window.googletag,i=t.withTargeting,s=r.getSingleInstance().getPageDefinition().isVerso,a=new InjectRefreshDisplayInjectionStrategy(i,r,n,s),c=new Set;let l=!1,d=!1;function u(e,t){let n;return r.getSingleInstance().getSlotStateStore().setSlotState(e.id,{nodeId:e.data&&e.data[“node-id”]}),n=t?o.defineOutOfPageSlot(e.getAdUnitPath(),e.id):o.defineSlot(e.getAdUnitPath(),e.getSizesArray(),e.id).defineSizeMapping(e.getSizeMapping()),n}function g(e,t){return(n,r,i)=>{const s=function(e){if(e.shouldWaitUntilVisibleBeforeDisplay())return onceVisible}(r),a=()=>{const e=r.id;debug$1(“insert.display”,e),o.display(e),i()},c=e.requestViewportRange,l=t.overrideRequestViewportRange;if(s)return s(n,{rootMargin:`${void 0!==l?l:c}% 0%`}).then(a);a()}}const p=(new PromiseLock)((e=>{const t=e.getSingleInstance().getPageDefinition();return i([“service”],{pageDefinition:t},(n=>{if(n)return applyTargeting(o.pubads(),n),Promise.all(t.slotNames.map((r=>{const s=e.getSingleInstance().getSlotTypeDefinition(r);return function(e,t){let n;const r=e.getRenderBlock();return n=getCandidateElementsFromRenderBlock(r),Promise.all(Object.keys(n).map((r=>(debug$1(“candidatesByMethod.”+e.slotName,{method:r,els:n[r],definition:e}),Promise.all(n[r].map((e=>t(e,r))))))))}(s,((e,r)=>i([“slot”],{pageTargeting:n,slotTypeDefinition:s,reactReady:d,el:e},(p=>{if(!p)return void error$1(“slot type targeting is missing”,t,s);const f=o.pubads().getTargetingKeys();if(!canRequest({slotTypeDefinition:s,pageTargeting:f,slotTargeting:p,reactReady:d,oopHasRendered:l,excludedPositions:c}))return void debug$1(`${s.slotName}.notRequestable`,s,d,n,p);const m=e.dataset.nodeId,y=s.getSlotDefinition(void 0,void 0,_objectSpread2({},m&&{“node-id”:m})),b=y.isOutOfPage,h=u(y,b);if(!h)return void error$1(“the slot cannot be defined”,y,h);h.addService(window.googletag.pubads()),b&&h.addService(window.googletag.companionAds());const w=_objectSpread2({},p);h.updateTargetingFromMap(w),i([“define”],{slot:h,slotDefinition:y},(e=>{applyTargeting(h,e)})),a.insertSlot(h,y,e,r,g(t,s))}))))})));error$1(“page targeting is missing”,t)})).catch(handlePromiseError(“insert error”)).then((()=>new Promise((e=>fastdom.mutate((()=>setTimeout(e,1e3))))))).catch(handlePromiseError(“impossible mutate error”))}));var f;f=()=>{d=!0},e.history(“react.ready”).length?f():e.on(“react.ready”,f),function(){const t=e.on(“#.slotRenderEnded.#”,((n,r)=>{r.topic&&r.topic.includes(“out_of_page”)&&(l=!0,t(),e.emit(“ads.componentDidUpdate”))}))}(),e.on(“ads.excludePositions”,(e=>{e.forEach(c.add,c)})),this.insert=t=>{!function(t){o.pubadsReady?t():e.on(“ads.pubadsReady”,t)}((()=>{p(t),function(t){e.on(“react.ready”,t),e.on(“#.componentDidMount.#”,t),e.on(“#.componentDidUpdate.#”,t)}(debounce((()=>p(t)),500))}))}}function UniqueTimerStore(){const e={};function t(t){const n=e[t];n&&(clearTimeout(n),e[t]=null)}this.startTimer=function(n,r,o){t(n),e[n]=setTimeout((()=>{t(n),r()}),o)},this.endTimer=t}function KeyCounter(){let e={};this.increment=t=>{e[t]||(e[t]=0),e[t]+=1},this.remove=t=>{e[t]&&delete e[t]},this.getCount=t=>e[t]||0}function RefreshControl(e,t){const n=t.withTargeting,r=new EventEmitter(“RefreshControl”).debug,o=new KeyCounter,i=new KeyCounter,s=new Set,a=new Set,c=new Set,l=new UniqueTimerStore,d=[[“aged”,e=>s.has(e)],[“impressions”,e=>i.getCount(e)],[“visible”,e=>c.has(e)]],u=e=>`${e}.refresh_${o.getCount(e)}`,g=t=>e.getSingleInstance().getSlotDefinitionFromGPTSlot(t);function p(t){const i=e.getSingleInstance().getPageDefinition(),s=getSlotById(t),a=g(s);r(`setTargeting.${u(t)}`);const c=getConfig$1(window).config.useBlueprintTargeting,l=getTargetingKeyTranslator(void 0!==c&&c)(“ctx_slot_rn”);return s.setTargeting(l,o.getCount(t)),n([“refreshLC-serviceLT”],{pageDefinition:i},(e=>(applyTargeting(window.googletag.pubads(),e),n([“refresh”],{pageDefinition:i,slotDefinition:a,slot:s},(e=>{applyTargeting(s,e)})))))}function f(e){return void 0===e?3e4:!Number.isNaN(parseInt(e,10))&&e>0?e:0}const m=cumulativeArgumentDebounce((e=>{const t=uniq(e.map((e=>e[0])));if(window.cns.flags.shouldNotRefresh)r(“window.cns.flags.shouldNotRefresh”);else if(r(`refreshing.${t.map((e=>u(e))).join(“,”)}`),t.forEach((e=>h(g(getSlotById(e))))),!get$1(window,”cns.config.config.useRoadblock”)){const e=t.map(getSlotById);window.googletag.pubads().refresh(e,{changeCorrelator:!1})}}),100);function y(e){r(`onChange.${e}.(${d.map((t=>t[0]+”:”+t[1](e))).join(“,”)})`),all(d,(t=>t[1](e)))&&p(e).then((()=>{m(e)}))}function b(e,t){0===(t=f(t))?y(e):l.startTimer(e,(()=>{s.add(e),y(e)}),t),r(`willRefreshIn.${e}.${t}`)}function h(e){const t=e.id;i.remove(t),s.delete(t),b(t,e.refresh)}function w(e){return!e.isOutOfPage&&!window.cns.flags.shouldNotRefresh&&!1!==e.refresh}this.reset=function(e){w(e)?h(e):r(`slotNotRefreshable.${e.id}`)},this.onSlotRenderEnded=function(e){const t=e.slot,n=g(t).id;o.increment(n)},this.onImpressionViewable=function(e){const t=e.slot.getSlotElementId();i.increment(t),r(`${t}.impressionIncremented`),y(t),w(g(e.slot))&&function(e){if(!a.has(e)){const t=getElementById(e);a.add(e),onIntersection(t,{},(t=>{t?(c.add(e),y(e)):c.delete(e)}))}}(t)},this.disableRefresh=function(e){l.endTimer(e)},this.delayRefresh=b,this.normalizeRefreshTimeout=f}function ShareOfVoice(){let e=!1,t=””;this.getTargeting=function(){const e={};return t&&(e.ctx_line_items=[t]),e},this.onSlotRenderEnded=function(n){e||(e=!0,t=n.lineItemId)}}function cnsMetricsApi(){return e=>{e({emit:pixel})}}var updateRefresh=e=>{let t=e.refreshControl;return e=>{let n=e.slotName,r=e.refresh;”number”==typeof r&&r>0?t.delayRefresh(n,r):t.disableRefresh(n)}};function CNSAdsAPI(e,t,n,r){function o(e){let t=e.device,n=void 0===t?”desktop”:t,r=e.server,o=void 0===r?”staging”:r;return new Promise(((e,t)=>{o&&n||t(),e()}))}function i(){return!0===get$1(window,”cns.pageContext.adBlock”)}const s=updateRefresh({refreshControl:t});function a(e,t){const n=e.frameElement.parentElement.parentElement.id;s({slotName:n,refresh:t})}function c(e){const t=window.cns.pageContext,o=new CompleteDefiner(Object.assign({},t,e),null,getViewportTemplate());n.reset((()=>o)),r.insert(n)}function l(){resetUserData(),window.googletag.cmd.push((()=>{window.googletag.pubads().clear(),window.googletag.destroySlots()})),fastdom.mutate((()=>{const e=document.querySelectorAll(“.cns-ads-stage”);for(let t=0;t{}),”adblock.installed”),blocked:deprecated(i,”adblock.blocked”)},pages:{create:c,destroy:l,get:()=>({slots:{add:deprecated(d,”slots.add”),get:deprecated((()=>{}),”slots.get”),refresh:deprecated((()=>{}),”slots.refresh”),destroy:deprecated((()=>{}),”slots.destroy”)}})}})}}function CNSShim(e,t,n,r){const o=new CNSAdsAPI(e,t,n,r);var i;i={ads:o.executeCallback,metrics:cnsMetricsApi()},window.cns.async=function(e,t){i[e](t)},window.cns.queue.forEach((e=>{let t=e.service,n=e.callback;window.cns.async(t,n)})),delete window.cns.queue}var spacerCreative=e=>{let t=e.definer;return e=>{let n=e.creativeId;const r=t.getSingleInstance().getSlotStateStore();r.setSpacerCreativeId(n);const o=r.getStore();window.cnBus&&Array.from(o.values()).forEach((e=>{let t=e.creativeId,r=e.nodeId;r&&t&&n===t&&window.cnBus.emit(`ads.creative.${r}.spacer`,{})}))}};function SafeFrameMessageListener(e){const t=function(t){const n=new Map(Object.keys(t).map((n=>[n,t[n](e)])));return e=>{const t=e.data,r=t.cnsAdEvent,o=t.payload;if(r&&n.has(r)){return n.get(r)(o,e)}}}({updateRefresh:updateRefresh,”ads.creative.spacer”:spacerCreative});window.addEventListener(“message”,t)}function SourceOfTruth(e){let t;this.getSingleInstance=function(){return t||(t=e()),t},this.reset=function(n){t=n?n():e()}}const _window=window,cns=_window.cns,cnBus=_window.cnBus;function about(){return{buildDate:cns.buildDate,fastAdsHead:cns.fastAdsHead,fastAdsFooter:cns.fastAdsFooter,runtimeId:queryParameters.runtimeId||runtimeId}}function attachListeners(e,t){const n=getConfig$1(window),r=new ShareOfVoice,o=new TargetingLifecycle(n,r),i=new RefreshControl(t,o),s=new UnassumingInsert(e,o,i,t);new CNSShim(e,i,t,s),new GPTRouter(t,i,r,e),new SafeFrameMessageListener({refreshControl:i,definer:t}),emitBoomPixel(“adsReady”),cns.addTargeting=o.register,AdBlockDetect(e,t);s.insert(t),sparrowCollector.onRoadblockRendered(cnBus),snowplowCollector.onRoadblockDetected(cnBus)}function initAdsLibrary(){sendBoomerangAdLibraryInformation();const e=new SourceOfTruth((()=>{const e=getViewportTemplate();return new CompleteDefiner(getPageContext(window),null,e)}));setupPermutive(),attachListeners(cnBus,e),enableCNE(cnBus)}function startFooter(){if(addDefaultSubscriptions(cnBus,featureFlags.bus_log),”info”===queryParameters.ao_tools&&append({src:`https://ad-tools.condenastdigital.com/ads-${queryParameters.ao_tools}/prod/index.js`,targ:document.head}),!queryParameters.ap_noads){if(hasPII())return sparrowCollector.onPIIDetected(),void snowplowCollector.onPIIDetected();setupIAS(),setupMoat(),til((()=>cns.pageContext),(()=>{shouldWaitForConsent()?onConsent(initAdsLibrary):initAdsLibrary()}))}}set$1(window,”cns.buildDate”,getConfig$1(window).buildDate),set$1(window,”cns.fastAdsFooter”,version),set$1(window,”cns.runtimeId”,queryParameters.runtimeId||runtimeId),set$1(window,”cns.about”,about),set$1(window,”cns.timing.footerStart”,Date.now()),set$1(window,”cns.addTargeting”,(()=>{})),startFooter()})();