{% extends "base.html" %}
{% block title %}TelePush — Панель{% endblock %}

{% block content %}
<!-- Маленький счётчик аккаунтов в правом верхнем углу -->
<div style="display:flex;justify-content:flex-end;margin-bottom:8px;">
    <span class="text-sm text-muted"><span id="accounts-count">0</span> аккаунтов</span>
</div>

<!-- Активные задачи. Плашка внизу страницы (position:fixed), появляется ТОЛЬКО
     когда реально есть активная задача. Пустой «Нет активных задач» больше не
     маячит на каждой вкладке. -->
<div id="active-jobs" style="display:none;position:fixed;bottom:12px;left:50%;transform:translateX(-50%);z-index:80;max-width:640px;width:calc(100vw - 280px);"></div>

<!-- ═══ TAB: Главная (Dashboard) ═══ -->
<div class="section" id="tab-dashboard">
    <div class="grid-3" style="gap:12px;margin-bottom:16px">
        <div class="card stat-card">
            <div class="stat-card__label">Аккаунты</div>
            <div class="stat-card__value"><span id="dash-acc-total">0</span></div>
            <div class="stat-card__sub">
                <span id="dash-acc-ok" style="color:var(--success)">0 живых</span> ·
                <span id="dash-acc-fw" style="color:var(--warning)">0 в ожидании</span> ·
                <span id="dash-acc-dead" style="color:var(--danger)">0 мёртвых</span>
            </div>
        </div>
        <div class="card stat-card">
            <div class="stat-card__label">Активные задачи</div>
            <div class="stat-card__value"><span id="dash-jobs-count">0</span></div>
            <div class="stat-card__sub" id="dash-jobs-breakdown">нет задач</div>
        </div>
        <div class="card stat-card">
            <div class="stat-card__label">Сегодня</div>
            <div class="stat-card__value"><span id="dash-today-total">0</span></div>
            <div class="stat-card__sub">
                <span id="dash-today-joins">0 подписок</span> · <span id="dash-today-msgs">0 сообщений</span>
            </div>
        </div>
    </div>

    <div class="grid-3" style="gap:12px;margin-bottom:16px">
        <div class="card" style="padding:16px">
            <div class="card-header" style="padding:0 0 10px;border:0">
                <i class="bi bi-lightning-charge" style="color:var(--accent-light)"></i> Быстрые действия
            </div>
            <div class="stack" style="gap:6px">
                <button class="btn btn-accent btn-sm" onclick="showTab('spam')"><i class="bi bi-megaphone"></i> Рассылка по чатам</button>
                <button class="btn btn-outline btn-sm" onclick="showTab('dm')"><i class="bi bi-person-lines-fill"></i> Рассылка в ЛС</button>
                <button class="btn btn-outline btn-sm" onclick="showTab('join')"><i class="bi bi-box-arrow-in-right"></i> Подписка</button>
                <button class="btn btn-outline btn-sm" onclick="showTab('monitor')"><i class="bi bi-eye"></i> Мониторинг</button>
                <button class="btn btn-outline btn-sm" onclick="showTab('parser')"><i class="bi bi-search"></i> Парсер</button>
            </div>
        </div>
        <div class="card" style="padding:16px;grid-column:span 2">
            <div class="card-header" style="padding:0 0 10px;border:0">
                <i class="bi bi-activity" style="color:var(--success)"></i> Последние события
            </div>
            <div id="dash-events" style="font-size:.72rem;line-height:1.7;max-height:240px;overflow:auto;color:var(--text-muted)">
                <div class="skeleton skeleton-line skeleton-line--80"></div>
                <div class="skeleton skeleton-line skeleton-line--60"></div>
                <div class="skeleton skeleton-line skeleton-line--40"></div>
            </div>
        </div>
    </div>

</div>

<!-- ═══ TAB: Рассылка по чатам ═══ -->
<div class="section active" id="tab-spam">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-megaphone text-info"></i> Рассылка по чатам</div>
        <div class="card-body">
            <!-- Выбор аккаунта -->
            <div class="acc-selector mb-2" id="acc-selector-spam"></div>
            <div class="info-box">
                Отправляет текст во все выбранные чаты. Для уникализации: <code>{привет|здравствуйте}</code>
            </div>
            <div class="d-flex gap-3 mb-2 align-center flex-wrap">
                <label class="ad-check m-0"><input type="radio" name="spam-mode" id="spam-mode-text" value="text" checked onchange="onSpamModeChange()"> <span>Свой текст</span></label>
                <label class="ad-check m-0"><input type="radio" name="spam-mode" id="spam-mode-forward" value="forward" onchange="onSpamModeChange()"> <span>Пересылка из чата</span></label>
            </div>

            <div id="spam-mode-text-block">
                <div class="d-flex gap-2 align-center mb-1 flex-wrap">
                    <label class="form-label m-0">Текст сообщения</label>
                    <select class="form-control" id="spam-parse-mode" style="width:auto;font-size:0.72rem;padding:3px 8px;" title="Формат текста: обычный / Markdown (**жирный**, [текст](url)) / HTML (<b>жирный</b>)">
                        <option value="">Обычный</option>
                        <option value="md">Markdown</option>
                        <option value="html">HTML</option>
                    </select>
                </div>
                <textarea class="form-control mb-2" id="spam-tpl" rows="3"
                    placeholder="Напишите текст. Для вариантов: {привет|здравствуйте}"></textarea>
            </div>

            <div id="spam-mode-forward-block" style="display:none;">
                <label class="form-label">Источник для пересылки</label>
                <div class="grid-2 mb-2">
                    <input type="text" class="form-control" id="spam-forward-chat" placeholder="@channel или ID чата откуда пересылать">
                    <input type="number" class="form-control" id="spam-forward-msg-id" placeholder="ID сообщения" min="1">
                </div>
                <div class="info-box fs-70">
                    Перешлёт сообщение #N из канала. Контент сохранится 1-в-1 (форматирование, медиа, эмбеды) — выглядит как обычный share.
                </div>
            </div>

            <details class="ad-block">
                <summary><i class="bi bi-arrow-repeat"></i> Цикличная рассылка</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="spam-loop"> <span>Повторять задачу каждые N часов<span class="ad-hint">После завершения текущего прохода — рестарт через указанное время</span></span></label>
                    <div style="display:flex;gap:8px;align-items:center;margin-top:6px;font-size:0.74rem;color:var(--text-muted-strong);">
                        Каждые
                        <input type="number" class="form-control" id="spam-loop-hours" value="6" min="1" max="168" style="width:80px;">
                        часов
                    </div>
                </div>
            </details>

            <div class="d-flex gap-2 mb-2 flex-wrap">
                <button class="btn btn-info btn-sm" onclick="collectTargets()">
                    <i class="bi bi-search"></i> Найти чаты аккаунта
                </button>
                <button class="btn btn-outline btn-sm" onclick="toggleManualTargets('spam')">
                    <i class="bi bi-pencil"></i> Вручную
                </button>
                <button class="btn btn-outline btn-sm" onclick="clearTargets('spam')">
                    <i class="bi bi-trash text-danger"></i>
                </button>
            </div>

            <div id="spam-manual" style="display:none;" class="mb-2">
                <textarea class="form-control" id="spam-targets-input" rows="3"
                    placeholder="ID чатов, по одному на строке"></textarea>
                <button class="btn btn-outline btn-sm mt-2" onclick="addManualTargets('spam')">
                    <i class="bi bi-plus"></i> Добавить
                </button>
            </div>

            <div class="d-flex align-center gap-2 mb-2 mt-2 flex-wrap">
                <label class="form-label" style="margin:0;font-size:0.78rem;">Лимит сообщений с одного акка</label>
                <input type="number" class="form-control" id="spam-max-per-acc"
                       value="0" min="0" max="2000" step="1"
                       style="width:90px;font-size:0.8rem;padding:4px 8px;"
                       title="0 = без лимита (работает до спам-блока). Иначе акк остановится после N успешных отправок.">
                <span class="text-sm text-muted fs-70">
                    0 = до спам-блока
                </span>
            </div>

            <div class="d-flex align-center justify-between">
                <span class="text-sm text-muted">
                    <i class="bi bi-chat-dots"></i> <span id="spam-count">0</span> чатов
                </span>
                <div class="d-flex gap-2">
                    <button class="btn btn-outline btn-sm" onclick="exportSpamResults()" title="Выгрузка результатов: куда ушло / где не вышло (спам-блок, нет прав, флуд)">
                        <i class="bi bi-folder2-open"></i> Выгрузка
                    </button>
                    <button class="btn btn-outline btn-sm" onclick="retryFailedSpam()" title="Запустить ещё раз только по тем чатам, где не получилось">
                        <i class="bi bi-arrow-counterclockwise"></i> Повторить <i class="bi bi-x-circle text-danger"></i>
                    </button>
                    <button class="btn btn-accent btn-sm" onclick="startSpam()" id="btn-spam" disabled>
                        <i class="bi bi-send"></i> Старт
                    </button>
                </div>
            </div>

            <details class="ad-block">
                <summary><i class="bi bi-shield-check"></i> Защита аккаунта</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="spam-pre-spam-check"> <span>Перед стартом проверить аккаунты на спам-блок<span class="ad-hint">Заблокированные пропустим, чисто-живые пойдут в работу</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="spam-solve-captcha"> <span>Решать капчу в чатах<span class="ad-hint">Если в чате есть бот-капча (Shieldy и др.) — попробуем нажать «я не бот»</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="spam-keep-online"> <span>Держать аккаунт онлайн во время работы<span class="ad-hint">Аккаунт показывается онлайн в Telegram пока идёт задача</span></span></label>
                </div>
            </details>
        </div>
    </div>

    <!-- Тайминги рассылки по чатам -->
    <details class="card mb-3" style="padding:0;">
        <summary style="padding:14px 16px;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;font-weight:500;font-size:0.92rem;">
            <i class="bi bi-clock text-info"></i> Тайминги рассылки
            <span style="margin-left:auto;font-size:0.7rem;color:var(--text-muted);font-weight:normal;">авто-сохраняются</span>
        </summary>
        <div style="padding:0 16px 16px 16px;">
            <div class="info-box info-box--warning">
                Чем быстрее тайминги — тем выше шанс вечный спам-блок. Для новых акков ставьте паузы x2.
            </div>
            <div class="grid-3 mb-2">
                <div class="mb-2"><label class="form-label">Мин. пауза (сек)</label><input type="range" class="range-slider" id="s-spam-min" min="3" max="30" value="6"><span class="text-sm text-muted" id="v-spam-min">6</span></div>
                <div class="mb-2"><label class="form-label">Макс. пауза (сек)</label><input type="range" class="range-slider" id="s-spam-max" min="5" max="60" value="14"><span class="text-sm text-muted" id="v-spam-max">14</span></div>
                <div class="mb-2"><label class="form-label">До паузы (шт)</label><input type="range" class="range-slider" id="s-spam-burst" min="1" max="15" value="7"><span class="text-sm text-muted" id="v-spam-burst">7</span></div>
                <div class="mb-2"><label class="form-label">Длинная пауза мин (сек)</label><input type="range" class="range-slider" id="s-spam-burst-pause-min" min="30" max="600" value="120"><span class="text-sm text-muted" id="v-spam-burst-pause-min">120</span></div>
                <div class="mb-2"><label class="form-label">Длинная пауза макс (сек)</label><input type="range" class="range-slider" id="s-spam-burst-pause-max" min="60" max="1200" value="240"><span class="text-sm text-muted" id="v-spam-burst-pause-max">240</span></div>
            </div>
        </div>
    </details>
</div>

<!-- ═══ TAB: DM Рассылка ═══ -->
<div class="section" id="tab-dm">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-person-lines-fill" style="color:var(--pink);"></i> Рассылка в личные сообщения</div>
        <div class="card-body">
            <!-- Выбор аккаунта -->
            <div class="acc-selector mb-2" id="acc-selector-dm"></div>
            <div class="info-box">
                Рассылка в ЛС по списку. Вставьте @username или загрузите .txt файл. Паузы настраиваются в «Настройках → Тайминги → ЛС».
            </div>
            <div class="d-flex gap-2 align-center mb-1 flex-wrap">
                <label class="form-label m-0">Текст сообщения</label>
                <select class="form-control" id="dm-parse-mode" style="width:auto;font-size:0.72rem;padding:3px 8px;" title="Формат текста">
                    <option value="">Обычный</option>
                    <option value="md">Markdown</option>
                    <option value="html">HTML</option>
                </select>
            </div>
            <textarea class="form-control mb-2" id="dm-tpl" rows="3"
                placeholder="Напишите текст для личных сообщений"></textarea>

            <details class="ad-block">
                <summary><i class="bi bi-arrow-repeat"></i> Цикличная рассылка</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="dm-loop"> <span>Повторять задачу каждые N часов</span></label>
                    <div style="display:flex;gap:8px;align-items:center;margin-top:6px;font-size:0.74rem;color:var(--text-muted-strong);">
                        Каждые <input type="number" class="form-control" id="dm-loop-hours" value="6" min="1" max="168" style="width:80px;"> часов
                    </div>
                </div>
            </details>

            <label class="form-label">Кому отправить (@username, ID или ссылка t.me/)</label>
            <textarea class="form-control mb-2" id="dm-targets-input" rows="4"
                placeholder="@username1&#10;@username2&#10;t.me/user3&#10;123456789"></textarea>

            <div class="d-flex gap-2 mb-2 flex-wrap">
                <button class="btn btn-pink btn-sm" onclick="loadDmTargets()">
                    <i class="bi bi-search"></i> Загрузить
                </button>
                <label class="btn btn-outline btn-sm" style="cursor:pointer;margin:0;display:flex;align-items:center;">
                    <i class="bi bi-file-text"></i> .txt
                    <input type="file" accept=".txt" style="display:none" onchange="loadDmFile(this)">
                </label>
                <button class="btn btn-outline btn-sm" onclick="clearTargets('dm')">
                    <i class="bi bi-trash text-danger"></i>
                </button>
            </div>

            <div id="dm-trigger-warn" style="display:none;" class="mb-2 text-sm text-warning">
                <i class="bi bi-exclamation-triangle"></i> <span id="dm-trigger-words"></span>
            </div>

            <div class="d-flex align-center gap-2 mb-2 flex-wrap">
                <label class="form-label" style="margin:0;font-size:0.78rem;">Лимит сообщений с одного акка</label>
                <input type="number" class="form-control" id="dm-max-per-acc"
                       value="0" min="0" max="2000" step="1"
                       style="width:90px;font-size:0.8rem;padding:4px 8px;"
                       title="0 = без лимита (работает до спам-блока). Иначе акк остановится после N успешных ЛС.">
                <span class="text-sm text-muted fs-70">
                    0 = до спам-блока
                </span>
            </div>

            <div class="d-flex align-center justify-between">
                <span class="text-sm text-muted">
                    <i class="bi bi-people"></i> <span id="dm-count">0</span> юзеров
                </span>
                <div class="d-flex gap-2">
                    <button class="btn btn-outline btn-sm" onclick="exportDmResults()" title="Выгрузка результатов: кому дошло / кому не дошло (приватность/спам/не найден)">
                        <i class="bi bi-folder2-open"></i> Выгрузка
                    </button>
                    <button class="btn btn-outline btn-sm" onclick="retryFailedDm()" title="Запустить ещё раз только по тем юзерам, где не получилось">
                        <i class="bi bi-arrow-counterclockwise"></i> Повторить <i class="bi bi-x-circle text-danger"></i>
                    </button>
                    <button class="btn btn-pink btn-sm" onclick="startDm()" id="btn-dm" disabled>
                        <i class="bi bi-send"></i> Старт
                    </button>
                </div>
            </div>

            <details class="ad-block">
                <summary><i class="bi bi-shield-check"></i> Защита аккаунта</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="dm-pre-spam-check"> <span>Перед стартом проверить аккаунты на спам-блок<span class="ad-hint">Заблокированные пропустим</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="dm-keep-online"> <span>Держать аккаунт онлайн во время работы</span></label>
                    <label class="ad-check"><input type="checkbox" id="dm-view-profile"> <span>Смотреть профиль перед отправкой<span class="ad-hint">Имитация — открыть профиль цели как живой человек</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="dm-view-photo"> <span>Смотреть фото профиля<span class="ad-hint">Скачивает аватарку — выглядит как тап на фото</span></span></label>
                </div>
            </details>
        </div>
    </div>

    <!-- Тайминги ЛС -->
    <details class="card mb-3" style="padding:0;">
        <summary style="padding:14px 16px;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;font-weight:500;font-size:0.92rem;">
            <i class="bi bi-clock" style="color:var(--pink);"></i> Тайминги ЛС
            <span style="margin-left:auto;font-size:0.7rem;color:var(--text-muted);font-weight:normal;">авто-сохраняются</span>
        </summary>
        <div style="padding:0 16px 16px 16px;">
            <div class="info-box info-box--warning">
                В ЛС лимиты жёстче чем в чатах — Telegram быстро дает вечный спам-блок. Минимум 30+ сек паузы.
            </div>
            <div class="grid-3 mb-2">
                <div class="mb-2"><label class="form-label">Мин. пауза (сек)</label><input type="range" class="range-slider" id="s-dm-min" min="10" max="120" value="35"><span class="text-sm text-muted" id="v-dm-min">35</span></div>
                <div class="mb-2"><label class="form-label">Макс. пауза (сек)</label><input type="range" class="range-slider" id="s-dm-max" min="20" max="300" value="90"><span class="text-sm text-muted" id="v-dm-max">90</span></div>
                <div class="mb-2"><label class="form-label">До паузы (шт)</label><input type="range" class="range-slider" id="s-dm-burst" min="1" max="10" value="3"><span class="text-sm text-muted" id="v-dm-burst">3</span></div>
                <div class="mb-2"><label class="form-label">Длинная пауза мин (сек)</label><input type="range" class="range-slider" id="s-dm-burst-pause-min" min="60" max="900" value="300"><span class="text-sm text-muted" id="v-dm-burst-pause-min">300</span></div>
                <div class="mb-2"><label class="form-label">Длинная пауза макс (сек)</label><input type="range" class="range-slider" id="s-dm-burst-pause-max" min="120" max="1800" value="600"><span class="text-sm text-muted" id="v-dm-burst-pause-max">600</span></div>
            </div>
        </div>
    </details>
</div>

<!-- ═══ TAB: Подписка ═══ -->
<div class="section" id="tab-join">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-box-arrow-in-right text-success"></i> Вступление в чаты и группы</div>
        <div class="card-body">
            <!-- Выбор аккаунта -->
            <div class="acc-selector mb-2" id="acc-selector-join"></div>
            <div class="info-box info-box--success">
                Вступление в чаты по списку ссылок с одного аккаунта. Дубликаты уберутся автоматически.
                Для параллельной работы несколькими аккаунтами — используйте вкладку <b class="text-accent" >Мульти → Автоподписка</b>.
            </div>
            <label class="form-label">Список ссылок (по одной на строке)</label>
            <textarea class="form-control mb-2" id="join-links" rows="5"
                placeholder="https://t.me/channel1&#10;https://t.me/+invite_hash&#10;@username"></textarea>

            <div class="d-flex gap-2 mb-2 flex-wrap">
                <label class="btn btn-outline btn-sm" style="cursor:pointer;margin:0;display:flex;align-items:center;">
                    <i class="bi bi-file-text"></i> Загрузить .txt
                    <input type="file" accept=".txt" style="display:none" onchange="loadJoinFile(this)">
                </label>
                <button class="btn btn-outline btn-sm" onclick="document.getElementById('join-links').value='';">
                    <i class="bi bi-trash text-danger"></i>
                </button>
            </div>

            <div class="d-flex align-center gap-2 mb-2 flex-wrap">
                <label class="form-label" style="margin:0;font-size:0.78rem;">Лимит подписок с одного акка</label>
                <input type="number" class="form-control" id="join-max-per-acc"
                       value="0" min="0" max="2000" step="1"
                       style="width:90px;font-size:0.8rem;padding:4px 8px;"
                       title="0 = без лимита (работает до конца списка / квоты Telegram). Иначе акк остановится после N успешных подписок.">
                <span class="text-sm text-muted fs-70">
                    0 = без лимита
                </span>
            </div>

            <div class="d-flex align-center justify-between">
                <span class="text-sm text-muted">
                    <i class="bi bi-link-45deg"></i> <span id="join-count">0</span> ссылок
                </span>
                <div class="d-flex gap-2">
                    <button class="btn btn-outline btn-sm" onclick="exportJoinResults()" title="Выгрузка результатов последней подписки: отдельно подписавшиеся и отдельно ошибки — для перезапуска на другом аккаунте">
                        <i class="bi bi-folder2-open"></i> Выгрузка
                    </button>
                    <button class="btn btn-outline btn-sm" onclick="retryFailedJoin()" title="Подставить в список только те ссылки, где не вышло — и нажать Старт на выбранном аккаунте">
                        <i class="bi bi-arrow-counterclockwise"></i> Повторить <i class="bi bi-x-circle text-danger"></i>
                    </button>
                    <button class="btn btn-success btn-sm" onclick="startJoin()" id="btn-join" disabled>
                        <i class="bi bi-play-fill"></i> Старт
                    </button>
                </div>
            </div>

            <details class="ad-block">
                <summary><i class="bi bi-shield-check"></i> Защита аккаунта</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="join-pre-spam-check"> <span>Перед стартом проверить аккаунты на спам-блок</span></label>
                    <label class="ad-check"><input type="checkbox" id="join-solve-captcha"> <span>Решать капчу-боты в чатах<span class="ad-hint">Shieldy / MissRose / Combot — нажмём «я не бот»</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="join-keep-online"> <span>Держать аккаунт онлайн во время работы</span></label>
                </div>
            </details>
        </div>
    </div>

    <!-- Тайминги вкладки Подписка (раскрывашка) -->
    <details class="card mb-3" style="padding:0;">
        <summary style="padding:14px 16px;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;font-weight:500;font-size:0.92rem;">
            <i class="bi bi-clock text-success"></i> Тайминги подписки
            <span style="margin-left:auto;font-size:0.7rem;color:var(--text-muted);font-weight:normal;">авто-сохраняются</span>
        </summary>
        <div style="padding:0 16px 16px 16px;">
            <div class="info-box info-box--warning">
                Чем быстрее тайминги — тем выше шанс бана. Для новых акков ставьте паузы x2.
            </div>
            <div class="grid-3 mb-2">
                <div class="mb-2"><label class="form-label">Пауза между (сек)</label><input type="range" class="range-slider" id="s-join-interval" min="5" max="60" value="18"><span class="text-sm text-muted" id="v-join-interval">18</span></div>
                <div class="mb-2"><label class="form-label">Случайность ±сек</label><input type="range" class="range-slider" id="s-join-jitter" min="0" max="15" value="3"><span class="text-sm text-muted" id="v-join-jitter">3</span></div>
                <div class="mb-2"><label class="form-label">До паузы (шт)</label><input type="range" class="range-slider" id="s-join-max" min="3" max="20" value="10"><span class="text-sm text-muted" id="v-join-max">10</span></div>
                <div class="mb-2"><label class="form-label">Длинная пауза мин (сек)</label><input type="range" class="range-slider" id="s-join-break" min="60" max="600" value="180"><span class="text-sm text-muted" id="v-join-break">180</span></div>
                <div class="mb-2"><label class="form-label">Длинная пауза макс (сек)</label><input type="range" class="range-slider" id="s-join-break-max" min="120" max="1200" value="360"><span class="text-sm text-muted" id="v-join-break-max">360</span></div>
            </div>
        </div>
    </details>
</div>

