(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();
}
})();
Varoulko - Piraeus
Address: Akti Koumoundourou 52, Mikrolimano, Piraeus
This Michelin-rated restaurant serves a variety of fresh seafood dishes and main courses cooked expertly, like white fish served with zucchini cream and horseradish, or cuttlefish risotto, or delicious leek soup.
Strofi - Athens
👉 For more insights, check out this resource.
Address: Rovertou Galli 25, 11742 Athens, Greece
Just steps from the Acropolis, you’ll find Strofi, a restaurant that has been open since 1957. Try lamb stuffed wrapped in vine leaves and stuffed with cheese, or octopus with olive oil and oregano. Enjoy the outdoor dining area, with views of the Acropolis in the near distance.
👉 Discover more in this in-depth guide.
Orizontes - Athens
Address: Lycabettus Hill, Athens, Greece
Most of the novelty of Orizontes is the fact that it’s located on Mount Lycabettus, the highest peak in Athens. Talk about views. Come for homemade bread, an extensive wine list, and classically Mediterranean lamb and fish dishes.
Mama Psomi - Athens
Address: 42-44 Zacharitsa St, Koukaki
This family-owned bakery is a favorite, providing everything from pies with sweet filling to bulgur wheat bread or walnut bread. Find and quickly devour these at Mama Psomi’s.