TEST SCRIPT

Скрипт для КА ЕКБ

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

Advertisement:

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

Advertisement:

// ==UserScript==
// @name         TEST SCRIPT
// @namespace    http://tampermonkey.net/
// @version      3
// @description  Скрипт для КА ЕКБ
// @author       Flora
// @match        https://forum.ragerussia.online/*
// @include      https://forum.ragerussia.online/
// @icon         https://www.google.com/s2/favicons?sz=64&domain=ragerussia.online
// @grant        none
// @license      none
// ==/UserScript==

(async function () {
    `use strict`;
    const UNACCEPT_PREFIX = 3;
    const ACCEPT_PREFIX = 2;
    const CLOSED_PREFIX = 4;
    const PIN_PREFIX = 10;

    const STORAGE_KEY = 'forum_script_custom_templates';
    const SCRIPTSETTINGS_KEY = 'forum_script_settings';
    const QUICKREPLY_KEY = 'forum_script_quick_replies';
    const STATS_KEY = 'forum_script_stats';

    // Загрузка настроек скрипта
    function loadSettings() {
        const saved = localStorage.getItem(SCRIPTSETTINGS_KEY);
        if (saved) {
            try {
                return JSON.parse(saved);
            } catch(e) {
                return { topBarEnabled: true, theme: 'dark', quickActions: true, autoReload: false, quickRepliesEnabled: true, showStats: true, autoSaveDrafts: true };
            }
        }
        return { topBarEnabled: true, theme: 'dark', quickActions: true, autoReload: false, quickRepliesEnabled: true, showStats: true, autoSaveDrafts: true };
    }

    function saveSettings(settings) {
        localStorage.setItem(SCRIPTSETTINGS_KEY, JSON.stringify(settings));
    }

    function loadCustomTemplates() {
        const saved = localStorage.getItem(STORAGE_KEY);
        if (saved) {
            try {
                return JSON.parse(saved);
            } catch(e) {
                return [];
            }
        }
        return [];
    }

    function saveCustomTemplates(templates) {
        localStorage.setItem(STORAGE_KEY, JSON.stringify(templates));
    }

    // Загрузка быстрых ответов
    function loadQuickReplies() {
        const saved = localStorage.getItem(QUICKREPLY_KEY);
        if (saved) {
            try {
                return JSON.parse(saved);
            } catch(e) {
                return [];
            }
        }
        return [];
    }

    function saveQuickReplies(replies) {
        localStorage.setItem(QUICKREPLY_KEY, JSON.stringify(replies));
    }

    // Статистика использования
    function updateStats(templateName) {
        const stats = loadStats();
        const today = new Date().toDateString();

        if (!stats[today]) {
            stats[today] = { total: 0, templates: {} };
        }

        stats[today].total++;
        stats[today].templates[templateName] = (stats[today].templates[templateName] || 0) + 1;

        // Очищаем статистику старше 30 дней
        const dates = Object.keys(stats);
        const cutoff = new Date();
        cutoff.setDate(cutoff.getDate() - 30);

        dates.forEach(date => {
            if (new Date(date) < cutoff) {
                delete stats[date];
            }
        });

        saveStats(stats);
    }

    function loadStats() {
        const saved = localStorage.getItem(STATS_KEY);
        if (saved) {
            try {
                return JSON.parse(saved);
            } catch(e) {
                return {};
            }
        }
        return {};
    }

    function saveStats(stats) {
        localStorage.setItem(STATS_KEY, JSON.stringify(stats));
    }

    // Сохранение черновика
    function saveDraft(content) {
        const threadId = window.location.pathname.split('/').pop();
        localStorage.setItem(`draft_${threadId}`, content);
        showNotification('💾 Черновик сохранён', 'success');
    }

    function loadDraft() {
        const threadId = window.location.pathname.split('/').pop();
        return localStorage.getItem(`draft_${threadId}`);
    }

    function clearDraft() {
        const threadId = window.location.pathname.split('/').pop();
        localStorage.removeItem(`draft_${threadId}`);
    }

    // Показ уведомлений
    function showNotification(message, type = 'info') {
        const colors = {
            success: '#2ecc71',
            error: '#e74c3c',
            info: '#3498db',
            warning: '#f39c12'
        };

        const notification = $(`
            <div style="position:fixed;bottom:80px;right:20px;background:${colors[type]};color:white;padding:10px 16px;border-radius:8px;z-index:10002;font-size:13px;box-shadow:0 4px 12px rgba(0,0,0,0.3);animation:slideIn 0.3s ease;">
                ${message}
            </div>
        `);

        $('body').append(notification);
        setTimeout(() => {
            notification.fadeOut(300, () => notification.remove());
        }, 2000);
    }

    // Копирование текста с уведомлением
    function copyToClipboard(text, successMessage = '✅ Скопировано!') {
        navigator.clipboard.writeText(text);
        showNotification(successMessage, 'success');
    }

    function addCustomTemplate(title, content, prefix = 3, close = false, category = 'complaints') {
        const templates = loadCustomTemplates();
        templates.push({
            title: title,
            content: content,
            prefix: prefix,
            status: false,
            close: close,
            category: category,
            isCustom: true,
            createdAt: Date.now()
        });
        saveCustomTemplates(templates);
        return templates;
    }

    function deleteCustomTemplate(index) {
        const templates = loadCustomTemplates();
        templates.splice(index, 1);
        saveCustomTemplates(templates);
        return templates;
    }

    function updateCustomTemplate(index, title, content, prefix, close, category) {
        const templates = loadCustomTemplates();
        if (templates[index]) {
            templates[index] = {
                ...templates[index],
                title: title,
                content: content,
                prefix: prefix,
                close: close,
                category: category
            };
            saveCustomTemplates(templates);
        }
        return templates;
    }

    const data = await getThreadData();
    const user = data.user;

    // ВСТРОЕННЫЕ ШАБЛОНЫ
    const complaintButtons = [
        {
    "title": "❌ Отказано",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(147, 112, 219)][SIZE=5]Отказано.[/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "отказано", "closed", "deny"]
  },
  {
    "title": "✅ Наказание выдано верно",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Проверив доказательства администратора, было принято решение, что наказание было выдано верно. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "наказание верно", "closed", "deny"]
  },
  {
    "title": "❌ Не подлежит обж",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(147, 112, 219)][SIZE=5] Ваш аккаунт не подлежит обжалованию. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "не обжалуется", "closed", "ban appeal"]
  },
  {
    "title": "⏳ На рассмотрении",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE][/I]\n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваша жалоба взята на рассмотрение. \n Не нужно создавать копии этой жалобы, ожидайте ответа в этой теме.[/SIZE][/COLOR][/FONT]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Ожидайте ответа.[/FONT][/COLOR][/SIZE][/I][/CENTER]",
    "prefix": 4,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["рассмотрение", "ожидание", "review", "pending"]
  },
  {
    "title": "⚠️ Беседа с адм",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваша жалоба была одобрена и будет проведена строгая беседа с администратором. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приятной игры на сервере [/FONT][COLOR=rgb(106, 90, 205)][FONT=arial]Екатеринбург [/FONT][/COLOR][/COLOR][/SIZE][/I][/SIZE][/FONT][/SIZE][/I][/CENTER]",
    "prefix": 2,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["одобрено", "беседа с админом", "approved", "admin talk"]
  },
  {
    "title": "🔄 Передано ГА",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваша жалоба передана Главному администратору [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Ожидайте ответа [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 4,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["передано", "главный администратор", "transfer", "GA"]
  },
  {
    "title": "❌ Нету доказательств",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]В вашей жалобе отсутствуют доказательства. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "нет доказательств", "evidence", "closed"]
  },
  {
    "title": "❌ Не рабочие доказательства",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]В вашей жалобе не работают доказательства. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "битые ссылки", "broken link", "invalid"]
  },
  {
    "title": "❌ Недостаточно доказательств",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]В вашей жалобе недостаточно доказательств . [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "мало доков", "insufficient", "evidence"]
  },
  {
    "title": "✅ Игрок будет наказан",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE][/I]\n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваша жалоба рассмотрена. Игрок будет наказан.[/SIZE][/COLOR][/FONT]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приятной игры![/FONT][/COLOR][/SIZE][/I][/CENTER]",
    "prefix": 2,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["одобрено", "наказание игроку", "approved", "player punish"]
  },
  {
    "title": "❌ Нету тайм-кода",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]В предоставленных доказательствах отсутствует /time. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "таймкод", "time", "closed"]
  },
  {
    "title": "⚠️ Админ получит наказание",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваша жалоба была одобрена и администратор получит наказание. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приятной игры на сервере [/FONT][COLOR=rgb(106, 90, 205)][FONT=arial]Екатеринбург  [/FONT][/COLOR][/COLOR][/SIZE][/I][/SIZE][/FONT][/SIZE][/I][/CENTER]",
    "prefix": 2,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["одобрено", "наказание админу", "admin punish", "approved"]
  },
  {
    "title": "❌ В тех раздел",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Вы ошиблись разделом.\nОбратитесь в Технический раздел - [URL=https://forum.ragerussia.online/forums/3//]*Тык*[/URL]. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 2,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "не тот раздел", "tech", "wrong section"]
  },
  {
    "title": "❌ Жалоба не по форме",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваша жалоба составлена не по форме.\nУбедительная просьба ознакомиться с правилами подачи жалоб на администрацию - [URL=https://forum.ragerussia.online/threads/8660/]*Тык*[/URL] [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "не по форме", "form", "rules"]
  },
  {
    "title": "✅ Наказание будет снято",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваше наказание будет снято в ближайшее время.[/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приятной игры на сервере [/FONT][COLOR=rgb(106, 90, 205)][FONT=arial]Екатеринбург [/FONT][/COLOR][/COLOR][/SIZE][/I][/SIZE][/FONT][/SIZE][/I][/CENTER]",
    "prefix": 2,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["одобрено", "снятие бана", "unban", "approved"]
  },
  {
    "title": "🔄 Передано ЗГА",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваша жалоба передана Заместителю главного администратора [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Ожидайте ответа [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 4,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["передано", "зам глава", "deputy", "transfer"]
  },
  {
    "title": "❌ Уже не адм",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Данный игрок был снят с поста администратора. [/SIZE][/COLOR][/FONT][/I]\n[url=https://postimages.org/][img]https://i.postimg.cc/TY3TpPFL/9914e97b895811f4cb5f5aafcdebc98f7a9b20a3r1-320-146-hq.gif[/img][/url]\n\n[SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приятной игры на сервере [/FONT][COLOR=rgb(106, 90, 205)][FONT=arial]Екатеринбург  [/FONT][/COLOR][/COLOR][/SIZE][/I][/SIZE][/FONT][/SIZE][/I][/CENTER]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "экс-админ", "ex admin", "dismissed"]
  },
  {
    "title": "⏳ Запрошу доки",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Запрошу доказательства у администратора. \n Ожидайте, пожалуйста, ответа от администрации и не нужно создавать копии этой темы. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Ожидайте ответа. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 4,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["ожидание", "запрос доков", "evidence request", "pending"]
  },
  {
    "title": "❌ От 3-го лица",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Жалобы, написанные от 3-го лица рассмотрению не подлежат.[/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто.[/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "третье лицо", "third party", "closed"]
  },
  {
    "title": "⚠️ Беседа с лидером",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваша жалоба была одобрена и будет проведена строгая беседа с лидером. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приятной игры на сервере [/FONT][COLOR=rgb(106, 90, 205)][FONT=arial]Екатеринбург [/FONT][/COLOR][/COLOR][/SIZE][/I][/SIZE][/FONT][/SIZE][/I][/CENTER]",
    "prefix": 2,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["одобрено", "беседа с лидером", "leader talk", "approved"]
  },
  {
    "title": "⚠️ Лидер получит наказание",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ваша жалоба была одобрена и лидер получит наказание. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приятной игры на сервере [/FONT][COLOR=rgb(106, 90, 205)][FONT=arial]Екатеринбург  [/FONT][/COLOR][/COLOR][/SIZE][/I][/SIZE][/FONT][/SIZE][/I][/CENTER]",
    "prefix": 2,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["одобрено", "наказание лидеру", "leader punish", "approved"]
  },
  {
    "title": "❌ Нет нарушений от лд",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}.  [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Проверив ваши доказательства, нарушения со стороны лидера не выявлено. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приятной игры на сервере [/FONT][COLOR=rgb(106, 90, 205)][FONT=arial]Екатеринбург  [/FONT][/COLOR][/COLOR][/SIZE][/I][/SIZE][/FONT][/SIZE][/I][/CENTER]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "нет нарушений", "no violation", "leader", "closed"]
  },
  {
    "title": "❌ В нрп обман",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый  ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Вы ошиблись разделом.\nОбратитесь в раздел жалоб на NonRP разводы - [URL=https://forum.ragerussia.online/forums/105/]*Тык*[/URL]. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "не тот раздел", "nonrp", "scam", "wrong section"]
  },
  {
    "title": "❌ Не лидер",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый  ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Данный игрок не является лидером. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приятной игры на сервере [/FONT][COLOR=rgb(106, 90, 205)][FONT=arial]Екатеринбург  [/FONT][/COLOR][/COLOR][/SIZE][/I][/SIZE][/FONT][/SIZE][/I][/CENTER]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "не лидер", "not leader", "closed"]
  },
  {
    "title": "❌ Нету условий сделки",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Отсутствуют условия сделки. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "условия сделки", "terms", "deal", "closed"]
  },
  {
    "title": "❌ Ошиблись сервером",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Вы ошиблись сервером. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "не тот сервер", "wrong server", "closed"]
  },
  {
    "title": "❌ Нарушений не найдено",
    "content": "[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] \n\n[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Просмотрев ваши доказательства, нарушений найдено не было. [/SIZE][/COLOR][/FONT][/I]\n[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]\n\n[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]",
    "prefix": 3,
    "status": false,
    "close": false,
    "category": "complaints",
    "tags": ["отказ", "нарушений нет", "no violation", "closed"]
  }

    ];

    const requestButtons = [
        {
            title: `📌 Ответ в прошлой теме`,
            content: `[CENTER][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Приветствую, уважаемый ${user.name}. [/FONT][/COLOR][/SIZE] <br><br>[FONT=times new roman][COLOR=rgb(146, 58, 255)][SIZE=5]Ответ был дан в прошлой теме. [/SIZE][/COLOR][/FONT][/I]<br>[URL=https://postimages.org/][IMG]https://i.postimg.cc/6pRdXXKx/20240615-022705.png[/IMG][/URL]<br><br>[I][SIZE=5][FONT=times new roman][SIZE=5][I][I][SIZE=4][COLOR=rgb(147, 112, 219)][FONT=arial]Закрыто. [/CENTER][/FONT][/COLOR][/SIZE][/I][/I][/SIZE][/FONT][/SIZE]`,
            prefix: 3, status: false, close: false, category: 'requests', tags: ['прошлая тема', 'дубль', 'old']
        },
    ];

    
    let isWindowOpen = false;
    let currentSearchQuery = '';

    function toggleCompactWindow() {
        if (isWindowOpen) {
            $('#compactScriptWindow').remove();
            isWindowOpen = false;
        } else {
            showCompactWindow();
        }
    }

    function filterTemplates() {
        const search = $('#templateSearchInput').val().toLowerCase();
        currentSearchQuery = search;

       
        $('.template-item-btn[data-template-type="builtin"]').each(function() {
            const title = $(this).text().toLowerCase();
            const tags = $(this).data('tags') || '';
            const matches = title.includes(search) || (tags && tags.toLowerCase().includes(search));
            $(this).toggle(matches);
        });

       
        $('.custom-template-item').each(function() {
            const title = $(this).find('.custom-title').text().toLowerCase();
            const matches = title.includes(search);
            $(this).toggle(matches);
        });

      
        const visibleBuiltin = $('.template-item-btn[data-template-type="builtin"]:visible').length;
        const visibleCustom = $('.custom-template-item:visible').length;
        const activeTab = $('.tab-btn.active').data('tab');

        if (activeTab === 'builtin' && visibleBuiltin === 0 && search) {
            if (!$('#noResultsMsg').length) {
                $('#builtinTab').append('<div id="noResultsMsg" style="text-align:center;padding:20px;color:#aaa;">🔍 Ничего не найдено</div>');
            }
        } else {
            $('#noResultsMsg').remove();
        }

        if (activeTab === 'custom' && visibleCustom === 0 && search) {
            if (!$('#noCustomResultsMsg').length) {
                $('#customTab').append('<div id="noCustomResultsMsg" style="text-align:center;padding:20px;color:#aaa;">🔍 Нет своих шаблонов по запросу</div>');
            }
        } else {
            $('#noCustomResultsMsg').remove();
        }
    }

    function showCompactWindow() {
        const customTemplates = loadCustomTemplates();
        const quickReplies = loadQuickReplies();
        const settings = loadSettings();
        const stats = loadStats();
        const todayStats = stats[new Date().toDateString()] || { total: 0, templates: {} };

        const windowHtml = `
            <div id="compactScriptWindow" style="position:fixed;top:50px;right:20px;width:420px;max-height:85vh;background:linear-gradient(135deg, #1a1a2e, #16213e);border-radius:16px;box-shadow:0 8px 32px rgba(0,0,0,0.4),0 0 0 1px rgba(155,89,182,0.3);z-index:10000;display:flex;flex-direction:column;overflow:hidden;backdrop-filter:blur(10px);">
                <!-- Заголовок окна -->
                <div style="display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:linear-gradient(135deg, #9b59b6, #6a3ad5);cursor:move;" id="windowHeader">
                    <div style="display:flex;align-items:center;gap:8px;">
                        <span style="font-size:20px;">✨</span>
                        <span style="font-weight:bold;color:white;">Script by Flora</span>
                        <span style="font-size:11px;background:rgba(255,255,255,0.2);padding:2px 8px;border-radius:20px;">v7</span>
                    </div>
                    <div style="display:flex;gap:8px;">
                        <button id="minimizeWindowBtn" style="background:none;border:none;color:white;font-size:18px;cursor:pointer;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;transition:all 0.2s;">➖</button>
                        <button id="closeWindowBtn" style="background:none;border:none;color:white;font-size:18px;cursor:pointer;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px;transition:all 0.2s;">✖️</button>
                    </div>
                </div>

                <!-- Содержимое окна -->
                <div style="padding:12px;overflow-y:auto;flex:1;max-height:calc(85vh - 50px);">
                    <!-- Быстрые действия -->
                    <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:16px;">
                        <button id="quickClosedBtn" style="padding:10px;border-radius:10px;border:none;background:linear-gradient(135deg,#e74c3c,#c0392b);color:white;cursor:pointer;font-weight:bold;transition:all 0.2s;">🔒 Закрыть</button>
                        <button id="quickUnacceptBtn" style="padding:10px;border-radius:10px;border:none;background:linear-gradient(135deg,#f39c12,#e67e22);color:white;cursor:pointer;font-weight:bold;transition:all 0.2s;">❌ Отказать</button>
                        <button id="quickConsiderBtn" style="padding:10px;border-radius:10px;border:none;background:linear-gradient(135deg,#3498db,#2980b9);color:white;cursor:pointer;font-weight:bold;transition:all 0.2s;">📋 На рассм.</button>
                    </div>

                    <!-- Дополнительные быстрые кнопки -->
                    <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:16px;">
                        <button id="quickAcceptBtn" style="padding:8px;border-radius:8px;border:none;background:linear-gradient(135deg,#27ae60,#2ecc71);color:white;cursor:pointer;font-size:12px;">✅ Принять</button>
                        <button id="quickCopyLinkBtn" style="padding:8px;border-radius:8px;border:none;background:linear-gradient(135deg,#3498db,#2980b9);color:white;cursor:pointer;font-size:12px;">🔗 Копировать ссылку</button>
                        <button id="quickMentionBtn" style="padding:8px;border-radius:8px;border:none;background:linear-gradient(135deg,#9b59b6,#6a3ad5);color:white;cursor:pointer;font-size:12px;">@ Упомянуть</button>
                    </div>

                    <!-- Улучшенный поиск шаблонов -->
                    <div style="margin-bottom:12px;">
                        <div style="position:relative;">
                            <input type="text" id="templateSearchInput" placeholder="🔍 Поиск шаблонов (название, теги)..." style="width:100%;padding:10px 35px 10px 12px;border-radius:10px;border:1px solid #9b59b6;background:#0f0f1a;color:white;box-sizing:border-box;">
                            <span id="searchClearBtn" style="position:absolute;right:10px;top:50%;transform:translateY(-50%);cursor:pointer;color:#aaa;display:none;">✖️</span>
                        </div>
                        <div id="searchStats" style="font-size:10px;color:#aaa;margin-top:4px;text-align:right;"></div>
                    </div>

                    <!-- Вкладки -->
                    <div style="display:flex;gap:4px;margin-bottom:12px;border-bottom:1px solid rgba(155,89,182,0.3);flex-wrap:wrap;">
                        <button class="tab-btn active" data-tab="builtin" style="padding:8px 12px;background:none;border:none;color:white;cursor:pointer;border-bottom:2px solid #9b59b6;">📦 Встроенные</button>
                        <button class="tab-btn" data-tab="custom" style="padding:8px 12px;background:none;border:none;color:#aaa;cursor:pointer;">⭐ Мои (${customTemplates.length})</button>
                        <button class="tab-btn" data-tab="quick" style="padding:8px 12px;background:none;border:none;color:#aaa;cursor:pointer;">⚡ Быстрые ответы (${quickReplies.length})</button>
                        <button class="tab-btn" data-tab="stats" style="padding:8px 12px;background:none;border:none;color:#aaa;cursor:pointer;">📊 Статистика</button>
                        <button class="tab-btn" data-tab="settings" style="padding:8px 12px;background:none;border:none;color:#aaa;cursor:pointer;">⚙️ Настройки</button>
                    </div>

                    <!-- Список встроенных шаблонов -->
                    <div id="builtinTab" class="tab-content" style="display:block;">
                        <div style="margin-bottom:8px;font-size:11px;color:#aaa;">📋 ЖАЛОБЫ (${complaintButtons.length})</div>
                        ${complaintButtons.map((btn, idx) => `
                            <button class="template-item-btn" data-template-type="builtin" data-template-index="${idx}" data-is-request="false" data-tags="${btn.tags.join(' ')}" style="display:block;width:100%;text-align:left;padding:8px 12px;margin:4px 0;border-radius:8px;border:none;background:#0f0f1a;color:#ecf0f1;cursor:pointer;transition:all 0.2s;">${btn.title}</button>
                        `).join('')}
                        <div style="margin:12px 0 8px 0;font-size:11px;color:#aaa;">📨 ЗАПРОСЫ (${requestButtons.length})</div>
                        ${requestButtons.map((btn, idx) => `
                            <button class="template-item-btn" data-template-type="builtin" data-template-index="${idx}" data-is-request="true" data-tags="${btn.tags.join(' ')}" style="display:block;width:100%;text-align:left;padding:8px 12px;margin:4px 0;border-radius:8px;border:none;background:#0f0f1a;color:#ecf0f1;cursor:pointer;transition:all 0.2s;">${btn.title}</button>
                        `).join('')}
                    </div>

                    <!-- Список своих шаблонов -->
                    <div id="customTab" class="tab-content" style="display:none;">
                        <button id="createTemplateBtn" style="width:100%;padding:10px;border-radius:10px;border:none;background:#2ecc71;color:white;cursor:pointer;margin-bottom:12px;font-weight:bold;">➕ Создать шаблон</button>
                        <div id="customTemplatesList">
                            ${customTemplates.length === 0 ? '<div style="text-align:center;padding:20px;color:#aaa;">Нет своих шаблонов<br>Нажмите "Создать шаблон"</div>' : ''}
                            ${customTemplates.map((tpl, idx) => `
                                <div class="custom-template-item" data-template-index="${idx}" style="background:#0f0f1a;border-radius:8px;margin-bottom:8px;padding:8px;">
                                    <div style="display:flex;justify-content:space-between;align-items:center;">
                                        <span class="custom-title" style="font-weight:bold;color:#9b59b6;">${escapeHtml(tpl.title)}</span>
                                        <div>
                                            <button class="edit-custom-btn" data-index="${idx}" style="background:#f39c12;border:none;padding:4px 8px;border-radius:4px;color:white;cursor:pointer;margin-right:4px;">✏️</button>
                                            <button class="delete-custom-btn" data-index="${idx}" style="background:#e74c3c;border:none;padding:4px 8px;border-radius:4px;color:white;cursor:pointer;">🗑️</button>
                                        </div>
                                    </div>
                                    <div style="font-size:10px;color:#aaa;margin:4px 0;">Префикс: ${tpl.prefix === 2 ? 'Принято' : (tpl.prefix === 3 ? 'Отказано' : 'На рассмотрении')}</div>
                                    <button class="use-custom-btn" data-index="${idx}" style="width:100%;margin-top:6px;padding:6px;border-radius:6px;border:none;background:#3498db;color:white;cursor:pointer;">Использовать</button>
                                </div>
                            `).join('')}
                        </div>
                    </div>

                    <!-- Быстрые ответы -->
                    <div id="quickTab" class="tab-content" style="display:none;">
                        <button id="addQuickReplyBtn" style="width:100%;padding:10px;border-radius:10px;border:none;background:#9b59b6;color:white;cursor:pointer;margin-bottom:12px;font-weight:bold;">➕ Добавить быстрый ответ</button>
                        <div id="quickRepliesList">
                            ${quickReplies.length === 0 ? '<div style="text-align:center;padding:20px;color:#aaa;">Нет быстрых ответов<br>Нажмите "Добавить быстрый ответ"</div>' : ''}
                            ${quickReplies.map((reply, idx) => `
                                <div class="quick-reply-item" data-reply-index="${idx}" style="background:#0f0f1a;border-radius:8px;margin-bottom:8px;padding:8px;">
                                    <div style="display:flex;justify-content:space-between;align-items:center;">
                                        <span style="font-weight:bold;color:#2ecc71;">⚡ ${escapeHtml(reply.title)}</span>
                                        <div>
                                            <button class="edit-quick-reply" data-index="${idx}" style="background:#f39c12;border:none;padding:4px 8px;border-radius:4px;color:white;cursor:pointer;margin-right:4px;">✏️</button>
                                            <button class="delete-quick-reply" data-index="${idx}" style="background:#e74c3c;border:none;padding:4px 8px;border-radius:4px;color:white;cursor:pointer;">🗑️</button>
                                        </div>
                                    </div>
                                    <div style="font-size:11px;color:#aaa;margin-top:4px;">${escapeHtml(reply.content.substring(0, 50))}...</div>
                                    <button class="use-quick-reply" data-index="${idx}" style="width:100%;margin-top:6px;padding:6px;border-radius:6px;border:none;background:#27ae60;color:white;cursor:pointer;">📝 Вставить ответ</button>
                                </div>
                            `).join('')}
                        </div>
                    </div>

                    <!-- Статистика -->
                    <div id="statsTab" class="tab-content" style="display:none;">
                        <div style="background:#0f0f1a;border-radius:8px;padding:12px;">
                            <div style="text-align:center;margin-bottom:12px;">
                                <span style="font-size:24px;">📊</span>
                                <h4 style="margin:5px 0;color:white;">Статистика за сегодня</h4>
                                <div style="font-size:28px;color:#9b59b6;font-weight:bold;">${todayStats.total}</div>
                                <div style="font-size:11px;color:#aaa;">всего ответов</div>
                            </div>
                            ${Object.keys(todayStats.templates).length > 0 ? `
                                <div style="margin-top:12px;">
                                    <div style="font-size:12px;color:#aaa;margin-bottom:8px;">Использованные шаблоны:</div>
                                    ${Object.entries(todayStats.templates).map(([name, count]) => `
                                        <div style="display:flex;justify-content:space-between;margin-bottom:4px;">
                                            <span style="font-size:11px;">${name}</span>
                                            <span style="color:#9b59b6;">${count} раз</span>
                                        </div>
                                    `).join('')}
                                </div>
                            ` : '<div style="text-align:center;padding:20px;color:#aaa;">Нет статистики за сегодня</div>'}
                            <button id="resetStatsBtn" style="width:100%;margin-top:12px;padding:8px;border-radius:6px;border:none;background:#e74c3c;color:white;cursor:pointer;">🗑️ Сбросить статистику</button>
                        </div>
                    </div>

                    <!-- Настройки -->
                    <div id="settingsTab" class="tab-content" style="display:none;">
                        <div style="background:#0f0f1a;border-radius:8px;padding:12px;">
                            <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;">
                                <span>🎨 Верхняя панель</span>
                                <label class="switch">
                                    <input type="checkbox" id="topBarToggle" ${settings.topBarEnabled ? 'checked' : ''}>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;">
                                <span>🌙 Тёмная тема</span>
                                <label class="switch">
                                    <input type="checkbox" id="themeToggle" ${settings.theme === 'dark' ? 'checked' : ''}>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;">
                                <span>⚡ Быстрые действия</span>
                                <label class="switch">
                                    <input type="checkbox" id="quickActionsToggle" ${settings.quickActions !== false ? 'checked' : ''}>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;">
                                <span>🔄 Авто-перезагрузка</span>
                                <label class="switch">
                                    <input type="checkbox" id="autoReloadToggle" ${settings.autoReload ? 'checked' : ''}>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;">
                                <span>💾 Авто-сохранение черновиков</span>
                                <label class="switch">
                                    <input type="checkbox" id="autoSaveToggle" ${settings.autoSaveDrafts !== false ? 'checked' : ''}>
                                    <span class="slider"></span>
                                </label>
                            </div>
                            <button id="loadDraftBtn" style="width:100%;padding:8px;border-radius:6px;border:none;background:#3498db;color:white;cursor:pointer;margin-top:8px;">📂 Загрузить черновик</button>
                            <button id="clearDraftBtn" style="width:100%;padding:8px;border-radius:6px;border:none;background:#e74c3c;color:white;cursor:pointer;margin-top:8px;">🗑️ Очистить черновик</button>
                            <button id="resetTemplatesBtn" style="width:100%;padding:10px;border-radius:8px;border:1px solid #e74c3c;background:none;color:#e74c3c;cursor:pointer;margin-top:12px;">🗑️ Сбросить свои шаблоны</button>
                            <button id="exportTemplatesBtn" style="width:100%;padding:10px;border-radius:8px;border:1px solid #3498db;background:none;color:#3498db;cursor:pointer;margin-top:8px;">💾 Экспорт шаблонов</button>
                            <button id="importTemplatesBtn" style="width:100%;padding:10px;border-radius:8px;border:1px solid #2ecc71;background:none;color:#2ecc71;cursor:pointer;margin-top:8px;">📥 Импорт шаблонов</button>
                        </div>
                    </div>
                </div>
            </div>
        `;

        $('body').append(windowHtml);
        isWindowOpen = true;

        
        let isDragging = false;
        let dragOffsetX, dragOffsetY;

        $('#windowHeader').on('mousedown', function(e) {
            if (e.target.closest('#minimizeWindowBtn') || e.target.closest('#closeWindowBtn')) return;
            isDragging = true;
            dragOffsetX = e.clientX - $('#compactScriptWindow').offset().left;
            dragOffsetY = e.clientY - $('#compactScriptWindow').offset().top;
            $('#compactScriptWindow').css('cursor', 'grabbing');
        });

        $(document).on('mousemove', function(e) {
            if (!isDragging) return;
            let newLeft = e.clientX - dragOffsetX;
            let newTop = e.clientY - dragOffsetY;
            newLeft = Math.max(0, Math.min(newLeft, $(window).width() - $('#compactScriptWindow').outerWidth()));
            newTop = Math.max(0, Math.min(newTop, $(window).height() - $('#compactScriptWindow').outerHeight()));
            $('#compactScriptWindow').css({ left: newLeft, right: 'auto', top: newTop });
        });

        $(document).on('mouseup', function() {
            isDragging = false;
            $('#compactScriptWindow').css('cursor', '');
        });

       
        $('#closeWindowBtn').click(() => toggleCompactWindow());

       
        let isMinimized = false;
        $('#minimizeWindowBtn').click(function() {
            if (!isMinimized) {
                $('#compactScriptWindow .tab-content, #compactScriptWindow > div:not(#windowHeader)').hide();
                $('#compactScriptWindow').css({ width: 'auto', minWidth: '200px' });
                $(this).text('🔽');
                isMinimized = true;
            } else {
                $('#compactScriptWindow .tab-content, #compactScriptWindow > div:not(#windowHeader)').show();
                $('#compactScriptWindow').css({ width: '420px', minWidth: '' });
                $(this).text('➖');
                isMinimized = false;
            }
        });

        
        $('.tab-btn').click(function() {
            $('.tab-btn').removeClass('active').css({ color: '#aaa', borderBottom: 'none' });
            $(this).addClass('active').css({ color: 'white', borderBottom: '2px solid #9b59b6' });

            const tab = $(this).data('tab');
            $('.tab-content').hide();
            if (tab === 'builtin') {
                $('#builtinTab').show();
                filterTemplates();
            } else if (tab === 'custom') {
                $('#customTab').show();
                filterTemplates();
            } else if (tab === 'quick') {
                $('#quickTab').show();
            } else if (tab === 'stats') {
                $('#statsTab').show();
            } else if (tab === 'settings') $('#settingsTab').show();
        });

       
        const $searchInput = $('#templateSearchInput');
        const $searchClearBtn = $('#searchClearBtn');

        $searchInput.on('input', function() {
            const val = $(this).val();
            $searchClearBtn.toggle(val.length > 0);
            filterTemplates();

            const visibleCount = $('.template-item-btn[data-template-type="builtin"]:visible, .custom-template-item:visible').length;
            $('#searchStats').text(`Найдено: ${visibleCount}`);
        });

        $searchClearBtn.click(function() {
            $searchInput.val('');
            $searchClearBtn.hide();
            filterTemplates();
            $('#searchStats').text('');
        });

       
        $('#quickClosedBtn').click(() => editThreadDataAndReload(PIN_PREFIX, true, false));
        $('#quickUnacceptBtn').click(() => editThreadDataAndReload(UNACCEPT_PREFIX, false, false));
        $('#quickConsiderBtn').click(() => editThreadDataAndReload(CLOSED_PREFIX, false, false));
        $('#quickAcceptBtn').click(() => editThreadDataAndReload(ACCEPT_PREFIX, false, false));

        $('#quickCopyLinkBtn').click(() => copyToClipboard(window.location.href, '✅ Ссылка скопирована!'));

        $('#quickMentionBtn').click(() => {
            const mention = `${user.mention}`;
            pasteContent(mention);
            showNotification('👤 Упоминание добавлено', 'success');
        });

       
        $('.template-item-btn').click(async function() {
            const type = $(this).data('template-type');
            const idx = $(this).data('template-index');
            const isRequest = $(this).data('is-request');

            let template;
            if (type === 'builtin') {
                const list = isRequest ? requestButtons : complaintButtons;
                template = list[idx];
            }

            if (template) {
                updateStats(template.title);
                pasteContent(template.content);
                if (template.prefix !== undefined) await editThreadDataAsync(template.prefix, template.status);
                if (template.close) await closeThreadAsync();
                setTimeout(() => $('.button--icon.button--icon--reply.rippleButton').trigger('click'), 500);

                const autoReload = loadSettings().autoReload;
                if (autoReload) {
                    setTimeout(() => location.reload(), 1000);
                } else {
                    toggleCompactWindow();
                }
            }
        });

        
        $('#createTemplateBtn').click(() => {
            toggleCompactWindow();
            showTemplateEditor();
        });

        
        $('.edit-custom-btn').click(function() {
            const idx = $(this).data('index');
            const templates = loadCustomTemplates();
            toggleCompactWindow();
            showTemplateEditor(templates[idx], idx);
        });

        $('.delete-custom-btn').click(function() {
            const idx = $(this).data('index');
            if (confirm('Удалить шаблон?')) {
                deleteCustomTemplate(idx);
                toggleCompactWindow();
                showCompactWindow();
            }
        });

        $('.use-custom-btn').click(async function() {
            const idx = $(this).data('index');
            const templates = loadCustomTemplates();
            const template = templates[idx];
            if (template) {
                updateStats(template.title);
                pasteContent(template.content);
                if (template.prefix !== undefined) await editThreadDataAsync(template.prefix, template.status);
                if (template.close) await closeThreadAsync();
                setTimeout(() => $('.button--icon.button--icon--reply.rippleButton').trigger('click'), 500);

                const autoReload = loadSettings().autoReload;
                if (autoReload) {
                    setTimeout(() => location.reload(), 1000);
                } else {
                    toggleCompactWindow();
                }
            }
        });

        
        $('#addQuickReplyBtn').click(() => {
            toggleCompactWindow();
            showQuickReplyEditor();
        });

        $('.edit-quick-reply').click(function() {
            const idx = $(this).data('index');
            const replies = loadQuickReplies();
            toggleCompactWindow();
            showQuickReplyEditor(replies[idx], idx);
        });

        $('.delete-quick-reply').click(function() {
            const idx = $(this).data('index');
            if (confirm('Удалить быстрый ответ?')) {
                const replies = loadQuickReplies();
                replies.splice(idx, 1);
                saveQuickReplies(replies);
                toggleCompactWindow();
                showCompactWindow();
            }
        });

        $('.use-quick-reply').click(function() {
            const idx = $(this).data('index');
            const replies = loadQuickReplies();
            const reply = replies[idx];
            if (reply) {
                pasteContent(reply.content);
                showNotification(`⚡ Быстрый ответ "${reply.title}" вставлен`, 'success');
                toggleCompactWindow();
            }
        });

      
        $('#resetStatsBtn').click(() => {
            if (confirm('Сбросить всю статистику?')) {
                saveStats({});
                toggleCompactWindow();
                showCompactWindow();
            }
        });

       
        $('#topBarToggle').change(function() {
            const settings = loadSettings();
            settings.topBarEnabled = $(this).is(':checked');
            saveSettings(settings);
            if (settings.topBarEnabled) showTopBar(); else $('#topBarScript').remove();
        });

        $('#themeToggle').change(function() {
            const settings = loadSettings();
            settings.theme = $(this).is(':checked') ? 'dark' : 'light';
            saveSettings(settings);
            applyTheme(settings.theme);
        });

        $('#quickActionsToggle').change(function() {
            const settings = loadSettings();
            settings.quickActions = $(this).is(':checked');
            saveSettings(settings);
            if (!settings.quickActions) {
                $('.quick-actions-row').hide();
            } else {
                $('.quick-actions-row').show();
            }
        });

        $('#autoReloadToggle').change(function() {
            const settings = loadSettings();
            settings.autoReload = $(this).is(':checked');
            saveSettings(settings);
        });

        $('#autoSaveToggle').change(function() {
            const settings = loadSettings();
            settings.autoSaveDrafts = $(this).is(':checked');
            saveSettings(settings);
        });

        $('#loadDraftBtn').click(() => {
            const draft = loadDraft();
            if (draft) {
                pasteContent(draft);
                showNotification('📂 Черновик загружен', 'success');
                toggleCompactWindow();
            } else {
                showNotification('❌ Нет сохранённого черновика', 'error');
            }
        });

        $('#clearDraftBtn').click(() => {
            clearDraft();
            showNotification('🗑️ Черновик очищен', 'success');
        });

        $('#resetTemplatesBtn').click(() => {
            if (confirm('Удалить все свои шаблоны? Это действие нельзя отменить.')) {
                saveCustomTemplates([]);
                toggleCompactWindow();
                showCompactWindow();
            }
        });

        $('#exportTemplatesBtn').click(() => {
            const templates = loadCustomTemplates();
            const dataStr = JSON.stringify(templates, null, 2);
            const blob = new Blob([dataStr], {type: 'application/json'});
            const url = URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.download = `templates_backup_${Date.now()}.json`;
            a.click();
            URL.revokeObjectURL(url);
            showNotification('💾 Шаблоны экспортированы', 'success');
        });

        $('#importTemplatesBtn').click(() => {
            const input = document.createElement('input');
            input.type = 'file';
            input.accept = 'application/json';
            input.onchange = (e) => {
                const file = e.target.files[0];
                const reader = new FileReader();
                reader.onload = (event) => {
                    try {
                        const imported = JSON.parse(event.target.result);
                        if (Array.isArray(imported)) {
                            const existing = loadCustomTemplates();
                            saveCustomTemplates([...existing, ...imported]);
                            showNotification(`✅ Импортировано ${imported.length} шаблонов`, 'success');
                            toggleCompactWindow();
                            showCompactWindow();
                        } else {
                            showNotification('❌ Неверный формат файла', 'error');
                        }
                    } catch(e) {
                        showNotification('❌ Ошибка при импорте', 'error');
                    }
                };
                reader.readAsText(file);
            };
            input.click();
        });

       
        filterTemplates();

        
        if (!settings.quickActions) {
            $('.quick-actions-row').hide();
        }
    }

    
    function showQuickReplyEditor(reply = null, index = -1) {
        const isEdit = reply !== null;
        const modalHtml = `
            <div class="quick-reply-editor-overlay" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.85);z-index:10001;display:flex;align-items:center;justify-content:center;">
                <div style="background:#1a1a2e;border-radius:16px;width:90%;max-width:500px;padding:20px;border:1px solid #9b59b6;">
                    <h3 style="margin:0 0 15px 0;color:white;">${isEdit ? '✏️ Редактировать быстрый ответ' : '➕ Добавить быстрый ответ'}</h3>
                    <input type="text" id="quickReplyTitle" placeholder="Название" value="${isEdit ? escapeHtml(reply.title) : ''}" style="width:100%;padding:10px;margin-bottom:12px;border-radius:8px;border:1px solid #9b59b6;background:#0f0f1a;color:white;box-sizing:border-box;">
                    <textarea id="quickReplyContent" placeholder="Содержание (BB-код)" rows="6" style="width:100%;padding:10px;margin-bottom:12px;border-radius:8px;border:1px solid #9b59b6;background:#0f0f1a;color:white;box-sizing:border-box;font-family:monospace;">${isEdit ? escapeHtml(reply.content) : ''}</textarea>
                    <div style="display:flex;gap:10px;justify-content:flex-end;">
                        <button id="cancelQuickReplyBtn" style="padding:8px 20px;border-radius:8px;border:none;background:#7f8c8d;color:white;cursor:pointer;">Отмена</button>
                        <button id="saveQuickReplyBtn" style="padding:8px 20px;border-radius:8px;border:none;background:#9b59b6;color:white;cursor:pointer;">${isEdit ? 'Сохранить' : 'Добавить'}</button>
                    </div>
                </div>
            </div>
        `;

        $('body').append(modalHtml);
        const $overlay = $('.quick-reply-editor-overlay');

        $('#cancelQuickReplyBtn').click(() => $overlay.remove());
        $('#saveQuickReplyBtn').click(() => {
            const title = $('#quickReplyTitle').val().trim();
            const content = $('#quickReplyContent').val();

            if (!title) { alert('Введите название!'); return; }
            if (!content) { alert('Введите содержание!'); return; }

            const replies = loadQuickReplies();
            if (isEdit) {
                replies[index] = { title, content };
            } else {
                replies.push({ title, content });
            }
            saveQuickReplies(replies);
            $overlay.remove();
            showCompactWindow();
        });

        $overlay.click((e) => { if ($(e.target).is('.quick-reply-editor-overlay')) $overlay.remove(); });
    }

    function applyTheme(theme) {
        if (theme === 'dark') {
            $('#compactScriptWindow').css('background', 'linear-gradient(135deg, #1a1a2e, #16213e)');
        } else {
            $('#compactScriptWindow').css('background', 'linear-gradient(135deg, #f5f5f5, #e0e0e0)');
        }
    }

    
    function showTopBar() {
        if ($('#topBarScript').length) return;

        const topBarHtml = `
            <div id="topBarScript" style="position:fixed;top:0;left:0;right:0;height:36px;background:linear-gradient(90deg, #1a1a2e, #16213e, #1a1a2e);border-bottom:2px solid #9b59b6;z-index:9999;display:flex;align-items:center;justify-content:space-between;padding:0 16px;box-shadow:0 2px 10px rgba(0,0,0,0.3);">
                <div style="display:flex;align-items:center;gap:8px;">
                    <span style="font-size:18px;">✨</span>
                    <span style="color:white;font-weight:bold;font-size:13px;">Forum Script EKB</span>
                    <span style="font-size:10px;background:#9b59b6;padding:2px 6px;border-radius:20px;">by Flora</span>
                </div>
                <div style="display:flex;gap:6px;">
                    <button id="topBarOpenBtn" style="background:linear-gradient(135deg,#9b59b6,#6a3ad5);border:none;padding:4px 12px;border-radius:16px;color:white;cursor:pointer;font-size:11px;font-weight:bold;">📋 Открыть</button>
                    <button id="topBarCloseBtn" style="background:rgba(231,76,60,0.8);border:none;padding:4px 12px;border-radius:16px;color:white;cursor:pointer;font-size:11px;">🔒 Закрыть</button>
                    <button id="topBarUnacceptBtn" style="background:rgba(243,156,18,0.8);border:none;padding:4px 12px;border-radius:16px;color:white;cursor:pointer;font-size:11px;">❌ Отказать</button>
                    <button id="topBarAcceptBtn" style="background:rgba(46,204,113,0.8);border:none;padding:4px 12px;border-radius:16px;color:white;cursor:pointer;font-size:11px;">✅ Принять</button>
                    <button id="topBarCopyLink" style="background:rgba(52,152,219,0.8);border:none;padding:4px 12px;border-radius:16px;color:white;cursor:pointer;font-size:11px;">🔗 Копировать ссылку</button>
                </div>
            </div>
        `;

        $('body').append(topBarHtml);

        $('#topBarOpenBtn').click(() => showCompactWindow());
        $('#topBarCloseBtn').click(() => editThreadDataAndReload(PIN_PREFIX, true, false));
        $('#topBarUnacceptBtn').click(() => editThreadDataAndReload(UNACCEPT_PREFIX, false, false));
        $('#topBarAcceptBtn').click(() => editThreadDataAndReload(ACCEPT_PREFIX, false, false));
        $('#topBarCopyLink').click(() => copyToClipboard(window.location.href, '✅ Ссылка скопирована!'));

        
        $('body').css('padding-top', '36px');
    }

    
    function showTemplateEditor(template = null, index = -1) {
        const isEdit = template !== null;
        const modalHtml = `
            <div class="template-editor-overlay" style="position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.85);z-index:10001;display:flex;align-items:center;justify-content:center;">
                <div style="background:#1a1a2e;border-radius:16px;width:90%;max-width:500px;padding:20px;border:1px solid #9b59b6;">
                    <h3 style="margin:0 0 15px 0;color:white;">${isEdit ? '✏️ Редактировать шаблон' : '➕ Создать шаблон'}</h3>
                    <input type="text" id="editorTitle" placeholder="Название" value="${isEdit ? escapeHtml(template.title) : ''}" style="width:100%;padding:10px;margin-bottom:12px;border-radius:8px;border:1px solid #9b59b6;background:#0f0f1a;color:white;box-sizing:border-box;">
                    <textarea id="editorContent" placeholder="Содержание (BB-код)" rows="6" style="width:100%;padding:10px;margin-bottom:12px;border-radius:8px;border:1px solid #9b59b6;background:#0f0f1a;color:white;box-sizing:border-box;font-family:monospace;">${isEdit ? escapeHtml(template.content) : ''}</textarea>
                    <select id="editorPrefix" style="width:100%;padding:10px;margin-bottom:12px;border-radius:8px;border:1px solid #9b59b6;background:#0f0f1a;color:white;">
                        <option value="2" ${isEdit && template.prefix == 2 ? 'selected' : ''}>Префикс: Принято (2)</option>
                        <option value="3" ${isEdit && template.prefix == 3 ? 'selected' : ''}>Префикс: Отказано (3)</option>
                        <option value="4" ${isEdit && template.prefix == 4 ? 'selected' : ''}>Префикс: На рассмотрении (4)</option>
                    </select>
                    <label style="display:flex;align-items:center;gap:8px;margin-bottom:12px;color:white;">
                        <input type="checkbox" id="editorClose" ${isEdit && template.close ? 'checked' : ''}> Закрыть тему после ответа
                    </label>
                    <div style="display:flex;gap:10px;justify-content:flex-end;">
                        <button id="cancelEditorBtn" style="padding:8px 20px;border-radius:8px;border:none;background:#7f8c8d;color:white;cursor:pointer;">Отмена</button>
                        <button id="saveEditorBtn" style="padding:8px 20px;border-radius:8px;border:none;background:#9b59b6;color:white;cursor:pointer;">${isEdit ? 'Сохранить' : 'Создать'}</button>
                    </div>
                </div>
            </div>
        `;

        $('body').append(modalHtml);
        const $overlay = $('.template-editor-overlay');

        $('#cancelEditorBtn').click(() => $overlay.remove());
        $('#saveEditorBtn').click(() => {
            const title = $('#editorTitle').val().trim();
            const content = $('#editorContent').val();
            const prefix = parseInt($('#editorPrefix').val());
            const close = $('#editorClose').is(':checked');

            if (!title) { alert('Введите название!'); return; }
            if (!content) { alert('Введите содержание!'); return; }

            if (isEdit) {
                updateCustomTemplate(index, title, content, prefix, close, 'complaints');
            } else {
                addCustomTemplate(title, content, prefix, close, 'complaints');
            }
            $overlay.remove();
            showCompactWindow();
        });

        $overlay.click((e) => { if ($(e.target).is('.template-editor-overlay')) $overlay.remove(); });
    }

    function escapeHtml(str) {
        if (!str) return '';
        return str.replace(/[&<>]/g, function(m) {
            if (m === '&') return '&amp;';
            if (m === '<') return '&lt;';
            if (m === '>') return '&gt;';
            return m;
        });
    }

    function pasteContent(content) {
        const editor = $('div.fr-element.fr-view');
        const placeholder = $('span.fr-placeholder');
        placeholder.empty();
        const currentContent = editor.html();
        if (currentContent === '' || currentContent === '<p><br></p>' || currentContent === '<p></p>') {
            editor.html(content);
        } else {
            editor.append(`<p><br></p><p><br></p>`);
            editor.append(content);
        }

       
        const settings = loadSettings();
        if (settings.autoSaveDrafts !== false) {
            saveDraft(content);
        }
    }

    async function getThreadData() {
        const $username = $('a.username');
        if (!$username.length || !$username[0].attributes['data-user-id']) {
            return { user: { id: 0, name: 'Игрок', mention: '[USER]Игрок[/USER]' } };
        }
        const authorID = $username[0].attributes['data-user-id'].nodeValue;
        const authorName = $username.html();
        return { user: { id: authorID, name: authorName, mention: `[USER=${authorID}]${authorName}[/USER]` } };
    }

    function closeThreadAsync() {
        return new Promise((resolve, reject) => {
            const formData = new FormData();
            formData.append('_xfToken', XF.config.csrf);
            formData.append('_xfRequestUri', location.pathname + location.search);
            formData.append('_xfWithData', '1');
            formData.append('_xfResponseType', 'json');
            fetch(location.href + 'close', { method: 'POST', body: formData })
                .then(r => r.json())
                .then(data => data.status === 'ok' ? resolve(data) : reject(data))
                .catch(e => reject(e));
        });
    }

    function editThreadDataAsync(prefix, closed = false) {
        return new Promise((resolve, reject) => {
            const $titleValue = $('.p-title-value');
            if (!$titleValue.length) { reject('Элемент заголовка не найден'); return; }
            let threadTitle = $titleValue[0].lastChild ? $titleValue[0].lastChild.textContent : $titleValue.text();
            if (!threadTitle || threadTitle.trim() === '') threadTitle = 'Тема';
            const formData = new FormData();
            formData.append('prefix_id', prefix);
            formData.append('title', threadTitle);
            formData.append('_xfToken', XF.config.csrf);
            formData.append('_xfRequestUri', location.pathname + location.search);
            formData.append('_xfWithData', '1');
            formData.append('_xfResponseType', 'json');
            if (closed) formData.append('sticky', '1');
            fetch(location.href + 'edit', { method: 'POST', body: formData })
                .then(r => r.json())
                .then(data => data.status === 'ok' ? resolve(data) : reject(data))
                .catch(e => reject(e));
        });
    }

    function editThreadDataAndReload(prefix, closed, close) {
        editThreadDataAsync(prefix, closed).then(async () => {
            if (close) await closeThreadAsync();
            location.reload();
        }).catch(err => console.error('Ошибка:', err));
    }

    
    $(document).ready(() => {
        
        $('head').append(`
            <style>
                .switch {
                    position: relative;
                    display: inline-block;
                    width: 50px;
                    height: 24px;
                }
                .switch input {
                    opacity: 0;
                    width: 0;
                    height: 0;
                }
                .slider {
                    position: absolute;
                    cursor: pointer;
                    top: 0;
                    left: 0;
                    right: 0;
                    bottom: 0;
                    background-color: #ccc;
                    transition: 0.3s;
                    border-radius: 24px;
                }
                .slider:before {
                    position: absolute;
                    content: "";
                    height: 18px;
                    width: 18px;
                    left: 3px;
                    bottom: 3px;
                    background-color: white;
                    transition: 0.3s;
                    border-radius: 50%;
                }
                input:checked + .slider {
                    background-color: #9b59b6;
                }
                input:checked + .slider:before {
                    transform: translateX(26px);
                }
                .template-item-btn:hover, .use-custom-btn:hover, #quickClosedBtn:hover, #quickUnacceptBtn:hover, #quickConsiderBtn:hover {
                    transform: scale(1.02);
                    filter: brightness(1.1);
                }
                #topBarOpenBtn:hover, #topBarCloseBtn:hover, #topBarUnacceptBtn:hover, #topBarAcceptBtn:hover, #topBarCopyLink:hover {
                    transform: scale(1.05);
                    filter: brightness(1.1);
                }
                .custom-template-item, .quick-reply-item {
                    transition: all 0.2s;
                }
                .custom-template-item:hover, .quick-reply-item:hover {
                    transform: translateX(2px);
                }
                @keyframes slideIn {
                    from {
                        transform: translateX(100%);
                        opacity: 0;
                    }
                    to {
                        transform: translateX(0);
                        opacity: 1;
                    }
                }
            </style>
        `);

      
        if (loadSettings().topBarEnabled) {
            showTopBar();
        }

       
        $('body').append(`
            <div id="floatingScriptBtn" style="position:fixed;bottom:20px;right:20px;width:45px;height:45px;border-radius:50%;background:linear-gradient(135deg,#9b59b6,#6a3ad5);border:2px solid rgba(255,255,255,0.3);color:white;font-size:22px;cursor:pointer;z-index:9998;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 15px rgba(0,0,0,0.3);transition:all 0.3s;">
                ✨
            </div>
        `);

        $('#floatingScriptBtn').click(() => showCompactWindow());
        $('#floatingScriptBtn').hover(
            function() { $(this).css({ transform: 'scale(1.1)', boxShadow: '0 6px 20px rgba(155,89,182,0.5)' }); },
            function() { $(this).css({ transform: 'scale(1)', boxShadow: '0 4px 15px rgba(0,0,0,0.3)' }); }
        );

       
        const draft = loadDraft();
        if (draft && loadSettings().autoSaveDrafts !== false) {
            setTimeout(() => {
                if (confirm('📝 Найден сохранённый черновик. Загрузить его?')) {
                    pasteContent(draft);
                    showNotification('📂 Черновик загружен', 'success');
                }
            }, 1000);
        }
    });
})();