<!-- ═══ TAB: Инвайтер (Раптор-style) ═══ -->
<div class="section" id="tab-invite">
    <div class="card mb-3" style="border-left:4px solid #f59e0b; background: rgba(245,158,11,0.07);">
        <div class="card-body" style="padding:12px 16px;">
            <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
                <i class="bi bi-exclamation-triangle" style="color:#f59e0b;"></i>
                <strong>Инвайт в режиме BETA</strong>
            </div>
            <div class="text-hint" style="font-size:0.8rem;line-height:1.45;">
                Модуль в активной доработке. В нестандартных чатах может не работать, иногда срабатывают ограничения Telegram, статистика приглашений может расходиться с фактом.
                Telegram активно борется с массовыми инвайтами — приватность получателей и PEER_FLOOD на отправителях возможны. Начинайте с малых пачек (5-10 инвайтов), проверяйте реакцию.
                Если что-то идёт не так — пиши в поддержку.
            </div>
        </div>
    </div>
    <div style="display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px;">
        <button class="btn btn-outline btn-sm" onclick="inviteShowSubtab('main')" id="inv-sub-main" style="font-weight:500;"><i class="bi bi-list-ul"></i> Список чатов <span id="inv-chats-cnt" class="badge ml-1">0</span></button>
        <button class="btn btn-outline btn-sm" onclick="inviteShowSubtab('userdb')" title="Кому уже отправляли инвайты — чтобы не звать повторно"><i class="bi bi-people"></i> История приглашённых <span id="inv-userdb-cnt" class="badge ml-1">0</span></button>
        <button class="btn btn-outline btn-sm" onclick="inviteShowSubtab('reports')"><i class="bi bi-clipboard-data"></i> Отчёты</button>
    </div>

    <!-- ── Sub-tab: Список чатов ── -->
    <div id="inv-tab-main">
        <div class="card mb-3">
            <div class="card-body">
                <div class="info-box info-box--warning" style="margin-bottom:14px;">
                    <i class="bi bi-info-circle" style="margin-right:4px;"></i>
                    <b>Важно:</b> Telegram требует чтобы аккаунт-инвайтер сам был участником чата — иначе invite-запрос отклоняется.
                    Поэтому акки сами вступают в группу при старте задачи.
                    После завершения они автоматически выходят (галка «Выходить после инвайта» в настройках). Если акк сожжёт лимит (вечный спам-блок) — он выходит сразу, не дожидаясь конца.
                </div>

                <label class="form-label">Режим работы <span class="tt" data-tip="Обычный — аккаунты-инвайтеры уже состоят в чате и приглашают сами по очереди. Через админку — главный аккаунт временно даёт остальным права администратора (на инвайт), потом снимает обратно. Полезно для свежих акков и для чатов где у обычных юзеров нет прав приглашать.">?</span></label>
                <select class="form-control mb-3" id="inv-mode" onchange="inviteToggleAdminBlock()">
                    <option value="direct">Обычный (без админки)</option>
                    <option value="via_admin">Через админку</option>
                </select>

                <label class="form-label">Целевой чат / канал <span class="tt" data-tip="Сюда инвайтим юзеров. Можно: @username (только для публичных чатов), числовой ID вида -1001234567890, или ссылку https://t.me/...">?</span></label>
                <input type="text" class="form-control mb-3" id="invite-chat"
                    placeholder="@chatname или -1001234567890 или https://t.me/chatname">

                <div id="inv-admin-block" style="display:none;">
                    <label class="form-label">Главный админ <span class="tt" data-tip="Аккаунт который выдаст права остальным. Должен УЖЕ быть в чате и иметь право «Добавлять администраторов». Достаточно одного на всю задачу.">?</span></label>
                    <input type="text" class="form-control mb-3" id="inv-main-admin"
                        placeholder="79xxxxxxxxx — номер акка-главного-админа">
                </div>

                <label class="form-label">Кого инвайтим (юзернеймы / user_id, по строке)</label>
                <textarea class="form-control mb-2" id="invite-targets" rows="6"
                    placeholder="@user1&#10;@user2&#10;123456789"></textarea>
                <div style="display:flex;align-items:center;gap:8px;margin-bottom:12px;">
                    <button type="button" class="btn btn-outline btn-sm fs-72" onclick="loadInviteFromParser()"><i class="bi bi-magic"></i> Из парсинга</button>
                    <button type="button" class="btn btn-outline btn-sm fs-72" onclick="document.getElementById('invite-targets-file').click()"><i class="bi bi-file-earmark-text"></i> Из .txt</button>
                    <button type="button" class="btn btn-outline btn-sm fs-72" onclick="loadInviteFromUserdb()"><i class="bi bi-database"></i> Из базы юзеров</button>
                    <input type="file" id="invite-targets-file" accept=".txt,.csv" style="display:none" onchange="onInviteTargetsFile(event)">
                    <span id="invite-targets-count" style="margin-left:auto;font-size:0.72rem;color:var(--text-muted);"></span>
                </div>

                <details class="mb-3" open>
                    <summary style="cursor:pointer;font-size:0.78rem;color:var(--accent-light);padding:6px 0;font-weight:500;">
                        <i class="bi bi-people-fill"></i> Аккаунты-инвайтеры
                    </summary>
                    <div style="padding:8px 0 0 0;">
                        <div class="d-flex align-center gap-2 mb-2">
                            <button type="button" class="btn btn-outline btn-sm" onclick="openInviteAccPopup()" id="btn-invite-acc-pick">
                                <i class="bi bi-people"></i> Выбрать аккаунты
                            </button>
                            <span class="text-sm text-muted" id="invite-acc-count">все живые</span>
                            <span class="tt" data-tip="Если ничего не выбрано — софт автоматически использует ВСЕХ живых акков (не мёртвые, не замороженные). Если выбрал несколько — будет идти только по ним. Кнопка «Сбросить» снимает выбор → опять всех живых.">?</span>
                            <button type="button" class="btn btn-outline btn-sm" style="margin-left:auto;font-size:0.66rem;" onclick="clearInviteAccs()">
                                <i class="bi bi-x"></i> Сбросить (=все живые)
                            </button>
                        </div>
                        <div id="invite-acc-list" class="d-flex flex-wrap gap-2 mb-2" style="display:none;"></div>
                        <div style="font-size:0.66rem;color:var(--text-muted);line-height:1.5;">
                            Если ничего не выбрано — софт распределит инвайт по всем живым аккам автоматически.
                        </div>
                    </div>
                </details>
            </div>
        </div>

        <!-- Тайминги -->
        <div class="card mb-3">
            <div class="card-header"><i class="bi bi-sliders"></i> Тайминги и лимиты</div>
            <div class="card-body">
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label fs-72">Пауза между инвайтами с акка (мин, сек) <span class="tt" data-tip="Минимальная пауза между двумя инвайтами с одного и того же акка. Софт делает random.uniform(min, max) каждый раз. Чем больше — тем меньше шанс вечный спам-блок. Минимум 30с рекомендую.">?</span></label>
                        <input type="number" class="form-control" id="invite-pause-min" value="30" min="5" max="600">
                    </div>
                    <div>
                        <label class="form-label fs-72">Пауза между инвайтами с акка (макс, сек) <span class="tt" data-tip="Максимальная пауза. Случайное значение между min и max делает поведение менее ботоподобным.">?</span></label>
                        <input type="number" class="form-control" id="invite-pause-max" value="70" min="6" max="900">
                    </div>
                </div>
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label fs-72">Лимит успешных инвайтов с акка подряд <span class="tt" data-tip="После N успешных инвайтов с этого акка софт переключается на следующий из пула, чтобы не сжечь его в вечный спам-блок. По умолчанию 20-40, для очень свежих акков понизь до 10.">?</span></label>
                        <input type="number" class="form-control" id="invite-max-per-acc" value="40" min="1" max="500">
                    </div>
                    <div>
                        <label class="form-label fs-72">Кулдаун после вечный спам-блок, мин <span class="tt" data-tip="Если акк получил вечный спам-блок (Telegram забанил инвайт), он помечается как сожжённый и не используется в течение N минут. По истечении автоматически возвращается в пул. По умолчанию 60 мин — это короткий бан, реальный иногда 24-72ч.">?</span></label>
                        <input type="number" class="form-control" id="invite-flood-cooldown" value="60" min="10" max="1440">
                    </div>
                </div>
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label fs-72">Ежечасный лимит на акк <span class="tt" data-tip="Максимум инвайтов с одного акка за последний час. Сильная защита от вечный спам-блок — софт сам считает скользящее окно за час и не использует акк если упёрся в лимит.">?</span></label>
                        <input type="number" class="form-control" id="invite-hourly-limit" value="40" min="1" max="200">
                    </div>
                    <div>
                        <label class="form-label fs-72">Стоп после N подряд privacy <span class="tt" data-tip="Если N подряд юзеров отказали по приватности — задача останавливается. Полезно если список плохой (все стоят с приватностью «не разрешать инвайты») — лучше остановить и попробовать другой источник юзеров. 0 = не останавливать.">?</span></label>
                        <input type="number" class="form-control" id="invite-stop-on-privacy" value="0" min="0" max="100">
                    </div>
                </div>
            </div>
        </div>

        <!-- Доп опции -->
        <div class="card mb-3">
            <div class="card-header cursor-pointer" onclick="this.nextElementSibling.style.display = this.nextElementSibling.style.display==='none'?'':'none'">
                <i class="bi bi-three-dots"></i> Дополнительные опции
            </div>
            <div class="card-body" style="display:none;">
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label fs-72">Сколько спамблоков пропускать с акка <span class="tt" data-tip="После N подряд вечный спам-блок от одного акка софт окончательно помечает его «сожжённым» и переносит в папку «После инвайта/Спамблок». Дефолт 1 = после первого вечный спам-блок переносим. Если поставить 3 — даём акку 3 шанса (но это редко имеет смысл, после первого спамблока он уже не работает).">?</span></label>
                        <input type="number" class="form-control" id="inv-spamblock-skip" value="1" min="0" max="100">
                    </div>
                    <div>
                        <label class="form-label fs-72">Лимит «списаний» на акк <span class="tt" data-tip="«Списание» = после инвайта юзер мгновенно вылетает из чата (Telegram отбрасывает за защиту от спама). Telegram отвечает софту что инвайт прошёл, но юзера в чате нет. Если N таких списаний на одном акке — пометить его как сжёгся. По умолчанию 999 = практически выкл.">?</span></label>
                        <input type="number" class="form-control" id="inv-chargeback" value="999" min="1" max="100000">
                    </div>
                </div>
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label fs-72">Лимит больших задержек в чате <span class="tt" data-tip="Когда акк получает большую флуд-блок (часы/сутки) — это часто значит что что-то не так с самим чатом (Telegram считает его проблемным). Если в одном чате накопилось N таких задержек, инвайт в этот чат останавливается. По умолчанию 9999 = выкл.">?</span></label>
                        <input type="number" class="form-control" id="inv-big-fw" value="9999" min="1" max="100000">
                    </div>
                    <div>
                        <label class="form-label fs-72">Пауза между вступлениями акков в чат (сек) <span class="tt" data-tip="Каждый аккаунт вступает в чат по очереди — пауза между вступлениями случайная в этом диапазоне. Растягиваем массовое вступление чтобы не словить флуд-блок и не показывать «волну» новых участников. По умолчанию 7-15 сек.">?</span></label>
                        <div class="row-gap-6" >
                            <input type="number" class="form-control flex-1" id="inv-delay-join-min" value="7" min="0" max="600">
                            <input type="number" class="form-control flex-1" id="inv-delay-join-max" value="15" min="1" max="900">
                        </div>
                    </div>
                </div>
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label fs-72">Пауза между выдачей прав и инвайтом (сек) <span class="tt" data-tip="В режиме «Через админку» — пауза между выдачей прав каждому акку. И во всех режимах — пауза после выдачи прав, перед началом приглашений. Слишком быстро — главный акк может схлопотать флуд-блок.">?</span></label>
                        <div class="row-gap-6" >
                            <input type="number" class="form-control flex-1" id="inv-delay-promote-min" value="5" min="0" max="600">
                            <input type="number" class="form-control flex-1" id="inv-delay-promote-max" value="12" min="1" max="900">
                        </div>
                    </div>
                    <div>
                        <label class="form-label fs-72">Помощников у главного админа <span class="tt" data-tip="Только в режиме «Через админку». Главный админ выдаст права на «добавление админов» сразу нескольким аккам — они станут помощниками и помогут раздавать права остальным. 1 = всех делает один главный (медленно для 30+ акков). 3-5 — оптимально. Больше — главный риск переутомить себя и схлопотать флуд-блок.">?</span></label>
                        <input type="number" class="form-control" id="inv-cascade-seed" value="3" min="1" max="20">
                    </div>
                </div>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:8px;">
                    <input type="checkbox" id="inv-set-spamblock" checked> Запоминать кому уже отправляли инвайты <span class="tt" data-tip="После инвайта юзер попадает в базу с пометкой (приглашён / приватность / спам-блок). В следующий раз инвайтер пропустит таких — не спам ему повторно.">?</span>
                </label>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:8px;">
                    <input type="checkbox" id="inv-skip-chatinvalid" checked> Пропускать ошибки прав в чате <span class="tt" data-tip="Если у акка нет прав в чате — Telegram возвращает ошибку. Включено: софт пропускает и идёт дальше. Выключено: останавливается на первой такой ошибке.">?</span>
                </label>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:8px;">
                    <input type="checkbox" id="inv-leave-worker" checked> Выходить из группы после инвайта (обычным аккам) <span class="tt" data-tip="После завершения задачи акки-инвайтеры покидают чат — чтобы их не было видно среди участников. Главного админа это не касается (у него отдельная настройка ниже).">?</span>
                </label>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:8px;">
                    <input type="checkbox" id="inv-leave-admin"> Выходить из группы после инвайта (главному админу) <span class="tt" data-tip="Применимо только в режиме «Через админку». Обычно главный админ остаётся в чате (он же и так твой основной), но если ты хочешь чтобы и он вышел — включи.">?</span>
                </label>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:8px;">
                    <input type="checkbox" id="inv-archive"> Добавлять группу в архив и отключать оповещения <span class="tt" data-tip="Применяется к каждому акку-инвайтеру: после инвайта чат уйдёт в архив и звуки в нём отключатся. Полезно если акк остаётся в чате — чтобы не получать оттуда уведомлений.">?</span>
                </label>
            </div>
        </div>

        <!-- Настройки прав -->
        <div class="card mb-3">
            <div class="card-header cursor-pointer" onclick="this.nextElementSibling.style.display = this.nextElementSibling.style.display==='none'?'':'none'">
                <i class="bi bi-shield-check"></i> Настройки прав (для инвайта через админку)
            </div>
            <div class="card-body" style="display:none;">
                <div style="background:var(--surface-info-bg);border:1px solid var(--surface-info-border);border-radius:6px;padding:10px;margin-bottom:12px;font-size:0.7rem;color:var(--text-muted);">
                    Это права, которые главный админ выдаёт инвайтящим аккам. Чтобы он мог их выдать — он должен сам ими обладать.
                </div>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:6px;"><input type="checkbox" id="inv-r-changeinfo"> Изменение профиля группы</label>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:6px;"><input type="checkbox" id="inv-r-deletemsg"> Удаление сообщений</label>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:6px;"><input type="checkbox" id="inv-r-banusers"> Блокировка участников</label>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:6px;"><input type="checkbox" id="inv-r-managecall"> Управление видеочатами</label>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:6px;"><input type="checkbox" id="inv-r-pin"> Закрепление сообщений</label>
                <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.78rem;margin-bottom:6px;"><input type="checkbox" id="inv-r-anon" checked> Анонимность</label>
            </div>
        </div>

        <!-- Папки -->
        <div class="card mb-3">
            <div class="card-header cursor-pointer" onclick="this.nextElementSibling.style.display = this.nextElementSibling.style.display==='none'?'':'none'">
                <i class="bi bi-folder2-open"></i> Настройки папок
            </div>
            <div class="card-body" style="display:none;">
                <label class="form-label fs-72">Папка для аккаунтов, получивших спамблок <span class="tt" data-tip="Куда переехать акку после получения вечный спам-блок (с учётом «Сколько спамблоков пропускать»). Папка создаётся автоматически если её нет. Путь относительно корня клиента, должен начинаться с «Аккаунты/».">?</span></label>
                <input type="text" class="form-control mb-2" id="inv-folder-spamblock" value="Аккаунты/После инвайта/Спамблок">
                <label class="form-label fs-72">Папка для слишком свежих аккаунтов <span class="tt" data-tip="В режиме «Через админку» Telegram не разрешает выдавать админ-права акку младше 24 часов. Такие аккаунты софт переместит сюда — пусть полежат сутки, потом попробуй снова.">?</span></label>
                <input type="text" class="form-control mb-2" id="inv-folder-fresh" value="Аккаунты/После инвайта/Слишком свежая сессия для изменения прав">
                <label class="form-label fs-72">Папка для аккаунтов, получивших лимит на поиск <span class="tt" data-tip="Telegram иногда временно запрещает аккам резолвить юзеров по @username (поиск). Если такое случилось — акк переезжает сюда, чтобы не тратить его в дальнейшем. Лимит сбрасывается через сутки-двое.">?</span></label>
                <input type="text" class="form-control mb-2" id="inv-folder-search" value="Аккаунты/После инвайта/Лимит на поиск по номерам">
            </div>
        </div>

        <details class="ad-block">
            <summary><i class="bi bi-shield-check"></i> Защита аккаунта</summary>
            <div class="ad-body">
                <label class="ad-check"><input type="checkbox" id="inv-pre-spam-check"> <span>Перед стартом проверить аккаунты на спам-блок<span class="ad-hint">Заблокированные пропустим</span></span></label>
                <label class="ad-check"><input type="checkbox" id="inv-solve-captcha"> <span>Решать капчу-боты в чатах<span class="ad-hint">Если в чате есть антиспам-бот — нажмём «я не бот»</span></span></label>
                <label class="ad-check"><input type="checkbox" id="inv-keep-online"> <span>Держать аккаунт онлайн во время работы</span></label>
                <label class="ad-check"><input type="checkbox" id="inv-view-profile"> <span>Смотреть профиль цели перед инвайтом<span class="ad-hint">Имитация — открыть профиль как живой человек</span></span></label>
                <label class="ad-check"><input type="checkbox" id="inv-view-photo"> <span>Смотреть фото профиля цели</span></label>
            </div>
        </details>

        <div class="d-flex gap-2 mb-3">
            <button class="btn btn-accent" onclick="startInvite()" id="btn-invite-start"><i class="bi bi-play-fill"></i> Старт инвайта</button>
            <button class="btn btn-outline" onclick="saveInviteSettings()"><i class="bi bi-save"></i> Сохранить настройки</button>
            <button class="btn btn-danger" onclick="stopInvite()" id="btn-invite-stop" style="display:none;"><i class="bi bi-stop-fill"></i> Стоп</button>
            <button class="btn btn-outline" onclick="exportInviteResults()" id="btn-invite-export" style="display:none;"><i class="bi bi-download"></i> Скачать отчёт</button>
        </div>

        <div id="invite-progress" style="display:none;">
            <div style="background:var(--surface-info-bg);border-radius:8px;padding:12px;margin-bottom:8px;">
                <div style="display:flex;justify-content:space-between;font-size:0.78rem;margin-bottom:6px;">
                    <span><b id="invite-status-label">—</b></span>
                    <span id="invite-elapsed" style="color:var(--text-muted);font-size:0.7rem;">—</span>
                </div>
                <div class="progress mb-2"><div class="progress-bar" id="invite-bar" style="width:0%;"></div></div>
                <div id="invite-counts" style="display:flex;gap:14px;flex-wrap:wrap;font-size:0.74rem;"></div>
            </div>
            <div id="invite-log" style="background:var(--bg-input);border:1px solid var(--border);border-radius:8px;padding:8px;font-family:monospace;font-size:0.72rem;max-height:240px;overflow-y:auto;line-height:1.5;"></div>
        </div>
    </div>

    <!-- ── Sub-tab: История приглашённых ── -->
    <div id="inv-tab-userdb" style="display:none;">
        <div class="card">
            <div class="card-body">
                <div class="info-box note-row">
                    Тут хранятся юзеры, кому уже отправляли инвайты — чтобы не приглашать их повторно. Каждый помечен тегом: <b>«приглашён»</b>, <b>«приватность»</b>, <b>«спам-блок»</b>. Можно импортировать готовый список из .txt и пометить вручную.
                </div>
                <div style="display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap;">
                    <input type="text" class="form-control" id="inv-userdb-search" placeholder="Поиск по @username или id" style="flex:1;min-width:160px;" oninput="loadInviteUserdb()">
                    <button class="btn btn-outline btn-sm" onclick="document.getElementById('inv-userdb-import').click()"><i class="bi bi-cloud-upload"></i> Импорт .txt</button>
                    <button class="btn btn-outline btn-sm" onclick="exportInviteUserdb()"><i class="bi bi-download"></i> Экспорт</button>
                    <button class="btn btn-danger btn-sm" onclick="clearInviteUserdb()"><i class="bi bi-trash"></i> Очистить</button>
                    <input type="file" id="inv-userdb-import" accept=".txt,.csv" style="display:none" onchange="onInviteUserdbImport(event)">
                </div>
                <div id="inv-userdb-list" style="max-height:520px;overflow-y:auto;font-family:monospace;font-size:0.78rem;background:var(--bg-input);border:1px solid var(--border);border-radius:8px;padding:8px;">Загрузка…</div>
            </div>
        </div>
    </div>

    <!-- ── Sub-tab: Отчёты ── -->
    <div id="inv-tab-reports" style="display:none;">
        <div class="card">
            <div class="card-body">
                <div id="inv-reports-list" style="font-size:0.85rem;">Запусков ещё не было — отчёты появятся после первого инвайта</div>
            </div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Мульти ═══ -->
<div class="section" id="tab-multi">
    <div class="card mb-3" style="border-left:4px solid #f59e0b; background: rgba(245,158,11,0.07);">
        <div class="card-body" style="padding:12px 16px;">
            <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
                <i class="bi bi-exclamation-triangle" style="color:#f59e0b;"></i>
                <strong>Мульти-режим в режиме BETA</strong>
            </div>
            <div class="text-hint" style="font-size:0.8rem;line-height:1.45;">
                Запускает несколько сценариев сразу пачкой аккаунтов. Если на одних и тех же акках одновременно идёт прогрев + рассылка + парсинг — Telegram видит ненормальную нагрузку и может банить.
                Рекомендуется: запускать на разных группах аккаунтов или разносить во времени. Тестируйте на маленьких пачках перед массовым запуском.
            </div>
        </div>
    </div>
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-people text-warning"></i> Работа с несколькими аккаунтами</div>
        <div class="card-body">
            <div class="info-box info-box--warning">
                Выберите акки и запустите задачу. Всё в одном месте — не нужно переходить в другие разделы.
            </div>
            <div class="d-flex align-center gap-2 mb-3">
                <button class="btn btn-outline btn-sm" onclick="openMultiAccPopup()" id="btn-multi-select">
                    <i class="bi bi-people"></i> Выбрать аккаунты
                </button>
                <span class="text-sm text-muted" id="multi-selected-count">0 выбрано</span>
            </div>
            <div id="multi-acc-list" class="d-flex flex-wrap gap-2 mb-3" style="display:none;"></div>

            <div class="d-flex gap-2 flex-wrap mb-3">
                <button class="btn btn-success btn-sm" onclick="multiShowSection('multi-join-section')" id="btn-multi-join" disabled>
                    <i class="bi bi-box-arrow-in-right"></i> Автоподписка
                </button>
                <button class="btn btn-info btn-sm" onclick="multiShowSection('multi-spam-section')" id="btn-multi-spam" disabled>
                    <i class="bi bi-megaphone"></i> Рассылка по чатам
                </button>
                <button class="btn btn-pink btn-sm" onclick="multiShowSection('multi-dm-section')" id="btn-multi-dm" disabled>
                    <i class="bi bi-person-lines-fill"></i> Рассылка в ЛС
                </button>
            </div>

            <!-- Тайминги Multi (общие со своими модулями — read-only превью) -->
            <details class="card mb-3" style="padding:0;background:var(--bg-card);border-color:var(--border);">
                <summary style="padding:12px 16px;cursor:pointer;list-style:none;display:flex;align-items:center;gap:8px;font-weight:500;font-size:0.88rem;">
                    <i class="bi bi-clock text-accent"></i> Тайминги Multi-режима
                    <span style="margin-left:auto;font-size:0.7rem;color:var(--text-muted);font-weight:normal;">общие с модулями</span>
                </summary>
                <div style="padding:0 16px 14px 16px;">
                    <div class="info-box">
                        <i class="bi bi-info-circle text-accent"></i> Multi-режим использует те же тайминги, что обычные модули. Если меняешь паузу здесь — она применится и в одиночном режиме.
                    </div>
                    <div class="grid-3" style="gap:8px;">
                        <div style="background:var(--bg-input);border:1px solid var(--surface-success-border);border-radius:8px;padding:10px;">
                            <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;">
                                <span style="font-size:0.78rem;font-weight:500;"><i class="bi bi-box-arrow-in-right text-success"></i> Подписка</span>
                                <button class="btn btn-outline btn-sm" style="padding:1px 6px;font-size:0.7rem;" title="Настроить тайминги модуля" onclick="showTab('join');setTimeout(function(){var d=document.querySelector('#tab-join details');if(d)d.open=true;d.scrollIntoView({behavior:'smooth'});},100);"><i class="bi bi-gear"></i></button>
                            </div>
                            <div style="font-size:0.7rem;color:var(--text-muted);line-height:1.6;" id="multi-tm-join">
                                Пауза: <span id="mtj-i">—</span>±<span id="mtj-j">—</span>с<br>
                                До паузы: <span id="mtj-m">—</span> шт<br>
                                Длинная: <span id="mtj-b">—</span>-<span id="mtj-bm">—</span>с
                            </div>
                        </div>
                        <div style="background:var(--bg-input);border:1px solid var(--surface-info-border);border-radius:8px;padding:10px;">
                            <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;">
                                <span style="font-size:0.78rem;font-weight:500;"><i class="bi bi-megaphone text-info"></i> Рассылка</span>
                                <button class="btn btn-outline btn-sm" style="padding:1px 6px;font-size:0.7rem;" title="Настроить тайминги модуля" onclick="showTab('spam');setTimeout(function(){var d=document.querySelector('#tab-spam details');if(d)d.open=true;d.scrollIntoView({behavior:'smooth'});},100);"><i class="bi bi-gear"></i></button>
                            </div>
                            <div style="font-size:0.7rem;color:var(--text-muted);line-height:1.6;" id="multi-tm-spam">
                                Пауза: <span id="mts-mn">—</span>-<span id="mts-mx">—</span>с<br>
                                До паузы: <span id="mts-b">—</span> шт<br>
                                Длинная: <span id="mts-bp">—</span>-<span id="mts-bpm">—</span>с
                            </div>
                        </div>
                        <div style="background:var(--bg-input);border:1px solid var(--border-accent);border-radius:8px;padding:10px;">
                            <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;">
                                <span style="font-size:0.78rem;font-weight:500;"><i class="bi bi-person-lines-fill" style="color:var(--pink);"></i> ЛС</span>
                                <button class="btn btn-outline btn-sm" style="padding:1px 6px;font-size:0.7rem;" title="Настроить тайминги модуля" onclick="showTab('dm');setTimeout(function(){var d=document.querySelector('#tab-dm details');if(d)d.open=true;d.scrollIntoView({behavior:'smooth'});},100);"><i class="bi bi-gear"></i></button>
                            </div>
                            <div style="font-size:0.7rem;color:var(--text-muted);line-height:1.6;" id="multi-tm-dm">
                                Пауза: <span id="mtd-mn">—</span>-<span id="mtd-mx">—</span>с<br>
                                До паузы: <span id="mtd-b">—</span> шт<br>
                                Длинная: <span id="mtd-bp">—</span>-<span id="mtd-bpm">—</span>с
                            </div>
                        </div>
                    </div>
                </div>
            </details>

            <!-- Секция: Автоподписка -->
            <div id="multi-join-section" style="display:none;" class="card mb-2" style="border-color:var(--success);">
                <div class="card-body p-4">
                    <label class="form-label">Ссылки на чаты (по одной на строке)</label>
                    <textarea class="form-control mb-2" id="multi-join-links" rows="4"
                        placeholder="https://t.me/channel1&#10;https://t.me/+invite_hash&#10;@username"></textarea>
                    <button class="btn btn-success btn-sm" onclick="multiJoin()">
                        <i class="bi bi-play-fill"></i> Запустить автоподписку
                    </button>
                </div>
            </div>

            <!-- Секция: Рассылка по чатам -->
            <div id="multi-spam-section" style="display:none;" class="card mb-2">
                <div class="card-body p-4">
                    <label class="form-label">Текст рассылки</label>
                    <textarea class="form-control mb-2" id="multi-spam-text" rows="3"
                        placeholder="Текст сообщения. {Привет|Здравствуйте} для вариантов"></textarea>
                    <button class="btn btn-info btn-sm" onclick="multiSpam()">
                        <i class="bi bi-send"></i> Запустить рассылку
                    </button>
                </div>
            </div>

            <!-- Секция: Рассылка в ЛС -->
            <div id="multi-dm-section" style="display:none;" class="card mb-2">
                <div class="card-body p-4">
                    <label class="form-label">Текст сообщения</label>
                    <textarea class="form-control mb-2" id="multi-dm-text" rows="3"
                        placeholder="Текст для личных сообщений"></textarea>
                    <label class="form-label">Кому (@username, по одному на строке)</label>
                    <textarea class="form-control mb-2" id="multi-dm-targets" rows="3"
                        placeholder="@username1&#10;@username2"></textarea>
                    <button class="btn btn-pink btn-sm" onclick="multiDm()">
                        <i class="bi bi-send"></i> Запустить рассылку в ЛС
                    </button>
                </div>
            </div>

            <details class="ad-block">
                <summary><i class="bi bi-shield-check"></i> Защита аккаунтов (для всех 3 режимов мульти)</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="multi-pre-spam-check"> <span>Перед стартом проверить аккаунты на спам-блок</span></label>
                    <label class="ad-check"><input type="checkbox" id="multi-solve-captcha"> <span>Решать капчу-боты в чатах</span></label>
                    <label class="ad-check"><input type="checkbox" id="multi-keep-online"> <span>Держать аккаунты онлайн во время работы</span></label>
                </div>
            </details>
        </div>
    </div>
</div>

