<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>稲牛川 — река: какая рыба водится, рыбалка</title>
<meta name="description" content="Страница водоёма «稲牛川» — тип: река, площадь около 49.1 га. Что водится, где находится, советы по рыбалке.">
<link rel="canonical" href="https://pokazal.ru/waterbody/147103-/">
<meta name="robots" content="index, follow">
<link rel="preconnect" href="https://yandex.ru" crossorigin>
<link rel="preconnect" href="https://api-maps.yandex.ru" crossorigin>
<meta property="og:type" content="article">
<meta property="og:locale" content="ru_RU">
<meta property="og:site_name" content="Карта водоёмов">
<meta property="og:title" content="稲牛川 — река: какая рыба водится, рыбалка">
<meta property="og:description" content="Страница водоёма «稲牛川» — тип: река, площадь около 49.1 га. Что водится, где находится, советы по рыбалке.">
<meta property="og:url" content="https://pokazal.ru/waterbody/147103-/">
<meta property="og:image" content="https://pokazal.ru/assets/img/seo-cover.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="稲牛川 — река: какая рыба водится, рыбалка">
<meta name="twitter:description" content="Страница водоёма «稲牛川» — тип: река, площадь около 49.1 га. Что водится, где находится, советы по рыбалке.">
<meta name="twitter:image" content="https://pokazal.ru/assets/img/seo-cover.png">

<!-- Schema.org -->
<script type="application/ld+json">{"@context":"https://schema.org","@type":"RiverBodyOfWater","name":"稲牛川","description":"Страница водоёма «稲牛川» — тип: река, площадь около 49.1 га. Что водится, где находится, советы по рыбалке.","geo":{"@type":"GeoCoordinates","latitude":43.25257405,"longitude":143.70232734999999},"url":"https://pokazal.ru/waterbody/147103-/","inLanguage":"ru-RU","area":{"@type":"QuantitativeValue","value":0.48999999999999999,"unitCode":"KM2"},"image":"https://pokazal.ru/assets/img/seo-cover.png","containedInPlace":{"@type":"AdministrativeArea","name":"Сахалинская область"},"datePublished":"2026-09-01","dateModified":"2026-09-01"}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Главная","item":"https://pokazal.ru/"},{"@type":"ListItem","position":2,"name":"Водоёмы по регионам","item":"https://pokazal.ru/regions.php"},{"@type":"ListItem","position":3,"name":"Водоёмы Сахалинской области","item":"https://pokazal.ru/region/sahalinskaya-oblast/"},{"@type":"ListItem","position":4,"name":"稲牛川","item":"https://pokazal.ru/waterbody/147103-/"}]}</script>

<link rel="stylesheet" href="/assets/css/lightbox.css">
<script src="https://api-maps.yandex.ru/2.1/?apikey=ffd6cf31-62c2-4e95-b241-5f7eae9193c4&lang=ru_RU" type="text/javascript"></script>
</head>
<body class="seo-body">
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🐟</text></svg>">
<link rel="stylesheet" href="/assets/css/header.css?v=1789761360">
<link rel="stylesheet" href="/assets/css/page.css?v=1789760802">
<link rel="stylesheet" href="/assets/css/comments.css?v=1789759902">
<header class="site-header">
    <div class="site-header-inner">
        <a class="site-logo" href="/index.php" title="Карта водоёмов">
            <span class="logo-ico">🐟</span><span class="logo-text">Карта водоёмов</span>
        </a>
        <nav class="site-nav" aria-label="Основная навигация">
                            <a href="/index.php" class=""
                   title="🗺️ Карта водоёмов"><span class="nav-full">🗺️ Карта водоёмов</span><span class="nav-short">🗺️ Карта</span></a>
                            <a href="/fish.php" class=""
                   title="🐟 Каталог рыб"><span class="nav-full">🐟 Каталог рыб</span><span class="nav-short">🐟 Рыбы</span></a>
                            <a href="/regions.php" class=""
                   title="📍 Водоёмы по регионам"><span class="nav-full">📍 Водоёмы по регионам</span><span class="nav-short">📍 Регионы</span></a>
                            <a href="/blog.php" class=""
                   title="💬 Блог рыбаков"><span class="nav-full">💬 Блог рыбаков</span><span class="nav-short">💬 Блог</span></a>
                    </nav>
        <button class="site-menu-btn" id="siteMenuBtn" type="button" aria-label="Меню" aria-expanded="false">☰</button>
        <form class="site-search" action="/search.php" method="get" role="search">
            <input type="search" name="q" placeholder="Поиск водоёма…" value="" aria-label="Поиск водоёма">
            <button type="submit" title="Найти">🔍</button>
        </form>
        <div class="site-auth">
                            <button class="btn-ghost" id="loginBtn" type="button">Войти</button>
                <button class="btn-solid" id="registerBtn" type="button">Регистрация</button>
                    </div>
    </div>
</header>

<!-- Мобильное меню шапки (поиск + навигация; авторизация остаётся в шапке) -->
<div class="site-mmenu" id="siteMmenu" hidden>
    <form class="mmenu-search" action="/search.php" method="get" role="search">
        <input type="search" name="q" placeholder="Поиск водоёма или рыбы…" value="">
        <button type="submit" aria-label="Найти">🔍</button>
    </form>
    <nav class="mmenu-nav" aria-label="Мобильная навигация">
                    <a href="/index.php" class="">🗺️ Карта водоёмов</a>
                    <a href="/fish.php" class="">🐟 Каталог рыб</a>
                    <a href="/regions.php" class="">📍 Водоёмы по регионам</a>
                    <a href="/blog.php" class="">💬 Блог рыбаков</a>
            </nav>
</div>

<!-- Модалка входа -->
<div class="auth-modal hidden" id="loginModal">
    <div class="auth-box">
        <button class="modal-close" data-close="loginModal" type="button">✕</button>
        <h3>Вход</h3>
        <label class="f-field"><span>Email</span><input type="email" id="loginEmail" placeholder="you@mail.ru"></label>
        <label class="f-field"><span>Пароль</span><input type="password" id="loginPassword" placeholder="••••••"></label>
        <div id="loginStatus" class="muted small"></div>
        <button class="btn-solid" id="loginSubmit" type="button">Войти</button>
        <p class="muted small" style="margin-top:8px">
            <a href="/forgot.php">Забыли пароль?</a>
            · Нет аккаунта? <a href="#" id="loginToRegister">Зарегистрируйтесь</a>
        </p>
    </div>
</div>

<!-- Модалка регистрации -->
<div class="auth-modal hidden" id="registerModal">
    <div class="auth-box">
        <button class="modal-close" data-close="registerModal" type="button">✕</button>
        <h3>🐟 Добро пожаловать!</h3>
        <p class="muted small">Регистрация занимает меньше минуты: только имя, email и пароль. Делитесь точками, уловом и опытом с сообществом рыбаков.</p>
        <label class="f-field"><span>Имя</span><input type="text" id="regName" placeholder="Как к вам обращаться"></label>
        <label class="f-field"><span>Email</span><input type="email" id="regEmail" placeholder="you@mail.ru"></label>
        <label class="f-field"><span>Пароль (мин. 6 символов)</span><input type="password" id="regPassword" placeholder="••••••"></label>
        <div id="regStatus" class="muted small"></div>
        <label class="reg-consent" style="display:flex;gap:8px;align-items:flex-start;font-size:12.5px;color:#5c6b7e;margin:10px 0 0">
            <input type="checkbox" id="regConsent" style="margin-top:2px">
            <span>Я даю <b>отдельное согласие</b> на обработку персональных данных (имя, e-mail, IP-адрес, cookie)
                согласно <a href="/privacy.php" target="_blank" rel="noopener">Политике обработки персональных данных</a>
                и принимаю условия <a href="/terms.php" target="_blank" rel="noopener">Пользовательского соглашения</a>.</span>
        </label>
        <button class="btn-solid" id="regSubmit" type="button">Создать аккаунт</button>
        <p class="muted small" style="margin-top:8px">Уже есть аккаунт? <a href="#" id="regToLogin">Войти</a></p>
    </div>
</div>

<script>
(function () {
    var loggedIn = false;
    function $(id) { return document.getElementById(id); }
    function open(id) { $('loginModal').classList.add('hidden'); $('registerModal').classList.add('hidden'); $(id).classList.remove('hidden'); }
    function closeAll() { $('loginModal').classList.add('hidden'); $('registerModal').classList.add('hidden'); }

    var loginBtn = $('loginBtn'), registerBtn = $('registerBtn');
    if (loginBtn) loginBtn.addEventListener('click', function () { open('loginModal'); });
    if (registerBtn) registerBtn.addEventListener('click', function () { open('registerModal'); });
    document.querySelectorAll('[data-close]').forEach(function (b) {
        b.addEventListener('click', function () { closeAll(); });
    });
    document.querySelectorAll('.auth-modal').forEach(function (m) {
        m.addEventListener('click', function (e) { if (e.target === m) closeAll(); });
    });
    if ($('loginToRegister')) $('loginToRegister').addEventListener('click', function (e) { e.preventDefault(); open('registerModal'); });
    if ($('regToLogin')) $('regToLogin').addEventListener('click', function (e) { e.preventDefault(); open('loginModal'); });

    function post(url, body, statusEl, okMsg) {
        statusEl.textContent = 'Отправка…';
        fetch(url, {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(body),
        })
        .then(function (r) { return r.json(); })
        .then(function (d) {
            if (d.ok) { statusEl.textContent = '✅ ' + (d.message || okMsg); setTimeout(function () { location.reload(); }, 700); }
            else { statusEl.textContent = '❌ ' + (d.error || 'Ошибка'); }
        })
        .catch(function () { statusEl.textContent = 'Ошибка сети'; });
    }

    if ($('loginSubmit')) $('loginSubmit').addEventListener('click', function () {
        post('api/login.php', { email: $('loginEmail').value.trim(), password: $('loginPassword').value }, $('loginStatus'), 'Вы вошли!');
    });
    if ($('regSubmit')) $('regSubmit').addEventListener('click', function () {
        if ($('regConsent') && !$('regConsent').checked) {
            $('regStatus').textContent = '❌ Отметьте согласие на обработку персональных данных';
            return;
        }
        post('api/register.php', {
            name: $('regName').value.trim(),
            email: $('regEmail').value.trim(),
            password: $('regPassword').value,
            consent: 1,
        }, $('regStatus'), 'Регистрация прошла!');
    });
    if ($('logoutBtn')) $('logoutBtn').addEventListener('click', function () {
        fetch('api/logout.php', { method: 'POST' }).then(function () { location.reload(); });
    });

    // Мобильное меню шапки
    var menuBtn = $('siteMenuBtn'), mmenu = $('siteMmenu');
    if (menuBtn && mmenu) {
        menuBtn.addEventListener('click', function () {
            var open = mmenu.hasAttribute('hidden');
            mmenu.hidden = !open;
            menuBtn.setAttribute('aria-expanded', open ? 'true' : 'false');
            menuBtn.textContent = open ? '✕' : '☰';
        });
    }

    // Хелпер для остальных скриптов страницы
    window.siteAuth = {
        isLogged: loggedIn,
        openLogin: function () { open('loginModal'); },
        openRegister: function () { open('registerModal'); },
    };
})();
</script>

