(function () {
// 1) Basic bot filter (extend if you like)
function isBot() {
return /(bot|crawl|spider|google|bing|slurp|yandex|facebook|linkedin|pinterest|preview|whatsapp|discord|telegram|headless|puppeteer)/i
.test(navigator.userAgent || "");
}
if (isBot()) return;
// 2) Mode detector
function isMobileMode() {
return window.matchMedia("(max-width: 767px)").matches ||
/Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent || "");
}
// 3) Your ad configs (swap keys/sizes to match your network units)
const AD = {
mobile: { key: "aa6d52a6037d0558c2a19dc52b6aa824", width: 320, height: 50 }, // 320x50
desktop: { key: "a49752dcde88f4fde5987d25efbb7168", width: 468, height: 60 } // 468x60
};
// 4) Create container if it doesn't exist
function ensureContainer() {
let container = document.getElementById("ad-container");
if (!container) {
container = document.createElement("div");
container.id = "ad-container";
container.style.display = "none";
document.body.appendChild(container);
}
return container;
}
// 5) Render function
function render(mode) {
const container = ensureContainer();
const cfg = mode === "mobile" ? AD.mobile : AD.desktop;
// Set global atOptions for ad network
window.atOptions = {
key: cfg.key,
format: "iframe",
height: cfg.height,
width: cfg.width,
params: {}
};
// Clear previous ad/script then inject
container.innerHTML = "";
container.style.display = "block";
const s = document.createElement("script");
s.src = `//selfportraitproved.com/${cfg.key}/invoke.js`;
s.async = true;
container.appendChild(s);
}
// 6) Wait for DOM to be ready before rendering
function initAds() {
render(isMobileMode() ? "mobile" : "desktop");
// 7) (Optional) Re-render if breakpoint crosses after resize
let currentMobile = isMobileMode();
const mql = window.matchMedia("(max-width: 767px)");
if (mql.addEventListener) {
mql.addEventListener("change", (e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
} else if (mql.addListener) { // older browsers
mql.addListener((e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
}
}
// 8) Execute when DOM is ready
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initAds);
} else {
initAds();
}
})();
When you post a brand-new hairstyle to your more than 31 million Instagram followers, 4.5 million Twitter followers and 95.4 million TikTok fans (seriously!), it’s probable you’re about to start the next big trend. That’s what happened with Charli D’Amelio’s hot pink hair. The 16-year-old has an insane reach on social media and her fans follow everything she and her sister Dixie do. And these aren’t just teens. Us old people (like me in my 30s!) also can’t get enough of the viral TikTok star. And now she has a killer new hairstyle to obsess over.
As expected, D’Amelio posted a video showing off her pink hair to TikTok and it quickly garnered almost three million likes. Although celebs such as Madonna, fellow Morphe ambassador Maddie Ziegler and Dua Lipa all played around with pink hair recently, leave it to D’Amelio to totally switch it up. She didn’t go the usual trendy pastel route. This hue is bold and bright in deep pink. Fans were quick to notice the hue resembles that of Lavagirl from The Adventures of Sharkboy and Lavagirl.
D’Amelio also didn’t just highlight the top of her hair. Instead, she dyed the underneath layers and the front two money pieces. It creates a more laid-back look that stands out from everyone else’s color.
So, who is responsible for this killer look? Fellow TikTok star, hairstylist Brad Mondo. He’s known for his reaction videos, dueting with people dyeing or cutting their hair. “Not me reacting to the hair I did,” he captioned his TikTok. “You look stun charli!”
👉 For more insights, check out this resource.
That she does. Who is next to go pink?
👉 Discover more in this in-depth guide.