<!-- ═══ TAB: Аккаунты ═══ -->
<div class="section" id="tab-accounts">
    <!-- Добавить аккаунт — компактная секция сверху -->
    <div class="card mb-3">
        <div class="card-header cursor-pointer" onclick="toggleAccAdd()">
            <i class="bi bi-plus-circle text-success"></i> Добавить аккаунт
            <i class="bi bi-chevron-down text-muted" style="margin-left:auto;font-size:0.7rem;transition:transform .2s;" id="acc-add-chevron"></i>
        </div>
        <div class="card-body" id="acc-add-body" style="display:none;padding:14px 20px;">
            <div class="grid-3" style="gap:20px;">
                <!-- Способ 1: По номеру -->
                <div>
                    <div style="font-size:0.7rem;color:var(--text-muted);font-weight:600;text-transform:uppercase;margin-bottom:6px;">По номеру телефона</div>
                    <div id="acc-connect-form">
                        <input type="tel" class="form-control mb-2" id="acc-phone" placeholder="+998901234567">
                        <button class="btn btn-accent btn-sm" onclick="sendCode()">
                            <i class="bi bi-send"></i> Отправить код
                        </button>
                    </div>
                    <div id="acc-code-form" style="display:none;">
                        <label class="form-label">Код из Telegram</label>
                        <input type="text" class="form-control mb-2" id="acc-code" placeholder="12345" maxlength="6">
                        <button class="btn btn-accent btn-sm" onclick="verifyCode()">
                            <i class="bi bi-check2"></i> Подтвердить
                        </button>
                    </div>
                </div>
                <!-- Способ 2: Из папки -->
                <div>
                    <div style="font-size:0.7rem;color:var(--text-muted);font-weight:600;text-transform:uppercase;margin-bottom:6px;">Из папки</div>
                    <p style="font-size:0.72rem;color:var(--text-muted);margin-bottom:8px;">Закиньте <b>.session</b> + <b>.json</b> в папку и нажмите обновить</p>
                    <div class="row-gap-6" >
                        <button class="btn btn-outline btn-sm" onclick="openAccountsFolder()">
                            <i class="bi bi-folder2-open"></i> Открыть папку
                        </button>
                        <button class="btn btn-outline btn-sm" onclick="syncAndReload()">
                            <i class="bi bi-arrow-clockwise"></i> Обновить
                        </button>
                    </div>
                    <div class="text-xs text-muted mt-2">Закиньте в <code>Аккаунты/В работе/</code></div>
                </div>
            </div>
            <div id="upload-progress" style="display:none;margin-top:8px;">
                <div class="progress"><div class="progress-bar" id="upload-bar" style="width:0%;"></div></div>
                <div class="text-xs text-muted mt-2" id="upload-status">Загрузка...</div>
            </div>
        </div>
    </div>

    <!-- Статистика аккаунтов (динамические фильтры) -->
    <div class="acc-stats-row mb-3 flex-wrap" id="acc-stats-row"></div>

    <!-- Панель действий -->
    <div class="d-flex align-center justify-between mb-2" style="gap:8px;flex-wrap:wrap;">
        <div class="d-flex gap-2 align-center flex-wrap">
            <button class="btn btn-outline btn-sm" onclick="checkAllSpam()" id="btn-check-all-spam" title="Если в таблице есть отмеченные галками — проверит только их. Иначе проверит все аккаунты.">
                <i class="bi bi-shield-check"></i> Проверить спам
            </button>
            <button class="btn btn-outline btn-sm" onclick="syncAndReload()" title="Синхронизировать с папкой">
                <i class="bi bi-arrow-clockwise"></i>
            </button>
            <button class="btn btn-outline btn-sm" onclick="openAccountsFolder()" title="Открыть папку аккаунтов">
                <i class="bi bi-folder2-open"></i> Папка
            </button>
            <button class="btn btn-outline btn-sm" onclick="moveSelectedToFolder()" title="Переместить отмеченные аккаунты в другую папку">
                <i class="bi bi-box-arrow-right"></i> Перенести
            </button>
            <button class="btn btn-outline btn-sm" id="btn-delete-selected" onclick="deleteAccountsBulk()" style="display:none;color:var(--danger);border-color:rgba(201,56,56,0.35);" title="Удалить отмеченные галками аккаунты">
                <i class="bi bi-trash"></i> Удалить выделенные <span id="btn-delete-selected-count" class="badge-soft badge-soft--danger ml-1">0</span>
            </button>
            <input type="text" class="form-control" id="acc-search" placeholder="Поиск..." style="width:180px;padding:5px 10px;font-size:0.75rem;" oninput="filterAccountsTable()">
            <select id="acc-tag-filter" class="form-control" style="width:140px;padding:5px 10px;font-size:0.75rem;" onchange="filterAccountsTable()">
                <option value="">Все теги</option>
            </select>
        </div>
        <span class="text-xs text-muted">Показано: <span id="acc-shown">0</span> / <span id="acc-total">0</span></span>
    </div>

    <!-- Таблица аккаунтов -->
    <div class="card">
        <div class="card-body" style="padding:0;overflow-x:auto;">
            <table class="table" id="accounts-table">
                <thead>
                    <tr>
                        <th style="width:30px;"><input type="checkbox" id="acc-check-all" onchange="toggleAllAccChecks(this)" ></th>
                        <th style="width:30px;">#</th>
                        <th>Телефон</th>
                        <th>Гео</th>
                        <th>Статус</th>
                        <th>Отлежка</th>
                        <th>Имя</th>
                        <th>Теги</th>
                        <th style="text-align:right;">Действия</th>
                    </tr>
                </thead>
                <tbody id="accounts-list">
                    <tr><td colspan="9" style="text-align:center;padding:32px;color:var(--text-muted);">
                        <i class="bi bi-inbox" style="font-size:1.5rem;display:block;margin-bottom:8px;"></i>Нет аккаунтов
                    </td></tr>
                </tbody>
            </table>
        </div>
    </div>
</div>

<!-- ═══ TAB: Прокси ═══ -->
<div class="section" id="tab-proxy">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-shield-lock" style="color:#06b6d4;"></i> Прокси</div>
        <div class="card-body">
            <div class="info-box">
                Без прокси аккаунты могут быть заблокированы. Добавьте прокси и нажмите проверить — тип определится автоматически.
            </div>

            <!-- Настройки прокси -->
            <div class="d-flex gap-3 mb-3" style="align-items:flex-end;">
                <div class="flex-1" >
                    <label class="form-label">Тип</label>
                    <div style="background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 12px;font-size:0.78rem;color:var(--success);">
                        <i class="bi bi-magic"></i> Автоопределение
                    </div>
                    <input type="hidden" id="proxy-type-default" value="auto">
                </div>
                <div class="flex-1" >
                    <label class="form-label">Порядок</label>
                    <select class="form-control" id="proxy-order">
                        <option value="random">Случайный</option>
                        <option value="sequential">По порядку</option>
                    </select>
                </div>
            </div>

            <!-- Список прокси -->
            <label class="form-label">Список прокси (по одному на строке)</label>
            <div style="background:var(--bg-input);border:1px solid var(--border);border-radius:8px;padding:4px;margin-bottom:8px;">
                <textarea class="form-control" id="proxy-input" rows="5" style="border:none;background:transparent;font-family:monospace;font-size:0.8rem;"
                    placeholder="ip:port&#10;ip:port:login:password&#10;login:password@ip:port&#10;socks5://ip:port:login:password"></textarea>
            </div>
            <div style="font-size:0.65rem;color:var(--text-muted);margin-bottom:8px;">
                Допустимые форматы записи:<br>
                <code>ip:port</code><br>
                <code>ip:port:логин:пароль</code><br>
                <code>логин:пароль@ip:port</code>
            </div>
            <div class="d-flex gap-2 mb-3" style="align-items:center;flex-wrap:wrap;">
                <button class="btn btn-accent btn-sm" onclick="addProxies()"><i class="bi bi-plus"></i> Добавить</button>
                <button class="btn btn-outline btn-sm" onclick="document.getElementById('proxy-input').value='';">
                    <i class="bi bi-trash text-danger"></i>
                </button>
                <span class="text-sm text-muted self-center" id="proxy-count-label"></span>
                <button class="btn btn-success btn-sm" onclick="checkAllProxies()"
                        style="margin-left:auto;font-weight:700;"
                        title="Проверить все прокси: живые/мёртвые + реальная страна">
                    <i class="bi bi-check2-all"></i> Проверить все прокси
                </button>
            </div>

            <!-- Массовая привязка к аккаунтам -->
            <div class="card mb-3" style="background:var(--bg-card-hover);">
                <div class="card-header" style="background:transparent;"><i class="bi bi-link-45deg text-info"></i> Массовая привязка к аккаунтам</div>
                <div class="card-body" style="padding:12px 16px;">
                    <div style="font-size:0.74rem;color:var(--text-muted-strong);margin-bottom:8px;line-height:1.5;">
                        Распределяет прокси из списка между аккаунтами. Один прокси можно привязать к нескольким акким (1:N).
                    </div>
                    <div class="grid-2 mb-2">
                        <div>
                            <label class="form-label">Кому привязать</label>
                            <select class="form-control" id="bulk-bind-target">
                                <option value="all_no_proxy">Всем без прокси</option>
                                <option value="all">Всем аккаунтам</option>
                                <option value="alive">Только живым (без dead/frozen)</option>
                            </select>
                        </div>
                        <div>
                            <label class="form-label">Порядок раздачи</label>
                            <select class="form-control" id="bulk-bind-mode">
                                <option value="round_robin">Round-robin (по очереди)</option>
                                <option value="random">Случайно</option>
                                <option value="one_each">1 прокси = 1 акк (если хватает)</option>
                            </select>
                        </div>
                    </div>
                    <div class="d-flex gap-2 align-center" style="margin-top:6px;">
                        <button class="btn btn-info btn-sm" onclick="bulkBindProxies()">
                            <i class="bi bi-link-45deg"></i> Привязать
                        </button>
                        <button class="btn btn-outline btn-sm" onclick="bulkUnbindProxies()" title="Снять прокси со ВСЕХ аккаунтов">
                            <i class="bi bi-link-45deg" style="text-decoration:line-through;"></i> Отвязать всё
                        </button>
                        <span class="text-sm text-muted" id="bulk-bind-result" style="margin-left:auto;align-self:center;"></span>
                    </div>
                </div>
            </div>
            <div id="proxy-list"></div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Шаблоны ═══ -->
<div class="section" id="tab-templates">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-file-text text-orange"></i> Готовые тексты для рассылки</div>
        <div class="card-body">
            <div class="d-flex gap-2 mb-3 flex-wrap">
                <button class="btn btn-outline btn-sm active" onclick="filterTemplates('all')">Все</button>
                <button class="btn btn-outline btn-sm" onclick="filterTemplates('work')">Работа</button>
                <button class="btn btn-outline btn-sm" onclick="filterTemplates('custom')">Мои</button>
            </div>
            <div id="templates-list"></div>
            <button class="btn btn-accent btn-sm mt-3" onclick="createTemplate()">
                <i class="bi bi-plus"></i> Создать шаблон
            </button>
            <div id="tpl-create-area"></div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Парсинг юзеров ═══ -->
<div class="section" id="tab-parser">
    <!-- Аккаунт для парсинга -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-search" style="color:#f472b6;"></i> Парсинг</div>
        <div class="card-body">
            <div class="acc-selector mb-3" id="acc-selector-parser"></div>

            <!-- Режим парсинга -->
            <label class="form-label">Режим парсинга</label>
            <div class="parser-modes mb-3" style="grid-template-columns:repeat(6,1fr);">
                <button class="parser-mode-btn active" id="pm-members" onclick="setParserMode('members')">
                    <i class="bi bi-people"></i>
                    <span>Участники</span>
                    <small>Из списка чата</small>
                </button>
                <button class="parser-mode-btn" id="pm-writers" onclick="setParserMode('writers')">
                    <i class="bi bi-chat-text"></i>
                    <span>Писавшие</span>
                    <small>Кто писал в чат</small>
                </button>
                <button class="parser-mode-btn" id="pm-links" onclick="setParserMode('links')">
                    <i class="bi bi-link-45deg"></i>
                    <span>Ссылки</span>
                    <small>t.me из сообщений</small>
                </button>
                <button class="parser-mode-btn" id="pm-keyword" onclick="setParserMode('keyword')">
                    <i class="bi bi-search"></i>
                    <span>По словам</span>
                    <small>Поиск в чатах</small>
                </button>
                <button class="parser-mode-btn" id="pm-search" onclick="setParserMode('search')">
                    <i class="bi bi-globe"></i>
                    <span>Глоб. поиск</span>
                    <small>Найти чаты</small>
                </button>
                <button class="parser-mode-btn" id="pm-user_chats" onclick="setParserMode('user_chats')">
                    <i class="bi bi-person-check"></i>
                    <span>Чаты юзера</span>
                    <small>Где состоит юзер</small>
                </button>
            </div>

            <!-- Блок ввода юзернейма (виден только для режима 'user_chats') -->
            <div id="parser-user-row" class="mb-3" style="display:none;">
                <label class="form-label">Юзернейм или ID</label>
                <input type="text" class="form-control" id="parser-target-user" placeholder="@username или 1234567 или https://t.me/username">
                <div class="info-box mt-3" style="color:#93c5fd;">
                    <i class="bi bi-info-circle" style="margin-right:6px;"></i>
                    <b>Как работает:</b> ищет чаты и каналы, в которых состоит указанный пользователь. Telegram API не отдаёт полный список чатов чужого юзера — доступны только те, где есть <b>пересечение с вашими аккаунтами</b>.
                    <br><br>
                    <b>Совет:</b> чем больше ваших аккаунтов задействовано, тем шире охват. Ниже включена галка «Прогнать по всем аккаунтам» — оставь её.
                </div>
                <label class="d-flex align-center gap-2 mt-2" style="cursor:pointer;font-size:0.8rem;">
                    <input type="checkbox" class="form-check-input" id="parser-user-all-accs" checked>
                    Прогнать по всем аккаунтам (рекомендуется — покрытие в разы больше)
                </label>
            </div>

            <!-- Выбор чатов -->
            <div id="parser-chat-row" class="mb-3">
                <!-- Кнопка «Сканировать все чаты» — только для режима «Ссылки».
                     Для «Участники»/«Писавшие» это бессмысленно: нужен конкретный чат,
                     иначе прогон по всем группам даст миллионы записей и флуд-блок за 2 минуты. -->
                <div id="parser-scan-all-wrap" style="display:none;">
                    <button class="btn btn-primary" onclick="scanAllChatsOneClick()" id="btn-scan-all-chats"
                            style="width:100%;padding:12px 16px;margin-bottom:10px;font-size:0.95rem;font-weight:600;background:linear-gradient(135deg,#34d399 0%,#10b981 100%);border:none;">
                        <i class="bi bi-search" style="margin-right:6px;"></i> Сканировать все чаты
                    </button>
                    <div style="font-size:0.68rem;color:var(--text-muted);margin-bottom:10px;text-align:center;">
                        — или выберите конкретные чаты ниже —
                    </div>
                </div>
                <div class="d-flex align-center justify-between mb-2">
                    <label class="form-label m-0">Чаты для парсинга</label>
                    <div class="d-flex gap-2">
                        <button class="btn btn-outline btn-sm" onclick="toggleParserInputMode()" id="btn-parser-input-mode" style="font-size:0.7rem;padding:2px 8px;">
                            <i class="bi bi-link-45deg"></i> Ввести ссылки
                        </button>
                        <button class="btn btn-outline btn-sm" onclick="loadParserChats(true)" title="Обновить список чатов" style="padding:2px 8px;">
                            <i class="bi bi-arrow-clockwise"></i>
                        </button>
                    </div>
                </div>
                <div id="parser-all-chats-banner" style="display:none;margin-bottom:8px;padding:6px 10px;background:rgba(52,211,153,0.08);border:1px solid rgba(52,211,153,0.3);border-radius:6px;font-size:0.72rem;color:var(--success);">
                    <i class="bi bi-check-circle"></i> Парсим <b>все</b> чаты/каналы аккаунта. Выбор ниже игнорируется.
                </div>
                <!-- Режим 1: выбор из списка (мульти) -->
                <div id="parser-chat-select-mode">
                    <div class="row-flex gap-2 mb-2">
                        <i class="bi bi-search text-muted"></i>
                        <input type="search" class="form-control flex-1 fs-78" id="parser-chat-search"
                               placeholder="Поиск чата по названию..." oninput="filterParserChats()" autocomplete="off">
                    </div>
                    <select class="form-control flex-1" id="parser-chat">
                        <option value="">Загрузите чаты...</option>
                    </select>
                    <div id="parser-selected-chats" style="margin-top:8px;display:flex;flex-wrap:wrap;gap:4px;"></div>
                    <button class="btn btn-outline btn-sm" onclick="addParserChat()" style="margin-top:6px;font-size:0.7rem;padding:2px 10px;">
                        <i class="bi bi-plus"></i> Добавить чат
                    </button>
                </div>
                <!-- Режим 2: ввод ссылок (акк зайдёт и спарсит) -->
                <div id="parser-links-mode" style="display:none;">
                    <textarea class="form-control" id="parser-chat-links" rows="4" placeholder="Вставьте ссылки на чаты/каналы (по одной на строке):&#10;https://t.me/chatname&#10;https://t.me/+invitehash&#10;@username"></textarea>
                    <div style="font-size:0.68rem;color:var(--text-muted);margin-top:4px;">Аккаунт зайдёт в чат и выполнит парсинг. Поддерживаются: t.me ссылки, @username, инвайт-хеши</div>
                </div>
                <!-- Превью выбранного чата -->
                <div id="parser-chat-preview" class="parser-chat-preview" style="display:none;"></div>
            </div>

            <!-- Описания режимов -->
            <div id="parser-mode-desc" class="info-box" style="padding:var(--space-3) var(--space-4);"></div>

            <!-- Настройки для юзеров (members/writers) -->
            <div id="parser-opts-users" class="mb-3">
                <!-- Быстрые пресеты активности -->
                <label class="form-label fs-72">Быстрый выбор активности</label>
                <div class="d-flex flex-wrap gap-1 mb-2" id="parser-activity-presets">
                    <button type="button" class="btn btn-outline btn-sm btn-preset" onclick="applyActivityPreset('online')"><i class="bi bi-circle-fill" style="color:var(--success);font-size:0.55rem;vertical-align:middle;"></i> Онлайн</button>
                    <button type="button" class="btn btn-outline btn-sm btn-preset" onclick="applyActivityPreset('hours', 1)">1ч</button>
                    <button type="button" class="btn btn-outline btn-sm btn-preset" onclick="applyActivityPreset('hours', 3)">3ч</button>
                    <button type="button" class="btn btn-outline btn-sm btn-preset" onclick="applyActivityPreset('hours', 24)">24ч</button>
                    <button type="button" class="btn btn-outline btn-sm btn-preset" onclick="applyActivityPreset('hours', 72)">3д</button>
                    <button type="button" class="btn btn-outline btn-sm btn-preset" onclick="applyActivityPreset('hours', 168)">7д</button>
                    <button type="button" class="btn btn-outline btn-sm btn-preset" onclick="applyActivityPreset('hours', 720)">30д</button>
                    <button type="button" class="btn btn-outline btn-sm btn-preset" onclick="applyActivityPreset('all')"><i class="bi bi-list-ul"></i> Все</button>
                </div>
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label">Фильтр активности</label>
                        <select class="form-control" id="parser-filter">
                            <option value="all">Все с юзернеймом</option>
                            <option value="online">Только онлайн</option>
                            <option value="hours">Были за N часов</option>
                        </select>
                    </div>
                    <div>
                        <label class="form-label">Часов</label>
                        <input type="number" class="form-control" id="parser-hours" value="24" min="1" max="720">
                    </div>
                </div>
                <!-- Min. сообщений + период — ТОЛЬКО для режима «Писавшие» -->
                <div class="grid-2 mb-2" id="parser-writers-extra" style="display:none;">
                    <div>
                        <label class="form-label">Минимум сообщений от юзера</label>
                        <select class="form-control" id="parser-min-messages">
                            <option value="1">≥1 сообщ</option>
                            <option value="2">≥2 сообщ</option>
                            <option value="3">≥3 сообщ</option>
                            <option value="5">≥5 сообщ</option>
                            <option value="10">≥10 сообщ</option>
                            <option value="25">≥25 сообщ</option>
                        </select>
                    </div>
                    <div>
                        <label class="form-label">Период сканирования</label>
                        <select class="form-control" id="parser-period-preset" onchange="applyPeriodPreset(this.value)">
                            <option value="0">Вся история</option>
                            <option value="1">Последний 1 день</option>
                            <option value="3">Последние 3 дня</option>
                            <option value="7" selected>Последние 7 дней</option>
                            <option value="14">Последние 14 дней</option>
                            <option value="30">Последние 30 дней</option>
                        </select>
                    </div>
                </div>
                <div class="d-flex gap-3 flex-wrap">
                    <label class="opt-row" >
                        <input type="checkbox" id="parser-skip-admins"> Пропустить админов
                    </label>
                    <label class="opt-row" >
                        <input type="checkbox" id="parser-strict"> Строгая активность (без «был недавно»)
                    </label>
                </div>

                <!-- Расширенные фильтры -->
                <details class="ad-block mt-2">
                    <summary><i class="bi bi-funnel"></i> Расширенные фильтры</summary>
                    <div class="ad-body">
                        <div class="grid-2 mb-2" style="margin-top:6px;">
                            <div>
                                <label class="form-label">Что сохранять</label>
                                <select class="form-control" id="parser-save-mode">
                                    <option value="usernames">Только юзернеймы</option>
                                    <option value="usernames_ids">Юзернеймы + ID</option>
                                </select>
                            </div>
                            <div>
                                <label class="form-label">Кого парсить (роли)</label>
                                <select class="form-control" id="parser-roles">
                                    <option value="users">Только обычные пользователи</option>
                                    <option value="admins">Только админы</option>
                                    <option value="all">Все</option>
                                </select>
                            </div>
                        </div>
                        <div class="grid-2 mb-2">
                            <div>
                                <label class="form-label">Доступ к ЛС</label>
                                <select class="form-control" id="parser-dm-access">
                                    <option value="all">Парсить всех</option>
                                    <option value="open">Только с открытыми ЛС</option>
                                    <option value="closed">Только с закрытыми ЛС</option>
                                </select>
                            </div>
                            <div>
                                <label class="form-label">Минимум часов с последнего онлайна</label>
                                <input type="number" class="form-control" id="parser-online-min" min="0" max="999999" value="0">
                            </div>
                        </div>
                        <div class="grid-2 mb-2">
                            <div>
                                <label class="form-label">Максимум часов с последнего онлайна</label>
                                <input type="number" class="form-control" id="parser-online-max" min="0" max="999999" value="99999">
                            </div>
                            <div></div>
                        </div>
                        <div class="d-flex gap-3 flex-wrap mt-2">
                            <label class="opt-row" >
                                <input type="checkbox" id="parser-only-avatar"> Только с аватарками
                            </label>
                            <label class="opt-row" >
                                <input type="checkbox" id="parser-only-premium"> Только с премиумом
                            </label>
                            <label class="opt-row" >
                                <input type="checkbox" id="parser-include-poll-voters"> Парсить голосовавших в опросах
                            </label>
                        </div>
                    </div>
                </details>
            </div>

            <!-- Настройки для ссылок -->
            <div id="parser-opts-links" style="display:none;" class="mb-3">
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label">Тип ссылок</label>
                        <select class="form-control" id="parser-link-type">
                            <option value="all">Все (инвайты + публичные)</option>
                            <option value="invites">Только инвайты (t.me/+...)</option>
                            <option value="public">Только публичные (t.me/channel)</option>
                        </select>
                    </div>
                    <div>
                        <label class="form-label">Период сканирования сообщений</label>
                        <select class="form-control" id="parser-links-period" onchange="applyLinksPeriodPreset(this.value)">
                            <option value="0">Вся история</option>
                            <option value="1">Последний 1 день</option>
                            <option value="3">Последние 3 дня</option>
                            <option value="7" selected>Последние 7 дней</option>
                            <option value="14">Последние 14 дней</option>
                            <option value="30">Последние 30 дней</option>
                        </select>
                    </div>
                </div>
                <label class="opt-row" >
                    <input type="checkbox" id="parser-unwrap"> Разворачивать короткие URL (bit.ly, telegra.ph)
                </label>
            </div>

            <!-- Настройки для глобального поиска -->
            <div id="parser-opts-search" style="display:none;" class="mb-3">
                <label class="form-label">Пул запросов <span style="font-size:0.7rem;color:var(--text-muted);">(по одному на строке, макс 50)</span></label>
                <textarea class="form-control mb-2" id="parser-search-query" rows="3" placeholder="крипто&#10;заработок&#10;NFT&#10;трейдинг"></textarea>
                <div style="background:var(--bg-card-hover);border-radius:6px;padding:8px 10px;margin-bottom:10px;font-size:0.7rem;color:var(--text-muted);">
                    Каждый запрос ищется отдельно. При включённой транслитерации "крипто" автоматически ищет также "kripto". Многословные запросы разбиваются на токены.
                </div>
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label">Источник</label>
                        <select class="form-control" id="parser-search-source">
                            <option value="telegram">Telegram</option>
                            <option value="tgstat">TGStat</option>
                            <option value="both">Оба</option>
                        </select>
                    </div>
                    <div>
                        <label class="form-label">TGStat Token <span style="font-size:0.65rem;color:var(--text-muted);font-weight:400;">(только если источник = TGStat)</span></label>
                        <input type="text" class="form-control" id="parser-tgstat-token" placeholder="Токен API TGStat">
                        <div style="font-size:0.66rem;color:var(--text-muted);margin-top:4px;">
                            Где взять: <a class="text-purple" href="https://api.tgstat.ru/" target="_blank" rel="noopener">api.tgstat.ru</a> → регистрация → раздел API → скопировать токен.
                        </div>
                    </div>
                </div>
                <div class="grid-2 mb-2">
                    <div>
                        <label class="form-label">Мин. участников</label>
                        <input type="number" class="form-control" id="parser-min-members" value="0" min="0" max="1000000" placeholder="0 = без фильтра">
                    </div>
                    <div>
                        <label class="form-label">Расширение запросов</label>
                        <select class="form-control" id="parser-expand">
                            <option value="full">Транслит + токены</option>
                            <option value="translit">Только транслит</option>
                            <option value="none">Без расширения</option>
                        </select>
                    </div>
                </div>
                <label class="opt-row" >
                    <input type="checkbox" id="parser-translit" checked> Транслитерация RU→LAT
                </label>
            </div>

            <!-- Настройки для поиска по словам -->
            <div id="parser-opts-keyword" style="display:none;" class="mb-3">
                <label class="form-label">Ключевые слова (по одному на строке)</label>
                <textarea class="form-control mb-2" id="parser-keywords" rows="3" placeholder="заработок&#10;крипто&#10;вакансия"></textarea>
                <div style="background:var(--bg-card-hover);border-radius:6px;padding:8px 10px;margin-bottom:10px;font-size:0.7rem;color:var(--text-muted);line-height:1.5;">
                    ⏱ Сканирование всех чатов аккаунта занимает 3-10 минут (на аккаунт с 500+ чатами — до 15 мин).
                    Не закрывайте окно. Прогресс: «Сканирую X/Y чатов» в строке статуса.
                </div>
                <div class="grid-2">
                    <div>
                        <label class="form-label">Искать в</label>
                        <select class="form-control" id="parser-kw-scope">
                            <option value="all">Все чаты</option>
                            <option value="groups">Только группы</option>
                            <option value="channels">Только каналы</option>
                        </select>
                    </div>
                    <div>
                        <label class="form-label">Собирать</label>
                        <select class="form-control" id="parser-kw-collect">
                            <option value="links">Ссылки</option>
                            <option value="usernames">Юзернеймы</option>
                            <option value="both">Всё</option>
                        </select>
                    </div>
                </div>
            </div>

            <!-- Лимит -->
            <div class="mb-3">
                <label class="form-label">Лимит результатов</label>
                <input type="number" class="form-control" id="parser-limit" value="5000" min="100" max="50000" style="max-width:200px;">
            </div>

            <!-- Пресеты для режима «Ссылки»: быстрый выбор готовых конфигураций -->
            <div class="mb-3" id="parser-presets" style="display:none;">
                <div style="font-size:0.72rem;color:var(--text-muted);margin-bottom:6px;">Быстрые пресеты (задают период + тип ссылок + лимит одним кликом):</div>
                <button class="btn btn-outline btn-sm btn-preset" onclick="applyParserPreset('basic')"
                        title="7 дней, все ссылки (инвайты + публичные), лимит 3000, без unwrap коротких URL. Для быстрого сбора ссылок за неделю.">
                    Базовый
                </button>
                <button class="btn btn-outline btn-sm btn-preset" onclick="applyParserPreset('full')"
                        title="Вся история, все типы ссылок, лимит 10000, с unwrap bit.ly/telegra.ph. Максимальный сбор без ограничения по времени.">
                    Полный
                </button>
                <button class="btn btn-outline btn-sm btn-preset" onclick="applyParserPreset('invites')"
                        title="Только invite-ссылки (t.me/+hash), вся история, лимит 5000, с unwrap. Для сбора именно приватных инвайтов, без публичных каналов.">
                    Инвайты
                </button>
                <div style="font-size:0.66rem;color:var(--text-muted);margin-top:4px;font-style:italic;">
                    Наведи на кнопку — подскажет что она делает. Потом при желании можно любую настройку сверху поменять вручную.
                </div>
            </div>

            <div class="d-flex gap-2 mb-3 flex-wrap">
                <button class="btn btn-accent btn-cta-lg" onclick="startParser()" id="btn-parser">
                    <i class="bi bi-play-fill"></i> Начать парсинг
                </button>
                <button class="btn btn-danger btn-cta-lg" onclick="stopParser()" id="btn-parser-stop" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Остановить
                </button>
            </div>

            <!-- Прогресс -->
            <div id="parser-progress" style="display:none;">
                <div class="progress mb-2"><div class="progress-bar" id="parser-bar" style="width:0%;"></div></div>
                <div class="text-sm text-muted" id="parser-status-text">Парсинг...</div>
            </div>

            <!-- Результат -->
            <div id="parser-result" style="display:none;" class="mt-3">
                <div class="info-box info-box--success" style="padding:var(--space-4) var(--space-5);">
                    <div class="d-flex align-center justify-between mb-2">
                        <span class="fw-bold" style="font-size:1rem;" id="parser-count">0 юзернеймов</span>
                        <div class="d-flex gap-2">
                            <button class="btn btn-outline btn-sm" onclick="exportParser('txt')">
                                <i class="bi bi-download"></i> .txt
                            </button>
                            <button class="btn btn-outline btn-sm" onclick="exportParser('csv')">
                                <i class="bi bi-file-earmark-spreadsheet"></i> .csv
                            </button>
                            <button class="btn btn-outline btn-sm" onclick="exportParser('xlsx')">
                                <i class="bi bi-file-earmark-excel"></i> .xlsx
                            </button>
                            <button class="btn btn-outline btn-sm" onclick="exportParser('spintax')">
                                <i class="bi bi-braces"></i> Spintax
                            </button>
                            <button class="btn btn-outline btn-sm" onclick="exportParserByFolders()" title="Разложить по категориям: каналы, группы, инвайты, юзернеймы, посты — каждая категория в свой .txt файл" style="border-color:var(--accent);color:var(--accent);">
                                <i class="bi bi-folder-plus"></i> По папкам
                            </button>
                            <button class="btn btn-outline btn-sm" onclick="copyParserPreview()" title="Скопировать результат в буфер обмена — сразу вставить в другую задачу">
                                <i class="bi bi-clipboard"></i> Скопировать
                            </button>
                            <button class="btn btn-outline btn-sm" onclick="openExportFolder()" title="Открыть папку «Экспорт»">
                                <i class="bi bi-folder2-open"></i>
                            </button>
                            <button class="btn btn-pink btn-sm" onclick="useParserForDm()">
                                <i class="bi bi-person-lines-fill"></i> Отправить в DM
                            </button>
                            <button class="btn btn-success btn-sm" onclick="useParserForJoin()">
                                <i class="bi bi-box-arrow-in-right"></i> В подписку
                            </button>
                        </div>
                    </div>
                    <div id="parser-stats" class="text-xs text-muted mb-2"></div>
                </div>
                <textarea class="form-control" id="parser-preview" rows="8" readonly style="font-family:monospace;font-size:0.75rem;background:var(--bg-input);"></textarea>
            </div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Профили ═══ -->