<!-- Согласие на cookie (152-ФЗ): баннер + хранение выбора в localStorage -->
<style>
#cookieBanner {
    position: fixed; left: 12px; right: 12px; bottom: 12px; z-index: 1000;
    background: #0d1c30; color: #e8eef5; border-radius: 16px;
    padding: 14px 16px; font-size: 13.5px; line-height: 1.5;
    box-shadow: 0 14px 40px rgba(8,18,34,.45);
    display: flex; gap: 12px; align-items: center; flex-wrap: wrap;
    max-width: 760px; margin: 0 auto;
}
#cookieBanner.cb-hidden { display: none; }
#cookieBanner .cb-txt { flex: 1; min-width: 220px; }
#cookieBanner a { color: #9db8ff; }
#cookieBanner .cb-btns { display: flex; gap: 8px; flex-wrap: wrap; }
#cookieBanner button {
    border: 0; border-radius: 10px; padding: 9px 16px; cursor: pointer;
    font: inherit; font-weight: 600; font-size: 13.5px;
}
#cookieBanner .cb-ok { background: linear-gradient(135deg,#4f6ef7,#7c5cfc); color: #fff; }
#cookieBanner .cb-min { background: rgba(255,255,255,.12); color: #fff; }
@media (min-width: 560px) { #cookieBanner { bottom: 18px; } }
</style>
<div id="cookieBanner" role="dialog" aria-label="Использование cookie">
    <div class="cb-txt">
        🍪 Мы используем файлы cookie и обезличенную аналитику (Яндекс.Метрика), чтобы карта работала
        и сайт становился удобнее. <a href="/privacy.php" target="_blank" rel="noopener">Подробнее о cookie и персональных данных</a>.
    </div>
    <div class="cb-btns">
        <button class="cb-ok" id="cbOk" type="button">Принять все</button>
        <button class="cb-min" id="cbMin" type="button">Только необходимые</button>
    </div>
</div>
<script>
(function () {
    var KEY = 'pokazal_pd_consent';
    function read() { try { var j = JSON.parse(localStorage.getItem(KEY) || 'null'); return j && j.type ? j : null; } catch (e) { return null; } }
    function write(type) {
        try { localStorage.setItem(KEY, JSON.stringify({ type: type, at: new Date().toISOString(), v: 1 })); } catch (e) {}
        var b = document.getElementById('cookieBanner');
        if (b) b.classList.add('cb-hidden');
        document.dispatchEvent(new CustomEvent('pokazal:consent', { detail: type }));
        return true;
    }
    function clearConsent() {
        try { localStorage.removeItem(KEY); } catch (e) {}
        document.dispatchEvent(new CustomEvent('pokazal:consent', { detail: '' }));
    }
    window.PokazalConsent = {
        get: read,
        type: function () { var c = read(); return c ? c.type : ''; },
        accept: function () { return write('all'); },
        essentialOnly: function () { return write('essential'); },
        clear: clearConsent,
    };
    if (!read()) {
        var ok = document.getElementById('cbOk'), min = document.getElementById('cbMin');
        if (ok) ok.addEventListener('click', function () { window.PokazalConsent.accept(); });
        if (min) min.addEventListener('click', function () { window.PokazalConsent.essentialOnly(); });
    } else {
        var b = document.getElementById('cookieBanner');
        if (b) b.classList.add('cb-hidden');
    }
})();
</script>
<script>
// Ссылки на юридические документы в подвалах страниц
document.addEventListener('DOMContentLoaded', function () {
    document.querySelectorAll('footer').forEach(function (f) {
        if (f.querySelector('.legal-links')) return;
        var row = document.createElement('div');
        row.className = 'legal-links';
        row.style.cssText = 'margin-top:8px;font-size:12px;opacity:.85';
        var mk = function (href, txt) {
            var a = document.createElement('a');
            a.href = href; a.textContent = txt;
            a.style.color = 'inherit'; a.style.margin = '0 8px 0 0';
            a.target = '_blank'; a.rel = 'noopener';
            return a;
        };
        row.appendChild(mk('/about.php', 'О проекте и принципы'));
        row.appendChild(mk('/guide.php', 'Как пользоваться'));
        row.appendChild(mk('/privacy.php', 'Политика обработки персональных данных'));
        row.appendChild(mk('/terms.php', 'Пользовательское соглашение'));
        row.appendChild(mk('/contacts.php', 'Контакты'));
        row.appendChild(mk('/privacy.php#withdraw', 'Отозвать согласие'));
        f.appendChild(row);

        // Указание источников данных (лицензия ODbL требует атрибуции OpenStreetMap)
        if (!f.querySelector('.data-credits')) {
            var cr = document.createElement('div');
            cr.className = 'data-credits';
            cr.style.cssText = 'margin-top:6px;font-size:12px;opacity:.75';
            cr.appendChild(document.createTextNode('Источники данных: '));
            cr.appendChild(mk('https://www.openstreetmap.org/copyright', '© участники OpenStreetMap (ODbL)'));
            cr.appendChild(document.createTextNode('·'));
            cr.appendChild(mk('https://ru.wikipedia.org/', 'Википедия (фото и описания)'));
            cr.appendChild(document.createTextNode('·'));
            cr.appendChild(mk('/terms.php', 'ИИ-описания: DeepSeek'));
            f.appendChild(cr);
        }
    });
});
</script>

<!-- Агитация регистрации для гостя после 5 страниц (показывается один раз) -->
<style>
#joinOverlay {
    position: fixed; inset: 0; z-index: 900; display: none;
    background: rgba(8,18,34,.6); backdrop-filter: blur(4px);
    align-items: center; justify-content: center; padding: 16px;
}
#joinOverlay.visible { display: flex; }
.join-card {
    background: #fff; border-radius: 20px; max-width: 470px; width: 100%;
    max-height: 90vh; overflow-y: auto;
    box-shadow: 0 24px 80px rgba(8,18,34,.4);
    animation: join-in .3s ease;
}
@keyframes join-in { from { opacity: 0; transform: translateY(14px) scale(.98); } to { opacity: 1; transform: none; } }
.join-head { background: linear-gradient(135deg,#4f6ef7,#7c5cfc); color:#fff; padding: 20px 24px 16px; }
.join-head .j-ico { font-size: 38px; line-height: 1; }
.join-head h2 { margin: 8px 0 4px; font-size: 20px; }
.join-head p { margin: 0; font-size: 13.5px; opacity: .92; }
.join-body { padding: 16px 24px 22px; }
.join-body ul { margin: 0 0 14px; padding: 0; list-style: none; }
.join-body li { display: flex; gap: 10px; align-items: flex-start; padding: 6px 0; font-size: 14.5px; line-height: 1.45; color: #23324a; }
.join-body li b { color: #1f3a8a; }
.join-cta button {
    width: 100%; border: 0; border-radius: 14px; padding: 13px; font: inherit; font-weight: 700;
    font-size: 15px; cursor: pointer; display: block;
}
.join-cta .j-reg { background: linear-gradient(135deg,#4f6ef7,#7c5cfc); color: #fff; margin-bottom: 8px; box-shadow: 0 6px 18px rgba(79,110,247,.35); }
.join-cta .j-later { background: #eef2f8; color: #5c6b7e; }
.join-note { text-align: center; font-size: 12px; color: #93a0b3; margin: 12px 0 0; }
.join-note a { color: #4f6ef7; }
</style>
<div id="joinOverlay" role="dialog" aria-modal="true" aria-label="Присоединяйтесь к сообществу">
    <div class="join-card">
        <div class="join-head">
            <div class="j-ico">🎣</div>
            <h2>Вы уже смотрите карту — пора делиться!</h2>
            <p>Присоединяйтесь к сообществу рыбаков pokazal.ru — бесплатно и без сложностей.</p>
        </div>
        <div class="join-body">
            <ul>
                <li>👁️ <span><b>Ваши места увидят тысячи рыбаков.</b> Каждая отмеченная точка, улов и фото появляются на карте и страницах водоёмов.</span></li>
                <li>📸 <span><b>Делитесь фото и видео</b> уловов прямо с рыбалки.</span></li>
                <li>🏆 <span><b>Станьте заметным:</b> имя у улова, рейтинг, достижения, звание «первопроходца» региона.</span></li>
                <li>🧭 <span><b>Собирайте «Мои места»:</b> куда поехать, где уже были, что ловится.</span></li>
            </ul>
            <div class="join-cta">
                <button class="j-reg" id="joinRegBtn" type="button">🐟 Зарегистрироваться — 30 секунд</button>
                <button class="j-later" id="joinLaterBtn" type="button">Может, позже</button>
            </div>
            <p class="join-note">Уже есть аккаунт? <a href="#" id="joinLoginBtn">Войти</a></p>
        </div>
    </div>
</div>
<script>
(function () {
    var overlay = document.getElementById('joinOverlay');
    if (!overlay) return;
    function hide() { overlay.classList.remove('visible'); }
    function bind() {
        var r = document.getElementById('joinRegBtn');
        if (!r) return;
        r.addEventListener('click', function () { hide(); if (window.siteAuth) window.siteAuth.openRegister(); });
        document.getElementById('joinLoginBtn').addEventListener('click', function (e) { e.preventDefault(); hide(); if (window.siteAuth) window.siteAuth.openLogin(); });
        document.getElementById('joinLaterBtn').addEventListener('click', hide);
        overlay.addEventListener('click', function (e) { if (e.target === overlay) hide(); });
    }
    function maybeShow() {
        if (!window.siteAuth || window.siteAuth.isLogged) return;
        try {
            if (localStorage.getItem('pokazal_join_shown')) return;
            var pv = (parseInt(localStorage.getItem('pokazal_pv') || '0', 10) || 0) + 1;
            localStorage.setItem('pokazal_pv', String(pv));
            if (pv >= 5) {
                localStorage.setItem('pokazal_join_shown', '1');
                bind();
                setTimeout(function () { overlay.classList.add('visible'); }, 900);
            }
        } catch (e) { /* ignore */ }
    }
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', maybeShow);
    } else {
        maybeShow();
    }
})();
</script>

<main class="seo-wrap">
    <nav class="breadcrumbs" aria-label="Хлебные крошки">
        <a href="/index.php">Главная</a> › <a href="/regions.php">Водоёмы</a>
        › <a href="/region/sahalinskaya-oblast/">Сахалинской области</a>
                            › <a href="/district/sahalinskaya-oblast/yuzhno-kurilskiy-munitsipalnyy-okrug/">Южно-Курильский муниципальный округ</a>
                            › <span>稲牛川</span>
    </nav>
        <div class="seo-type-links muted small" style="margin:6px 0 2px">
        <a href="/region/sahalinskaya-oblast/?type=river">Все реки Сахалинской области →</a>
        · <a href="/region/sahalinskaya-oblast/">все водоёмы Сахалинской области</a>
                    · <a href="/district/sahalinskaya-oblast/yuzhno-kurilskiy-munitsipalnyy-okrug/">рыбалка в южно-курильский муниципальный округ</a>
            </div>
    
    <article itemscope itemtype="https://schema.org/RiverBodyOfWater">
                    <div class="cover-wrap cover-placeholder" id="coverPlaceholder">
                <span class="cover-ico">🗺️</span>
                <div class="cover-title">稲牛川</div>
                <div class="cover-sub muted">карта объекта — генерируется автоматически</div>
            </div>
        
        <header class="seo-head">
            <h1 itemprop="name">稲牛川</h1>
            <div class="seo-type">
                <span class="badge-seo">Река</span>
                <span class="badge-seo alt">Площадь: 49.1 га</span>                                            </div>
            <div class="seo-actions">
                                    <button class="btn-a" id="favLoginBtn" type="button">В избранное</button>
                                <span class="share-label muted small">Поделиться:</span>
                <div class="share-row">
                    <a class="share-icon share-tg" target="_blank" rel="noopener" href="https://t.me/share/url?url=https%3A%2F%2Fpokazal.ru%2Fwaterbody%2F147103-%2F&text=%E7%A8%B2%E7%89%9B%E5%B7%9D" title="Telegram">✈️</a>
                    <a class="share-icon share-wa" target="_blank" rel="noopener" href="https://wa.me/?text=%E7%A8%B2%E7%89%9B%E5%B7%9D+%E2%80%94+https%3A%2F%2Fpokazal.ru%2Fwaterbody%2F147103-%2F" title="WhatsApp">💬</a>
                    <a class="share-icon share-vk" target="_blank" rel="noopener" href="https://vk.com/share.php?url=https%3A%2F%2Fpokazal.ru%2Fwaterbody%2F147103-%2F" title="ВКонтакте">ВК</a>
                    <a class="share-icon share-ok" target="_blank" rel="noopener" href="https://connect.ok.ru/offer?url=https%3A%2F%2Fpokazal.ru%2Fwaterbody%2F147103-%2F" title="Одноклассники">ОК</a>
                    <a class="share-icon share-vi" target="_blank" rel="noopener" href="viber://forward?text=%E7%A8%B2%E7%89%9B%E5%B7%9D+%E2%80%94+https%3A%2F%2Fpokazal.ru%2Fwaterbody%2F147103-%2F" title="Viber">V</a>
                    <button class="share-icon share-copy" id="shareCopyBtn" type="button" title="Скопировать ссылку">🔗</button>
                </div>
            </div>
            <div class="seo-coords muted small">
                Координаты: 43.25257, 143.70233 ·
                <a href="https://yandex.ru/maps/?pt=143.70232735,43.25257405&z=13&l=map" target="_blank" rel="noopener">открыть на Яндекс.Картах ↗</a>
                                · <button class="btn-a small-link" id="editLocLoginBtn" type="button">✏️ Отредактировать точку</button>
                · <button class="btn-a small-link" id="suggestWbLoginBtn" type="button">➕ Предложить водоём</button>
                            </div>
        </header>

        <!-- Быстрая навигация по странице (якоря; на мобильных — горизонтальный скролл) -->
        <nav class="wb-nav" aria-label="Навигация по странице">
            <a class="wb-nav-link" href="#fishSection">🐟 Рыба</a>
            <a class="wb-nav-link" href="#spotsSection">📍 Места ловли</a>
            <a class="wb-nav-link" href="#postsSection">🎣 Уловы</a>
            <a class="wb-nav-link" href="#weatherSection">🌤️ Погода</a>
            <a class="wb-nav-link" href="#mapSection">🗺️ Карта</a>
            <a class="wb-nav-link" href="#aiChatSection">🤖 Чат</a>
            <a class="wb-nav-link" href="#blogSection">📚 Блог</a>
            <a class="wb-nav-link" href="#commentsSection">💬 Отзывы</a>
        </nav>

                <!-- Тёплое приглашение: делиться мнением и точками могут все -->
        <div class="join-banner">
            <div class="join-text">
                <span class="join-ico">🎣</span>
                <div>
                    <b>Станьте частью сообщества рыбаков!</b>
                    <span class="muted small">Отмечайте свои точки, делитесь уловом и опытом, задавайте вопросы ИИ — бесплатно и без сложностей.</span>
                </div>
            </div>
            <div class="join-actions">
                <button class="btn-solid join-register" id="joinRegisterBtn" type="button">Присоединиться — 30 секунд</button>
                <button class="btn-ghost join-login" id="joinLoginBtn" type="button">У меня уже есть аккаунт</button>
            </div>
        </div>
        
        
        <!-- Информация ещё не подготовлена: ставим водоём в фоновую очередь ИИ -->
        <section class="seo-section cta-block" id="genBlock">
            <div class="gen-card" id="genCard">
                <div class="gen-spinner" aria-hidden="true"></div>
                <h2>✨ Описание готовится в фоне</h2>
                <p class="gen-sub">Мы поставили «稲牛川» в очередь: сначала подготовим краткое
                   описание (это быстро), затем подробную статью со ссылками на источники. Обычно краткое описание
                   появляется в течение нескольких минут — просто загляните на страницу позже.</p>
                <div id="genInfoStatus" class="muted small"></div>
                <button id="genInfoBtn" class="btn-add gen-retry">🤖 Подготовить сейчас — за несколько секунд</button>
            </div>
        </section>

        <!-- Сюда результат вставляется сразу, без перезагрузки страницы -->
        <section class="seo-section" id="aiFresh" style="display:none">
            <div class="seo-fish" id="aiFreshFish" style="display:none">
                <h2>🐟 Какая рыба водится</h2>
                <div class="fish-chips" id="aiFreshFishChips"></div>
            </div>
            <div class="seo-text" id="aiFreshText" itemprop="description"></div>
            <div class="stage-note" id="aiFreshNote">
                <b>⚡ Пока краткое описание.</b>
                Мы уже собираем подробную статью с фактами из источников (география, глубины, ихтиофауна,
                сезоны, снасти, подъезды) — она появится здесь автоматически, страницу обновлять не нужно.
                                    Зайдите на страницу через 2–3 минуты — статья обычно уже будет на месте.
                    <a href="/profile.php">Зарегистрируйтесь</a>, и уведомление о готовности придёт
                    в личные сообщения, ждать на странице не нужно.
                                                    <div class="stage-near">
                        <div class="muted small">Пока можете посмотреть соседние водоёмы с описанием:</div>
                        <div class="stage-near-list">
                                                            <a class="chip" href="/waterbody.php?id=152101">
                                    Большая Воровская                                    <span class="muted small">· Сахалинская область</span>                                </a>
                                                            <a class="chip" href="/waterbody.php?id=149926">
                                    辺別川                                    <span class="muted small">· Сахалинская область</span>                                </a>
                                                    </div>
                    </div>
                            </div>
            <div class="muted small" id="aiFreshDisclaimer" style="display:none">
                ✨ Информация подготовлена с помощью искусственного интеллекта. Точность может отличаться — проверяйте на месте.
            </div>
        </section>

        
                
        <!-- Места ловли на водоёме -->
        <section class="seo-section" id="spotsSection">
            <div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px">
                <h2 style="margin:0">📍 Места ловли (0)</h2>
                                    <button class="btn-solid" id="addSpotLoginBtn" type="button">+ Показать точку (войти)</button>
                            </div>
            <p class="muted small">Места, которые показали рыбаки на этом водоёме. Чем больше мест и выше их оценка — тем выше ранг автора.</p>

                            <p class="muted">Пока никто не показал точку. Станьте первым — поделитесь проверенным местом!</p>
            
            <!-- Форма добавления места -->
            <div id="addSpotForm" class="modern-form hidden" style="margin-top:14px">
                <div>
                    <span class="field-label">Название места</span>
                    <input type="text" id="asName" placeholder="Например: яма за мостом, левый берег у камышей" maxlength="150">
                </div>
                <div>
                    <span class="field-label">Описание (что за место, какая рыба, на что ловить)</span>
                    <textarea id="asDesc" rows="3" placeholder="Опишите место: глубина, дно, течение, удобные подъезды…"></textarea>
                </div>
                <div>
                    <span class="field-label">Точка на карте — кликните по карте</span>
                    <div class="pick-map" id="asPickMap"></div>
                    <div class="muted small" style="margin-top:5px">Приблизьте карту и кликните в точку ловли — координаты подставятся сами.</div>
                    <div class="coords-row" style="margin-top:8px">
                        <input type="number" step="0.000001" id="asLat" placeholder="Широта" value="43.25257">
                        <input type="number" step="0.000001" id="asLon" placeholder="Долгота" value="143.70233">
                    </div>
                </div>
                <div style="margin-top:10px">
                    <button class="btn-primary-modern" id="asSubmit">Отправить на модерацию</button>
                    <span id="asStatus" class="form-status"></span>
                </div>
            </div>
        </section>

        <!-- Посты рыбаков об этом водоёме -->
        <section class="seo-section" id="postsSection">
            <div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px">
                <h2 style="margin:0">🎣 Уловы и отчёты рыбаков (0)</h2>
                                    <button class="btn-solid" id="addPostLoginBtn" type="button">+ Поделиться уловом (войти)</button>
                            </div>
            <p class="muted small">Рыбаки делятся уловом, фотоотчётами и видео именно с этого водоёма.</p>

            <!-- Отметки уловов: попадают в рейтинг рыбаков и на страницы рыб -->
            <div class="catch-block" style="background:#fff;border:1px solid #e6ebf2;border-radius:16px;padding:18px;margin:4px 0 16px;box-shadow:0 1px 2px rgba(15,28,46,.05)">
                <h3 style="margin:0 0 6px;font-size:17px">🎣 Отметить улов на «稲牛川»</h3>
                <p class="muted small" style="margin:0 0 6px">Отмеченные уловы попадают в рейтинг рыбаков и на страницы рыб — так сайт узнаёт, где и что реально ловится.</p>
                <p class="muted small" style="margin:0 0 10px">Отмечено уловов: <b>0</b> — станьте первым!</p>

                
                                <button class="btn-solid" id="ctLoginBtn" type="button" style="margin-top:8px">Войти и отметить улов</button>
                            </div>

                            <p class="muted">Отчётов пока нет. Расскажите о своём улове!</p>
            
            <!-- Форма публикации -->
            <div id="addPostForm" class="modern-form hidden" style="margin-top:14px">
                <div>
                    <span class="field-label">Текст (что поймали, когда, на что)</span>
                    <textarea id="apText" rows="3" placeholder="Сегодня с утра на спиннинг взял трёх щук до 2 кг, клевало на воблер…"></textarea>
                </div>
                <div style="display:flex;gap:10px;flex-wrap:wrap;margin-top:10px">
                    <select id="apKind">
                        <option value="text">Текст</option>
                        <option value="photo">Фото (ссылка)</option>
                        <option value="video">Видео (ссылка)</option>
                    </select>
                    <input type="text" id="apMedia" placeholder="Ссылка на фото/видео" style="flex:1;min-width:200px">
                </div>
                <div style="margin-top:10px">
                    <button class="btn-primary-modern" id="apPostSubmit">📤 Опубликовать</button>
                    <span id="apPostStatus" class="form-status"></span>
                </div>
                <p class="muted small">Публикация привяжется к водоёму «稲牛川» и появится после модерации.</p>
            </div>
        </section>

        <section class="seo-section" id="weatherSection">
            <h2>🌤️ Погода и прогноз клёва</h2>
            <div id="weatherContent" class="weather-loading">Загружаем погоду…</div>
        </section>

        <section class="seo-section" id="mapSection">
            <h2>🗺️ На карте</h2>
            <div class="mini-map">
                <iframe src="https://yandex.ru/map-widget/v1/?ll=143.70232735,43.25257405&z=12&pt=143.70232735,43.25257405,pm2rdm" loading="lazy" title="Карта: 稲牛川"></iframe>
            </div>
            <p class="muted small">Открыть в <a href="https://yandex.ru/maps/?pt=143.70232735,43.25257405&z=13&l=map" target="_blank" rel="noopener">Яндекс.Картах ↗</a> или <a href="https://www.openstreetmap.org/?mlat=43.25257405&mlon=143.70232735#map=13/43.25257405/143.70232735" target="_blank" rel="noopener">OpenStreetMap ↗</a></p>
        </section>

                <section class="seo-section">
            <h2>🌊 Ближайшие водоёмы</h2>
            <div class="near-list">
                                <a class="near-item" href="/waterbody.php?id=144322">
                    <span class="dot c-river"></span>
                    <span class="near-name">パンケ仙美里川</span>
                    <span class="muted small">Река</span>
                </a>
                                <a class="near-item" href="/waterbody.php?id=144325">
                    <span class="dot c-river"></span>
                    <span class="near-name">パンケ仙美里川</span>
                    <span class="muted small">Река</span>
                </a>
                                <a class="near-item" href="/waterbody.php?id=144321">
                    <span class="dot c-river"></span>
                    <span class="near-name">パンケ仙美里川</span>
                    <span class="muted small">Река</span>
                </a>
                                <a class="near-item" href="/waterbody.php?id=144491">
                    <span class="dot c-river"></span>
                    <span class="near-name">本別川</span>
                    <span class="muted small">Река</span>
                </a>
                                <a class="near-item" href="/waterbody.php?id=144323">
                    <span class="dot c-river"></span>
                    <span class="near-name">パンケ仙美里川</span>
                    <span class="muted small">Река</span>
                </a>
                                <a class="near-item" href="/waterbody.php?id=144488">
                    <span class="dot c-river"></span>
                    <span class="near-name">本別川</span>
                    <span class="muted small">Река</span>
                </a>
                            </div>
        </section>
        
        
        <section class="seo-section" id="commentsSection">
            <h2>💬 Обсуждение водоёма</h2>
                                        <p class="muted">Комментариев пока нет — станьте первым!</p>
            
                            <div class="comment-login">
                    <p class="muted">Оставлять комментарии могут только авторизованные пользователи.</p>
                    <button class="btn-solid" id="cmLoginBtn" type="button">Войти / Зарегистрироваться</button>
                </div>
                    </section>

        <!-- Публичный ИИ-чат о водоёме -->
        <section class="seo-section" id="aiChatSection">
            <div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px">
                <h2 style="margin:0">🤖 Чат о водоёме</h2>
                <span class="muted small">Спросите ИИ про 稲牛川 — отвечает по данным сайта. Чат публичный.</span>
            </div>
            <p class="muted small">Задайте вопрос о рыбе, клёве, особенностях водоёма. ИИ отвечает только на основе информации о водоёме, не выдумывает.</p>

            <div id="chatBox" class="chat-box" style="background:#f7fafd;border:1px solid #e5e9f0;border-radius:12px;padding:14px;max-height:420px;overflow-y:auto">
                <div class="chat-loading muted small" id="chatLoading">Загружаем чат…</div>
            </div>

            <div class="chat-input-row" style="display:flex;gap:8px;margin-top:10px">
                <input type="text" id="chatInput" placeholder="Спросите про рыбу, клёв, глубины…" maxlength="500"
                       style="flex:1;padding:11px 14px;border:1px solid #d5dbe3;border-radius:10px;font:inherit"
                       autocomplete="off">
                <button class="btn-primary-modern" id="chatSendBtn" type="button">➤</button>
            </div>
            <div id="chatStatus" class="form-status"></div>
            <p class="muted small" style="margin-top:6px">Нецензурная лексика скрывается автоматически. Лимит: 15 сообщений в час.</p>
        </section>

        <!-- Блог рыбаков (ветки на любые темы) -->
        <section class="seo-section" id="blogSection">
            <div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px">
                <h2 style="margin:0">📚 Блог рыбаков (稲牛川)</h2>
                                    <button class="btn-solid" id="blogLoginBtn" type="button">+ Новая ветка (войти)</button>
                            </div>
            <p class="muted small">Ветки на любые темы: улов, снасти, подъезд, жильё рядом, отчёты. ИИ-эксперт отвечает на каждую новую ветку и может отвечать в обсуждениях.</p>

            <div id="blogThreads" class="comment-list" style="margin-top:12px">
                <div class="muted small">Загружаем ветки…</div>
            </div>

            <!-- Форма новой ветки -->
            <div id="blogNewForm" class="modern-form hidden" style="margin-top:14px">
                <div>
                    <span class="field-label">Тема ветки</span>
                    <input type="text" id="btTitle" maxlength="150" placeholder="Например: на что ловить щуку в мае? Как добраться на автобусе?">
                </div>
                <div>
                    <span class="field-label">Первое сообщение (можно вопрос — ИИ-эксперт ответит)</span>
                    <textarea id="btText" rows="3" maxlength="2000" placeholder="Расскажите, что вас интересует…"></textarea>
                </div>
                <div style="margin-top:10px">
                    <button class="btn-primary-modern" id="btSubmit">📨 Создать ветку</button>
                    <span id="btStatus" class="form-status"></span>
                </div>
            </div>
        </section>

        <!-- Просмотр ветки (подгружается JS) -->
        <section class="seo-section hidden" id="blogViewSection">
            <div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px">
                <h2 style="margin:0" id="blogViewTitle">Ветка</h2>
                <button class="btn-solid" id="blogBackBtn" type="button">← Ко всем веткам</button>
            </div>
            <div id="blogPosts" class="comment-list" style="margin-top:12px"></div>

            <div class="comment-form-box" style="margin-top:14px">
                <textarea id="bpText" class="comment-textarea" rows="3" maxlength="2000" placeholder="Ответить в ветку…"></textarea>
                <div style="display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap">
                    <button class="btn-primary-modern" id="bpSubmit">💬 Ответить</button>
                    <label class="muted small" style="display:flex;align-items:center;gap:4px">
                        <input type="checkbox" id="bpWantAi" checked> спросить ИИ-эксперта
                    </label>
                    <span class="muted small">Ответы видны сразу (мат скрывается автоматически).</span>
                </div>
                <div id="bpStatus" class="form-status"></div>
            </div>
        </section>

        <section class="seo-section">
            <h2>✏️ Предложить правку</h2>
            <p class="muted small">Нашли неточность или знаете больше об этом водоёме? Предложите изменение — администратор рассмотрит его (как на Wikimapia).</p>
            <div class="modern-form">
                                <p class="muted">Предлагать правки могут только авторизованные пользователи.</p>
                <button class="btn-solid" id="seLoginBtn" type="button">Войти / Зарегистрироваться</button>
                            </div>
        </section>
    </article>
</main>

<!-- Модалка: предложить правильную точку водоёма -->
<div class="modal-overlay hidden" id="editLocModal">
    <div class="modal-box">
        <button class="modal-close" id="editLocClose" type="button">✕</button>
        <h3>✏️ Отредактировать точку водоёма</h3>
        <p class="muted small">Точка водоёма «稲牛川» сейчас: 43.25257, 143.70233.<br>
        Кликните по карте в нужном месте — координаты подставятся сами.</p>
        <label class="f-field"><span>Точка на карте (кликните)</span>
            <div class="pick-map" id="elPickMap"></div>
            <div class="muted small" style="margin-top:5px">Подсказка: приблизьте карту, чтобы попасть точнее.</div>
        </label>
        <label class="f-field"><span>Новые координаты (широта, долгота)</span>
            <div class="coords-row">
                <input type="number" step="0.000001" id="elLat" placeholder="Широта, напр. 55.755800">
                <input type="number" step="0.000001" id="elLon" placeholder="Долгота, напр. 37.617300">
            </div>
        </label>
        <label class="f-field"><span>Комментарий (необязательно)</span>
            <input type="text" id="elComment" maxlength="500" placeholder="Например: правильная точка — устье, а не центр">
        </label>
        <div id="elStatus" class="muted small"></div>
        <button id="elSubmit" class="btn-add">📨 Отправить на модерацию</button>
    </div>
</div>

<!-- Модалка: предложить новый водоём -->
<div class="modal-overlay hidden" id="suggestWbModal">
    <div class="modal-box">
        <button class="modal-close" id="suggestWbClose" type="button">✕</button>
        <h3>➕ Предложить новый водоём</h3>
        <p class="muted small">Знаете водоём, которого нет на карте? Предложите его — администратор добавит его в базу.</p>
        <label class="f-field"><span>Название водоёма</span>
            <input type="text" id="swName" maxlength="200" placeholder="Например: озеро Тихое">
        </label>
        <label class="f-field"><span>Тип водоёма</span>
            <select id="swType">
                <option value="lake">Озеро</option>
                <option value="pond">Пруд</option>
                <option value="reservoir">Водохранилище</option>
                <option value="river">Река</option>
                <option value="stream">Ручей</option>
                <option value="canal">Канал</option>
                <option value="other">Другой</option>
            </select>
        </label>
        <label class="f-field"><span>Точка водоёма — кликните по карте</span>
            <div class="pick-map" id="swPickMap"></div>
            <div class="muted small" style="margin-top:5px">Приблизьте карту и кликните в центр водоёма.</div>
        </label>
        <label class="f-field"><span>Точка водоёма (широта, долгота)</span>
            <div class="coords-row">
                <input type="number" step="0.000001" id="swLat" placeholder="Широта">
                <input type="number" step="0.000001" id="swLon" placeholder="Долгота">
            </div>
        </label>
        <label class="f-field"><span>Описание (что водится, особенности — необязательно)</span>
            <textarea id="swDesc" rows="3" maxlength="4000" placeholder="Расскажите, что знаете о водоёме…"></textarea>
        </label>
        <div id="swStatus" class="muted small"></div>
        <button id="swSubmit" class="btn-add">📨 Отправить на модерацию</button>
    </div>
</div>

<footer class="seo-foot">
    <div class="seo-wrap muted small">
        Данные: OpenStreetMap (ODbL), пользователи сайта, DeepSeek AI
    </div>
</footer>

<script src="/assets/js/lightbox.js"></script>
<script>
(function () {
    var wbId = 147103;
    var needCover = true;

    // Генерация обложки при первом интересе
    if (needCover) {
        fetch('/api/gen_cover.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ waterbody_id: wbId }),
        })
        .then(function (r) { return r.json(); })
        .then(function (d) {
            if (d.ok && d.cover) {
                var ph = document.getElementById('coverPlaceholder');
                if (ph) {
                    var a = document.createElement('a');
                    a.className = 'cover-wrap';
                    a.href = d.cover;
                    a.setAttribute('data-lightbox', '');
                    a.setAttribute('data-lightbox-img', d.cover);
                    var img = document.createElement('img');
                    img.className = 'cover-img';
                    img.src = d.cover;
                    img.alt = 'Карта';
                    a.appendChild(img);
                    ph.parentNode.replaceChild(a, ph);
                }
            }
        })
        .catch(function () {});
    }

    // Загрузка фото: drag-and-drop + клик по зоне
    var cvDropZone = document.getElementById('cvDropZone');
    var cvFile = document.getElementById('cvFile');
    if (cvDropZone && cvFile) {
        var uploadFile = function () {
            var st = document.getElementById('cvFileStatus');
            var file = cvFile.files && cvFile.files[0];
            if (!file) { st.textContent = 'Выберите файл'; return; }
            if (!/^image\/(jpeg|png|webp|gif)$/.test(file.type)) { st.textContent = 'Допустимы JPG, PNG, WebP, GIF'; st.className = 'form-status err'; return; }
            st.className = 'form-status';
            st.textContent = '⏳ Загрузка…';
            var fd = new FormData();
            fd.append('photo', file);
            fd.append('waterbody_id', wbId);
            fetch('/api/upload_photo.php', { method: 'POST', body: fd })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                st.className = 'form-status ' + (d.ok ? 'ok' : 'err');
                st.textContent = (d.ok ? '✅ ' : '❌ ') + (d.message || d.error || 'Ошибка');
                if (d.ok) cvFile.value = '';
            })
            .catch(function () { st.className = 'form-status err'; st.textContent = 'Ошибка сети'; });
        };
        cvDropZone.addEventListener('click', function () { cvFile.click(); });
        cvFile.addEventListener('change', uploadFile);
        // Drag & drop
        ['dragenter', 'dragover'].forEach(function (ev) {
            cvDropZone.addEventListener(ev, function (e) {
                e.preventDefault();
                cvDropZone.classList.add('dragover');
            });
        });
        ['dragleave', 'drop'].forEach(function (ev) {
            cvDropZone.addEventListener(ev, function (e) {
                e.preventDefault();
                cvDropZone.classList.remove('dragover');
            });
        });
        cvDropZone.addEventListener('drop', function (e) {
            var f = e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files[0];
            if (f) {
                // подменяем файл и загружаем
                var dt = new DataTransfer();
                dt.items.add(f);
                cvFile.files = dt.files;
                uploadFile();
            }
        });
    }

    // Ссылка на видео
    var cvSubmit = document.getElementById('cvSubmit');
    if (cvSubmit) {
        cvSubmit.addEventListener('click', function () {
            var st = document.getElementById('cvStatus');
            var url = document.getElementById('cvUrl').value.trim();
            if (!url) { st.textContent = 'Введите ссылку на видео'; return; }
            st.textContent = 'Отправка…';
            fetch('/api/add_media.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    waterbody_id: wbId,
                    kind: 'video',
                    url: url,
                    title: document.getElementById('cvTitle').value.trim(),
                }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                st.textContent = d.message || d.error || 'Ошибка';
                if (d.ok) { document.getElementById('cvUrl').value = ''; document.getElementById('cvTitle').value = ''; }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });
    }

    // Генерация описания. Результат показывается СРАЗУ на этой же странице —
    // без перезагрузки: быстрый этап приходит ответом на запрос, полный
    // (подробная статья) подтягивается опросом и заменяет текст на месте.
    var genBtn = document.getElementById('genInfoBtn');
    var needGen = genBtn !== null;
    if (needGen) {
        var captchaToken = '';
        var pollTimer = null;

        /** Безопасный HTML: экранируем служебные символы */
        function escHtml(s) {
            return String(s)
                .split('&').join('&amp;')
                .split('<').join('&lt;')
                .split('>').join('&gt;')
                .split('"').join('&quot;')
                .split("'").join('&#39;');
        }

        /** Текст с «## Заголовок» и списками «• » превращаем в аккуратный HTML */
        function aiTextToHtml(text) {
            var blocks = String(text).split(/\n\s*\n/);
            var out = '';
            blocks.forEach(function (block) {
                var lines = block.split('\n').map(function (l) { return l.trim(); }).filter(function (l) { return l !== ''; });
                if (!lines.length) return;
                var head = '';
                if (lines[0].slice(0, 3) === '## ' || lines[0].slice(0, 4) === '### ') {
                    head = lines.shift().replace(/^#+\s*/, '');
                } else if (/^(география|география и гидрология|советы по рыбалке|история и факты)$/i.test(lines[0])) {
                    head = lines.shift();
                }
                var bullets = [], rest = [];
                lines.forEach(function (ln) {
                    var m = ln.match(/^[•·]\s*(.+)$/);
                    if (m) { bullets.push(m[1]); } else { rest.push(ln); }
                });
                if (head) out += '<h2>' + escHtml(head) + '</h2>';
                if (rest.length) out += '<p>' + escHtml(rest.join(' ')) + '</p>';
                if (bullets.length) {
                    out += '<ul class="ai-list">' + bullets.map(function (b) { return '<li>' + escHtml(b) + '</li>'; }).join('') + '</ul>';
                }
            });
            return out;
        }

        /** Показать описание на месте блока «описание готовится» */
        function showDescription(text, fish, stage) {
            var wrap = document.getElementById('aiFresh');
            if (!wrap) return;
            var box = document.getElementById('aiFreshText');
            if (box) {
                box.innerHTML = aiTextToHtml(text);
                box.setAttribute('data-stage', stage || '');
            }
            if (fish && fish.length) renderFishChips(fish, [], true);
            var note = document.getElementById('aiFreshNote');
            if (note) note.style.display = (stage === 'full') ? 'none' : '';
            var disc = document.getElementById('aiFreshDisclaimer');
            if (disc) disc.style.display = '';
            wrap.style.display = '';
            var block = document.getElementById('genBlock');
            if (block) block.style.display = 'none';
        }

        /** Списки рыб: подтверждённые (жирные, со ссылкой) и возможные (со знаком «?») */
        function renderFishChips(confirmed, possible, showBlock) {
            var chipsWrap = document.getElementById('aiFreshFishChips');
            var fishWrap = document.getElementById('aiFreshFish');
            if (!chipsWrap || !fishWrap) return;
            var html = '';
            (confirmed || []).forEach(function (it) {
                var name = typeof it === 'string' ? it : (it.name || '');
                var url = typeof it === 'string' ? '' : (it.url || '');
                html += url
                    ? '<a class="chip" href="' + url + '">' + escHtml(name) + ' →</a>'
                    : '<span class="chip">' + escHtml(name) + '</span>';
            });
            if (possible && possible.length) {
                html += '<div class="muted small" style="flex-basis:100%;margin-top:8px">' +
                    'Возможные виды — упоминаются в публикациях и прогнозах, но не подтверждены:</div>';
                possible.forEach(function (it) {
                    var name = typeof it === 'string' ? it : (it.name || '');
                    var url = typeof it === 'string' ? '' : (it.url || '');
                    html += url
                        ? '<a class="chip chip-possible" href="' + url + '">' + escHtml(name) + ' ?</a>'
                        : '<span class="chip chip-possible">' + escHtml(name) + ' ?</span>';
                });
            }
            if (html !== '') {
                chipsWrap.innerHTML = html;
                fishWrap.style.display = showBlock ? '' : fishWrap.style.display;
                // Блок «какая рыба водится» в шапке пополняем, если он пуст
                var headerFish = document.querySelector('#fishSection .fish-chips');
                if (headerFish && !headerFish.children.length) headerFish.innerHTML = html;
            }
        }

        /** Опрос статуса: подробная статья может прийти позже — покажем её сами.
         *  Сначала опрашиваем часто (краткое описание появляется за минуту),
         *  потом реже, и совсем прекращаем через 20 минут. */
        function pollDescription(maxMinutes) {
            if (pollTimer) return;
            var started = Date.now();
            var delay = 12000;
            var tick = function () {
                var elapsed = Date.now() - started;
                if (elapsed > maxMinutes * 60000) { pollTimer = null; return; }
                fetch('/api/wb_description.php?id=' + wbId, { cache: 'no-store' })
                    .then(function (r) { return r.json(); })
                    .then(function (d) {
                        if (!d || !d.ok || !d.description) return;
                        var box = document.getElementById('aiFreshText');
                        if (!box || box.getAttribute('data-stage') !== d.stage) {
                            showDescription(d.description, d.fish_items || d.fish, d.stage);
                            if (d.fish_possible_items && d.fish_possible_items.length) {
                                renderFishChips(d.fish_items || d.fish, d.fish_possible_items, true);
                            }
                            var st = document.getElementById('genInfoStatus');
                            if (st && d.stage === 'full') st.textContent = '✅ Подробная статья готова.';
                        }
                        if (d.stage === 'full') { pollTimer = null; return; }
                        delay = elapsed > 180000 ? 45000 : 12000;
                        pollTimer = setTimeout(tick, delay);
                    })
                    .catch(function () {
                        // сеть моргнула — попробуем ещё раз позже
                        delay = 30000;
                        pollTimer = setTimeout(tick, delay);
                    });
            };
            pollTimer = setTimeout(tick, delay);
        }

        function requestGen(isAuto) {
            genBtn.disabled = true;
            var st = document.getElementById('genInfoStatus');
            var streamSupported = (typeof TextDecoder !== 'undefined' && typeof ReadableStream !== 'undefined'
                && typeof fetch === 'function');
            if (!streamSupported) { requestGenPlain(isAuto); return; }

            if (!isAuto) st.textContent = '⚡ Пишу описание — текст появится здесь сразу…';
            var live = '';
            var started = false;

            fetch('/api/generate_info.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ waterbody_id: wbId, captcha_token: captchaToken, stream: true }),
            })
            .then(function (r) {
                if (!r.ok || !r.body) throw new Error('no-stream');
                var reader = r.body.getReader();
                var dec = new TextDecoder();
                var buf = '';
                var pump = function () {
                    return reader.read().then(function (chunk) {
                        if (chunk.done) return null;
                        buf += dec.decode(chunk.value, { stream: true });
                        var idx;
                        while ((idx = buf.indexOf('\n')) >= 0) {
                            var line = buf.slice(0, idx).trim();
                            buf = buf.slice(idx + 1);
                            if (!line) continue;
                            var ev = null;
                            try { ev = JSON.parse(line); } catch (e) { continue; }
                            if (ev.t) {
                                if (!started) { started = true; showLive(); }
                                live += ev.t;
                                renderLive(live);
                            } else if (ev.done) {
                                showDescription(ev.description || live, [], 'fast');
                                st.textContent = '✅ Краткое описание готово. Подробная статья собирается в фоне — появится здесь сама.';
                                pollDescription(30);
                            } else if (ev.error) {
                                if (started && live) {
                                    showDescription(live, [], 'fast');
                                    st.textContent = '✅ Показано краткое описание, подробное подготовится в фоне.';
                                    pollDescription(30);
                                } else if (isAuto) {
                                    // Автозапуск: без капчи и лишних вопросов — ждём воркер
                                    genBtn.style.display = 'none';
                                    st.textContent = '⏳ Описание готовится в фоне — появится здесь автоматически.';
                                    pollDescription(30);
                                } else {
                                    requestGenPlain(isAuto); // поток не сработал — обычный путь
                                }
                            }
                        }
                        return pump();
                    });
                };
                return pump();
            })
            .catch(function () {
                // Поток не поддержан или оборвался — обычный запрос
                if (started && live) {
                    showDescription(live, [], 'fast');
                    pollDescription(30);
                } else {
                    requestGenPlain(isAuto);
                }
            });
        }

        /** Показываем контейнер сразу, до первых слов */
        function showLive() {
            var wrap = document.getElementById('aiFresh');
            if (wrap) wrap.style.display = '';
            var note = document.getElementById('aiFreshNote');
            if (note) note.style.display = '';
            var disc = document.getElementById('aiFreshDisclaimer');
            if (disc) disc.style.display = '';
            var block = document.getElementById('genBlock');
            if (block) block.style.display = 'none';
        }

        /** Текст по мере генерации (без переформатирования на каждом слове) */
        function renderLive(text) {
            var box = document.getElementById('aiFreshText');
            if (box) box.innerHTML = aiTextToHtml(text) + '<span class="ai-cursor">▍</span>';
        }

        /** Обычный (не потоковый) запрос — запасной путь */
        function requestGenPlain(isAuto) {
            var st = document.getElementById('genInfoStatus');
            if (!isAuto) st.textContent = '⏳ Готовим краткое описание — обычно это занимает 5–15 секунд…';
            fetch('/api/generate_info.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ waterbody_id: wbId, captcha_token: captchaToken }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok && d.description) {
                    showDescription(d.description, d.fish, d.stage || 'fast');
                    st.textContent = (d.stage === 'full')
                        ? '✅ Готово.'
                        : '✅ Краткое описание готово. Подробная статья собирается в фоне — появится здесь сама.';
                    pollDescription(30);
                }
                else if (d.queued) {
                    st.textContent = '⏳ ' + (d.message || 'Описание готовится в фоне');
                    genBtn.style.display = 'none';
                    pollDescription(30);
                }
                else if (d.captcha) {
                    // При автозапуске капчу не показываем: просто ждём фоновую генерацию
                    if (isAuto) {
                        genBtn.style.display = 'none';
                        st.textContent = '⏳ Описание готовится в фоне — появится здесь автоматически.';
                        pollDescription(30);
                    } else {
                        showCaptcha(d.key, st);
                    }
                }
                else if (d.error && d.error.indexOf('уже добавлена') >= 0) {
                    // Описание появилось, пока страница открывалась — покажем его
                    st.textContent = '⏳ Описание уже подготовлено — сейчас появится здесь.';
                    genBtn.style.display = 'none';
                    pollDescription(30);
                }
                else if (d.error && d.error.indexOf('уже подготавливается') >= 0) {
                    st.textContent = '⏳ ' + d.error + ' Результат появится здесь автоматически.';
                    genBtn.style.display = 'none';
                    pollDescription(30);
                }
                else {
                    st.textContent = '❌ ' + (d.error || 'Не удалось подготовить описание');
                    genBtn.style.display = '';
                    genBtn.disabled = false;
                }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; genBtn.style.display = ''; genBtn.disabled = false; });
        }
        genBtn.addEventListener('click', function () { requestGen(false); });

        // АВТОЗАПУСК: описание появляется само, без нажатий и без обновления страницы.
        // Страница сразу открывает поток к API: первые слова приходят через 1–2 секунды,
        // текст печатается прямо здесь. Параллельно водоём встаёт в очередь на подробную
        // статью (её страница потом подтянет сама опросом).
        // Защита от лишних запросов: не чаще одного раза в 10 минут на водоём в этом
        // браузере; на сервере есть лимиты и ограничение одновременных генераций.
        var autoStarted = false;
        function autoStartGen() {
            if (autoStarted) return;
            var key = 'wbgen_' + wbId;
            try {
                var ts = parseInt(localStorage.getItem(key), 10) || 0;
                if (Date.now() - ts < 600000) {
                    // Недавно уже запускали — просто ждём результат опросом
                    var st0 = document.getElementById('genInfoStatus');
                    if (st0) st0.textContent = '⏳ Описание готовится — появится здесь автоматически…';
                    pollDescription(30);
                    return;
                }
                localStorage.setItem(key, String(Date.now()));
            } catch (e) { /* приватный режим — всё равно запускаем */ }
            autoStarted = true;

            var st = document.getElementById('genInfoStatus');
            if (st) st.textContent = '⚡ Готовлю краткое описание — текст появится здесь через пару секунд…';
            // Сразу ставим водоём в очередь на подробную статью: даже если быстрый
            // этап не стартует, воркер всё сделает и страница подтянет результат.
            fetch('/api/enrich_queue_add.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ waterbody_id: wbId }),
            }).catch(function () { /* не критично */ });
            pollDescription(30);
            // И тут же запускаем быструю генерацию потоком
            requestGen(true);
        }
        autoStartGen();

        // Капча «проверка на человека» при превышении лимита
        function showCaptcha(key, statusEl) {
            statusEl.textContent = '⏳ Проверка на человека…';
            var challengeId = 0;
            fetch('/api/captcha.php?action=new&key=' + encodeURIComponent(key))
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (!d.ok) { statusEl.textContent = '❌ ' + (d.error || 'Ошибка'); genBtn.disabled = false; return; }
                challengeId = d.challenge_id;
                var overlay = document.createElement('div');
                overlay.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:9999;display:flex;align-items:center;justify-content:center;padding:20px';
                overlay.innerHTML =
                    '<div style="background:#fff;border-radius:14px;padding:24px;max-width:380px;width:100%;box-shadow:0 12px 40px rgba(0,0,0,.3)">' +
                    '<h3 style="margin:0 0 6px">🤖 Проверка на человека</h3>' +
                    '<p class="muted small" style="margin:0 0 14px">Лимит генераций на час исчерпан (200/час). Решите пример — и получите ещё 20 генераций.</p>' +
                    '<div id="capQuestion" style="font-size:22px;font-weight:700;margin-bottom:12px"></div>' +
                    '<input type="text" id="capAnswer" placeholder="Ответ" style="width:100%;padding:10px;border:1px solid #d5dbe3;border-radius:8px;font-size:16px" autocomplete="off">' +
                    '<div id="capStatus" class="muted small" style="margin-top:8px;min-height:18px"></div>' +
                    '<div style="display:flex;gap:8px;margin-top:14px">' +
                    '<button id="capOk" class="btn-primary-modern" style="flex:1">Проверить</button>' +
                    '<button id="capCancel" class="btn-solid" type="button" style="flex:1;background:#eef2f7;color:#334155">Отмена</button>' +
                    '</div></div>';
                document.body.appendChild(overlay);
                overlay.querySelector('#capQuestion').textContent = d.question;
                function closeCap() { if (overlay.parentNode) overlay.parentNode.removeChild(overlay); genBtn.disabled = false; }
                overlay.querySelector('#capCancel').addEventListener('click', closeCap);
                var inp = overlay.querySelector('#capAnswer');
                inp.focus();
                function refreshChallenge() {
                    fetch('/api/captcha.php?action=new&key=' + encodeURIComponent(key))
                    .then(function (r) { return r.json(); })
                    .then(function (d3) {
                        if (d3.ok) {
                            challengeId = d3.challenge_id;
                            overlay.querySelector('#capQuestion').textContent = d3.question;
                            inp.value = '';
                            overlay.querySelector('#capStatus').textContent = '';
                        }
                    });
                }
                function solve() {
                    var capSt = overlay.querySelector('#capStatus');
                    var ans = inp.value.trim();
                    if (!ans) { capSt.textContent = 'Введите ответ'; return; }
                    capSt.textContent = 'Проверка…';
                    fetch('/api/captcha.php', {
                        method: 'POST',
                        headers: { 'Content-Type': 'application/json' },
                        body: JSON.stringify({ action: 'solve', key: key, challenge_id: challengeId, answer: ans }),
                    })
                    .then(function (r) { return r.json(); })
                    .then(function (d2) {
                        if (d2.ok) {
                            captchaToken = d2.token;
                            closeCap();
                            statusEl.textContent = '✅ ' + d2.message;
                            requestGen(false);
                        } else {
                            capSt.textContent = '❌ ' + (d2.error || 'Ошибка');
                            refreshChallenge();
                        }
                    });
                }
                overlay.querySelector('#capOk').addEventListener('click', solve);
                inp.addEventListener('keydown', function (e) { if (e.key === 'Enter') solve(); });
            })
            .catch(function () { statusEl.textContent = 'Ошибка сети'; genBtn.disabled = false; });
        }
    }

    // Комментарии
    var cmSubmit = document.getElementById('cmSubmit');
    if (cmSubmit) {
        cmSubmit.addEventListener('click', function () {
            var st = document.getElementById('cmStatus');
            var text = document.getElementById('cmText').value.trim();
            if (text.length < 2) { st.textContent = 'Введите текст комментария'; return; }
            st.textContent = 'Отправка…';
            fetch('/api/comments.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ waterbody_id: wbId, text: text, parent_id: cmParentId }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) {
                    st.textContent = '✅ ' + d.message;
                    document.getElementById('cmText').value = '';
                    if (cmParentId > 0) clearReplyTarget();
                } else {
                    st.textContent = '❌ ' + (d.error || 'Ошибка');
                }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });
    }

    // Ответ на конкретный комментарий: автору придёт уведомление в личные сообщения
    var cmParentId = 0;
    var cmReplyHint = document.getElementById('cmReplyHint');
    function clearReplyTarget() {
        cmParentId = 0;
        if (cmReplyHint) { cmReplyHint.style.display = 'none'; cmReplyHint.textContent = ''; }
        var ta = document.getElementById('cmText');
        if (ta) ta.placeholder = 'Поделитесь опытом рыбалки на этом водоёме…';
    }
    Array.prototype.forEach.call(document.querySelectorAll('.cm-reply-btn'), function (btn) {
        btn.addEventListener('click', function () {
            cmParentId = parseInt(btn.getAttribute('data-parent'), 10) || 0;
            var author = btn.getAttribute('data-author') || 'рыбаку';
            if (cmReplyHint) {
                cmReplyHint.style.display = '';
                cmReplyHint.innerHTML = '↩ Ответ для <b>' + author.replace(/[<>&]/g, '') + '</b> · ' +
                    '<a href="#" id="cmReplyCancel">отменить</a>';
                var cancel = document.getElementById('cmReplyCancel');
                if (cancel) cancel.addEventListener('click', function (e) { e.preventDefault(); clearReplyTarget(); });
            }
            var ta = document.getElementById('cmText');
            if (ta) {
                ta.placeholder = 'Ответ для ' + author + '…';
                ta.focus();
            }
        });
    });
    var cmLoginBtn = document.getElementById('cmLoginBtn');
    if (cmLoginBtn) cmLoginBtn.addEventListener('click', function () { window.siteAuth.openLogin(); });

    // Предложение правки
    var seSubmit = document.getElementById('seSubmit');
    if (seSubmit) {
        seSubmit.addEventListener('click', function () {
            var st = document.getElementById('seStatus');
            var value = document.getElementById('seValue').value.trim();
            if (!value) { st.textContent = 'Введите текст правки'; return; }
            st.textContent = 'Отправка…';
            fetch('/api/suggest_edit.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    waterbody_id: wbId,
                    field: document.getElementById('seField').value,
                    new_value: value,
                    comment: document.getElementById('seComment').value.trim(),
                }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) { st.textContent = '✅ ' + d.message; document.getElementById('seValue').value = ''; document.getElementById('seComment').value = ''; }
                else { st.textContent = '❌ ' + (d.error || 'Ошибка'); }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });
    }
    var seLoginBtn = document.getElementById('seLoginBtn');
    if (seLoginBtn) seLoginBtn.addEventListener('click', function () { window.siteAuth.openLogin(); });

    // Копирование ссылки (поделиться)
    var shareCopyBtn = document.getElementById('shareCopyBtn');
    if (shareCopyBtn) {
        shareCopyBtn.addEventListener('click', function () {
            var url = window.location.href;
            if (navigator.clipboard && navigator.clipboard.writeText) {
                navigator.clipboard.writeText(url).then(function () {
                    shareCopyBtn.textContent = '✅';
                    shareCopyBtn.title = 'Скопировано!';
                    setTimeout(function () { shareCopyBtn.textContent = '🔗'; shareCopyBtn.title = 'Скопировать ссылку'; }, 2000);
                }, function () {
                    shareCopyBtn.textContent = '✅';
                    setTimeout(function () { shareCopyBtn.textContent = '🔗'; }, 2000);
                });
            } else {
                // Старый браузер — выделяем и предлагаем Ctrl+C
                shareCopyBtn.textContent = '✅';
                window.prompt('Скопируйте ссылку:', url);
                setTimeout(function () { shareCopyBtn.textContent = '🔗'; }, 2000);
            }
        });
    }

    // Тёплое приглашение зарегистрироваться
    var joinRegisterBtn = document.getElementById('joinRegisterBtn');
    if (joinRegisterBtn) {
        joinRegisterBtn.addEventListener('click', function () { if (window.siteAuth) window.siteAuth.openRegister(); });
    }
    var joinLoginBtn = document.getElementById('joinLoginBtn');
    if (joinLoginBtn) {
        joinLoginBtn.addEventListener('click', function () { if (window.siteAuth) window.siteAuth.openLogin(); });
    }

    // Избранное
    var favBtn = document.getElementById('favBtn');
    if (favBtn) {
        favBtn.addEventListener('click', function () {
            var isFav = favBtn.dataset.fav === '1';
            fetch('/api/favorites.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ waterbody_id: wbId, action: isFav ? 'remove' : 'add' }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) {
                    favBtn.dataset.fav = d.favorite ? '1' : '0';
                    favBtn.textContent = d.favorite ? 'В избранном' : 'В избранное';
                } else {
                    alert(d.error || 'Ошибка');
                }
            })
            .catch(function () {});
        });
    }
    var favLoginBtn = document.getElementById('favLoginBtn');
    if (favLoginBtn) favLoginBtn.addEventListener('click', function () { window.siteAuth.openLogin(); });

    // Погода и прогноз клёва
    (function () {
        var wc = document.getElementById('weatherContent');
        if (!wc) return;
        fetch('/api/weather.php?lat=43.25257405&lon=143.70232735')
        .then(function (r) { return r.json(); })
        .then(function (d) {
            if (!d.ok) { wc.innerHTML = '<p class="muted small">' + (d.error || 'Погода недоступна') + '</p>'; return; }
            var bite = d.bite;
            function bar(v) {
                return '<div class="bite-bar"><div class="bite-fill" style="width:' + v + '%"></div></div>';
            }
            var daily = (d.daily || []).map(function (day, i) {
                var lbl = i === 0 ? 'Сегодня' : 'Завтра';
                return '<div class="w-day"><div class="w-day-name">' + lbl + '</div>' +
                    '<div class="w-day-temp">' + day.t_max + '° / ' + day.t_min + '°</div>' +
                    '<div class="muted small">' + day.label + (day.precip != null ? ' · осадки ' + day.precip + '%' : '') + '</div></div>';
            }).join('');
            wc.innerHTML =
                '<div class="weather-grid">' +
                    '<div class="w-current">' +
                        '<div class="w-temp">' + d.current.temp + '°C</div>' +
                        '<div class="muted small">' + d.current.label + '</div>' +
                        '<div class="muted small">💨 ветер ' + d.current.wind + ' м/с · 🌀 давление ' + d.current.pressure + ' мм · 💧 ' + d.current.humidity + '%</div>' +
                        '<div class="w-moon muted small">' + d.moon.label + '</div>' +
                    '</div>' +
                    '<div class="w-bite">' +
                        '<div class="bite-row"><span>Сегодня</span>' + bar(bite.today) + '<b>' + bite.today + '</b></div>' +
                        '<div class="bite-row"><span>Завтра</span>' + bar(bite.tomorrow) + '<b>' + bite.tomorrow + '</b></div>' +
                        '<div class="w-bite-label">🎣 ' + bite.label_today + '</div>' +
                    '</div>' +
                    '<div class="w-days">' + daily + '</div>' +
                '</div>' +
                '<p class="muted small" style="margin-top:6px">Прогноз клёва — экспертная оценка по погоде (давление, ветер, осадки, луна). Не гарантирует улов 😉</p>';
        })
        .catch(function () { wc.innerHTML = '<p class="muted small">Погода недоступна</p>'; });
    })();

    // Показать точку (место ловли)
    var addSpotBtn = document.getElementById('addSpotBtn');
    var addSpotLoginBtn = document.getElementById('addSpotLoginBtn');
    if (addSpotLoginBtn) addSpotLoginBtn.addEventListener('click', function () { window.siteAuth.openLogin(); });
    if (addSpotBtn) {
        addSpotBtn.addEventListener('click', function () {
            document.getElementById('addSpotForm').classList.remove('hidden');
            addSpotBtn.style.display = 'none';
            initAsPicker();
        });
    }

    // Карта-пикер для «Показать точку»: клик по карте ставит координаты места.
    // Ждём готовности Яндекс.Карт, если скрипт ещё грузится.
    var asPickerReady = false;
    function initAsPicker() {
        if (asPickerReady) return;
        var mapEl = document.getElementById('asPickMap');
        var latIn = document.getElementById('asLat');
        var lonIn = document.getElementById('asLon');
        if (!mapEl || !latIn || !lonIn) return;
        if (typeof ymaps === 'undefined' || !ymaps.Map) {
            setTimeout(initAsPicker, 400);
            return;
        }
        asPickerReady = true;
        var marker = null;
        var map = new ymaps.Map(mapEl, {
            center: [43.25257405, 143.70232735],
            zoom: 13,
            controls: ['zoomControl'],
        });
        map.events.add('click', function (e) {
            var coords = e.get('coords');
            latIn.value = coords[0].toFixed(6);
            lonIn.value = coords[1].toFixed(6);
            if (marker) map.geoObjects.remove(marker);
            marker = new ymaps.Placemark(coords, {}, { preset: 'islands#redCircleDotIcon' });
            map.geoObjects.add(marker);
        });
        if (map.container) setTimeout(function () { map.container.fitToViewport(); }, 50);
    }
    var asSubmit = document.getElementById('asSubmit');
    if (asSubmit) {
        asSubmit.addEventListener('click', function () {
            var st = document.getElementById('asStatus');
            var name = document.getElementById('asName').value.trim();
            var desc = document.getElementById('asDesc').value.trim();
            var lat = parseFloat(document.getElementById('asLat').value);
            var lon = parseFloat(document.getElementById('asLon').value);
            if (!name) { st.textContent = 'Введите название места'; return; }
            if (isNaN(lat) || isNaN(lon)) { st.textContent = 'Укажите корректные координаты'; return; }
            st.textContent = 'Отправка…';
            fetch('/api/spot_add.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ waterbody_id: wbId, name: name, description: desc, lat: lat, lon: lon }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) { st.textContent = '✅ ' + d.message; setTimeout(function () { location.reload(); }, 1500); }
                else { st.textContent = '❌ ' + (d.error || 'Ошибка'); }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });
    }

    // Поделиться уловом
    var addPostBtn = document.getElementById('addPostBtn');
    var addPostLoginBtn = document.getElementById('addPostLoginBtn');
    if (addPostLoginBtn) addPostLoginBtn.addEventListener('click', function () { window.siteAuth.openLogin(); });
    if (addPostBtn) {
        addPostBtn.addEventListener('click', function () {
            document.getElementById('addPostForm').classList.remove('hidden');
            addPostBtn.style.display = 'none';
        });
    }
    var apPostSubmit = document.getElementById('apPostSubmit');
    if (apPostSubmit) {
        apPostSubmit.addEventListener('click', function () {
            var st = document.getElementById('apPostStatus');
            var kind = document.getElementById('apKind').value;
            var text = document.getElementById('apText').value.trim();
            var media = document.getElementById('apMedia').value.trim();
            if (kind !== 'text' && !media) { st.textContent = 'Для фото/видео укажите ссылку'; return; }
            st.textContent = 'Отправка…';
            fetch('/api/post_add.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ waterbody_id: wbId, kind: kind, text: text, media_url: media }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) { st.textContent = '✅ ' + d.message; setTimeout(function () { location.reload(); }, 1500); }
                else { st.textContent = '❌ ' + (d.error || 'Ошибка'); }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });
    }

    // ---- Отметка улова --------------------------------------------------------
    // Известные рыбы водоёма (нормализованные) — для срока проверки
    var wbKnownFish = [];
    function fishNorm(s) { return String(s || '').toLowerCase().replace(/ё/g, 'е').trim(); }

    var ctFish = document.getElementById('ctFish');
    var ctOwn = document.getElementById('ctFishOwn');
    var ctNotice = document.getElementById('ctNotice');
    var ctModeCatalog = document.getElementById('ctModeCatalog');
    var ctModeOwn = document.getElementById('ctModeOwn');

    function ctIsOwn() {
        var sel = document.querySelector('input[name="ctMode"]:checked');
        return sel ? sel.value === 'own' : false;
    }
    function ctUpdateModeUI() {
        var own = ctIsOwn();
        ctFish.classList.toggle('hidden', own);
        ctOwn.classList.toggle('hidden', !own);
        if (ctModeCatalog) ctModeCatalog.style.borderColor = own ? '#e2e8f0' : '#4f6ef7';
        if (ctModeCatalog) ctModeCatalog.style.background = own ? '#fff' : '#eef4ff';
        if (ctModeCatalog) ctModeCatalog.style.color = own ? '#475569' : '#1f3a8a';
        if (ctModeOwn) ctModeOwn.style.borderColor = own ? '#4f6ef7' : '#e2e8f0';
        if (ctModeOwn) ctModeOwn.style.background = own ? '#eef4ff' : '#fff';
        if (ctModeOwn) ctModeOwn.style.color = own ? '#1f3a8a' : '#475569';
        updateCtNotice();
    }
    document.querySelectorAll('input[name="ctMode"]').forEach(function (r) {
        r.addEventListener('change', ctUpdateModeUI);
    });

    function updateCtNotice() {
        if (!ctNotice) return;
        if (ctIsOwn()) {
            ctNotice.textContent = '⏳ Своя рыба, которой не было в каталоге водоёма — проверка до 30 дней.';
            ctNotice.style.color = '#b45309';
            return;
        }
        var val = ctFish ? ctFish.value.trim() : '';
        if (!val) { ctNotice.textContent = ''; return; }
        if (wbKnownFish.indexOf(fishNorm(val)) >= 0) {
            ctNotice.textContent = '✅ Рыба уже числится на водоёме — обычная проверка до 14 дней.';
            ctNotice.style.color = '#1e7a1e';
        } else {
            ctNotice.textContent = '⏳ Этой рыбы не было в каталоге водоёма — проверка до 30 дней.';
            ctNotice.style.color = '#b45309';
        }
    }
    if (ctFish) ctFish.addEventListener('input', updateCtNotice);
    ctUpdateModeUI();

    var ctSubmit = document.getElementById('ctSubmit');
    if (ctSubmit) {
        ctSubmit.addEventListener('click', function () {
            var st = document.getElementById('ctStatus');
            var own = ctIsOwn();
            var fishName = (own ? ctOwn.value : ctFish.value).trim();
            if (!fishName) { st.textContent = own ? 'Укажите название своей рыбы' : 'Введите название рыбы'; return; }
            var weight = parseFloat(document.getElementById('ctWeight').value) || 0;
            var comment = document.getElementById('ctComment').value.trim();
            st.textContent = 'Отправка…';
            fetch('/api/catch_add.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ fish_id: 0, fish_name: fishName, waterbody_id: wbId, weight: weight, comment: comment }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) { st.textContent = '✅ ' + d.message; setTimeout(function () { location.reload(); }, 2500); }
                else { st.textContent = '❌ ' + (d.error || 'Ошибка'); }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });
    }
    var ctLoginBtn = document.getElementById('ctLoginBtn');
    if (ctLoginBtn) ctLoginBtn.addEventListener('click', function () { window.siteAuth.openLogin(); });

    // ---- Публичный ИИ-чат о водоёме ------------------------------------------
    (function () {
        var box = document.getElementById('chatBox');
        if (!box) return;
        var input = document.getElementById('chatInput');
        var sendBtn = document.getElementById('chatSendBtn');
        var status = document.getElementById('chatStatus');
        var loading = document.getElementById('chatLoading');

        function escChat(s) {
            return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) {
                return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c];
            });
        }
        function render(messages) {
            if (!messages || !messages.length) {
                box.innerHTML = '<div class="muted small">Сообщений пока нет. Задайте первый вопрос!</div>';
                return;
            }
            box.innerHTML = messages.map(function (m) {
                var isAi = m.role === 'ai';
                var name = escChat(m.author || (isAi ? 'AI' : 'Гость'));
                var body = escChat(m.text);
                var style = isAi
                    ? 'background:#e8f2ff;border-radius:12px;padding:10px 14px;margin-bottom:8px;max-width:85%'
                    : 'background:#fff;border:1px solid #e5e9f0;border-radius:12px;padding:10px 14px;margin-bottom:8px;max-width:85%;margin-left:auto';
                return '<div style="' + style + '">' +
                    '<div class="muted small" style="font-weight:700;margin-bottom:3px">' + (isAi ? '🤖 ' : '👤 ') + name + '</div>' +
                    '<div style="white-space:pre-line">' + body + '</div>' +
                    '<div class="muted small" style="margin-top:4px;font-size:11px">' + escChat(m.created_at) + '</div>' +
                    '</div>';
            }).join('');
            box.scrollTop = box.scrollHeight;
        }

        function loadHistory() {
            fetch('/api/chat_history.php?waterbody_id=' + wbId)
                .then(function (r) { return r.json(); })
                .then(function (d) {
                    loading.style.display = 'none';
                    if (d.ok) render(d.messages);
                })
                .catch(function () { loading.textContent = 'Чат недоступен'; });
        }

        function send() {
            var text = input.value.trim();
            if (!text) return;
            status.textContent = '🤖 ИИ отвечает… это может занять 10-20 секунд.';
            sendBtn.disabled = true;
            fetch('/api/chat_send.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ waterbody_id: wbId, text: text }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                sendBtn.disabled = false;
                if (d.ok) {
                    status.textContent = '';
                    input.value = '';
                    render([d.user_message, d.ai_message]);
                    setTimeout(loadHistory, 500);
                } else {
                    status.textContent = '❌ ' + (d.error || 'Ошибка');
                }
            })
            .catch(function () { sendBtn.disabled = false; status.textContent = 'Ошибка сети'; });
        }

        sendBtn.addEventListener('click', send);
        input.addEventListener('keydown', function (e) { if (e.key === 'Enter') send(); });
        loadHistory();
        // Автообновление каждые 20 сек — видно сообщения других посетителей
        setInterval(loadHistory, 20000);
    })();

    // ---- Модалка «Отредактировать точку» -------------------------------------
    (function () {
        var modal = document.getElementById('editLocModal');
        if (!modal) return;
        var openBtn = document.getElementById('editLocBtn');
        var loginBtn = document.getElementById('editLocLoginBtn');
        if (loginBtn) loginBtn.addEventListener('click', function () { window.siteAuth.openLogin(); });
        if (openBtn) openBtn.addEventListener('click', function () {
            modal.classList.remove('hidden');
            initElPicker();
        });
        document.getElementById('editLocClose').addEventListener('click', function () { modal.classList.add('hidden'); });
        modal.addEventListener('click', function (e) { if (e.target === modal) modal.classList.add('hidden'); });

        // Карта-пикер: клик по карте ставит координаты.
        // Ждём готовности Яндекс.Карт (скрипт грузится асинхронно) —
        // иначе «ничего не происходит» при быстром клике.
        var elPickerReady = false;
        function initElPicker() {
            if (elPickerReady) return;
            var mapEl = document.getElementById('elPickMap');
            var latIn = document.getElementById('elLat');
            var lonIn = document.getElementById('elLon');
            if (!mapEl || !latIn || !lonIn) return;
            if (typeof ymaps === 'undefined' || !ymaps.Map) {
                setTimeout(initElPicker, 400); // ждём API и пробуем снова
                return;
            }
            elPickerReady = true;
            var marker = null;
            var map = new ymaps.Map(mapEl, {
                center: [43.25257405, 143.70232735],
                zoom: 13,
                controls: ['zoomControl'],
            });
            map.events.add('click', function (e) {
                var coords = e.get('coords');
                latIn.value = coords[0].toFixed(6);
                lonIn.value = coords[1].toFixed(6);
                if (marker) map.geoObjects.remove(marker);
                marker = new ymaps.Placemark(coords, {}, { preset: 'islands#redCircleDotIcon' });
                map.geoObjects.add(marker);
            });
            // Умное центрирование при открытии
            if (map.container) setTimeout(function () { map.container.fitToViewport(); }, 50);
        }

        document.getElementById('elSubmit').addEventListener('click', function () {
            var st = document.getElementById('elStatus');
            var lat = parseFloat(document.getElementById('elLat').value);
            var lon = parseFloat(document.getElementById('elLon').value);
            if (isNaN(lat) || isNaN(lon) || Math.abs(lat) > 85 || Math.abs(lon) > 180) {
                st.textContent = 'Введите корректные координаты (широта, долгота)';
                return;
            }
            st.textContent = 'Отправка…';
            fetch('/api/suggest_edit.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    waterbody_id: wbId,
                    field: 'location',
                    new_value: lat + ', ' + lon,
                    comment: document.getElementById('elComment').value.trim(),
                }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) {
                    st.textContent = '✅ ' + d.message;
                    setTimeout(function () { modal.classList.add('hidden'); }, 1800);
                } else {
                    st.textContent = '❌ ' + (d.error || 'Ошибка');
                }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });
    })();

    // ---- Модалка «Предложить водоём» -----------------------------------------
    (function () {
        var modal = document.getElementById('suggestWbModal');
        if (!modal) return;
        var openBtn = document.getElementById('suggestWbBtn');
        var loginBtn = document.getElementById('suggestWbLoginBtn');
        if (loginBtn) loginBtn.addEventListener('click', function () { window.siteAuth.openLogin(); });
        if (openBtn) openBtn.addEventListener('click', function () {
            // Подставляем центр текущего водоёма как подсказку
            if (!document.getElementById('swLat').value) document.getElementById('swLat').value = 43.252574;
            if (!document.getElementById('swLon').value) document.getElementById('swLon').value = 143.702327;
            modal.classList.remove('hidden');
            initSwPicker();
        });
        document.getElementById('suggestWbClose').addEventListener('click', function () { modal.classList.add('hidden'); });
        modal.addEventListener('click', function (e) { if (e.target === modal) modal.classList.add('hidden'); });

        // Карта-пикер: клик по карте ставит координаты водоёма.
        // Ждём готовности Яндекс.Карт, если скрипт ещё грузится.
        var swPickerReady = false;
        function initSwPicker() {
            if (swPickerReady) return;
            var mapEl = document.getElementById('swPickMap');
            var latIn = document.getElementById('swLat');
            var lonIn = document.getElementById('swLon');
            if (!mapEl || !latIn || !lonIn) return;
            if (typeof ymaps === 'undefined' || !ymaps.Map) {
                setTimeout(initSwPicker, 400);
                return;
            }
            swPickerReady = true;
            var marker = null;
            var map = new ymaps.Map(mapEl, {
                center: [43.25257405, 143.70232735],
                zoom: 12,
                controls: ['zoomControl'],
            });
            map.events.add('click', function (e) {
                var coords = e.get('coords');
                latIn.value = coords[0].toFixed(6);
                lonIn.value = coords[1].toFixed(6);
                if (marker) map.geoObjects.remove(marker);
                marker = new ymaps.Placemark(coords, {}, { preset: 'islands#redCircleDotIcon' });
                map.geoObjects.add(marker);
            });
            if (map.container) setTimeout(function () { map.container.fitToViewport(); }, 50);
        }

        document.getElementById('swSubmit').addEventListener('click', function () {
            var st = document.getElementById('swStatus');
            var name = document.getElementById('swName').value.trim();
            var lat = parseFloat(document.getElementById('swLat').value);
            var lon = parseFloat(document.getElementById('swLon').value);
            if (!name) { st.textContent = 'Введите название водоёма'; return; }
            if (isNaN(lat) || isNaN(lon) || Math.abs(lat) > 85 || Math.abs(lon) > 180) {
                st.textContent = 'Укажите точку водоёма (широта, долгота)';
                return;
            }
            st.textContent = 'Отправка…';
            fetch('/api/suggest_waterbody.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({
                    name: name,
                    wtype: document.getElementById('swType').value,
                    lat: lat,
                    lon: lon,
                    description: document.getElementById('swDesc').value.trim(),
                }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) {
                    st.textContent = '✅ ' + d.message;
                    setTimeout(function () { modal.classList.add('hidden'); document.getElementById('swName').value = ''; document.getElementById('swDesc').value = ''; }, 2000);
                } else {
                    st.textContent = '❌ ' + (d.error || 'Ошибка');
                }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });
    })();

    // ---- Блог рыбаков ---------------------------------------------------------
    (function () {
        var listEl = document.getElementById('blogThreads');
        var viewSection = document.getElementById('blogViewSection');
        if (!listEl || !viewSection) return;
        var newBtn = document.getElementById('blogNewBtn');
        var loginBtn = document.getElementById('blogLoginBtn');
        var newForm = document.getElementById('blogNewForm');
        var currentThread = 0;

        if (loginBtn) loginBtn.addEventListener('click', function () { window.siteAuth.openLogin(); });
        if (newBtn) newBtn.addEventListener('click', function () {
            newForm.classList.toggle('hidden');
            if (!newForm.classList.contains('hidden')) document.getElementById('btTitle').focus();
        });

        function escB(s) {
            return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) {
                return { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' }[c];
            });
        }
        function nl2br(s) { return escB(s).replace(/\n/g, '<br>'); }

        function loadThreads() {
            fetch('/api/blog_list.php?target_type=waterbody&target_id=' + wbId)
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (!d.ok || !d.threads || !d.threads.length) {
                    listEl.innerHTML = '<div class="muted">Веток пока нет. Создайте первую!</div>';
                    return;
                }
                listEl.innerHTML = d.threads.map(function (t) {
                    return '<div class="comment-item blog-thread" data-id="' + t.id + '" style="cursor:pointer">' +
                        '<div class="comment-head"><b>' + escB(t.title) + '</b>' +
                        '<span class="muted small">' + (t.posts_count || 0) + ' сообщ. · ' + escB(t.author_name || 'аноним') + ' · ' + escB(t.created_at) + '</span></div>' +
                        (t.ai_posts > 0 ? '<div class="muted small">🤖 ИИ-эксперт участвует</div>' : '') +
                        '</div>';
                }).join('');
                listEl.querySelectorAll('.blog-thread').forEach(function (el) {
                    el.addEventListener('click', function () { openThread(parseInt(el.dataset.id, 10)); });
                });
            })
            .catch(function () { listEl.innerHTML = '<div class="muted">Блог недоступен</div>'; });
        }

        function openThread(id) {
            currentThread = id;
            document.getElementById('blogSection').classList.add('hidden');
            viewSection.classList.remove('hidden');
            document.getElementById('blogPosts').innerHTML = '<div class="muted small">Загружаем…</div>';
            fetch('/api/blog_posts.php?thread_id=' + id)
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (!d.ok) { document.getElementById('blogPosts').innerHTML = '<div class="muted">' + escB(d.error) + '</div>'; return; }
                document.getElementById('blogViewTitle').textContent = '📚 ' + d.thread.title;
                document.getElementById('blogPosts').innerHTML = (d.posts || []).map(function (p) {
                    var isAi = p.role === 'ai';
                    return '<div class="comment-item" style="' + (isAi ? 'background:#f0f7ff;border-radius:10px;padding:10px;' : '') + '">' +
                        '<div class="comment-head"><b>' + (isAi ? '🤖 ' : '👤 ') + escB(p.author) + '</b>' +
                        '<span class="muted small">' + escB(p.created_at) + '</span></div>' +
                        '<div class="comment-text">' + nl2br(p.text) + '</div></div>';
                }).join('') || '<div class="muted">Сообщений нет</div>';
            })
            .catch(function () { document.getElementById('blogPosts').innerHTML = '<div class="muted">Ошибка загрузки</div>'; });
        }

        document.getElementById('blogBackBtn').addEventListener('click', function () {
            viewSection.classList.add('hidden');
            document.getElementById('blogSection').classList.remove('hidden');
            loadThreads();
        });

        document.getElementById('btSubmit').addEventListener('click', function () {
            var st = document.getElementById('btStatus');
            var title = document.getElementById('btTitle').value.trim();
            var text = document.getElementById('btText').value.trim();
            if (!title) { st.textContent = 'Введите тему ветки'; return; }
            st.textContent = 'Создаём ветку (ИИ-эксперт отвечает)…';
            fetch('/api/blog_create.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ target_type: 'waterbody', target_id: wbId, title: title, text: text }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) {
                    st.textContent = '✅ ' + d.message;
                    document.getElementById('btTitle').value = '';
                    document.getElementById('btText').value = '';
                    newForm.classList.add('hidden');
                    loadThreads();
                    openThread(d.thread_id);
                } else {
                    st.textContent = '❌ ' + (d.error || 'Ошибка');
                }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });

        document.getElementById('bpSubmit').addEventListener('click', function () {
            var st = document.getElementById('bpStatus');
            var text = document.getElementById('bpText').value.trim();
            if (!text) { st.textContent = 'Введите текст'; return; }
            if (!currentThread) return;
            var wantAi = document.getElementById('bpWantAi').checked;
            st.textContent = wantAi ? 'Отправляем и спрашиваем ИИ-эксперта…' : 'Отправка…';
            fetch('/api/blog_reply.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ thread_id: currentThread, text: text, ai: wantAi }),
            })
            .then(function (r) { return r.json(); })
            .then(function (d) {
                if (d.ok) {
                    st.textContent = '✅ ' + d.message;
                    document.getElementById('bpText').value = '';
                    openThread(currentThread);
                } else {
                    st.textContent = '❌ ' + (d.error || 'Ошибка');
                }
            })
            .catch(function () { st.textContent = 'Ошибка сети'; });
        });

        loadThreads();
    })();
})();
</script>
<!-- Yandex.Metrika counter (запускается после согласия на cookie) -->
<script type="text/javascript">
(function () {
    var MID = 111908512;
    function consentType() {
        try { var c = window.PokazalConsent ? window.PokazalConsent.type() : ''; return c; } catch (e) { return ''; }
    }
    function start() {
        (function(m,e,t,r,i,k,a){
            m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
            m[i].l=1*new Date();
            for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
            k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)
        })(window, document,'script','https://mc.yandex.ru/metrika/tag.js?id=' + MID, 'ym');
        ym(MID, 'init', {ssr:true, webvisor:true, clickmap:true, ecommerce:"dataLayer", referrer: document.referrer, url: location.href, accurateTrackBounce:true, trackLinks:true});
    }
    if (consentType() === 'all') {
        start();
    } else {
        // Ждём согласия или отзыва (banner в header.php шлёт событие)
        document.addEventListener('pokazal:consent', function (e) {
            if (e.detail === 'all') start();
        });
    }
})();
</script>
<!-- /Yandex.Metrika counter -->
</body>
</html>
