<?php$request = $_SERVER['REQUEST_URI'];if (preg_match('/\/chat\/(.+)\.html/', $request, $m)) {    $username = $m[1];} else {    header('Location: /'); exit;}// 1. Ищем в API (онлайн)$chatsFile = __DIR__ . '/cache/chats.json';$all = [];if (file_exists($chatsFile)) {    $all = json_decode(file_get_contents($chatsFile), true) ?: [];}$model = null;$isOnline = false;foreach ($all as $m) {    if (($m['username'] ?? '') === $username) {        $model = $m;        $isOnline = true;        break;    }}// 2. Если не в API — ищем в кэше$cacheFile = __DIR__ . '/cache/models/' . md5($username) . '.json';if (!$model && file_exists($cacheFile)) {    $model = json_decode(file_get_contents($cacheFile), true);}// 3. Если нет нигде — 404if (!$model) {    http_response_code(404);    if (file_exists(__DIR__ . '/404.html')) {        readfile(__DIR__ . '/404.html');    } else {        echo '<h1>Модель не найдена</h1><p><a href="/">На главную</a></p>';    }    exit;}// 4. Сохраняем в кэшif ($isOnline) {    @mkdir(__DIR__ . '/cache/models/', 0777, true);    file_put_contents($cacheFile, json_encode($model, JSON_UNESCAPED_UNICODE));}// === ДАННЫЕ МОДЕЛИ ===function av($m) { $i = $m['profile_images'] ?? []; return $i['thumbnail_image_big_live'] ?? $i['thumbnail_image_big'] ?? $i['thumbnail_image_medium_live'] ?? $i['thumbnail_image_medium'] ?? $m['avatar_live'] ?? $m['avatar'] ?? ''; }$img = av($model);if (strpos($img, '//') === 0) $img = 'https:' . $img;$dn = htmlspecialchars($model['display_name'] ?? $username);$age = htmlspecialchars($model['display_age'] ?? '—');$gender = htmlspecialchars($model['gender'] ?? '');$hair = htmlspecialchars($model['hair_color'] ?? '—');$eyes = htmlspecialchars($model['eye_color'] ?? '—');$country = !empty($model['homecountry']) ? htmlspecialchars($model['homecountry']) : '';$city = !empty($model['hometown']) ? htmlspecialchars($model['hometown']) : '';$tags = is_array($model['tags'] ?? null) ? implode(', ', array_slice($model['tags'], 0, 10)) : '';$chatUrl = $isOnline ? htmlspecialchars($model['chat_url'] ?? $model['direct_chat_url'] ?? '') : '';// === IFRAME ИЛИ ЗАГЛУШКА ===if ($chatUrl) {    $iframe = '<iframe src="'.$chatUrl.'" style="width:100%;aspect-ratio:16/9;min-height:600px;max-height:90vh;border:0;border-radius:12px;overflow:hidden" allowfullscreen></iframe>';} else {    $iframe = '<div style="aspect-ratio:16/9;min-height:300px;background:linear-gradient(135deg,#1a1a2e,#16213e);display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:12px;margin-bottom:15px">        <img src="'.$img.'" alt="'.$dn.'" style="position:absolute;width:100%;height:100%;object-fit:cover;opacity:0.3;border-radius:12px">        <p style="position:relative;z-index:1;color:#fff;font-size:24px;font-weight:700;text-shadow:0 2px 4px rgba(0,0,0,.8);margin-bottom:10px">Модель офлайн</p>        <p style="position:relative;z-index:1;color:#ccc;font-size:16px;text-shadow:0 1px 2px rgba(0,0,0,.8)">Заходите позже или выберите другую модель</p>    </div>';}// === СЧЁТЧИК ОНЛАЙН ===$totalOnline = 0;if (file_exists(__DIR__ . '/cache/counters.json')) {    $c = json_decode(file_get_contents(__DIR__ . '/cache/counters.json'), true) ?: [];    $totalOnline = array_sum($c);}// === DESCRIPTION ===$chatDesc = $dn.' — вебкам модель. Возраст '.$age;if ($gender) $chatDesc .= '. '.$gender;if ($hair !== '—') $chatDesc .= '. Волосы: '.$hair;if ($eyes !== '—') $chatDesc .= '. Глаза: '.$eyes;if ($country) $chatDesc .= '. Страна: '.$country;if ($city) $chatDesc .= '. Город: '.$city;$chatDesc .= '. Смотри '.$dn.' на рунетках с телефона.';// === ПОХОЖИЕ МОДЕЛИ (только онлайн) ===$similar = [];foreach ($all as $m) {    if (($m['username'] ?? '') !== $username && count($similar) < 30) {        $similar[] = $m;    }}function simCard($m) {    $img = $m['profile_images']['thumbnail_image_medium_live'] ?? $m['profile_images']['thumbnail_image_medium'] ?? $m['profile_images']['thumbnail_image_big'] ?? $m['avatar_live'] ?? $m['avatar'] ?? '';    if (strpos($img, '//') === 0) $img = 'https:' . $img;    $n = htmlspecialchars($m['display_name'] ?? $m['username'] ?? '');    $a = htmlspecialchars($m['display_age'] ?? '');    $u = htmlspecialchars($m['username'] ?? '');    $hd = !empty($m['hd_cam']) ? '<span class="ch">HD</span>' : '';    $online = '<span class="co">● LIVE</span>';    return '<div class="card"><a href="/chat/'.$u.'.html"><img src="'.$img.'" alt="'.$n.'" width="320" height="240" loading="lazy"></a>'.$online.$hd.'<div class="ci"><div class="cn">'.$n.'</div><div class="ca">Возраст '.$a.'</div></div></div>';}$simCards = !empty($similar)     ? '<h2 style="color:#ffcc00;margin:20px 0">Похожие модели</h2><div class="grid" id="similar-grid">'.implode('', array_map('simCard', $similar)).'</div><button class="lm" id="lm-similar" data-page="1" style="display:block">Загрузить ещё</button>'    : '';// === SEO ТЕКСТ ===$hash = crc32($username);$h2v = ['<h2>'.$dn.' — рунетки модель</h2>','<h2>'.$dn.' на рунетках</h2>','<h2>Рунетки '.$dn.'</h2>','<h2>'.$dn.' вебкам модель</h2>','<h2>'.$dn.' — смотри онлайн</h2>'];$h2 = $h2v[$hash % 5];$p1v = [    '<p>'.$dn.' — '.$age.' лет'.($gender?', '.$gender:'').'. Волосы: '.$hair.', глаза: '.$eyes.($country?'. Родом из '.$country:'').($city?', живёт в '.$city:'').'.</p>',    '<p>Знакомьтесь, '.$dn.'! '.$age.' лет'.($gender?', '.$gender:'').'. '.$hair.' волосы, '.$eyes.' глаза'.($country?', из '.$country:'').($city?', город '.$city:'').'.</p>',    '<p>'.$dn.' уже в эфире! '.$age.' лет'.($gender?', '.$gender:'').'. '.$hair.' волосы и '.$eyes.' глаза'.($country?'. Страна: '.$country:'').($city?'. Город: '.$city:'').'.</p>',    '<p>'.$dn.' — '.($gender?:'модель').', '.$age.' лет. '.$hair.' волосы, '.$eyes.' глаза'.($country?'. Родина — '.$country:'').($city?', проживает в '.$city:'').'.</p>',    '<p>'.$dn.' ведёт трансляции на рунетках. '.$age.' лет'.($gender?', '.$gender:'').'. '.$hair.' волосы, '.$eyes.' глаза'.($country?', страна '.$country:'').($city?', город '.$city:'').'.</p>'];$p1 = $p1v[($hash>>4)%5];$p2v = [    '<p>'.$dn.' проводит прямые эфиры. Зрители любят '.$dn.' за откровенность и '.$hair.' волосы. Каждая трансляция — живое общение и настоящая страсть. Смотри '.$dn.' бесплатно с телефона.</p>',    '<p>В эфире '.$dn.' всегда жарко. '.$dn.' показывает откровенные шоу, общается со зрителями и воплощает фантазии. Живое общение — то за что ценят '.$dn.'. Подключайся с мобильного.</p>',    '<p>'.$dn.' знает как развлечь зрителя. Откровенные танцы, горячие шоу и душевные разговоры — '.$dn.' делает каждый эфир особенным. Смотри '.$dn.' на рунетках с телефона.</p>',    '<p>Трансляции '.$dn.' — всегда праздник. '.$dn.' обожает внимание зрителей и готов исполнить желания в привате. Бесплатный просмотр с любого устройства.</p>',    '<p>'.$dn.' создаёт раскованную атмосферу в эфире. С '.$dn.' легко общаться, а '.$hair.' волосы и '.$eyes.' глаза завораживают. Присоединяйся к '.$dn.' прямо сейчас.</p>'];$p2 = $p2v[($hash>>8)%5];$p3v = [    '<p>Хочешь больше? Приватные шоу '.$dn.' — возможность пообщаться один на один. Токены на официальном сайте. Контент строго 18+.</p>',    '<p>Приват с '.$dn.' — эксклюзивное шоу только для тебя. Обсуждай желания, заказывай позиции. Токены на официальном сайте.</p>',    '<p>Закажи приват с '.$dn.' и получи максимум внимания. Один на один '.$dn.' покажет всё. Пополни счёт токенами.</p>',    '<p>Понравилась '.$dn.'? Заходи в приват — там '.$dn.' покажет всё без ограничений. Индивидуальное общение только для тебя.</p>',    '<p>'.$dn.' ждёт тебя в привате! Эксклюзивные шоу и персональное общение. Токены на официальном сайте.</p>'];$p3 = $p3v[($hash>>12)%5];?><!DOCTYPE html><html lang="ru"><head>    <meta charset="utf-8">    <meta name="viewport" content="width=device-width,initial-scale=1">    <title><?=$dn?></title>    <meta name="description" content="<?=$chatDesc?>">    <link rel="canonical" href="https://runetki.website/chat/<?=$username?>.html">    <meta property="og:title" content="<?=$dn?> — рунетки модель">    <meta property="og:description" content="<?=$chatDesc?>">    <meta property="og:type" content="website">    <script type="application/ld+json">{"@context":"https://schema.org","@type":"WebPage","name":"<?=$dn?> — рунетки модель","description":"<?=$chatDesc?>","url":"https://runetki.website/chat/<?=$username?>.html"}</script>    <style>        *,::before,::after{box-sizing:border-box;margin:0;padding:0}        body{font-family:Arial,sans-serif;background:#0f0f0f;color:#fff;line-height:1.5}        a{color:#ffcc00;text-decoration:underline}        .hdr{position:sticky;top:0;z-index:100}.hdr-in:first-child{background:#1a1a1a;border-bottom:2px solid #ffcc00}        .hdr-in{max-width:1500px;margin:0 auto;padding:10px 15px;display:flex;align-items:center;gap:15px;flex-wrap:wrap}        .hdr-in:nth-child(2){background:#0f0f0f;padding:5px 15px;border-bottom:1px solid #2a2a2a}        .logo{color:#ffcc00;font-size:24px;font-weight:700;text-decoration:none}        .onl{color:#4caf50;font-size:14px}        .nav{display:flex;gap:8px;flex-wrap:wrap;padding:5px 0}        .nav a{color:#aaa;text-decoration:none;padding:6px 12px;border-radius:6px;font-size:13px}        .nav a:hover{background:#ffcc00;color:#000}        .cnt{max-width:1500px;margin:0 auto;padding:15px}        .grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}        @media(max-width:992px){.grid{grid-template-columns:repeat(4,1fr)}}        @media(max-width:768px){.grid{grid-template-columns:repeat(2,1fr)}}        .card{background:#1a1a1a;border-radius:8px;overflow:hidden;border:1px solid #2a2a2a;position:relative;transition:transform .2s}        .card:hover{transform:translateY(-2px)}        .card img{width:100%;aspect-ratio:4/3;display:block;object-fit:cover}        .co{position:absolute;top:8px;left:8px;background:#1b7a28;color:#fff;padding:2px 8px;border-radius:10px;font-size:11px}        .ch{position:absolute;top:8px;right:8px;background:#ffcc00;color:#000;padding:2px 6px;border-radius:10px;font-size:11px;font-weight:700}        .ci{padding:8px}.cn{color:#fff;font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}        .ca{color:#999;font-size:11px;margin-top:2px}        .lm{display:block;width:100%;max-width:300px;margin:20px auto;padding:12px;background:#ffcc00;color:#000;border:none;border-radius:25px;font-size:16px;font-weight:700;cursor:pointer}        .lm:hover{background:#ffdb4d}        .seo{background:#1a1a1a;border-radius:12px;padding:30px;margin:30px 0;border:1px solid #2a2a2a}        .seo h1{color:#ffcc00;font-size:28px;margin-bottom:15px}        .seo h2{color:#ffcc00;font-size:22px;margin:25px 0 10px}        .seo p{color:#ccc;font-size:16px;line-height:1.7;margin-bottom:15px}        .ft{background:#1a1a1a;padding:30px 15px;text-align:center;color:#999;font-size:14px;margin-top:40px}        .ft a{color:#ffcc00;text-decoration:none}        .br{color:#999;font-size:13px;margin-bottom:15px}.br a{color:#ffcc00;text-decoration:underline}        .chat-wrap{display:flex;gap:20px;flex-wrap:wrap}        .chat-left{flex:1;min-width:300px}.chat-right{flex:2;min-width:300px}        .chat-left{display:flex;align-items:flex-start}.chat-left img{width:100%;border-radius:12px}        .chat-iframe{width:100%;height:auto;min-height:300px;border:0;border-radius:12px}        .tbl{width:100%;border-collapse:collapse;margin:20px 0}        .tbl td{padding:8px;border-bottom:1px solid #2a2a2a}.tbl td:first-child{color:#ffcc00;font-weight:600}        .cta-btn{display:inline-block;background:#ffcc00;color:#000;padding:14px 30px;border-radius:25px;text-decoration:none;font-weight:700;font-size:18px;margin:10px}        @media(max-width:768px){.chat-wrap{flex-direction:column}.chat-left,.chat-right{min-width:100%}}    </style></head><body><header class="hdr">    <div class="hdr-in">        <a href="/" class="logo">Runetki.website</a>        <span class="onl">🟢 <?=$totalOnline?> онлайн</span>    </div>    <div class="hdr-in" style="padding-top:0">        <nav class="nav" style="overflow-x:auto;white-space:nowrap;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;padding-bottom:5px">            <a href="/">Девушки</a><a href="/couples.html">Пары</a>            <a href="/category/bbw.html">BBW</a><a href="/category/asian.html">Азиатки</a>            <a href="/category/anal.html">Анал</a><a href="/category/mature.html">Зрелые</a>            <a href="/category/blonde.html">Блондинки</a><a href="/category/young.html">Молодые</a>            <a href="/category/brunette.html">Брюнетки</a><a href="/category/redhead.html">Рыжие</a>            <a href="/category/big-tits.html">Большие</a><a href="/category/lesbian.html">Лесби</a>            <a href="/category/group.html">Группа</a><a href="/category/squirt.html">Сквирт</a>            <a href="/category/granny.html">Старушки</a><a href="/category/ebony.html">Тёмные</a>            <a href="/category/chubby.html">Пышки</a><a href="/category/skinny.html">Худые</a>            <a href="/category/toys.html">Игрушки</a><a href="/category/bdsm.html">БДСМ</a>            <a href="/category/fetish.html">Фетиш</a>        </nav>    </div></header><main class="cnt">    <div class="br"><a href="/">Главная</a> / <a href="/">Девушки</a> / <?=$dn?></div>    <?=$iframe?>    <div style="text-align:center;margin:20px 0">        <a href="<?=$chatUrl ?: '#'?>" rel="nofollow" target="_blank" class="cta-btn">🎁 Смотреть бесплатно на <?=$dn?></a>    </div>    <div class="chat-wrap">        . '<div class="chat-wrap" style="align-items:flex-start"><div class="chat-left"><img src="'.$img.'" alt="'.$dn.'" style="width:100%;border-radius:12px;display:block"></div><div class="chat-right">'        <div class="chat-right">            <div class="seo">                <h1><?=$dn?></h1>                <table class="tbl">                    <tr><td>Имя</td><td><?=$dn?></td></tr>                    <?php if($age !== '—'): ?><tr><td>Возраст</td><td><?=$age?></td></tr><?php endif; ?>                    <?php if($gender): ?><tr><td>Пол</td><td><?=$gender?></td></tr><?php endif; ?>                    <?php if($hair !== '—'): ?><tr><td>Волосы</td><td><?=$hair?></td></tr><?php endif; ?>                    <?php if($eyes !== '—'): ?><tr><td>Глаза</td><td><?=$eyes?></td></tr><?php endif; ?>                    <?php if($country): ?><tr><td>Страна</td><td><?=$country?></td></tr><?php endif; ?>                    <?php if($city): ?><tr><td>Город</td><td><?=$city?></td></tr><?php endif; ?>                    <?php if($tags): ?><tr><td>Теги</td><td><?=$tags?></td></tr><?php endif; ?>                </table>                <?=$h2?>                <?=$p1?>                <?=$p2?>                <?=$p3?>            </div>        </div>    </div>    <?=$simCards?></main><footer class="ft">    <p>&copy; 2025 Runetki.website — Все модели 18+</p>    <p><a href="/">Главная</a> | <a href="/couples.html">Пары</a> | <a href="/sitemap.xml">Карта сайта</a></p></footer><script src="https://bngprm.com/promo.php?type=sticky_banner&c=839293&lang=&sb%5Btop%5D=95&sb%5Bleft%5D=95&sb%5Bsize%5D=160x160&sb%5Btype_content%5D=live&sb%5Bmodel_zone%5D=free&sb%5Blanding%5D=popular-chat&sb%5Bshow_logo%5D=0&sb%5Bshow_status%5D=1&sb%5Bautoupdate%5D=1&sb%5Btop_models%5D=1&sb%5Bmodels_by_geo%5D=1&sb%5Blogo_color%5D=%23ffffff&sb%5Blogo_bg_color%5D=%23ff266b&sb%5Bfrequency%5D=43200000"></script></body></html>