<div class="section" id="tab-profiles">
    <div class="card mb-3" style="border-left:4px solid #f59e0b; background: rgba(245,158,11,0.07);">
        <div class="card-body" style="padding:12px 16px;">
            <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
                <i class="bi bi-exclamation-triangle" style="color:#f59e0b;"></i>
                <strong>Заполнение профилей в режиме BETA</strong>
            </div>
            <div class="text-hint" style="font-size:0.8rem;line-height:1.45;">
                Массовая смена имени, фамилии, био и аватарки выглядит ботской сетью, если на N аккаунтах одинаковые шаблоны.
                Используйте спинтакс <code style="background:rgba(0,0,0,0.2);padding:1px 5px;border-radius:3px;">{Анна|Аня|Anna}</code> в каждом поле, не ставьте одну и ту же аватарку. Резкая массовая смена на свежих акках может привести к спам-блоку — лучше распределить во времени.
            </div>
        </div>
    </div>
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-person-badge text-purple"></i> Заполнение профилей</div>
        <div class="card-body">
            <div class="info-box">
                Обновляет имя, фамилию, био и аватарку выбранного аккаунта.<br>
                <b class="text-accent" >Ко всем</b> — каждому аккаунту поставит разные данные (генерация/спинтакс).<br>
                Спинтакс: <code>{вариант1|вариант2}</code> — случайный вариант для каждого акка.
            </div>

            <div class="acc-selector mb-3" id="acc-selector-profiles"></div>

            <!-- Генерация имён -->
            <div class="d-flex gap-3 mb-3 flex-wrap align-center">
                <label class="opt-row" >
                    <input type="checkbox" id="pf-gen-name" onchange="toggleGenName()" >
                    Автогенерация имени
                </label>
                <label class="opt-row" >
                    <input type="checkbox" id="pf-gen-surname" onchange="toggleGenSurname()" >
                    Автогенерация фамилии
                </label>
                <button class="btn btn-outline btn-sm" onclick="previewGenName()" style="padding:3px 10px;font-size:0.65rem;">
                    <i class="bi bi-dice-3"></i> Превью
                </button>
                <span id="pf-gen-preview" class="text-xs text-accent ml-1"></span>
            </div>

            <div class="grid-2 mb-3">
                <div>
                    <label class="form-label">Имя</label>
                    <input type="text" class="form-control" id="pf-firstname" placeholder="Имя или {Имя1|Имя2}">
                </div>
                <div>
                    <label class="form-label">Фамилия</label>
                    <input type="text" class="form-control" id="pf-lastname" placeholder="Фамилия или {Фам1|Фам2}">
                </div>
            </div>

            <!-- Автогенерация username -->
            <div class="d-flex gap-3 mb-2 flex-wrap align-center">
                <label class="opt-row" >
                    <input type="checkbox" id="pf-gen-username" onchange="toggleGenUsername()">
                    Автогенерация username
                </label>
                <button class="btn btn-outline btn-sm btn-preset" onclick="previewGenUsername()">
                    <i class="bi bi-dice-3"></i> Превью
                </button>
                <span id="pf-gen-username-preview" class="text-xs" style="color:var(--accent-light);margin-left:4px;"></span>
            </div>
            <label class="form-label">Username (@ в начале не нужен)</label>
            <input type="text" class="form-control mb-3" id="pf-username" placeholder="username или оставь пусто">

            <label class="form-label">Био (описание профиля)</label>
            <textarea class="form-control mb-3" id="pf-about" rows="2" placeholder="Описание профиля (до 70 символов, спинтакс поддерживается)" maxlength="70"></textarea>

            <label class="form-label">Аватарка</label>
            <div class="d-flex gap-2 mb-2 flex-wrap align-center">
                <label class="btn btn-outline btn-sm" style="cursor:pointer;margin:0;display:flex;align-items:center;">
                    <i class="bi bi-image"></i> Выбрать фото
                    <input type="file" accept="image/*" style="display:none" id="pf-avatar-input" onchange="previewAvatar(this)">
                </label>
                <label class="opt-row" >
                    <input type="checkbox" id="pf-avatar-emoji" onchange="toggleEmojiAvatar()">
                    Эмодзи-аватарка
                </label>
                <span class="text-sm text-muted self-center" id="pf-avatar-name">Не выбрано</span>
            </div>
            <div id="pf-emoji-row" class="mb-2" style="display:none;font-size:0.7rem;color:var(--text-muted);">
                Кастомный эмодзи (оставь пусто для случайного): <input type="text" id="pf-avatar-emoji-char" maxlength="4" placeholder="🎭" style="width:60px;padding:3px 6px;font-size:1.1rem;text-align:center;background:var(--bg-input);border:1px solid var(--border);border-radius:6px;color:var(--text);">
                <span style="margin-left:8px;">Цвет фона: <input type="color" id="pf-avatar-emoji-bg" value="#3b82f6" style="width:32px;height:24px;vertical-align:middle;border:none;cursor:pointer;"></span>
            </div>

            <!-- Импорт фото из папки — для тех у кого есть заготовленная папка с аватарками
                 (например экспорт из Raptor: C:\...\Profile pics\). Программа сама возьмёт
                 случайное фото из указанной папки. При применении «Ко всем аккаунтам» —
                 каждому аккаунту разное фото (без повторов пока папка не закончится). -->
            <label style="display:flex;align-items:center;gap:6px;cursor:pointer;font-size:0.75rem;color:var(--text-muted);margin-bottom:6px;">
                <input type="checkbox" id="pf-avatar-folder-enabled" onchange="toggleFolderAvatar()">
                Случайное фото из папки
            </label>
            <div id="pf-folder-row" class="mb-2" style="display:none;">
                <div class="d-flex gap-2 align-center">
                    <input type="text" class="form-control flex-1" id="pf-avatar-folder" placeholder="C:\Users\...\Profile pics\  (папка с jpg/png)">
                    <button class="btn btn-outline btn-sm" onclick="openAvatarFolder()" title="Открыть папку в Проводнике">
                        <i class="bi bi-folder2-open"></i>
                    </button>
                    <button class="btn btn-outline btn-sm" onclick="scanAvatarFolder()">
                        <i class="bi bi-search"></i> Проверить
                    </button>
                </div>
                <div id="pf-folder-info" style="font-size:0.68rem;color:var(--text-muted);margin-top:4px;">
                    Укажи путь к папке с .jpg / .png файлами. Нажми «Проверить» — увидишь сколько файлов.
                </div>
            </div>
            <div id="pf-avatar-preview" style="display:none;margin-bottom:12px;">
                <img id="pf-avatar-img" style="width:64px;height:64px;border-radius:50%;object-fit:cover;border:2px solid var(--accent);">
            </div>

            <div class="d-flex gap-2">
                <button class="btn btn-accent btn-sm" onclick="applyProfile()">
                    <i class="bi bi-check2"></i> Применить к выбранному
                </button>
                <button class="btn btn-outline btn-sm" onclick="applyProfileAll()">
                    <i class="bi bi-people"></i> Ко всем аккаунтам
                </button>
            </div>
            <div id="pf-result" style="display:none;" class="mt-3 text-sm"></div>
        </div>
    </div>

    <!-- ── Массовое заполнение из папки с материалами ── -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-folder-fill text-accent"></i> Массовое заполнение из материалов</div>
        <div class="card-body">
            <div class="info-box mb-3">
                Альтернатива ручному вводу — даёшь софту папку с материалами, и каждый акк получает свой комплект из пула. Структура папки:
                <pre style="background:var(--bg-input);padding:8px 10px;margin-top:6px;border-radius:4px;font-size:0.7rem;color:var(--text-muted);line-height:1.5;">Заполнение профилей/
├── Женские/        ← опционально
│   ├── Имена.txt   (список имён, по одному на строку)
│   ├── Фамилии.txt
│   ├── Био.txt     (можно несколько строк — рандом)
│   ├── Аватарки/   (jpg/png)
│   └── Сторис/     (опционально, jpg/png/mp4)
└── Мужские/        ← аналогично</pre>
                Каждый акк получает <b>случайные</b> данные из своего пула (Ж или М). Если папка одного пола пустая — берётся из общей.
            </div>

            <div class="d-flex gap-2 mb-3 align-center flex-wrap">
                <label class="form-label" style="margin-bottom:0;">Папка с материалами:</label>
                <input type="text" class="form-control" id="bf-materials-path" style="flex:1;min-width:280px;" placeholder="C:\Users\...\Заполнение профилей">
                <button class="btn btn-outline btn-sm" onclick="bfScanMaterials()" style="font-size:0.7rem;padding:5px 12px;">
                    <i class="bi bi-search"></i> Проверить
                </button>
                <button class="btn btn-outline btn-sm" onclick="bfOpenMaterials()" style="font-size:0.7rem;padding:5px 12px;">
                    <i class="bi bi-folder2-open"></i>
                </button>
            </div>
            <div id="bf-scan-result" style="font-size:0.7rem;color:var(--text-muted);margin-bottom:12px;line-height:1.6;"></div>

            <label class="form-label">Аккаунты для заполнения</label>
            <div class="acc-selector mb-3" id="acc-selector-bulk-fill"></div>

            <details class="ad-block" open>
                <summary><i class="bi bi-list-check"></i> Что обновлять</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="bf-do-name" checked> <span>Обновлять имя/фамилию<span class="ad-hint">Берёт случайные из Имена.txt и Фамилии.txt</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="bf-do-bio" checked> <span>Обновлять био<span class="ad-hint">Случайная строка из Био.txt (макс 70 символов)</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="bf-do-avatar" checked> <span>Обновлять аватарку<span class="ad-hint">Случайное фото из папки Аватарки/</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="bf-do-stories"> <span>Загрузить сторис<span class="ad-hint">Из папки Сторис/. Будет загружено 1-3 случайных истории</span></span></label>
                </div>
            </details>

            <details class="ad-block">
                <summary><i class="bi bi-gear"></i> Дополнительные опции</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="bf-avatar-once" checked> <span>Использовать аватарки по одному разу<span class="ad-hint">Использованные фото переезжают в подпапку used/ — не достанутся другому акку</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="bf-delete-old"> <span>Удалить старые аватарки перед установкой<span class="ad-hint">У акка останется только новая фотка, старые удалятся</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="bf-move-processed"> <span>Перемещать обработанные аккаунты<span class="ad-hint">После заполнения акк переедет в указанную папку — удобно отделять «готовые»</span></span></label>
                    <div style="margin-left:24px;margin-top:6px;display:flex;gap:8px;align-items:center;">
                        <label class="form-label" style="margin-bottom:0;font-size:0.7rem;">Куда перемещать:</label>
                        <input type="text" class="form-control" id="bf-target-folder" placeholder="например: Аккаунты/Готовые" style="font-size:0.72rem;flex:1;">
                    </div>
                </div>
            </details>

            <div class="d-flex gap-2 mb-2">
                <button class="btn btn-accent" onclick="bfStart()" id="btn-bf-start">
                    <i class="bi bi-play-fill"></i> Заполнить выбранные
                </button>
                <button class="btn btn-danger" onclick="bfStop()" id="btn-bf-stop" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Остановить
                </button>
                <span id="bf-status-label" class="text-xs text-muted tag-right"></span>
            </div>
            <div id="bf-progress" style="display:none;margin-top:8px;">
                <div class="progress mb-2-x">
                    <div class="progress-bar" id="bf-progress-bar" style="width:0%;"></div>
                </div>
                <div style="font-size:0.74rem;color:var(--text-muted);" id="bf-progress-text">—</div>
            </div>
            <div id="bf-log" style="margin-top:10px;max-height:240px;overflow:auto;font-size:0.7rem;font-family:monospace;background:var(--bg-input);padding:8px;border-radius:6px;display:none;line-height:1.6;"></div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Мониторинг чатов ═══ -->
<div class="section" id="tab-monitor">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-broadcast" style="color:#ef4444;"></i> Мониторинг чатов в реальном времени</div>
        <div class="card-body">
            <div style="background:var(--surface-danger-bg);border:1px solid var(--surface-danger-border);border-radius:8px;padding:10px 14px;margin-bottom:12px;font-size:0.72rem;color:var(--text-muted);line-height:1.6;">
                Выбранный <b>один аккаунт</b> сидит в указанных чатах и при появлении ключевого слова в сообщении шлёт уведомление в «Сохранённые» (или в указанный чат/юзера).<br>
                Аккаунт должен <b>состоять в этих чатах</b> — инвайт-ссылки программа пройдёт сама, если есть свободный лимит вступлений.<br>
                <b>Мульти-аккаунтный мониторинг не поддерживается</b> (Telegram быстро банит за несколько сессий слушающих одно и то же). Если нужно охватить больше чатов — добавь их все в список, один аккаунт потянет 500+ чатов.
            </div>

            <label class="form-label fs-72">Аккаунт для мониторинга</label>
            <div class="acc-selector mb-3" id="acc-selector-monitor"></div>

            <!-- Multi-acc мониторинг: несколько акков на одних/разных чатах -->
            <details class="mb-3" >
                <summary style="cursor:pointer;font-size:0.72rem;color:var(--accent-light);padding:6px 0;font-weight:500;">
                    <i class="bi bi-people-fill"></i> Мульти-аккаунтный мониторинг (несколько акков)
                </summary>
                <div style="padding:10px 0 0 0;">
                    <label class="form-label fs-70">Дополнительные акки (по одному номеру на строке)</label>
                    <textarea class="form-control mb-2" id="monitor-extra-phones" rows="3"
                        placeholder="79xxxxxxxxx&#10;37xxxxxxxxx&#10;Оставь пусто чтобы юзать одиночный режим"></textarea>
                    <label class="form-label fs-70">Режим распределения чатов</label>
                    <select class="form-control mb-2 fs-78" id="monitor-multi-mode">
                        <option value="redundant">Redundant — все акки во всех чатах (надёжнее, при бане одного остальные продолжат)</option>
                        <option value="split">Split — чаты делятся между акками поровну (быстрее, меньше нагрузки)</option>
                    </select>
                    <div style="font-size:0.65rem;color:var(--text-muted);line-height:1.5;">
                        Дубли не будут — общая память внутри пула отсеивает повторные алерты на одно сообщение, даже если 2 акка сидят в одном чате.
                    </div>
                </div>
            </details>

            <div style="background:var(--surface-info-bg);border:1px solid var(--border-accent);border-radius:6px;padding:8px 12px;margin-top:-8px;margin-bottom:12px;font-size:0.68rem;color:var(--text-muted);line-height:1.5;">
                <i class="bi bi-folder2-open text-accent"></i> <b>Совет:</b> закинь файлы акка <code>{phone}.session</code> и <code>{phone}.json</code> в папку <code>Аккаунты/Мониторинг/</code> — софт сам подхватит этот акк для мониторинга, даже если кэш настроек слетит после обновы.
            </div>

            <label class="form-label">Чаты для мониторинга (по одной ссылке/юзернейму на строке)</label>
            <textarea class="form-control mb-3" id="monitor-chats" rows="6"
                placeholder="@chatname&#10;https://t.me/chatname&#10;https://t.me/+invitehash"></textarea>

            <label class="form-label">Ключевые слова (через запятую или с новой строки)</label>
            <textarea class="form-control mb-3" id="monitor-keywords" rows="3"
                placeholder="ищу, ищю, выйду, куплю"></textarea>

            <label class="form-label">Стоп-слова — пропускать сообщения с ними <span style="color:var(--text-muted);font-weight:normal;font-size:0.7rem;">(через запятую или с новой строки)</span></label>
            <textarea class="form-control mb-3" id="monitor-ignore-words" rows="2"
                placeholder="реклама, casino, ставки, продаю — если в сообщении есть любое из этих слов, алерта не будет"></textarea>

            <!-- Bot API режим (рекомендуемый способ) -->
            <div style="background:var(--surface-info-bg);border:1px solid var(--border-accent);border-radius:8px;padding:10px 14px;margin-bottom:12px;">
                <div style="font-weight:600;color:var(--accent-light);margin-bottom:6px;font-size:0.82rem;">
                    <i class="bi bi-robot"></i> Куда слать уведомления — через своего бота <span style="color:var(--success);font-size:0.7rem;font-weight:normal;">(рекомендуется)</span>
                </div>
                <div style="font-size:0.68rem;color:var(--text-muted);line-height:1.6;margin-bottom:10px;">
                    <b class="text-accent" >Общий шаг:</b> у <a class="text-accent" href="https://t.me/BotFather" target="_blank">@BotFather</a> отправь <code>/newbot</code> → получи <b>Bot Token</b>, вставь в поле слева.<br><br>
                    <b class="text-accent" >Вариант 1 — в ЛС с ботом</b> (только для тебя):<br>
                    <b>a)</b> Найди своего нового бота в Telegram со <b>личного аккаунта</b> → напиши <code>/start</code>.<br>
                    <b>b)</b> Нажми <b>«Определить Chat ID»</b> ниже — софт достанет твой id. <b>В чат добавлять не надо.</b><br>
                    <b>c)</b> Нажми <b>«Тест бота»</b> — придёт в ЛС с ботом.<br><br>
                    <b class="text-accent" >Вариант 2 — в общий чат</b> (если хочешь чтобы видела вся команда):<br>
                    <b>a)</b> Создай группу в Telegram → добавь туда бота → сделай его <b>админом</b> с правом писать (опция «Разрешить постинг»).<br>
                    <b>b)</b> В группе напиши <code>/start@имя_твоего_бота</code> (или любое сообщение).<br>
                    <b>c)</b> Нажми <b>«Определить Chat ID»</b> — софт возьмёт id группы (будет отрицательное число вида <code>-1001234567890</code>).<br>
                    <b>d)</b> Нажми <b>«Тест бота»</b> — придёт в группу.<br><br>
                    <span class="text-warning" ><i class="bi bi-info-circle"></i></span> Если нужен быстрый <b>user_id</b> — напиши <a class="text-accent" href="https://t.me/userinfobot" target="_blank">@userinfobot</a> с нужного аккаунта. Но наша кнопка «Определить» автоматически берёт и user_id (ЛС), и chat_id (группы).
                </div>
                <div class="grid-2">
                    <div>
                        <label class="form-label fs-70">Bot Token <span style="color:var(--text-muted);font-weight:normal;">(от @BotFather)</span></label>
                        <input type="password" class="form-control" id="monitor-bot-token"
                            placeholder="123456789:AA..." autocomplete="new-password">
                        <div id="monitor-bot-token-saved" style="font-size:0.62rem;color:var(--success);margin-top:2px;display:none;">✓ токен сохранён — оставь пустым чтобы не менять</div>
                    </div>
                    <div>
                        <label class="form-label fs-70">Chat ID <span style="color:var(--text-muted);font-weight:normal;">(ЛС бота с тобой)</span></label>
                        <input type="text" class="form-control" id="monitor-bot-chat-id"
                            placeholder="например 123456789">
                    </div>
                </div>
                <div style="font-size:0.65rem;color:var(--text-muted);margin-top:8px;display:flex;align-items:center;gap:8px;flex-wrap:wrap;">
                    <button type="button" class="btn btn-accent btn-sm" style="padding:3px 10px;font-size:0.7rem;" onclick="detectChatId()" title="Найдёт твой chat_id по /start сообщению которое ты отправил боту">
                        <i class="bi bi-magic"></i> Определить Chat ID
                    </button>
                    <button type="button" class="btn btn-outline btn-sm" style="padding:3px 10px;font-size:0.7rem;" onclick="testMonitorBot()" title="Отправить тестовое сообщение — проверит что бот + chat_id правильно связаны">
                        <i class="bi bi-send-check"></i> Тест бота
                    </button>
                    <span style="flex:1;min-width:160px;text-align:right;">Уведомления придут в <b>ЛС с ботом</b> (в твой личный Telegram).</span>
                </div>
            </div>

            <!-- Fallback через аккаунт-мониторщик (если бот не настроен) -->
            <details class="mb-3" id="monitor-fallback-wrap">
                <summary style="cursor:pointer;font-size:0.72rem;color:var(--text-muted);padding:6px 0;">
                    Альтернатива: слать от лица аккаунта-мониторщика (если не хочешь настраивать бота)
                </summary>
                <div style="padding:8px 0 0 0;">
                    <label class="form-label">Куда слать (fallback, если бот не задан)</label>
                    <input type="text" class="form-control" id="monitor-target" value="me"
                        placeholder="me = Сохранённые / @username / id чата / t.me/chat">
                    <div style="font-size:0.65rem;color:var(--text-muted);margin-top:4px;">
                        <code>me</code> = Сохранённые этого же аккаунта. Можно указать @username другого аккаунта или канала. <b>Используется только если Bot Token выше не задан.</b>
                    </div>
                </div>
            </details>

            <label class="form-label">Автосообщение в ЛС автору совпавшего коммента (опционально)</label>
            <textarea class="form-control mb-2" id="monitor-auto-dm" rows="3"
                placeholder="{Привет|Здравствуйте}! Видел ваш комментарий. Могу помочь — напишите что интересует."></textarea>
            <div style="background:var(--surface-info-bg);border:1px solid var(--surface-info-border);border-radius:6px;padding:8px 12px;margin-bottom:12px;font-size:0.68rem;color:var(--text-muted);line-height:1.5;">
                <b style="color:#fbbf24;"><i class="bi bi-exclamation-triangle-fill"></i> Дедупликация по user_id:</b> после первого матча юзер попадает в <b>игнор-лист</b> — его следующие сообщения (в любом чате, с любого твоего акка) <b>не будут</b> триггерить ни уведомление, ни авто-DM. Хранится в <code>data/monitor_contacted.json</code>, переживает обновления и рестарты софта.<br>
                Спинтакс <code>{привет|здравствуйте}</code> поддерживается. Задержка 3-10с перед отправкой.<br>
                <div style="display:flex;gap:6px;margin-top:6px;flex-wrap:wrap;align-items:center;">
                    <input type="text" id="monitor-ignore-input" placeholder="@username или user_id"
                        style="flex:1;min-width:180px;padding:3px 8px;font-size:0.7rem;background:var(--bg-input);border:1px solid var(--border);border-radius:4px;color:var(--text-primary);">
                    <button type="button" class="btn btn-outline btn-sm" style="padding:2px 10px;font-size:0.65rem;" onclick="addToIgnoreList()"><i class="bi bi-plus-circle"></i> В игнор</button>
                    <button type="button" class="btn btn-outline btn-sm" style="padding:2px 8px;font-size:0.65rem;" onclick="openIgnoreDb()"><i class="bi bi-database"></i> База</button>
                    <button type="button" class="btn btn-outline btn-sm" style="padding:2px 8px;font-size:0.65rem;" onclick="resetContactedList()"><i class="bi bi-trash"></i> Сбросить все</button>
                    <span class="ml-auto" id="monitor-contacted-count"></span>
                </div>
            </div>

            <label style="display:flex;align-items:center;gap:8px;cursor:pointer;font-size:0.82rem;margin-bottom:12px;">
                <input type="checkbox" class="form-check-input" id="monitor-autostart" onchange="saveMonitorAutostart()">
                <span><i class="bi bi-circle-fill" style="color:var(--success);font-size:0.6rem;vertical-align:middle;"></i> Запускать мониторинг автоматически при старте программы</span>
            </label>
            <div style="font-size:0.68rem;color:var(--text-muted);margin-top:-8px;margin-bottom:12px;">
                Если включено — при закрытии/открытии TelePush мониторинг поднимется сам. При этом аккаунт будет подключён без вашей команды — это нормально (увидите «Аккаунт проснулся» в консоли).
            </div>

            <details class="ad-block">
                <summary><i class="bi bi-shield-check"></i> Защита аккаунта</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="monitor-solve-captcha"> <span>Решать капчу-боты в чатах<span class="ad-hint">Если в мониторимом чате антиспам-бот попросит подтвердить — нажмём «я не бот»</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="monitor-keep-online"> <span>Держать аккаунт онлайн во время мониторинга</span></label>
                </div>
            </details>

            <div class="d-flex gap-2 mb-3">
                <button class="btn btn-accent" onclick="startMonitor()" id="btn-monitor-start">
                    <i class="bi bi-play-fill"></i> Старт мониторинга
                </button>
                <button class="btn btn-danger" onclick="stopMonitor()" id="btn-monitor-stop" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Стоп
                </button>
                <button class="btn btn-outline" onclick="openMonitorLog()" title="Открыть CSV-лог всех попаданий по ключам">
                    <i class="bi bi-file-earmark-spreadsheet"></i> Лог матчей
                </button>
            </div>

            <div id="monitor-status" style="display:none;background:var(--surface-info-bg);border:1px solid var(--surface-info-border);border-radius:8px;padding:10px 14px;font-size:0.75rem;">
                <div class="d-flex align-center justify-between mb-1">
                    <span class="fw-bold text-accent-base"><i class="bi bi-record-circle"></i> Работает</span>
                    <span id="monitor-matched" class="text-muted">Алертов: 0</span>
                </div>
                <div id="monitor-info" class="text-muted text-xs"></div>
            </div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Автоответчик ═══ -->
<div class="section" id="tab-autoreply">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-reply" style="color:#34d399;"></i> Автоответчик на входящие ЛС</div>
        <div class="card-body">
            <div style="background:var(--surface-success-bg);border:1px solid var(--surface-success-border);border-radius:8px;padding:10px 14px;margin-bottom:12px;font-size:0.7rem;color:var(--text-muted);line-height:1.6;">
                Автоматически отвечает на входящие личные сообщения. Один ответ на юзера.<br>
                <b style="color:#fbbf24;"><i class="bi bi-exclamation-triangle-fill"></i> Важно:</b> автоответчик отвечает только на сообщения которые пришли
                <b>после запуска</b>. Если ты сначала запустил рассылку в ЛС, а уже потом автоответчик —
                ответы пришедшие в промежутке будут пропущены. Чтобы этого избежать, есть опция
                <b>«Подхватить ответы за N часов»</b> ниже — софт просканирует недавние ЛС и ответит на них.<br>
                Спинтакс: <code>{Привет|Здравствуйте}</code> — каждому юзеру случайный вариант.
            </div>

            <div class="acc-selector mb-3" id="acc-selector-autoreply"></div>

            <label class="form-label">Текст автоответа (поддерживает спинтакс)</label>
            <textarea class="form-control mb-3" id="ar-text" rows="3" placeholder="{Привет|Здравствуйте}! Спасибо за сообщение. {Напишите ваш вопрос|Чем могу помочь?}"></textarea>

            <div class="grid-3 mb-3">
                <div>
                    <label class="form-label">Мин. задержка (сек)</label>
                    <input type="number" class="form-control" id="ar-delay-min" value="3" min="1" max="60">
                </div>
                <div>
                    <label class="form-label">Макс. задержка (сек)</label>
                    <input type="number" class="form-control" id="ar-delay-max" value="8" min="2" max="120">
                </div>
                <div>
                    <label class="form-label" title="Ответить на входящие ЛС которые пришли до запуска автоответчика (0 = только новые)">Подхватить ответы за N ч</label>
                    <input type="number" class="form-control" id="ar-backfill-hours" value="0" min="0" max="48" step="1">
                </div>
            </div>

            <label class="form-label">Стоп-слова (через запятую, ответ не отправится если в сообщении есть)</label>
            <input type="text" class="form-control mb-3" id="ar-stop-words" placeholder="отстань, стоп, спам, не пиши">

            <details class="ad-block">
                <summary><i class="bi bi-shield-check"></i> Поведение «как живой человек»</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="ar-simulate-typing"> <span>Имитация набора (показывать «печатает...» перед ответом)<span class="ad-hint">Перед ответом покажет «печатает…» — выглядит как живой человек</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="ar-mark-as-read"> <span>Отмечать входящее сразу прочитанным<span class="ad-hint">Без этого у юзера висит непрочитанный счётчик — выдаёт автоответ</span></span></label>
                </div>
            </details>

            <div class="d-flex gap-2 mb-3">
                <button class="btn btn-success btn-sm" onclick="startAutoReply()" id="btn-ar-start">
                    <i class="bi bi-play-fill"></i> Запустить
                </button>
                <button class="btn btn-danger btn-sm" onclick="stopAutoReply()" id="btn-ar-stop" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Остановить
                </button>
            </div>

            <!-- Статус -->
            <div id="ar-status"></div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Аналитика ═══ -->
<div class="section" id="tab-analytics">
    <div class="d-flex gap-2 mb-3 flex-wrap">
        <div class="stat-card cell-input-lg">
            <div class="stat-value fs-130" id="stat-sent">0</div>
            <div class="stat-label"><i class="bi bi-send"></i> Отправлено</div>
        </div>
        <div class="stat-card cell-input-lg">
            <div class="stat-value fs-130" id="stat-joined">0</div>
            <div class="stat-label"><i class="bi bi-box-arrow-in-right"></i> Вступлений</div>
        </div>
        <div class="stat-card cell-input-lg">
            <div class="stat-value fs-130" id="stat-blocked">0</div>
            <div class="stat-label"><i class="bi bi-shield-x"></i> Заблокировано</div>
        </div>
        <div class="stat-card cell-input-lg">
            <div class="stat-value fs-130" id="stat-errors">0</div>
            <div class="stat-label"><i class="bi bi-x-circle"></i> Ошибок</div>
        </div>
    </div>
    <div class="card">
        <div class="card-header">
            <i class="bi bi-graph-up" style="color:#14b8a6;"></i> Активность по дням
            <button class="btn btn-outline btn-sm ml-auto" onclick="exportExcel()">
                <i class="bi bi-download"></i> Excel
            </button>
        </div>
        <div class="card-body p-4">
            <canvas id="analytics-chart" height="120"></canvas>
        </div>
    </div>

    <!-- Anti-detect статистика (с момента старта программы) -->
    <div class="card mb-3" style="margin-top:12px;">
        <div class="card-header">
            <i class="bi bi-shield-check text-success"></i> Защита аккаунтов — статистика
            <span class="text-xs text-muted ml-auto">с запуска программы</span>
        </div>
        <div class="card-body">
            <div class="d-flex gap-2 flex-wrap">
                <div class="stat-card cell-input">
                    <div class="stat-value" style="font-size:1.15rem;" id="ad-stat-precheck-runs">0</div>
                    <div class="stat-label fs-70"><i class="bi bi-shield-check"></i> Pre-check запусков</div>
                </div>
                <div class="stat-card cell-input">
                    <div class="stat-value" style="font-size:1.15rem;color:var(--warning);" id="ad-stat-precheck-blocked">0</div>
                    <div class="stat-label fs-70"><i class="bi bi-slash-circle"></i> Найдено в спам-блоке</div>
                </div>
                <div class="stat-card cell-input">
                    <div class="stat-value" style="font-size:1.15rem;color:#a78bfa;" id="ad-stat-captcha">0</div>
                    <div class="stat-label fs-70"><i class="bi bi-puzzle"></i> Капч решено</div>
                </div>
                <div class="stat-card cell-input">
                    <div class="stat-value" style="font-size:1.15rem;color:#5db7ff;" id="ad-stat-profiles">0</div>
                    <div class="stat-label fs-70"><i class="bi bi-person"></i> Профилей просмотрено</div>
                </div>
                <div class="stat-card cell-input">
                    <div class="stat-value" style="font-size:1.15rem;color:#5db7ff;" id="ad-stat-photos">0</div>
                    <div class="stat-label fs-70"><i class="bi bi-image"></i> Фото просмотрено</div>
                </div>
                <div class="stat-card cell-input">
                    <div class="stat-value" style="font-size:1.15rem;color:var(--success);" id="ad-stat-reads">0</div>
                    <div class="stat-label fs-70"><i class="bi bi-eye"></i> Сообщений прочитано</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Прогрев ═══ -->
<div class="section" id="tab-warmup">
    <div class="card mb-3" style="border-left:4px solid #f59e0b; background: rgba(245,158,11,0.07);">
        <div class="card-body" style="padding:12px 16px;">
            <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
                <i class="bi bi-exclamation-triangle" style="color:#f59e0b;"></i>
                <strong>Прогрев в режиме BETA</strong>
            </div>
            <div class="text-hint" style="font-size:0.8rem;line-height:1.45;">
                Функция в активной доработке. Telegram активно банит шаблонные паттерны массового прогрева — даже с антифрод-настройками возможны заморозки аккаунтов.
                Не запускайте сразу на всех аккаунтах — начните с 3-5 для проверки.
                Если у вас остались общий чат или дневники со старыми именами («Чат прогрева», «Дневник обучения», «Мой фриланс») — пересоздайте их, иначе риск бана повторится.
            </div>
        </div>
    </div>

    <div class="card mb-3" style="border-left:4px solid var(--accent-light); background: rgba(99,102,241,0.07);">
        <div class="card-body" style="padding:12px 16px;">
            <div style="display:flex;align-items:center;gap:8px;margin-bottom:4px;">
                <i class="bi bi-magic" style="color:var(--accent-light);"></i>
                <strong>Хочешь максимум защиты от бана?</strong> Включи AI-генерацию пулов
            </div>
            <div class="text-hint" style="font-size:0.76rem;line-height:1.45;">
                Имена чатов, юзернеймы, приветствия и тексты дневников будут сгенерированы AI индивидуально для тебя. Telegram не сможет палить шаблоны — у каждого клиента TelePush свой набор. Стоит ~$0.05-0.15 одноразово, нужен ключ от любого AI-провайдера (OpenRouter / DeepSeek / OpenAI).
                <br><a class="text-accent" style="font-size:0.76rem;" href="javascript:showTab('settings');setTimeout(function(){var el=document.getElementById('settings-ai');if(el)el.style.display='block';var c=document.getElementById('chev-settings-ai');if(c)c.style.transform='rotate(180deg)';},150);">→ Открыть Настройки → AI</a>
                · <span id="warmup-ai-pool-hint" style="font-size:0.74rem;color:var(--text-muted);">проверка статуса...</span>
            </div>
        </div>
    </div>

    <!-- Отчёт по аккам — кнопка и карточка -->
    <div class="d-flex align-center justify-between mb-2">
        <div></div>
        <button class="btn btn-outline btn-sm" onclick="loadWarmupReport()">
            <i class="bi bi-bar-chart"></i> Отчёт по аккаунтам
        </button>
    </div>
    <div id="warmup-report" style="display:none;" class="card mb-3">
        <div class="card-header"><i class="bi bi-bar-chart text-orange"></i> Отчёт по прогреву</div>
        <div class="card-body">
            <div id="warmup-report-summary" class="mb-2 text-sm"></div>
            <div id="warmup-report-table" style="max-height:400px;overflow:auto;font-size:0.75rem;"></div>
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-fire text-orange"></i> Прогрев аккаунтов</div>
        <div class="card-body">
            <!-- Info block -->
            <div class="info-box">
                <div style="font-weight:700;color:var(--accent-light);margin-bottom:6px;font-size:0.75rem;">Как работает прогрев</div>
                <p style="margin:0 0 6px;">Аккаунты выглядят естественными: переписываются друг с другом, подписываются на каналы, ставят реакции и участвуют в чатах. Активность плавно растёт каждые 4 дня.</p>

                <div style="margin-top:8px;display:grid;grid-template-columns:repeat(auto-fit, minmax(160px, 1fr));gap:6px;">
                    <div style="background:var(--bg-input);border-radius:6px;padding:6px 10px;"><div style="color:var(--accent-light);font-weight:600;font-size:0.68rem;">Неделя 1 (дни 1-7)</div><div style="color:var(--text-muted);font-size:0.65rem;">5-10 собеседников</div></div>
                    <div style="background:var(--bg-input);border-radius:6px;padding:6px 10px;"><div style="color:var(--accent-light);font-weight:600;font-size:0.68rem;">Неделя 2 (дни 8-14)</div><div style="color:var(--text-muted);font-size:0.65rem;">10-20 собеседников</div></div>
                    <div style="background:var(--bg-input);border-radius:6px;padding:6px 10px;"><div style="color:var(--accent-light);font-weight:600;font-size:0.68rem;">Неделя 3 (дни 15-21)</div><div style="color:var(--text-muted);font-size:0.65rem;">20-30 собеседников</div></div>
                </div>

                <div style="margin-top:8px;padding-top:8px;border-top:1px solid #1e2433;">
                    <div style="font-weight:600;color:var(--text-primary);margin-bottom:4px;font-size:0.7rem;">Что делает каждый аккаунт в день:</div>
                    <ul style="margin:0;padding-left:16px;font-size:0.66rem;">
                        <li><i class="bi bi-chat-dots-fill text-muted"></i> <b>Переписка между аккаунтами</b> — отвечает на входящие как живой человек (учитывает контекст)</li>
                        <li><i class="bi bi-megaphone text-accent"></i> <b>Подписки на каналы</b> — 3-5 в день из вашего списка (по умолчанию популярные)</li>
                        <li><i class="bi bi-hand-thumbs-up-fill text-info"></i> <b>Реакции</b> — ставит реакции на свежие посты в каналах где подписан</li>
                        <li><i class="bi bi-journal-text text-accent"></i> <b>Свой чат</b> — дневниковые сообщения в приватной группе ваших аккаунтов</li>
                        <li><i class="bi bi-broadcast-pin text-warning"></i> <b>Свой канал</b> — публикации постов + взаимные реакции</li>
                    </ul>
                    <div style="margin-top:6px;font-size:0.65rem;color:var(--text-muted);">
                        Настройте сценарии ниже. Включите то, что считаете нужным — чем разнообразнее, тем лучше.
                    </div>
                </div>
            </div>

            <!-- Recommendations block -->
            <div class="info-box">
                <div style="font-weight:700;color:#fbbf24;margin-bottom:6px;font-size:0.75rem;">Рекомендации для долгой жизни аккаунта</div>
                <ul style="margin:0;padding-left:16px;">
                    <li><b class="text-orange" >Premium обязательно</b> — аккаунты с премкой реже блочат, больше доверия, доступ к @SpamBot</li>
                    <li><b style="color:#38bdf8;">Прокси желательно</b> — 1 прокси на аккаунт. Скрывает IP, обходит геоблок</li>
                    <li><b style="color:#34d399;">Регионы</b> — RU, US, BY, UZ, KZ хорошо работают</li>
                    <li><b class="text-purple" >Не триггерьте</b> — не пишите с первого сообщения: «работа», «подработка», «заработок», «кадры»</li>
                    <li><b style="color:#ec4899;">Лимиты</b> — не более 30 юзов в день на аккаунт после прогрева</li>
                </ul>
            </div>

            <!-- Statistics info -->
            <div style="background:var(--surface-success-bg);border:1px solid var(--surface-success-border);border-radius:8px;padding:8px 12px;margin-bottom:10px;font-size:0.68rem;color:var(--text-secondary);line-height:1.5;">
                <b class="text-success" >Ожидаемый результат:</b>
                60 аккаунтов × 30 юзов = 1800 человек. Средний отклик 7-10 ответов с акка = ~600 ответов.
                Выживаемость 2-3 месяца: 35-55 из 60 аккаунтов.
            </div>

            <!-- Status banner -->
            <div id="warmup-status-banner" style="display:none;" class="mb-3"></div>

            <!-- Schedule progress -->
            <div id="warmup-schedule" style="display:none;" class="mb-3">
                <div class="d-flex align-center justify-between mb-1">
                    <span id="warmup-stage-text" class="text-sm fw-600"></span>
                    <span id="warmup-day-text" class="text-xs text-muted"></span>
                </div>
                <div class="progress" style="height:8px;"><div class="progress-bar" id="warmup-progress-bar" style="width:0%;background:linear-gradient(90deg,#f97316,#ef4444);"></div></div>
                <div class="d-flex justify-between mt-1">
                    <span class="text-xs text-muted">Сообщений сегодня: <b id="warmup-msgs-today">0</b>/<span id="warmup-msgs-limit">0</span></span>
                    <span class="text-xs text-muted">Всего: <b id="warmup-msgs-total">0</b></span>
                </div>
            </div>

            <!-- Controls -->
            <div class="d-flex gap-2 mb-3 flex-wrap align-center">
                <select class="form-control" id="warmup-days" style="width:auto;" title="Всего дней прогрева">
                    <option value="7">7 дней</option>
                    <option value="14">14 дней</option>
                    <option value="21" selected>21 день</option>
                    <option value="30">30 дней</option>
                </select>
                <div style="display:flex;align-items:center;gap:4px;font-size:0.7rem;color:var(--text-muted);">
                    старт с дня
                    <span class="tt" data-tip="С какого дня начать — для перезапуска с середины цикла. Если ты уже пол-прогрева сделал — поставь сюда текущий день, чтобы лимиты сразу включились на нужном уровне.">
                        <svg class="icon-inline" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
                    </span>
                    <input type="number" id="warmup-start-day" value="1" min="1" max="30" step="1"
                           style="width:55px;padding:3px 6px;background:var(--bg-2,#1a1a2e);border:1px solid var(--border,#2a2a3e);border-radius:6px;color:var(--text);font-size:0.78rem;">
                </div>
                <div style="display:flex;align-items:center;gap:4px;font-size:0.7rem;color:var(--text-muted);">
                    сообщений/день
                    <span class="tt" data-tip="Примерно сколько сообщений в день будет отправлять весь пул аккаунтов суммарно. 0 = автоматический режим (растёт от 8-10 в первые дни до 60+ к концу). Поставь число если хочешь зафиксировать темп — например 30 = безопасный режим, 80+ = быстрее но риск.">
                        <svg class="icon-inline" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
                    </span>
                    <input type="number" id="warmup-msgs-override" value="0" min="0" max="500" step="1"
                           placeholder="auto"
                           style="width:65px;padding:3px 6px;background:var(--bg-2,#1a1a2e);border:1px solid var(--border,#2a2a3e);border-radius:6px;color:var(--text);font-size:0.78rem;">
                </div>
                <button class="btn btn-accent btn-sm" id="warmup-start-btn" onclick="startWarmup()">
                    <i class="bi bi-play-fill"></i> Запустить
                </button>
                <button class="btn btn-outline btn-sm" id="warmup-pause-btn" onclick="pauseWarmup()" style="display:none;">
                    <i class="bi bi-pause-fill"></i> Пауза
                </button>
                <details class="ad-block" style="margin-left:8px;flex:1;min-width:280px;">
                    <summary><i class="bi bi-shield-check"></i> Защита аккаунта</summary>
                    <div class="ad-body">
                        <label class="ad-check"><input type="checkbox" id="warmup-pre-spam-check"> <span>Перед стартом проверить аккаунты на спам-блок</span></label>
                        <label class="ad-check"><input type="checkbox" id="warmup-solve-captcha"> <span>Решать капчу-боты в чатах</span></label>
                        <label class="ad-check"><input type="checkbox" id="warmup-keep-online"> <span>Держать аккаунт онлайн во время прогрева</span></label>
                        <label class="ad-check"><input type="checkbox" id="warmup-read-msgs"> <span>Читать входящие сообщения<span class="ad-hint">Имитация — открываем чат, скроллим</span></span></label>
                        <label class="ad-check"><input type="checkbox" id="warmup-mark-read"> <span>Отмечать прочитанным</span></label>
                        <label class="ad-check"><input type="checkbox" id="warmup-view-profile"> <span>Смотреть профили партнёров по прогреву</span></label>
                        <label class="ad-check"><input type="checkbox" id="warmup-view-photo"> <span>Смотреть фото профилей</span></label>
                    </div>
                </details>
                <button class="btn btn-danger btn-sm" id="warmup-stop-btn" onclick="stopWarmup()" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Стоп
                </button>
                <button class="btn btn-accent btn-sm" id="warmup-next-day-btn" onclick="warmupNextDay()" style="display:none;">
                    <i class="bi bi-sunrise"></i> Следующий день
                </button>
            </div>

            <!-- Accounts table -->
            <h6 style="color:var(--text-muted);font-size:0.8rem;margin-bottom:6px;">Аккаунты в прогреве</h6>
            <div style="max-height:250px;overflow-y:auto;margin-bottom:12px;">
                <table class="table table-sm">
                    <thead><tr>
                        <th>Телефон</th><th>Имя</th><th>Возраст</th>
                        <th>Премиум</th><th>Прокси</th><th>Папка</th><th></th>
                    </tr></thead>
                    <tbody id="warmup-accounts-table">
                        <tr><td colspan="7" style="text-align:center;color:var(--text-muted);padding:16px;">Загрузка...</td></tr>
                    </tbody>
                </table>
            </div>

            <!-- Active pairs -->
            <div id="warmup-pairs-section" style="display:none;">
                <h6 style="color:var(--text-muted);font-size:0.8rem;margin-bottom:6px;">Активные пары</h6>
                <div id="warmup-pairs-list" style="max-height:200px;overflow-y:auto;margin-bottom:12px;"></div>
            </div>

            <!-- Log (hidden until warmup running) -->
            <div id="warmup-log-section" style="display:none;">
                <h6 style="color:var(--text-muted);font-size:0.8rem;margin-bottom:6px;">Лог</h6>
                <textarea id="warmup-log" readonly class="form-control" rows="6"
                    style="font-size:0.7rem;background:var(--bg-dark);color:var(--text-primary);resize:vertical;font-family:monospace;"></textarea>
            </div>
        </div>
    </div>

    <!-- Warmup Settings -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-gear text-muted"></i> Настройки прогрева</div>
        <div class="card-body" style="display:flex;flex-direction:column;gap:10px;">
            <!-- Gemini Key -->
            <div>
                <label class="form-label">Gemini API Key <span class="text-xs text-muted">(бесплатно на <a href="https://aistudio.google.com/apikey" target="_blank" style="color:var(--accent-light);text-decoration:underline;">aistudio.google.com</a>)</span></label>
                <div class="d-flex gap-2">
                    <input type="password" class="form-control flex-1" id="warmup-gemini-key" placeholder="AIza...">
                    <button class="btn btn-outline btn-sm" onclick="checkGeminiKey()" style="white-space:nowrap;">Проверить</button>
                </div>
            </div>
            <!-- Row: Режим + Генерация + Часы + Задержка (CSS Grid — всё выровнено по единой сетке) -->
            <div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;align-items:start;">
                <div>
                    <label class="form-label d-flex align-center gap-1">Режим прогрева
                        <span class="text-xs text-muted" id="warmup-mode-hint" title="Classic: акки общаются в парах в ЛС.">ⓘ</span>
                    </label>
                    <select class="form-control" id="warmup-mode" onchange="onWarmupModeChange()">
                        <option value="classic">Classic (пары в ЛС)</option>
                        <option value="hub">Хаб-акк (контакты)</option>
                        <option value="chat_flow">Через чат прогрева</option>
                    </select>
                </div>
                <div id="warmup-hub-wrap" style="display:none;">
                    <label class="form-label d-flex align-center gap-1">Хаб-аккаунт
                        <span class="text-xs text-muted" title="Этот аккаунт добавит всех остальных в контакты и будет инициировать диалоги.">ⓘ</span>
                    </label>
                    <select class="form-control" id="warmup-hub-phone" style="font-family:monospace;">
                        <option value="">Первый в списке</option>
                    </select>
                </div>
                <div>
                    <label class="form-label d-flex align-center gap-1">Генерация текстов
                        <span class="tt" data-tip="Шаблоны — фиксированный набор готовых фраз (бесплатно, без AI-ключа). AI — тексты пишутся нейросетью под тему диалога (требуется настроенный ключ в Настройках → AI). Тратится $ от твоего AI-аккаунта.">
                            <svg class="icon-inline" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
                        </span>
                    </label>
                    <select class="form-control" id="warmup-gen-mode" onchange="onWarmupGenModeChange()">
                        <option value="templates" selected>Шаблоны (бесплатно, без AI)</option>
                        <option value="ai">AI / нейросеть (платный ключ)</option>
                    </select>
                    <div id="warmup-gen-mode-hint" style="font-size:0.65rem;color:var(--text-muted);margin-top:4px;line-height:1.4;"></div>
                </div>
                <div>
                    <label class="form-label d-flex align-center gap-1">Активные часы
                        <span class="text-xs text-muted" title="В какие часы (по серверу) работает прогрев. Ночью — молчит.">ⓘ</span>
                    </label>
                    <div class="d-flex gap-1 align-center">
                        <input type="number" class="form-control" id="warmup-hours-start" value="9" min="0" max="23" style="width:60px;">
                        <span class="text-muted">—</span>
                        <input type="number" class="form-control" id="warmup-hours-end" value="22" min="0" max="23" style="width:60px;">
                    </div>
                </div>
                <div>
                    <label class="form-label d-flex align-center gap-1">Тихие часы аккаунта
                        <span class="text-xs text-muted" title="По локальному времени каждого аккаунта (определяется по country code номера). Аккаунт не будет писать в свои ночные часы — Telegram палит активность вне человеческих часов.">ⓘ</span>
                    </label>
                    <div class="d-flex gap-1 align-center">
                        <label class="d-flex align-center gap-1" style="font-size:0.7rem;cursor:pointer;">
                            <input type="checkbox" class="form-check-input" id="warmup-quiet-enabled" checked title="Если выключить — акки пишут 24/7 (НЕ рекомендуется).">
                        </label>
                        <input type="number" class="form-control" id="warmup-quiet-start" value="23" min="0" max="23" style="width:55px;" title="Начало тихих часов">
                        <span class="text-muted">—</span>
                        <input type="number" class="form-control" id="warmup-quiet-end" value="7" min="0" max="23" style="width:55px;" title="Конец тихих часов">
                    </div>
                </div>
                <div>
                    <label class="form-label d-flex align-center gap-1">Задержка (сек)
                        <span class="text-xs text-muted" title="Случайная пауза между действиями каждого акка. Больше = естественнее.">ⓘ</span>
                    </label>
                    <div class="d-flex gap-1 align-center">
                        <input type="number" class="form-control w-70px" id="warmup-delay-min" value="60" min="10">
                        <span class="text-muted">—</span>
                        <input type="number" class="form-control w-70px" id="warmup-delay-max" value="300" min="30">
                    </div>
                </div>
                <div>
                    <label class="form-label d-flex align-center gap-1">Потоки
                        <span class="text-xs text-muted" title="Сколько аккаунтов работают одновременно.">ⓘ</span>
                    </label>
                    <input type="number" class="form-control w-70px" id="warmup-threads" value="1" min="1" max="20">
                </div>
            </div>

            <!-- Опции чата прогрева (показывается только для chat_flow) -->
            <div id="warmup-chat-opts-wrap" style="display:none;background:var(--bg-card-hover);border:1px solid var(--border);border-radius:6px;padding:8px 12px;">
                <div class="text-xs text-muted mb-1 fw-600">Опции чата прогрева</div>
                <div class="d-flex gap-4 flex-wrap fs-78">
                    <label class="d-flex align-center gap-2 cursor-pointer" title="Сообщения нумеруются как 001-01 (номер акка — номер сообщения). Удобно для отладки, но выглядит менее естественно.">
                        <input type="checkbox" class="form-check-input" id="warmup-id-format">
                        ID-формат (001-01)
                    </label>
                    <label class="d-flex align-center gap-2 cursor-pointer" title="После reply в чате акк с вероятностью ~40% продублирует сообщение в ЛС тому же собеседнику.">
                        <input type="checkbox" class="form-check-input" id="warmup-duplicate-dm" checked>
                        Дубль в ЛС после reply
                    </label>
                </div>
            </div>

            <!-- Дополнительные флаги -->
            <div class="d-flex gap-4 flex-wrap" style="font-size:0.8rem;">
                <label class="d-flex align-center gap-2 cursor-pointer" title="Игнорирует правый край 'Активных часов' и тянет прогрев до полуночи, пока не выполнит дневной план.">
                    <input type="checkbox" class="form-check-input" id="warmup-until-midnight">
                    Работать до 23:59
                </label>
                <label class="d-flex align-center gap-2 cursor-pointer" title="После окончания дневного плана прогрев остановится и будет ждать, пока вы вручную нажмёте 'Следующий день'. Без этой галочки — стартует сам в 00:00.">
                    <input type="checkbox" class="form-check-input" id="warmup-manual-next-day">
                    Ручной запуск следующего дня
                </label>
                <label class="d-flex align-center gap-2 cursor-pointer" title="По окончании всех дней прогрева аккаунты автоматически переедут в папку 'В работе'.">
                    <input type="checkbox" class="form-check-input" id="warmup-auto-move" checked>
                    Переместить в "В работе" после завершения
                </label>
            </div>

            <div class="d-flex justify-end">
                <button class="btn btn-accent btn-sm" onclick="saveWarmupConfig()">
                    <i class="bi bi-check"></i> Сохранить
                </button>
            </div>
        </div>
    </div>

    <!-- Сценарии прогрева -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-diagram-3 text-accent"></i> Сценарии прогрева</div>
        <div class="card-body" style="display:flex;flex-direction:column;gap:14px;">
            <div class="info-box">
                Включите сценарии которые будут выполняться во время прогрева. Чем разнообразнее активность — тем естественнее выглядит аккаунт для Telegram.
                <br><b>Важно:</b> все лимиты в сценариях считаются <u>на каждый аккаунт отдельно</u>, а не на всю пачку.
            </div>

            <!-- DM -->
            <div style="background:var(--bg-card-hover);border:1px solid var(--border);border-radius:8px;padding:10px 14px;">
                <label class="d-flex align-center gap-2 cursor-pointer">
                    <input type="checkbox" class="form-check-input" id="scn-dm" checked>
                    <span style="font-weight:600;font-size:0.78rem;"><i class="bi bi-chat-dots-fill" style="color:var(--text-muted);margin-right:4px;"></i>Переписка между аккаунтами</span>
                </label>
                <p style="margin-top:4px;font-size:0.66rem;color:var(--text-muted);margin-bottom:6px;line-height:1.5;">
                    Аккаунты общаются друг с другом в ЛС как друзья. Это <b>основа прогрева</b> — оставляйте включённым.
                </p>
                <div class="d-flex gap-2 align-center flex-wrap mb-2-x">
                    <label style="font-size:0.66rem;color:var(--text-muted);">Сообщений/день <b>(на акк)</b>:</label>
                    <input type="number" class="form-control" id="scn-dm-msgs-per-day" value="0" min="0" max="200" style="width:65px;font-size:0.72rem;" placeholder="auto">
                    <span class="tt" data-tip="Сколько ЛС-сообщений в день будет отправлять каждый аккаунт другим из пула. 0 = автоматический режим: 4-6 в первые дни, 12-20 к концу прогрева. Поставь число чтобы зафиксировать темп: 5 = очень безопасно, 10 = средне, 20+ = быстро. Учти: если поставить выше — растёт риск спам-блока.">
                        <svg class="icon-inline" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
                    </span>
                </div>
                <label class="d-flex align-center gap-2" style="cursor:pointer;font-size:0.7rem;color:var(--text-secondary);" title="Перед отправкой нового сообщения акк читает последнее входящее от собеседника и отвечает по смыслу (через AI). Без галочки — пишет новое сообщение на случайную тему.">
                    <input type="checkbox" class="form-check-input" id="scn-reply" checked>
                    Отвечать контекстно на последнее входящее сообщение
                </label>
            </div>

            <!-- Channels -->
            <div style="background:var(--bg-card-hover);border:1px solid var(--border);border-radius:8px;padding:12px 14px;">
                <label class="d-flex align-center gap-2 cursor-pointer">
                    <input type="checkbox" class="form-check-input" id="scn-channels">
                    <span style="font-weight:600;font-size:0.85rem;"><i class="bi bi-megaphone" style="color:var(--accent-light);margin-right:4px;"></i>Подписка на каналы</span>
                </label>
                <p style="margin-top:6px;font-size:0.72rem;color:var(--text-muted);margin-bottom:8px;">
                    Каждый акк подписывается на каналы из списка ниже. Повышает траст — у живого юзера всегда есть подписки. Ниже укажите каналы (по одному юзернейму на строку).
                </p>
                <div class="d-flex gap-2 align-center flex-wrap">
                    <label style="font-size:0.72rem;color:var(--text-muted);">Подписок/день <b>(на акк)</b>:</label>
                    <input type="number" class="form-control" id="scn-channels-per-day" value="3" min="1" max="10" style="width:60px;font-size:0.75rem;" title="Сколько новых подписок в день сделает каждый аккаунт. Рекомендуется 2-5.">
                    <button class="btn btn-outline btn-sm fs-70" onclick="loadDefaultChannels()">Список по умолчанию</button>
                </div>
                <div class="mt-2" style="background:rgba(99,102,241,0.05);border:1px solid var(--border);border-radius:6px;padding:10px 12px;">
                    <div style="font-size:0.72rem;color:var(--text-muted);margin-bottom:6px;line-height:1.5;">
                        Можно подгрузить свой список каналов по ссылке (raw-файл со списком юзернеймов, по одному на строку). Подойдёт ваш gist, raw-файл из репо, pastebin. У разных клиентов будут разные пулы — это снимает риск «общий fingerprint».
                    </div>
                    <div class="d-flex gap-2 align-center flex-wrap">
                        <input type="text" class="form-control" id="warmup-github-url" placeholder="https://raw.githubusercontent.com/USER/REPO/main/channels.txt" style="flex:1;min-width:280px;font-size:0.72rem;font-family:monospace;">
                        <button class="btn btn-outline btn-sm fs-70" onclick="fetchGithubChannels()">
                            <i class="bi bi-cloud-download"></i> Подгрузить
                        </button>
                        <button class="btn btn-outline btn-sm fs-70" onclick="clearGithubPool()" title="Очистить локальный кеш скачанных каналов">
                            <i class="bi bi-trash"></i>
                        </button>
                    </div>
                    <div id="warmup-github-status" style="margin-top:6px;font-size:0.66rem;color:var(--text-muted);"></div>
                </div>
                <textarea id="scn-channels-list" class="form-control mt-2" rows="4" placeholder="Список каналов (по одному на строку, без @)&#10;Пример:&#10;telegram&#10;tginfo&#10;durov" style="font-size:0.72rem;font-family:monospace;"></textarea>
            </div>

            <!-- Reactions -->
            <div style="background:var(--bg-card-hover);border:1px solid var(--border);border-radius:8px;padding:12px 14px;">
                <label class="d-flex align-center gap-2 cursor-pointer">
                    <input type="checkbox" class="form-check-input" id="scn-reactions">
                    <span style="font-weight:600;font-size:0.85rem;">👍 Реакции в каналах</span>
                </label>
                <p style="margin-top:6px;font-size:0.72rem;color:var(--text-muted);margin-bottom:8px;">
                    Ставит реакции (👍❤️🔥) на последние посты каналов, на которые подписан аккаунт. Работает только вместе со сценарием "Подписка на каналы" — без подписок реагировать не на что.
                </p>
                <div class="d-flex gap-2 align-center">
                    <label style="font-size:0.72rem;color:var(--text-muted);">Реакций/день <b>(на акк)</b>:</label>
                    <input type="number" class="form-control" id="scn-reactions-per-day" value="5" min="1" max="30" style="width:60px;font-size:0.75rem;" title="Сколько реакций в день поставит каждый аккаунт. За раз ставит 1-3 реакции в одном канале.">
                </div>
            </div>

            <!-- Own private chat/channel -->
            <div class="info-box">
                <div style="font-weight:700;color:#60a5fa;font-size:0.85rem;margin-bottom:6px;">🏠 Свой чат и канал</div>
                <p style="font-size:0.72rem;color:var(--text-muted);margin-bottom:10px;">
                    Приватная среда где участвуют только ваши прогреваемые аккаунты. Имитируем активность в замкнутом контуре.
                    <br><span style="color:#f59e0b;">⚠ Не «100% безопасно»: Telegram может счесть набор однотипно созданных приватных групп бот-сетью и заморозить аккаунты. Используйте разные имена, не запускайте сразу на всех — начинайте с 3-5.</span>
                </p>

                <!-- Own chat toggle -->
                <label class="d-flex align-center gap-2 mb-2 cursor-pointer">
                    <input type="checkbox" class="form-check-input" id="scn-own-chat">
                    <span style="font-weight:600;font-size:0.8rem;"><i class="bi bi-journal-text" style="color:var(--accent-light);margin-right:4px;"></i>Свой чат (дневник)</span>
                </label>
                <div style="margin-left:24px;margin-bottom:10px;font-size:0.72rem;color:var(--text-muted);">
                    Аккаунты по очереди пишут короткие бытовые сообщения ("Кофе с утра", "Погулял") в общий чат и отвечают друг другу. Нажмите "Создать чат" — бот сам заведёт приватную группу и добавит туда всех прогреваемых акков.
                    <div id="own-chat-status" class="mt-1 fs-70"></div>
                    <div style="margin-top:8px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;">
                        <label style="font-size:0.7rem;color:var(--text-muted);" title="Размер подгруппы для разбиения. 0 — один общий чат на всех (старое поведение). 4-7 — разделить акки на N маленьких чатов, в каждом по subgroup_size акков. Это снимает «одинаковый набор участников» у TG антифрод — он видит несколько маленьких комьюнити вместо одной большой сети.">Размер подгруппы:</label>
                        <input type="number" class="form-control" id="own-chat-subgroup" value="5" min="0" max="30" style="width:60px;font-size:0.7rem;">
                        <button class="btn btn-outline btn-sm" onclick="createWarmupChat()" style="font-size:0.7rem;padding:3px 10px;">
                            <i class="bi bi-plus-circle"></i> Создать чаты
                        </button>
                        <button class="btn btn-outline btn-sm" onclick="refreshWarmupChat()" style="font-size:0.7rem;padding:3px 10px;" title="Подключить к существующему чату тех акков, которые туда не попали">
                            <i class="bi bi-arrow-repeat"></i> Догнать участников
                        </button>
                    </div>
                    <div style="margin-top:6px;font-size:0.66rem;color:var(--text-muted);line-height:1.4;">
                        💡 С разбиением: 21 акк × подгруппа 5 = 4 чата по 5-6 человек. Меньше пересечений = меньше fingerprint бот-сети.
                    </div>
                </div>

                <!-- Diaries toggle -->
                <label class="d-flex align-center gap-2 mb-2 cursor-pointer">
                    <input type="checkbox" class="form-check-input" id="scn-diaries">
                    <span style="font-weight:600;font-size:0.8rem;"><i class="bi bi-journals" style="color:var(--accent-light);margin-right:4px;"></i>Личные каналы-дневники</span>
                </label>
                <div style="margin-left:24px;font-size:0.72rem;color:var(--text-muted);line-height:1.55;">
                    Каждый аккаунт ведёт свой приватный канал на одну из тем (поиск работы / обучение / путешествия / спорт / фриланс). Посты идут по нарастающей story arc — день за днём.
                    Другие аккаунты находят канал по invite-ссылке которую владелец постит в общий чат прогрева, подписываются и ставят реакции. Полная имитация активности живого блогера.
                    <div class="mt-8" >
                        <span style="display:inline-block;font-size:0.68rem;color:var(--text-muted);margin-right:4px;">Темы:</span>
                        <label class="form-check-inline" style="font-size:0.7rem;margin-right:8px;"><input type="checkbox" class="diary-theme" value="work" checked> Работа</label>
                        <label class="form-check-inline" style="font-size:0.7rem;margin-right:8px;"><input type="checkbox" class="diary-theme" value="learning" checked> Учёба</label>
                        <label class="form-check-inline" style="font-size:0.7rem;margin-right:8px;"><input type="checkbox" class="diary-theme" value="travel" checked> Путешествия</label>
                        <label class="form-check-inline" style="font-size:0.7rem;margin-right:8px;"><input type="checkbox" class="diary-theme" value="sport" checked> Спорт</label>
                        <label class="form-check-inline" style="font-size:0.7rem;margin-right:8px;"><input type="checkbox" class="diary-theme" value="freelance" checked> Фриланс</label>
                    </div>
                    <div id="diaries-status" class="mt-1" style="font-size:0.7rem;margin-top:6px;"></div>
                    <div style="margin-top:8px;display:flex;gap:6px;flex-wrap:wrap;">
                        <button class="btn btn-outline btn-sm" onclick="createWarmupDiaries()" style="font-size:0.7rem;padding:3px 10px;">
                            <i class="bi bi-plus-circle"></i> Создать дневники для всех
                        </button>
                        <button class="btn btn-outline btn-sm" onclick="loadDiariesStatus()" style="font-size:0.7rem;padding:3px 10px;">
                            <i class="bi bi-arrow-clockwise"></i> Обновить
                        </button>
                        <button class="btn btn-outline btn-sm" onclick="clearDiariesRecord()" style="font-size:0.7rem;padding:3px 10px;color:var(--danger);border-color:var(--danger);">
                            <i class="bi bi-trash"></i> Сбросить
                        </button>
                    </div>
                </div>
            </div>

            <button class="btn btn-accent btn-sm" onclick="saveScenarios()" style="align-self:flex-start;">
                <i class="bi bi-check"></i> Сохранить сценарии
            </button>
        </div>
    </div>

    <!-- Blacklist -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-shield-exclamation text-danger"></i> Чёрный список слов</div>
        <div class="card-body">
            <textarea class="form-control mb-2" id="warmup-blacklist" rows="5"
                placeholder="Одно слово на строку" style="font-size:0.75rem;"></textarea>
            <button class="btn btn-outline btn-sm" onclick="saveWarmupBlacklist()">
                <i class="bi bi-check"></i> Сохранить
            </button>
        </div>
    </div>
</div>

<!-- ═══ TAB: История запусков ═══ -->
<div class="section" id="tab-history">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-clock-history" style="color:#94a3b8;"></i> История запусков</div>
        <div class="card-body">
            <div class="info-box">
                Последние 50 завершённых задач по всем модулям: подписка, рассылка, DM, парсер, прогрев. Статусы и счётчики.
            </div>
            <div class="d-flex justify-between align-center mb-2">
                <span class="text-sm text-muted" id="history-count">—</span>
                <button class="btn btn-outline btn-sm" onclick="loadHistory()">
                    <i class="bi bi-arrow-clockwise"></i> Обновить
                </button>
            </div>
            <div id="history-table" style="max-height:600px;overflow:auto;font-size:0.78rem;"></div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Переавторизация ═══ -->
<div class="section" id="tab-reauth">
    <!-- Карточка 1: Переавторизация -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-arrow-repeat" style="color:#60a5fa;"></i> Переавторизация</div>
        <div class="card-body">
            <div class="info-box">
                Пересоздаёт сессии аккаунтов с новыми параметрами (устройство, версия, язык). В Telegram они появятся как новые сессии — помогает при ограничениях и подозрениях от Telegram.
            </div>

            <label class="form-label">Выбор аккаунтов</label>
            <div class="d-flex gap-2 align-center mb-2 flex-wrap">
                <button class="btn btn-outline btn-sm" onclick="openReauthAccPicker()">
                    <i class="bi bi-people"></i> Выбрать аккаунты
                </button>
                <span class="text-sm text-muted" id="reauth-selected-count">0 выбрано</span>
            </div>
            <div id="reauth-acc-list" class="d-flex flex-wrap gap-1 mb-3 fs-70"></div>

            <label class="form-label">Параметры для аккаунтов</label>
            <div class="d-flex gap-2 align-center mb-3 flex-wrap">
                <select class="form-control" id="reauth-preset" style="max-width:260px;" onchange="reauthPresetChanged()">
                    <option value="custom">Свои параметры</option>
                    <option value="mixed">Встроенные вперемешку</option>
                    <option value="web">Web</option>
                    <option value="tdesktop" selected>Telegram Desktop</option>
                    <option value="android">Android</option>
                </select>
                <button class="btn btn-outline btn-sm" onclick="openReauthCustomModal()">
                    <i class="bi bi-list-task"></i> Свои параметры
                </button>
            </div>

            <label class="form-label">Новая 2FA <span class="text-xs text-muted">(опционально)</span></label>
            <input type="text" class="form-control mb-3" id="reauth-new-2fa" placeholder="Оставьте пусто чтобы не менять">

            <details class="mb-3" open>
                <summary style="cursor:pointer;font-weight:600;font-size:0.82rem;color:var(--text-primary);">Дополнительные опции</summary>
                <div style="display:flex;flex-direction:column;gap:8px;margin-top:10px;font-size:0.8rem;">
                    <label class="d-flex align-center gap-2 cursor-pointer">
                        <input type="checkbox" class="form-check-input" id="reauth-close-others" checked>
                        Закрывать старые сессии
                    </label>
                    <label class="d-flex align-center gap-2 cursor-pointer">
                        <input type="checkbox" class="form-check-input" id="reauth-delete-dialog" checked>
                        Удалять диалог с Telegram после переавторизации
                    </label>
                    <label class="d-flex align-center gap-2 cursor-pointer">
                        <input type="checkbox" class="form-check-input" id="reauth-continue-limit">
                        Продолжать даже если сессия моложе 24ч (пропустить закрытие)
                    </label>
                    <label class="d-flex align-center gap-2 cursor-pointer">
                        <input type="checkbox" class="form-check-input" id="reauth-keep-original" checked>
                        Сохранить оригинал (новый файл в папке Переавторизованные/)
                    </label>
                </div>
            </details>

            <div class="d-flex gap-2 mb-2">
                <button class="btn btn-accent btn-sm" onclick="startReauth()" id="btn-reauth-start">
                    <i class="bi bi-play-fill"></i> Запустить
                </button>
                <button class="btn btn-danger btn-sm" onclick="stopReauth()" id="btn-reauth-stop" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Стоп
                </button>
            </div>

            <div id="reauth-progress" style="display:none;" class="mb-2">
                <div class="d-flex align-center justify-between mb-1">
                    <span class="text-sm" id="reauth-progress-text">0/0</span>
                    <span class="text-xs text-muted" id="reauth-stats"></span>
                </div>
                <div class="progress" style="height:6px;"><div class="progress-bar" id="reauth-progress-bar" style="width:0%;background:linear-gradient(90deg,#60a5fa,#a78bfa);"></div></div>
            </div>

            <textarea id="reauth-log" readonly class="form-control" rows="8" style="font-size:0.7rem;background:var(--bg-dark);color:var(--text-primary);font-family:monospace;display:none;"></textarea>
        </div>
    </div>
</div>

<!-- ═══ TAB: Конвертер tdata → session ═══ -->
<div class="section" id="tab-conv-t2s">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-file-earmark-arrow-down text-success"></i> Конвертер tdata → session</div>
        <div class="card-body">
            <div style="background:var(--surface-success-bg);border:1px solid var(--surface-success-border);border-radius:8px;padding:10px 14px;margin-bottom:12px;font-size:0.72rem;color:var(--text-muted);line-height:1.6;">
                Положите папки tdata в указанную директорию. Каждая папка должна содержать каталог <code>D877F783D5D3EF8C</code>. Результат — .session + .json в папке "В работе".
            </div>

            <label class="form-label">Путь к папке с tdata <span class="text-xs text-muted">(если пусто — берётся <code>Аккаунты/Конвертер tdata → session/</code>)</span></label>
            <input type="text" class="form-control mb-3" id="reauth-t2s-folder" placeholder="оставьте пусто чтобы использовать папку по умолчанию">

            <div class="d-flex gap-3 flex-wrap mb-3">
                <div>
                    <label class="form-label fs-72">Количество потоков</label>
                    <input type="number" class="form-control" id="reauth-t2s-threads" value="5" min="1" max="30" style="width:80px;font-size:0.8rem;">
                </div>
                <label class="d-flex align-center gap-2" style="cursor:pointer;font-size:0.8rem;align-self:flex-end;margin-bottom:6px;">
                    <input type="checkbox" class="form-check-input" id="reauth-t2s-keep">
                    Не убирать сконвертированные аккаунты
                </label>
            </div>

            <details class="mb-3">
                <summary style="cursor:pointer;font-weight:600;font-size:0.82rem;color:var(--text-primary);">Дополнительные опции</summary>
                <div style="display:flex;flex-direction:column;gap:8px;margin-top:10px;font-size:0.8rem;">
                    <div>
                        <label class="form-label fs-72">Название файла с 2FA</label>
                        <input type="text" class="form-control" id="reauth-t2s-pwd" value="Password2FA.txt" style="font-size:0.8rem;">
                    </div>
                    <div>
                        <label class="form-label fs-72">Глубина поиска папок</label>
                        <input type="number" class="form-control" id="reauth-t2s-depth" value="4" min="1" max="10" style="font-size:0.8rem;width:80px;">
                    </div>
                </div>
            </details>

            <button class="btn btn-accent btn-sm" onclick="runTdataToSession()">
                <i class="bi bi-rocket-takeoff"></i> Запустить
            </button>
            <div id="t2s-progress" class="mt-2" style="display:none;">
                <div class="d-flex align-center justify-between mb-1">
                    <span class="text-sm" id="t2s-progress-text">0/0</span>
                    <span class="text-xs text-muted" id="t2s-stats"></span>
                </div>
                <div class="progress" style="height:6px;"><div id="t2s-progress-bar" style="width:0%;background:linear-gradient(90deg,#22c55e,#4ade80);height:100%;border-radius:3px;transition:width .3s;"></div></div>
            </div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Конвертер session → tdata ═══ -->
<div class="section" id="tab-conv-s2t">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-file-earmark-arrow-up text-warning"></i> Конвертер session → tdata</div>
        <div class="card-body">
            <div class="info-box info-box--warning">
                Выберите аккаунты и сконвертируйте их в tdata-папки для использования в Telegram Desktop. Результат — в <code>data/tdata_out/</code>.
            </div>

            <div class="d-flex gap-2 align-center mb-2 flex-wrap">
                <button class="btn btn-outline btn-sm" onclick="openReauthAccPicker('s2t')">
                    <i class="bi bi-people"></i> Выбрать аккаунты
                </button>
                <span class="text-sm text-muted" id="s2t-selected-count">0 выбрано</span>
            </div>
            <div id="s2t-acc-list" class="d-flex flex-wrap gap-1 mb-3 fs-70"></div>

            <div class="d-flex gap-3 flex-wrap mb-3" style="align-items:flex-end;">
                <div>
                    <label class="form-label fs-72">Аккаунтов в одну tdata</label>
                    <input type="number" class="form-control" id="s2t-pack" value="1" min="1" max="10" style="width:80px;font-size:0.8rem;">
                </div>
                <div>
                    <label class="form-label fs-72">Количество потоков</label>
                    <input type="number" class="form-control" id="s2t-threads" value="5" min="1" max="30" style="width:80px;font-size:0.8rem;">
                </div>
                <label class="d-flex align-center gap-2" style="cursor:pointer;font-size:0.8rem;margin-bottom:6px;">
                    <input type="checkbox" class="form-check-input" id="s2t-offline">
                    Оффлайн-конвертация
                </label>
            </div>

            <details class="mb-3">
                <summary style="cursor:pointer;font-weight:600;font-size:0.82rem;color:var(--text-primary);">Дополнительные опции</summary>
                <div style="display:flex;flex-direction:column;gap:8px;margin-top:10px;font-size:0.8rem;">
                    <label class="d-flex align-center gap-2 cursor-pointer">
                        <input type="checkbox" class="form-check-input" id="s2t-save-2fa" checked>
                        Сохранять 2FA в файл
                    </label>
                    <label class="d-flex align-center gap-2 cursor-pointer">
                        <input type="checkbox" class="form-check-input" id="s2t-copy-orig" checked>
                        Копировать оригинал аккаунта в папку tdata
                    </label>
                </div>
            </details>

            <button class="btn btn-accent btn-sm" onclick="runSessionToTdata()">
                <i class="bi bi-rocket-takeoff"></i> Запустить
            </button>
            <div id="s2t-progress" class="mt-2" style="display:none;">
                <div class="d-flex align-center justify-between mb-1">
                    <span class="text-sm" id="s2t-progress-text">0/0</span>
                    <span class="text-xs text-muted" id="s2t-stats"></span>
                </div>
                <div class="progress" style="height:6px;"><div id="s2t-progress-bar" style="width:0%;background:linear-gradient(90deg,#f59e0b,#fbbf24);height:100%;border-radius:3px;transition:width .3s;"></div></div>
            </div>
        </div>
    </div>
</div>

<!-- Модалка: Свои параметры -->
<div id="reauth-custom-modal" style="display:none;position:fixed;inset:0;background:rgba(0,0,0,0.7);z-index:500;align-items:center;justify-content:center;">
    <div style="background:var(--bg-card-hover);border:1px solid var(--border);border-radius:14px;padding:22px;max-width:440px;width:90%;max-height:85vh;overflow-y:auto;">
        <h3 style="color:#fff;font-size:1.1rem;margin-bottom:14px;">Свои параметры</h3>
        <div style="display:flex;flex-direction:column;gap:10px;font-size:0.8rem;">
            <div><label class="form-label">API ID</label><input type="number" class="form-control" id="cp-api-id"></div>
            <div><label class="form-label">API Hash</label><input type="text" class="form-control" id="cp-api-hash"></div>
            <div><label class="form-label">Device Model</label><input type="text" class="form-control" id="cp-device" placeholder="PC 64bit"></div>
            <div><label class="form-label">System Version</label><input type="text" class="form-control" id="cp-sysver" placeholder="Windows 10"></div>
            <div><label class="form-label">App Version</label><input type="text" class="form-control" id="cp-appver" placeholder="6.2.2 x64"></div>
            <div class="d-flex gap-2">
                <div class="flex-1" ><label class="form-label">Lang Code</label><input type="text" class="form-control" id="cp-lang" value="en"></div>
                <div class="flex-1" ><label class="form-label">System Lang</label><input type="text" class="form-control" id="cp-syslang" value="en-US"></div>
            </div>
        </div>
        <div class="d-flex gap-2 mt-3">
            <button class="btn btn-accent btn-sm" onclick="saveReauthCustomPreset()">Сохранить</button>
            <button class="btn btn-outline btn-sm" onclick="document.getElementById('reauth-custom-modal').style.display='none';">Отмена</button>
        </div>
    </div>
</div>

<!-- ═══ TAB: Настройки ═══ -->
<div class="section" id="tab-settings">
    <!-- Тайминги переехали в каждый модуль (Подписка / Рассылка / ЛС / Инвайтер) — раскрывашка под основной формой -->
    <div class="card mb-3">
        <div class="card-body" style="padding:14px 16px;">
            <div style="font-size:0.78rem;color:var(--text-muted);line-height:1.55;">
                <i class="bi bi-info-circle text-accent"></i>
                <b>Тайминги перенесены в каждый модуль</b> — открой нужную вкладку (Подписка / Рассылка / По ЛС / Инвайтер), внизу формы будет раскрывашка «Тайминги &lt;модуль&gt;». Изменения сохраняются автоматически.
            </div>
        </div>
    </div>

    <!-- Глобальная защита аккаунтов -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-shield-check text-success"></i> Глобальная защита аккаунтов</div>
        <div class="card-body">
            <div class="info-box note-row">
                Эти настройки действуют во всех модулях по умолчанию. В каждом модуле можно переопределить отдельно (раскрывашка «Защита аккаунта»).
            </div>
            <label class="ad-check"><input type="checkbox" id="global-pre-spam-check" onchange="saveGlobalAdSettings()"> <span>Перед стартом любой задачи проверять аккаунты на спам-блок<span class="ad-hint">Один проход через @SpamBot — заблокированные пропустятся, чисто-живые пойдут в работу</span></span></label>
        </div>
    </div>

    <!-- Расписание / рабочие часы -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-clock text-info"></i> Расписание работы</div>
        <div class="card-body">
            <div class="info-box note-row">
                Если включено — задачи можно запускать только в указанные часы. Боты 24/7 палятся, а живой человек ночью спит.
            </div>
            <label class="ad-check"><input type="checkbox" id="schedule-enabled" onchange="saveSchedule()"> <span>Работать только в указанные часы<span class="ad-hint">Снаружи окна софт откажет в запуске новых задач (текущие не остановятся)</span></span></label>
            <div class="grid-2 mb-2 mt-8">
                <div>
                    <label class="form-label">Начало (часы, 0-23)</label>
                    <input type="number" class="form-control" id="schedule-from" value="9" min="0" max="23" onchange="saveSchedule()">
                </div>
                <div>
                    <label class="form-label">Конец (часы, 1-24)</label>
                    <input type="number" class="form-control" id="schedule-to" value="23" min="1" max="24" onchange="saveSchedule()">
                </div>
            </div>
            <div style="font-size:0.7rem;color:var(--text-muted-strong);">
                Текущее время системы: <b id="schedule-now">—</b>
            </div>
        </div>
    </div>

    <!-- TG-бот уведомления -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-telegram" style="color:#5db7ff;"></i> Уведомления через Telegram-бот</div>
        <div class="card-body">
            <div class="info-box note-row">
                Создай бота через @BotFather, получи токен. Затем напиши боту /start и укажи свой chat_id (узнать через @userinfobot).
                Софт будет слать тебе алерты в Telegram — даже если программа не открыта.
            </div>
            <div class="grid-2 mb-2">
                <div>
                    <label class="form-label">Bot Token</label>
                    <input type="text" class="form-control" id="tg-bot-token" placeholder="123456:AAH...xyz">
                </div>
                <div>
                    <label class="form-label">Твой Chat ID</label>
                    <input type="text" class="form-control" id="tg-bot-chat-id" placeholder="123456789">
                </div>
            </div>
            <label class="ad-check"><input type="checkbox" id="tg-notify-spamblock"> <span>Уведомлять когда аккаунт ушёл в спам-блок</span></label>
            <label class="ad-check"><input type="checkbox" id="tg-notify-task-done"> <span>Уведомлять когда задача завершена</span></label>
            <label class="ad-check"><input type="checkbox" id="tg-notify-error"> <span>Уведомлять при критических ошибках</span></label>
            <div class="d-flex gap-2 mt-2 mt-8">
                <button class="btn btn-accent btn-sm" onclick="saveTgBot()"><i class="bi bi-save"></i> Сохранить</button>
                <button class="btn btn-outline btn-sm" onclick="testTgBot()"><i class="bi bi-send"></i> Тест-сообщение</button>
                <span id="tg-bot-status" class="text-xs text-muted" style="margin-left:auto;align-self:center;"></span>
            </div>
        </div>
    </div>

    <!-- Внешний вид: переключатель тем -->
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-palette" style="color:#5db7ff;"></i> Внешний вид</div>
        <div class="card-body">
            <div class="info-box" style="margin-bottom:12px;font-size:0.72rem;">
                Тема меняется мгновенно, без перезапуска. Выбор сохраняется между запусками.
            </div>
            <div class="theme-picker" id="theme-picker">
                <button type="button" class="theme-card" data-theme="calm" onclick="selectTheme('calm')">
                    <div class="theme-card__preview theme-preview-calm">
                        <span class="tp-line tp-line-bg"></span>
                        <span class="tp-line tp-line-card"></span>
                        <span class="tp-line tp-line-card2"></span>
                        <span class="tp-line tp-line-accent"></span>
                    </div>
                    <div class="theme-card__name">Спокойная</div>
                    <div class="theme-card__desc">Тёмно-синяя, текущая</div>
                </button>
                <button type="button" class="theme-card" data-theme="amoled" onclick="selectTheme('amoled')">
                    <div class="theme-card__preview theme-preview-amoled">
                        <span class="tp-line tp-line-bg"></span>
                        <span class="tp-line tp-line-card"></span>
                        <span class="tp-line tp-line-card2"></span>
                        <span class="tp-line tp-line-accent"></span>
                    </div>
                    <div class="theme-card__name">AMOLED</div>
                    <div class="theme-card__desc">Чёрный для OLED</div>
                </button>
                <button type="button" class="theme-card" data-theme="light" onclick="selectTheme('light')">
                    <div class="theme-card__preview theme-preview-light">
                        <span class="tp-line tp-line-bg"></span>
                        <span class="tp-line tp-line-card"></span>
                        <span class="tp-line tp-line-card2"></span>
                        <span class="tp-line tp-line-accent"></span>
                    </div>
                    <div class="theme-card__name">Светлая</div>
                    <div class="theme-card__desc">Белая, для дневного</div>
                </button>
            </div>
        </div>
    </div>

    <!-- AI / нейродиалоги -->
    <div class="card mb-3">
        <div class="card-header cursor-pointer" onclick="toggleSettingsSection('settings-ai')">
            <i class="bi bi-cpu text-purple"></i> <b>AI / нейродиалоги</b>
            <span id="ai-status-badge" class="badge-soft badge-soft--muted" style="margin-left:8px;font-size:0.62rem;">не настроено</span>
            <i class="bi bi-chevron-down text-muted" style="margin-left:auto;font-size:0.7rem;" id="chev-settings-ai"></i>
        </div>
        <div class="card-body" id="settings-ai" style="display:none;">

            <div class="info-box info-box--accent" style="margin-bottom:12px;font-size:0.7rem;line-height:1.55;">
                <b>Зачем:</b> с AI прогрев и комменты звучат как живые люди — не повторяющиеся шаблоны, а контекстные ответы по теме.<br>
                <b>Кто платит:</b> ты сам, своему провайдеру AI (OpenAI / OpenRouter / DeepSeek и т.п.). TelePush только выступает клиентом твоего ключа — мы не видим запросов.<br>
                <b>Стоимость:</b> зависит от модели. DeepSeek через OpenRouter ~$0.0002 за диалог (5 диалогов на акк × 30 акков × 30 дней ≈ <b>$0.9 за весь месяц прогрева</b>). GPT-4o-mini ~$0.001 за диалог (~$5/мес).
            </div>

            <div class="grid-2 mb-2">
                <div>
                    <label class="form-label">Провайдер</label>
                    <select class="form-control" id="ai-provider" onchange="onAiProviderChange()"></select>
                </div>
                <div>
                    <label class="form-label">Модель</label>
                    <select class="form-control" id="ai-model"></select>
                </div>
            </div>

            <div class="mb-2" id="ai-url-row" style="display:none;">
                <label class="form-label">URL endpoint</label>
                <input type="text" class="form-control" id="ai-url" placeholder="https://api.example.com/v1">
            </div>

            <div class="mb-2">
                <label class="form-label">API ключ <span id="ai-has-key-badge" style="display:none;font-size:0.65rem;color:var(--success);margin-left:6px;">✓ сохранён</span></label>
                <div class="d-flex gap-2 align-center">
                    <input type="password" class="form-control" id="ai-key" placeholder="sk-... (вставь сюда)" style="font-family:monospace;font-size:0.75rem;flex:1;">
                    <button class="btn btn-outline btn-sm" onclick="aiTest()" id="btn-ai-test"><i class="bi bi-lightning-charge"></i> Тест</button>
                </div>
                <div id="ai-test-result" style="margin-top:6px;font-size:0.7rem;"></div>
                <div id="ai-signup-hint" style="margin-top:6px;font-size:0.68rem;color:var(--text-muted);line-height:1.5;"></div>
            </div>

            <div class="grid-2 mb-2">
                <div>
                    <label class="form-label">Дневной бюджет, $ <span class="tt" data-tip="Максимум потратишь в день. Когда лимит достигнут — AI отключается до следующего дня (fallback на шаблоны). 0 = без лимита (опасно если введёшь дорогой ключ).">
                        <svg class="icon-inline" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
                    </span></label>
                    <input type="number" class="form-control" id="ai-budget-usd" value="5" min="0" max="1000" step="0.5" style="width:120px;">
                </div>
                <div>
                    <label class="form-label">Запросов в день <span class="tt" data-tip="Максимум HTTP-запросов к AI в сутки. 0 = без лимита.">
                        <svg class="icon-inline" width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 015.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
                    </span></label>
                    <input type="number" class="form-control" id="ai-budget-req" value="0" min="0" step="100" placeholder="без лимита" style="width:140px;">
                </div>
            </div>

            <details class="mt-8" >
                <summary style="cursor:pointer;font-size:0.72rem;color:var(--text-muted);padding:6px 0;">
                    <i class="bi bi-chat-quote"></i> Промпты под свою тематику (продвинутое)
                </summary>
                <div style="padding:8px 0 0;">
                    <label class="form-label">Темы для нейродиалогов <span style="color:var(--text-muted);font-weight:normal;font-size:0.65rem;">(каждая с новой строки — софт случайно выбирает на пару)</span></label>
                    <textarea class="form-control mb-2 fs-72" id="ai-dialog-topics" rows="4" placeholder="работа&#10;выходные&#10;фильмы&#10;еда&#10;спорт"></textarea>

                    <label class="form-label">Свой системный промпт для диалогов <span style="color:var(--text-muted);font-weight:normal;font-size:0.65rem;">(если пусто — стандартный)</span></label>
                    <textarea class="form-control mb-2" id="ai-custom-dialog-prompt" rows="5" placeholder="Используется {persona} и {topic} — подставляются автоматически." style="font-size:0.72rem;font-family:monospace;"></textarea>

                    <label class="form-label">Свой системный промпт для комментов</label>
                    <textarea class="form-control mb-2" id="ai-custom-comment-prompt" rows="5" placeholder="Используется {persona} и {cta_block}. Если пусто — стандартный." style="font-size:0.72rem;font-family:monospace;"></textarea>

                    <label class="form-label">CTA для нейрокомментов <span style="color:var(--text-muted);font-weight:normal;font-size:0.65rem;">(куда вести, если комментарий органично подходит)</span></label>
                    <input type="text" class="form-control mb-2" id="ai-comment-cta" placeholder="Например: 'упоминай канал @mychannel' или пусто — без рекламы">
                </div>
            </details>

            <div class="d-flex gap-2 align-center mt-2 flex-wrap">
                <label class="d-flex align-center gap-2" style="cursor:pointer;font-size:0.78rem;">
                    <input type="checkbox" class="form-check-input" id="ai-enabled">
                    <b>Включить AI</b> (без галки — софт работает только на шаблонах)
                </label>
                <button class="btn btn-accent btn-sm ml-auto" onclick="aiSave()">
                    <i class="bi bi-check-lg"></i> Сохранить
                </button>
            </div>

            <div id="ai-spent-info" style="margin-top:10px;font-size:0.68rem;color:var(--text-muted);"></div>
            <div id="ai-quota-warning" style="display:none;margin-top:8px;padding:10px 12px;border-radius:6px;background:rgba(239,68,68,0.1);border-left:3px solid #ef4444;font-size:0.72rem;line-height:1.5;">
                <b style="color:#ef4444;">⚠ Бюджет AI на сегодня исчерпан</b><br>
                Прогрев сейчас работает на встроенных шаблонах (без AI). Если хочешь продолжить с AI — пополни баланс провайдера или увеличь дневной лимит выше.<br>
                Помощь: <a id="ai-support-link" data-support-link href="https://t.me/robi_telegram" target="_blank" style="color:var(--accent-light);">связаться с саппортом</a>
            </div>

            <!-- AI-пулы для прогрева -->
            <div class="mt-3" style="border-top:1px solid var(--border);padding-top:14px;">
                <div style="font-weight:600;font-size:0.82rem;margin-bottom:4px;">
                    <i class="bi bi-database-fill-add" style="color:var(--accent-light);"></i> AI-пулы для прогрева
                </div>
                <p style="font-size:0.7rem;color:var(--text-muted);line-height:1.55;margin-bottom:10px;">
                    Одной кнопкой сгенерируй уникальные имена чатов, юзернеймы, приветствия и тексты дневников — индивидуально для твоей инсталляции TelePush. Это снимает риск массового бана: Telegram не сможет «забанить пул» потому что у каждого клиента он свой.
                    <br><b>Стоимость:</b> ~$0.05-0.15 за полный пересчёт (одноразово). Промпты встроены в софт — настраивать ничего не нужно.
                </p>
                <div id="ai-pool-status" style="font-size:0.7rem;color:var(--text-muted);margin-bottom:8px;">Пулы не сгенерированы — используются встроенные шаблоны.</div>
                <div id="ai-pool-progress" style="display:none;margin-bottom:8px;">
                    <div class="progress mb-1" style="height:8px;"><div class="progress-bar" id="ai-pool-progress-bar" style="width:0%;background:var(--accent);"></div></div>
                    <div style="font-size:0.68rem;color:var(--text-muted);" id="ai-pool-progress-text">—</div>
                </div>
                <div class="d-flex gap-2 align-center flex-wrap">
                    <button class="btn btn-accent btn-sm" onclick="aiRegeneratePools()" id="btn-ai-regen">
                        <i class="bi bi-magic"></i> Сгенерировать AI-пулы
                    </button>
                    <button class="btn btn-outline btn-sm" onclick="aiClearPool()" id="btn-ai-clear">
                        <i class="bi bi-trash"></i> Сбросить пулы
                    </button>
                </div>
            </div>
        </div>
    </div>

    <!-- Подключение аккаунтов -->
    <div class="card mb-3">
        <div class="card-header cursor-pointer" onclick="toggleSettingsSection('settings-connection')">
            <i class="bi bi-plug" style="color:#06b6d4;"></i> <b>Подключение аккаунтов</b>
            <i class="bi bi-chevron-down text-muted" style="margin-left:auto;font-size:0.7rem;transition:transform .2s;" id="chev-settings-connection"></i>
        </div>
        <div class="card-body" id="settings-connection" style="display:none;">
            <div class="grid-2 mb-3" style="max-width:500px;">
                <div>
                    <label class="form-label">Таймаут подключения к прокси (сек)</label>
                    <div class="d-flex align-center gap-2">
                        <input type="number" class="form-control w-100px" id="s-proxy-timeout" value="30" min="5" max="120">
                        <span class="text-sm text-muted">сек</span>
                    </div>
                </div>
                <div>
                    <label class="form-label">Кол-во попыток подключения</label>
                    <input type="number" class="form-control w-100px" id="s-connect-retries" value="2" min="1" max="10">
                </div>
            </div>
            <div>
                <label class="form-label">Задержка между подключениями акков (сек)</label>
                <input type="number" class="form-control w-100px" id="s-connect-delay" value="3" min="0" max="30">
                <div style="font-size:0.68rem;color:var(--text-muted);margin-top:4px;">
                    Применяется при массовых операциях (проверка спама, прогрев, мульти-задачи) — пауза между стартом каждого следующего аккаунта, чтобы не создавать всплеск одновременных коннектов.
                </div>
            </div>
        </div>
    </div>

    <!-- Разное -->
    <div class="card mb-3">
        <div class="card-header cursor-pointer" onclick="toggleSettingsSection('settings-misc')">
            <i class="bi bi-gear text-muted"></i> <b>Разное</b>
            <i class="bi bi-chevron-down text-muted" style="margin-left:auto;font-size:0.7rem;transition:transform .2s;" id="chev-settings-misc"></i>
        </div>
        <div class="card-body" id="settings-misc" style="display:none;">
            <div class="mb-3">
                <button class="btn btn-outline btn-sm" onclick="packLogs()">
                    <i class="bi bi-file-zip"></i> Упаковать логи
                    <span style="font-size:0.8rem;color:var(--warning);" title="Собрать все логи в архив для отправки в поддержку"><i class="bi bi-exclamation-triangle"></i></span>
                </button>
            </div>

            <div class="grid-2 mb-3" style="max-width:500px;">
                <div>
                    <label class="form-label">Параметры генерации JSON</label>
                    <select class="form-control" id="s-json-device" onchange="onDeviceChange()">
                        <option value="desktop_2040">Desktop (пара 2040)</option>
                        <option value="android">Android</option>
                        <option value="ios">iOS</option>
                    </select>
                </div>
                <div>
                    <label class="form-label">Автоудаление мёртвых акков</label>
                    <select class="form-control" id="s-auto-clean-dead">
                        <option value="off">Выключено</option>
                        <option value="move">Переместить в папку</option>
                        <option value="delete">Удалить</option>
                    </select>
                </div>
            </div>
            <div class="grid-2 mb-3" style="max-width:500px;">
                <div>
                    <label class="form-label">API ID</label>
                    <input type="number" class="form-control" id="s-api-id" value="2040" min="1" style="max-width:200px;">
                </div>
                <div>
                    <label class="form-label">API Hash</label>
                    <input type="text" class="form-control" id="s-api-hash" value="b18441a1ff607e10a989891a5462e627" style="max-width:320px;">
                </div>
            </div>
        </div>
    </div>

    <div class="d-flex gap-2 flex-wrap">
        <button class="btn btn-accent" onclick="saveSettings()"><i class="bi bi-check2"></i> Сохранить настройки</button>
        <button class="btn btn-outline btn-sm" onclick="openSettingsFolder()" title="Открыть папку с файлом настроек в Проводнике — можно скопировать себе бэкап">
            <i class="bi bi-folder2-open"></i> Открыть папку
        </button>
        <button class="btn btn-outline btn-sm" onclick="showSettingsDebug()" title="Показать путь к файлу настроек и что в нём реально записано">
            <i class="bi bi-info-circle"></i> Диагностика
        </button>
        <button class="btn btn-outline btn-sm" onclick="restoreSettingsFromBackup()" title="Восстановить настройки из резервной копии (если основной файл был сброшен)">
            <i class="bi bi-arrow-counterclockwise"></i> Восстановить из бэкапа
        </button>
    </div>
</div>

<!-- ═══ TAB: Инструкция ═══ -->
<div class="section" id="tab-guide">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-book text-warning"></i> Быстрый старт</div>
        <div class="card-body" style="font-size:0.82rem;color:var(--text-secondary);line-height:1.6;">
            <ol style="margin:0 0 0 18px;padding:0;">
                <li>Добавь аккаунты (.session + .json или по номеру) во вкладке «Аккаунты»</li>
                <li>Привяжи прокси в «Прокси» (без них акк рискует словить бан)</li>
                <li>Выбери модуль — настрой текст/чаты/тайминги — «Запустить»</li>
            </ol>
            <p style="margin-top:8px;color:var(--text-muted);font-size:0.74rem;">1 акк = 1 задача. Несколько аккаунтов работают параллельно.</p>
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-chat-dots text-accent"></i> Рассылка по чатам</div>
        <div class="card-body text-hint">
            Шлёт текст/фото в группы и каналы где акк состоит. Поддержка спинтакса <code>{привет|здравствуй}</code>, фото, фильтра по словам, задержки в Настройках.
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-envelope text-success"></i> Личные сообщения (DM)</div>
        <div class="card-body text-hint">
            Рассылка по списку @username (.txt или вручную). Спинтакс, фото, триггер-фильтр стоп-слов.
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-link-45deg text-info"></i> Подписка на чаты</div>
        <div class="card-body text-hint">
            Массовый join по ссылкам (t.me/..., +invite). Дубликаты режутся, паузы рандомные. Папки «После инвайта» / «Спамблок» — авто-разнос по результату.
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-people text-warning"></i> Мульти-аккаунт</div>
        <div class="card-body text-hint">
            Запуск задачи на нескольких акках одновременно. В попапе можно выбрать всех / по папке / точечно. Занятые акки заблокированы.
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-search text-accent-base"></i> Парсинг юзеров</div>
        <div class="card-body text-hint">
            Сбор @username из участников группы / сообщений / комментариев. TGStat-поиск, экспорт в .txt.
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-fire text-orange"></i> Прогрев аккаунтов</div>
        <div class="card-body text-hint">
            Авто-переписка между парами аккаунтов. По умолчанию <b>шаблоны</b> (бесплатно). Если включить <b>AI</b> — диалоги генерит нейросеть (нужен ключ в Настройках). От 2 акков, расписание по дням.
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-person-vcard text-accent"></i> Заполнение профиля</div>
        <div class="card-body text-hint">
            Массовая установка имени, фамилии, аватарки, био. Спинтакс + опциональная AI-генерация.
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-reply text-success"></i> Автоответчик</div>
        <div class="card-body text-hint">
            Авто-ответ на входящие в личке. Текст и задержка настраиваются. Работает пока акк подключён.
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-broadcast" style="color:#f472b6;"></i> Мониторинг чатов</div>
        <div class="card-body text-hint">
            Лови сообщения по ключевым словам в чатах где сидит акк → уведомление летит в «Сохранённые» или указанный @username.
            <ul style="margin:6px 0 0 18px;font-size:0.78rem;">
                <li>Чаты по 1 на строку, ключи через запятую</li>
                <li>Матчи копятся в CSV (кнопка «Лог матчей»)</li>
                <li>Автостарт — поднимается после перезапуска</li>
            </ul>
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-chat-quote text-purple"></i> Нейрокомменты <span class="badge-beta" style="margin-left:6px;">BETA</span></div>
        <div class="card-body text-hint">
            Аккаунты пишут осмысленные комменты под свежими постами в указанных каналах. Текст генерит AI по теме поста.
            <ul style="margin:6px 0 0 18px;font-size:0.78rem;">
                <li>У канала должны быть включены комменты (есть discussion-группа)</li>
                <li>Аккаунты должны быть подписаны на канал</li>
                <li>Лимиты: N комментов на пост, пауза 2-15 мин, кап на акк/час и /день</li>
                <li>Опциональный CTA-блок — AI вставит ссылку только если коммент органичен</li>
            </ul>
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-cpu text-purple"></i> AI / нейросеть</div>
        <div class="card-body text-hint">
            Подключается в <a class="text-accent" href="javascript:showTab('settings')">Настройках → AI</a>. Свой ключ → свой бюджет (DeepSeek через OpenRouter ~$0.0002 за диалог).
            <ul style="margin:6px 0 0 18px;font-size:0.78rem;">
                <li>Провайдеры: OpenAI, OpenRouter, DeepSeek, Groq, кастомный URL</li>
                <li>Дневной лимит $ — программа сама обрубит когда упрётся</li>
                <li>Используется в «Прогреве» (если выбран режим AI) и «Нейрокомментах»</li>
                <li>Кнопка «Тест» проверит ключ перед запуском</li>
            </ul>
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-shield-lock text-info"></i> Прокси</div>
        <div class="card-body text-hint">
            Загрузи список (socks5/http) и привяжи к аккаунтам. Один прокси на 1-3 акка — норма. Чекер проверит живость.
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-people-fill text-accent-base"></i> Аккаунты — массовые операции</div>
        <div class="card-body text-hint">
            Выдели чекбоксами несколько акков → можно <b>удалить пачкой</b>, <b>проверить на спамблок</b>, переместить в папку. Папки «Мониторинг» / «Прогрев» / «После инвайта» — для разделения роли акков.
        </div>
    </div>

    <div class="card">
        <div class="card-header"><i class="bi bi-shield-check text-success"></i> Безопасность</div>
        <div class="card-body text-hint">
            <ul style="margin:0 0 0 18px;font-size:0.78rem;">
                <li>Прокси обязательны — без них акк быстро уйдёт в бан</li>
                <li>Задержки 10-20 сек минимум — меньше = спамблок</li>
                <li>Новые акки прогреть 3-5 дней перед рассылкой</li>
                <li>Следи за статусами в «Аккаунты» — мёртвые/замороженные авто-метятся</li>
            </ul>
        </div>
    </div>
</div>

<!-- ═══ TAB: Профиль ═══ -->
<div class="section" id="tab-profile">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-person-badge text-accent"></i> Профиль лицензии</div>
        <div class="card-body" id="profile-data" style="font-size:0.85rem;">
            <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px 24px;">
                <div>
                    <span class="section-label" >Лицензия</span>
                    <div id="prf-key" style="font-family:'JetBrains Mono',monospace;font-weight:600;color:var(--text-primary);margin-top:2px;">---</div>
                </div>
                <div>
                    <span class="section-label" >Срок действия</span>
                    <div id="prf-expires" style="font-weight:600;color:var(--success);margin-top:2px;">---</div>
                </div>
                <div>
                    <span class="section-label" >Версия</span>
                    <div id="prf-version" style="font-weight:600;color:var(--accent-light);margin-top:2px;">---</div>
                </div>
                <div>
                    <span class="section-label" >Тариф</span>
                    <div id="prf-key-type" style="font-weight:600;color:var(--success);margin-top:2px;">---</div>
                </div>
                <div>
                    <span class="section-label" >HWID</span>
                    <div id="prf-hwid" style="font-family:'JetBrains Mono',monospace;font-size:0.75rem;color:var(--text-muted);margin-top:2px;">---</div>
                </div>
                <div>
                    <span class="section-label" >Компьютер</span>
                    <div id="prf-pc" style="color:var(--text-primary);margin-top:2px;">---</div>
                </div>
                <div>
                    <span class="section-label" >Аккаунты</span>
                    <div id="prf-accs" style="color:var(--text-primary);margin-top:2px;">---</div>
                </div>
            </div>
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-grid-3x3-gap text-accent"></i> Доступные модули</div>
        <div class="card-body">
            <div id="prf-modules" style="display:flex;flex-wrap:wrap;gap:6px;"></div>
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-arrow-repeat text-warning"></i> Сброс привязки</div>
        <div class="card-body">
            <p style="font-size:0.82rem;color:var(--text-muted);margin-bottom:12px;">Сменили компьютер? Сбросьте привязку HWID и войдите заново на новом ПК.</p>
            <button class="btn btn-outline btn-sm" onclick="resetHwid()" id="btn-reset-hwid">
                <i class="bi bi-pc-display"></i> Сбросить привязку
            </button>
            <div id="reset-result" style="margin-top:8px;font-size:0.82rem;display:none;"></div>
        </div>
    </div>

    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-globe2 text-accent-base"></i> Профиль на сайте</div>
        <div class="card-body">
            <p style="font-size:0.82rem;color:var(--text-muted);margin-bottom:12px;">Версия, скачивание, сброс привязки, поддержка.</p>
            <a id="prf-site-link" href="#" target="_blank" class="btn btn-accent btn-sm" style="text-decoration:none;">
                <i class="bi bi-box-arrow-up-right"></i> Открыть профиль
            </a>
        </div>
    </div>

    <div class="card">
        <div class="card-header"><i class="bi bi-door-open text-danger"></i> Выход</div>
        <div class="card-body">
            <a href="/logout" class="btn btn-outline btn-sm" style="color:var(--danger);border-color:var(--danger);">
                <i class="bi bi-box-arrow-left"></i> Выйти из аккаунта
            </a>
        </div>
    </div>
</div>

<!-- ═══ TAB: Имитация активности ═══ -->
<div class="section" id="tab-imitation">
    <div class="card mb-3" style="border-left:4px solid #f59e0b; background: rgba(245,158,11,0.07);">
        <div class="card-body" style="padding:12px 16px;">
            <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
                <i class="bi bi-exclamation-triangle" style="color:#f59e0b;"></i>
                <strong>Имитация активности в режиме BETA</strong>
            </div>
            <div class="text-hint" style="font-size:0.8rem;line-height:1.45;">
                Софт имитирует «человеческие» действия — чтение, скролл, открытие профилей. Это снижает шанс попадания в спам-фильтр, но НЕ заменяет реальную активность.
                На одинаковых паттернах действий (одинаковый интервал у всех акков) Telegram всё ещё может видеть бот-сеть. Не запускайте на свежих сразу всем массивом — начинайте с 3-5.
            </div>
        </div>
    </div>
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-person-walking text-purple"></i> Имитация активности</div>
        <div class="card-body">
            <div class="info-box" style="margin-bottom:12px;font-size:0.74rem;">
                Аккаунты в фоне делают «человеческие» действия БЕЗ реальных задач рассылки —
                читают сообщения в случайных диалогах, открывают профили, скроллят. Telegram-алгоритмы видят
                естественный паттерн → меньше шанс ловли спам-фильтра у свежих/прогретых акков.
                <br><br>
                <b>Когда полезно:</b> молодые акки между основными задачами, акки-мониторщики,
                «отлёжка» акков после спам-блока.
            </div>

            <label class="form-label">Аккаунты</label>
            <div class="acc-selector mb-3" id="acc-selector-imitation"></div>

            <div class="grid-3 mb-3">
                <div>
                    <label class="form-label">Интервал — мин (мин)</label>
                    <input type="number" class="form-control" id="imit-interval-min" value="15" min="5" max="180">
                </div>
                <div>
                    <label class="form-label">Интервал — макс (мин)</label>
                    <input type="number" class="form-control" id="imit-interval-max" value="45" min="10" max="360">
                </div>
                <div>
                    <label class="form-label">Действий за раунд</label>
                    <input type="number" class="form-control" id="imit-actions-per-round" value="3" min="1" max="10">
                </div>
            </div>

            <details class="ad-block" open>
                <summary><i class="bi bi-list-check"></i> Что делает аккаунт</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="imit-do-read" checked> <span>Читать непрочитанные сообщения<span class="ad-hint">Открыть случайный диалог где есть unread → отметить прочитанным</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="imit-do-view-profile" checked> <span>Открывать профили из контактов<span class="ad-hint">Открывать профиль случайного пользователя из диалогов</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="imit-do-view-photo"> <span>Смотреть аватарки<span class="ad-hint">Реже — раз в 5-10 диалогов</span></span></label>
                </div>
            </details>

            <div class="d-flex gap-2 mb-2">
                <button class="btn btn-accent btn-sm" onclick="startImitation()" id="btn-imit-start">
                    <i class="bi bi-play-fill"></i> Запустить
                </button>
                <button class="btn btn-danger btn-sm" onclick="stopImitation()" id="btn-imit-stop" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Остановить
                </button>
                <span id="imit-status-label" class="text-xs text-muted tag-right"></span>
            </div>

            <div id="imit-counters" style="margin-top:12px;display:none;font-size:0.78rem;color:var(--text-muted-strong);"></div>
            <div id="imit-log" style="margin-top:8px;max-height:300px;overflow:auto;font-size:0.7rem;font-family:monospace;background:var(--bg-input);padding:8px;border-radius:6px;display:none;"></div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Чекер аккаунтов ═══ -->
<div class="section" id="tab-checker">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-shield-check text-accent"></i> Чекер аккаунтов</div>
        <div class="card-body">
            <div class="info-box" style="margin-bottom:14px;">
                Проверяет аккаунты через @SpamBot и определяет статус: <b>живой</b> / временный спамблок / вечный спамблок / заморожен.
                Опционально — авто-подача заявок на снятие спамблока, авто-снятие заморозки через DeepSeek-AI, сортировка по папкам.
            </div>

            <label class="form-label">Аккаунты для проверки</label>
            <div class="acc-selector mb-3" id="acc-selector-checker"></div>

            <label class="form-label">Ключ от RuCaptcha <span style="color:var(--text-muted);font-weight:400;">(опционально, для прохождения капчи если @SpamBot её попросит)</span></label>
            <input type="text" class="form-control mb-3" id="ck-rucaptcha" placeholder="Получить ключ: rucaptcha.com">

            <details class="ad-block" open>
                <summary><i class="bi bi-shield-exclamation"></i> Опции для спамблока</summary>
                <div class="ad-body">
                    <button class="btn btn-outline btn-sm mb-2" onclick="ckOpenSpamTexts()" style="font-size:0.7rem;padding:4px 12px;">
                        <i class="bi bi-list-ul"></i> Тексты для снятия спамблока
                    </button>
                    <label class="ad-check"><input type="checkbox" id="ck-check-spam" checked> <span>Проверять аккаунты на спамблок<span class="ad-hint">Если выкл — пропускает шаг проверки, сразу подаёт заявку (если включено)</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="ck-submit-spam-appeal"> <span>Подавать заявку на снятие спамблока<span class="ad-hint">При временном спамблоке отправляет случайный текст из списка в @SpamBot</span></span></label>
                </div>
            </details>

            <details class="ad-block">
                <summary><i class="bi bi-snow"></i> Опции для заморозки</summary>
                <div class="ad-body">
                    <label class="form-label" style="margin-top:6px;">Промт для снятия заморозки <small class="text-muted" >(контекст для DeepSeek)</small></label>
                    <textarea class="form-control mb-2" id="ck-freeze-prompt" rows="2" placeholder="Например: Я обычный пользователь, использую аккаунт для общения с друзьями." style="font-size:0.74rem;"></textarea>
                    <label class="ad-check"><input type="checkbox" id="ck-submit-freeze-appeal"> <span>Подавать заявку на снятие заморозки<span class="ad-hint">При заморозке ведёт диалог с @SpamBot через DeepSeek</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="ck-use-hacked" checked> <span>Использовать причину "Аккаунт был взломан"</span></label>
                    <label class="ad-check"><input type="checkbox" id="ck-use-mistake" checked> <span>Использовать причину "Это ошибка"</span></label>
                    <label class="form-label mt-8">Ключ от DeepSeek <small class="text-muted" >(нужен для снятия заморозки — генерит «человеческие» ответы)</small></label>
                    <input type="text" class="form-control" id="ck-deepseek" placeholder="Получить ключ: platform.deepseek.com">
                </div>
            </details>

            <details class="ad-block">
                <summary><i class="bi bi-gear"></i> Дополнительные опции</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="ck-sort-folders" checked> <span>Сортировать аккаунты по папкам<span class="ad-hint">После проверки аккаунты раскладываются по статусу: Живые / Спамблок / Замороженные</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="ck-rename-files"> <span>Обновлять название файлов<span class="ad-hint">Если в имени session/json указан неверный номер — файлы переименуются</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="ck-delete-dialog"> <span>Удалять диалог со спамботом<span class="ad-hint">После проверки удаляет переписку с @SpamBot</span></span></label>
                </div>
            </details>

            <details class="ad-block">
                <summary><i class="bi bi-folder"></i> Настройки папок</summary>
                <div class="ad-body" style="padding:8px 14px 12px;">
                    <label class="form-label" style="margin-top:4px;">Куда перемещать живые аккаунты</label>
                    <input type="text" class="form-control mb-2" id="ck-folder-alive" value="Аккаунты/Живые" placeholder="Аккаунты/Живые">
                    <label class="form-label">Куда перемещать с временным спамблоком</label>
                    <input type="text" class="form-control mb-2" id="ck-folder-temp" value="Аккаунты/Спамблок/Временный" placeholder="Аккаунты/Спамблок/Временный">
                    <label class="form-label">Куда перемещать с вечным спамблоком</label>
                    <input type="text" class="form-control mb-2" id="ck-folder-eternal" value="Аккаунты/Спамблок/Вечный" placeholder="Аккаунты/Спамблок/Вечный">
                    <label class="form-label">Куда перемещать замороженные</label>
                    <input type="text" class="form-control" id="ck-folder-frozen" value="Аккаунты/Замороженные" placeholder="Аккаунты/Замороженные">
                </div>
            </details>

            <div class="d-flex gap-2 mt-3 mb-2">
                <button class="btn btn-accent" onclick="startChecker()" id="btn-ck-start">
                    <i class="bi bi-play-fill"></i> Запустить проверку
                </button>
                <button class="btn btn-outline btn-sm self-center" onclick="saveCheckerConfig()">
                    <i class="bi bi-save"></i> Сохранить настройки
                </button>
                <button class="btn btn-danger" onclick="stopChecker()" id="btn-ck-stop" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Остановить
                </button>
                <span id="ck-status-label" class="text-xs text-muted tag-right"></span>
            </div>

            <div id="ck-progress" style="display:none;margin-top:8px;">
                <div class="progress mb-2-x">
                    <div class="progress-bar" id="ck-progress-bar" style="width:0%;"></div>
                </div>
                <div style="font-size:0.74rem;color:var(--text-muted);" id="ck-progress-text">—</div>
                <div id="ck-counters" style="margin-top:6px;font-size:0.72rem;display:flex;gap:14px;flex-wrap:wrap;"></div>
            </div>
            <div id="ck-log" style="margin-top:10px;max-height:240px;overflow:auto;font-size:0.7rem;font-family:monospace;background:var(--bg-input);padding:8px;border-radius:6px;display:none;line-height:1.6;"></div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Накрутка ═══ -->
<div class="section" id="tab-boost">
    <div class="card mb-3" style="border-left:4px solid #f59e0b; background: rgba(245,158,11,0.07);">
        <div class="card-body" style="padding:12px 16px;">
            <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
                <i class="bi bi-exclamation-triangle" style="color:#f59e0b;"></i>
                <strong>Накрутка в режиме BETA</strong>
            </div>
            <div class="text-hint" style="font-size:0.8rem;line-height:1.45;">
                Самая рискованная функция в TelePush. Telegram активно борется с массовыми подписками / реакциями / просмотрами — могут пострадать и аккаунты, и цель (канал/пост попадает под анти-накрутку, статистика сбрасывается).
                Не более 30-50 аккаунтов в час на одну цель. На свежих/непрогретых акках использовать ОПАСНО — высокий риск заморозки. Сначала прогревайте акки минимум 7-14 дней.
            </div>
        </div>
    </div>
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-graph-up-arrow text-accent"></i> Накрутка</div>
        <div class="card-body">
            <div class="info-box" style="margin-bottom:14px;">
                Массовое действие пачкой аккаунтов на одну цель. Подписчики, реакции, голосования, нажатия кнопок, запуск ботов, просмотры.
                <br><b>Защита:</b> Telegram отслеживает массовые действия за короткое время. Рекомендуем не более <b>30-50 аккаунтов в час</b> на одну цель — иначе цель может попасть под анти-накрутку. Жёстких лимитов на нашей стороне нет.
            </div>

            <!-- Тип накрутки -->
            <label class="form-label">Тип накрутки</label>
            <select class="form-control mb-3" id="boost-type" onchange="onBoostTypeChange()">
                <option value="subscribers">Подписчики в канал/чат</option>
                <option value="reactions">Реакции на пост</option>
                <option value="polls">Голос в опросе</option>
                <option value="buttons">Нажатие кнопок</option>
                <option value="bots">Запуск ботов</option>
                <option value="views">Просмотры на пост</option>
            </select>

            <!-- Цель -->
            <label class="form-label" id="boost-target-label">Ссылка на канал / @username</label>
            <input type="text" class="form-control mb-3" id="boost-target" placeholder="@channel или t.me/+invite">

            <!-- Тип-специфичные поля -->
            <div id="boost-field-emojis" style="display:none;">
                <label class="form-label">Эможди реакций (через пробел; повторите чтобы выбирались чаще)</label>
                <input type="text" class="form-control mb-3" id="boost-emojis" value="👍 ❤ 🔥" placeholder="👍 ❤ 🔥">
            </div>
            <div id="boost-field-poll" style="display:none;">
                <label class="form-label">Номер варианта (0 = первый, пусто = случайный)</label>
                <input type="number" class="form-control mb-3" id="boost-poll-option" placeholder="случайный" min="0" max="9">
            </div>
            <div id="boost-field-button" style="display:none;">
                <label class="form-label">Кнопка (текст или индекс 0/1/2...)</label>
                <input type="text" class="form-control mb-3" id="boost-button" placeholder="Принять или 0">
            </div>

            <!-- Общие настройки -->
            <div class="grid-3 mb-3">
                <div>
                    <label class="form-label">Сколько аккаунтов</label>
                    <input type="number" class="form-control" id="boost-count" value="50" min="1" max="9999">
                </div>
                <div>
                    <label class="form-label">Задержка (сек)</label>
                    <input type="text" class="form-control" id="boost-delay" value="5-15" placeholder="5-15">
                </div>
                <div>
                    <label class="form-label">Потоков (параллельно)</label>
                    <input type="number" class="form-control" id="boost-threads" value="1" min="1" max="20">
                </div>
            </div>

            <details class="ad-block mb-3">
                <summary><i class="bi bi-gear"></i> Дополнительные опции</summary>
                <div class="ad-body">
                    <label class="form-label">Папка аккаунтов (пусто = все живые)</label>
                    <input type="text" class="form-control mb-2" id="boost-folder" placeholder="например: Аккаунты/Готовые">
                    <label class="ad-check"><input type="checkbox" id="boost-allow-restart"> <span>Разрешить перезапуск ботов<span class="ad-hint">Если у акка уже есть диалог с ботом — запустить /start повторно</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="boost-allow-revote"> <span>Разрешить переголосование в опросах<span class="ad-hint">Если акк уже голосовал — изменить голос</span></span></label>
                </div>
            </details>

            <div class="d-flex gap-2 mb-3">
                <button class="btn btn-accent" onclick="startBoost()" id="btn-boost-start">
                    <i class="bi bi-play-fill"></i> Запустить накрутку
                </button>
                <button class="btn btn-danger" onclick="stopBoost()" id="btn-boost-stop" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Остановить
                </button>
                <span id="boost-status-label" class="text-xs text-muted tag-right"></span>
            </div>

            <!-- Прогресс -->
            <div id="boost-progress" style="display:none;margin-top:8px;">
                <div class="progress mb-2-x">
                    <div class="progress-bar" id="boost-progress-bar" style="width:0%;"></div>
                </div>
                <div style="font-size:0.74rem;color:var(--text-muted);" id="boost-progress-text">—</div>
            </div>
            <div id="boost-log" style="margin-top:10px;max-height:240px;overflow:auto;font-size:0.7rem;font-family:monospace;background:var(--bg-input);padding:8px;border-radius:6px;display:none;line-height:1.6;"></div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Нейрокомменты (beta) ═══ -->
<div class="section" id="tab-neuro-comments">
    <div class="card mb-3" style="border-left:4px solid #f59e0b; background: rgba(245,158,11,0.07);">
        <div class="card-body" style="padding:12px 16px;">
            <div style="display:flex;align-items:center;gap:8px;margin-bottom:6px;">
                <i class="bi bi-exclamation-triangle" style="color:#f59e0b;"></i>
                <strong>Нейрокомменты в режиме BETA</strong>
            </div>
            <div class="text-hint" style="font-size:0.8rem;line-height:1.45;">
                Аккаунты пишут AI-комменты под постами в каналах. Если AI генерит шаблонные/одинаковые фразы — Telegram палит и блокирует возможность комментить в этом канале для всех ваших акков.
                Используйте качественные модели (gpt-4o-mini / deepseek-chat), задайте свою «персону» в Настройках AI чтобы комменты звучали по-разному. Не более 2-3 комментов на канал в день с одного акка.
            </div>
        </div>
    </div>
    <div class="card mb-3">
        <div class="card-header">
            <i class="bi bi-chat-quote text-purple"></i>
            Нейрокомменты — комментарии под постами в каналах
            <span class="badge-beta" style="margin-left:8px;">BETA</span>
        </div>
        <div class="card-body">
            <div class="info-box info-box--accent" style="margin-bottom:12px;font-size:0.7rem;line-height:1.55;">
                Аккаунты автоматически пишут осмысленные комменты под свежими постами в указанных каналах. Текст генерится AI по теме поста (нужен настроенный <a class="text-accent" href="javascript:showTab('settings')">AI ключ в Настройках</a>).
                <br><b>Защита:</b> один пост — макс N комментов от наших акков, рандомные паузы 2-15 мин между ними, лимит на акк/час и /день.
                <br><b>Условия:</b> у канала должны быть включены комментарии (есть discussion-группа). Аккаунты должны быть подписаны на канал (можно через инвайтер или модуль Подписка).
            </div>

            <label class="form-label">Каналы для комментирования (по одному на строку, @username или t.me/...)</label>
            <textarea class="form-control mb-3" id="nc-channels" rows="5" placeholder="@channel1&#10;@channel2&#10;t.me/channel3" style="font-size:0.78rem;font-family:monospace;"></textarea>

            <label class="form-label">Аккаунты-комментаторы</label>
            <div class="acc-selector mb-3" id="acc-selector-neuro-comments"></div>

            <details class="mb-3">
                <summary style="cursor:pointer;font-size:0.78rem;color:var(--text-muted);padding:6px 0;">
                    <i class="bi bi-sliders"></i> Тайминги и лимиты
                </summary>
                <div class="grid-2 mt-8">
                    <div>
                        <label class="form-label">Раз в сколько минут проверять каналы</label>
                        <input type="number" class="form-control w-100px" id="nc-poll-interval" value="5" min="1" max="60">
                    </div>
                    <div>
                        <label class="form-label">Свежесть постов (мин)</label>
                        <input type="number" class="form-control w-100px" id="nc-recency" value="60" min="5" max="1440">
                        <div style="font-size:0.65rem;color:var(--text-muted);margin-top:2px;">Не комментировать посты старше</div>
                    </div>
                    <div>
                        <label class="form-label">Пауза между комментами (мин-макс)</label>
                        <div class="row-gap-6" >
                            <input type="number" class="form-control w-70px" id="nc-delay-min" value="2" min="1" max="60">
                            <input type="number" class="form-control w-70px" id="nc-delay-max" value="15" min="2" max="120">
                        </div>
                    </div>
                    <div>
                        <label class="form-label">Макс комментов под одним постом</label>
                        <input type="number" class="form-control w-100px" id="nc-per-post" value="1" min="1" max="5">
                    </div>
                    <div>
                        <label class="form-label">Лимит на акк / час</label>
                        <input type="number" class="form-control w-100px" id="nc-per-hour" value="5" min="1" max="60">
                    </div>
                    <div>
                        <label class="form-label">Лимит на акк / день</label>
                        <input type="number" class="form-control w-100px" id="nc-per-day" value="30" min="1" max="500">
                    </div>
                </div>
            </details>

            <details class="mb-3">
                <summary style="cursor:pointer;font-size:0.78rem;color:var(--text-muted);padding:6px 0;">
                    <i class="bi bi-megaphone"></i> CTA / реклама в комментах (опционально)
                </summary>
                <div class="mt-8" >
                    <label class="form-label">CTA-блок для AI</label>
                    <input type="text" class="form-control" id="nc-cta" placeholder="Например: 'если коммент органичен — упомяни канал @mychannel'">
                    <div style="font-size:0.65rem;color:var(--text-muted);margin-top:4px;line-height:1.5;">
                        Этот текст AI получит как доп-инструкцию. Если комментарий сильно по теме — AI вставит CTA органично, иначе проигнорирует. Без CTA — комменты чисто прогрев-стиль.
                    </div>
                </div>
            </details>

            <details class="mb-3">
                <summary style="cursor:pointer;font-size:0.78rem;color:var(--text-muted);padding:6px 0;">
                    <i class="bi bi-code"></i> Свой системный промпт (продвинутое)
                </summary>
                <div class="mt-8" >
                    <textarea class="form-control" id="nc-custom-prompt" rows="6" placeholder="Если пусто — используется стандартный промпт для русскоязычных комментов. Доступные плейсхолдеры: {persona}, {cta_block}." style="font-size:0.72rem;font-family:monospace;"></textarea>
                </div>
            </details>

            <details class="ad-block">
                <summary><i class="bi bi-shield-check"></i> Защита аккаунта</summary>
                <div class="ad-body">
                    <label class="ad-check"><input type="checkbox" id="nc-pre-spam-check"> <span>Перед стартом проверить аккаунты на спам-блок</span></label>
                    <label class="ad-check"><input type="checkbox" id="nc-solve-captcha"> <span>Решать капчу-боты в discussion-чатах</span></label>
                    <label class="ad-check"><input type="checkbox" id="nc-keep-online"> <span>Держать аккаунт онлайн во время работы</span></label>
                    <label class="ad-check"><input type="checkbox" id="nc-read-msgs"> <span>Читать пост перед комментированием<span class="ad-hint">Имитация — открыть пост, прокрутить</span></span></label>
                    <label class="ad-check"><input type="checkbox" id="nc-mark-read"> <span>Отмечать сообщения прочитанными</span></label>
                    <label class="ad-check"><input type="checkbox" id="nc-view-profile"> <span>Смотреть профиль автора поста</span></label>
                </div>
            </details>

            <div class="d-flex gap-2 align-center">
                <button class="btn btn-accent btn-sm" onclick="ncStart()" id="btn-nc-start">
                    <i class="bi bi-play-fill"></i> Запустить
                </button>
                <button class="btn btn-outline btn-sm" onclick="ncStop()" id="btn-nc-stop" style="display:none;">
                    <i class="bi bi-stop-fill"></i> Остановить
                </button>
                <span id="nc-status-label" class="text-xs text-muted" style="margin-left:8px;"></span>
            </div>

            <div id="nc-counters" style="margin-top:12px;display:none;font-size:0.75rem;line-height:1.7;color:var(--text-muted);"></div>
            <div id="nc-log" style="margin-top:8px;max-height:300px;overflow:auto;font-size:0.7rem;font-family:monospace;background:var(--bg-input);padding:8px;border-radius:6px;display:none;"></div>
        </div>
    </div>
</div>

<!-- ═══ TAB: Поддержка ═══ -->
<div class="section" id="tab-support">
    <div class="card mb-3">
        <div class="card-header"><i class="bi bi-bug text-danger"></i> Сообщить об ошибке</div>
        <div class="card-body">
            <div style="background:var(--surface-danger-bg);border:1px solid var(--surface-danger-border);border-radius:8px;padding:12px;margin-bottom:16px;font-size:0.78rem;color:#f59e0b;">
                <i class="bi bi-info-circle" style="margin-right:4px;"></i>
                Опишите проблему подробно: в каком модуле произошла ошибка, что именно не работает. Прикрепите скриншот ошибки.
            </div>

            <label class="form-label">Модуль</label>
            <select class="form-control mb-2" id="ticket-module" style="font-size:0.85rem;">
                <option value="">Выберите модуль</option>
                <option value="spam">Рассылка по чатам</option>
                <option value="dm">Личные сообщения (DM)</option>
                <option value="join">Подписка на чаты</option>
                <option value="multi">Мульти-аккаунт</option>
                <option value="parser">Парсинг юзеров</option>
                <option value="warmup">Прогрев аккаунтов</option>
                <option value="profiles">Заполнение профиля</option>
                <option value="autoreply">Автоответчик</option>
                <option value="accounts">Аккаунты</option>
                <option value="telegram">Telegram-просмотр</option>
                <option value="proxy">Прокси</option>
                <option value="settings">Настройки</option>
                <option value="update">Обновление</option>
                <option value="login">Авторизация/Лицензия</option>
                <option value="other">Другое</option>
            </select>

            <label class="form-label">Тема</label>
            <input type="text" class="form-control mb-2" id="ticket-subject" placeholder="Кратко: что не работает">

            <label class="form-label">Описание ошибки</label>
            <textarea class="form-control mb-2" id="ticket-body" rows="4" placeholder="Что делали? Что произошло? Что ожидали?"></textarea>

            <label class="form-label">Скриншот ошибки</label>
            <div class="mb-3" >
                <label style="display:flex;align-items:center;gap:8px;padding:12px;border:2px dashed #252540;border-radius:10px;cursor:pointer;transition:border-color 0.2s;" onmouseover="this.style.borderColor='var(--accent)'" onmouseout="this.style.borderColor='#252540'">
                    <i class="bi bi-image" style="font-size:1.2rem;color:var(--accent-light);"></i>
                    <span style="font-size:0.82rem;color:var(--text-muted);">Нажмите чтобы прикрепить скриншот (PNG, JPG)</span>
                    <input type="file" id="ticket-screenshot" accept="image/*" style="display:none;" onchange="previewTicketImg(this)">
                </label>
                <div id="ticket-img-preview" style="display:none;margin-top:8px;position:relative;">
                    <img id="ticket-img-thumb" style="max-width:200px;max-height:150px;border-radius:8px;border:1px solid #252540;">
                    <button onclick="clearTicketImg()" title="Удалить скриншот" style="position:absolute;top:-6px;right:-6px;background:var(--danger);border:none;border-radius:50%;width:20px;height:20px;color:#fff;font-size:0.7rem;cursor:pointer;display:flex;align-items:center;justify-content:center;"><i class="bi bi-x"></i></button>
                </div>
            </div>

            <div class="d-flex gap-2 flex-wrap">
                <button class="btn btn-accent btn-sm" onclick="sendTicket()" id="btn-send-ticket">
                    <i class="bi bi-send"></i> Отправить
                </button>
                <a href="https://t.me/boberkurvateh" target="_blank" class="btn btn-outline btn-sm" style="text-decoration:none;">
                    <i class="bi bi-telegram"></i> Написать в Telegram
                </a>
                <button class="btn btn-outline btn-sm" onclick="copyDiagInfo(this)" title="Скопировать в буфер обмена техническую информацию для поддержки">
                    <i class="bi bi-clipboard-data"></i> Скопировать диагностику
                </button>
                <span class="text-xs text-muted self-center">Логи и версия прикрепляются автоматически</span>
            </div>
            <div id="ticket-result" style="display:none;margin-top:10px;font-size:0.82rem;"></div>
        </div>
    </div>
</div>

{% endblock %}

{% block extra_js %}
<script src="https://cdn.jsdelivr.net/npm/chart.js@4"></script>
<script>
// ── Range sliders live update ──
document.querySelectorAll('.range-slider').forEach(function(s) {
    var valEl = document.getElementById('v-' + s.id.replace('s-', ''));
    if (valEl) {
        s.addEventListener('input', function() { valEl.textContent = s.value; });
    }
});

// ── Drop zone click (если есть) ──
(function(){
    var dz = document.getElementById('session-drop');
    var si = document.getElementById('session-input');
    if (dz && si) dz.addEventListener('click', function() { si.click(); });
})();

// ── Join links counter ──
(function(){
    var ta = document.getElementById('join-links');
    if (!ta) return;
    function updateCount() {
        var lines = ta.value.split('\n').filter(function(l) { return l.trim(); });
        var el = document.getElementById('join-count');
        var btn = document.getElementById('btn-join');
        if (el) el.textContent = lines.length;
        if (btn) btn.disabled = lines.length === 0;
    }
    ta.addEventListener('input', updateCount);
    ta.addEventListener('paste', function() { setTimeout(updateCount, 10); });
    ta.addEventListener('change', updateCount);
    ta.addEventListener('keyup', updateCount);
    updateCount();
})();

// ── Parser chat change ──
document.getElementById('parser-chat').addEventListener('change', function() {
    updateChatPreview();
});

// ── Init ──
refreshStatus();
</script>
{% endblock %}
