Files

1257 lines
69 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PvZ — Панель администратора и конфигуратор баланса</title>
<link rel="icon" type="image/x-icon" href="../favicon.ico">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<!-- Dedicated Full-Screen Login Screen for Guests -->
<div id="configurator-login-screen" class="login-page-screen">
<div class="login-card">
<div class="login-card-header">
<div class="login-brand-icon">🌻</div>
<h1 class="login-brand-title">🌻 ⚙️ Панель Администратора PvZ</h1>
<p class="login-brand-subtitle">Вход в систему управления и конфигуратор баланса игры</p>
</div>
<form id="configurator-login-form" class="login-form" onsubmit="return false;">
<div class="form-group">
<label class="form-label" for="login-screen-password">Пароль администратора:</label>
<div class="password-input-wrapper">
<input type="password" id="login-screen-password" class="form-input" placeholder="Введите мастер-пароль..." autocomplete="current-password" required>
<button type="button" id="btn-toggle-login-password" class="btn-toggle-pwd" title="Показать/скрыть пароль" tabindex="-1">👁️</button>
</div>
</div>
<div id="login-screen-error" class="login-error-alert" style="display: none;"></div>
<button type="submit" id="btn-login-screen-submit" class="btn btn-primary btn-block">Войти в систему 🔐</button>
</form>
</div>
</div>
<!-- Main Configurator Application -->
<div id="configurator-app-container" style="display: none;">
<div class="app-container">
<!-- Header -->
<header class="app-header">
<div class="brand">
<span class="brand-icon">🌻</span>
<div>
<div class="brand-title">PvZ Configurator & Admin Panel</div>
<div class="brand-sub">Управление балансом, кампанией и сессиями • Plants vs. Zombies</div>
</div>
</div>
<div class="header-actions">
<a href="../" target="_blank" class="btn btn-secondary btn-sm" title="Открыть игру в новой вкладке">🎮 Играть</a>
<div id="admin-status-indicator" class="admin-status-badge">
<span id="admin-status-dot" class="status-dot offline"></span>
<span id="admin-status-text">Не авторизован</span>
</div>
<button id="btn-admin-password-modal-open" class="btn btn-secondary btn-sm" style="display: none;" title="Сменить мастер-пароль администратора">🔑 Сменить пароль</button>
<button id="btn-login-modal-open" class="btn btn-primary btn-sm">🔑 Войти</button>
<button id="btn-admin-logout" class="btn btn-secondary btn-sm" style="display: none;">Выйти</button>
</div>
</header>
<!-- Tab Navigation -->
<nav class="tabs-navigation">
<button class="nav-tab-btn active" data-tab="tab-dashboard">📊 Дашборд</button>
<button id="tab-btn-levels" class="nav-tab-btn" data-tab="tab-levels">🎮 Редактор кампании</button>
<button id="tab-btn-sessions" class="nav-tab-btn" data-tab="tab-sessions">📱 Сессии игроков</button>
<button id="tab-btn-logs" class="nav-tab-btn" data-tab="tab-logs">📜 Логи входов</button>
<button class="nav-tab-btn" data-tab="tab-players">👥 Игроки</button>
<button class="nav-tab-btn" data-tab="tab-economy">💰 Экономика</button>
<button class="nav-tab-btn" data-tab="tab-zombies">🧟 Зомби и бой</button>
<button class="nav-tab-btn" data-tab="tab-plants">🌻 Растения</button>
<button class="nav-tab-btn" data-tab="tab-zengarden">🌿 Сад Дзен</button>
<button class="nav-tab-btn" data-tab="tab-presets">⚡ Пресеты и события</button>
<button class="nav-tab-btn" data-tab="tab-bugs">🐛 Баги <span id="badge-bugs-count" class="badge-count" style="display:none;">0</span></button>
<button class="nav-tab-btn" data-tab="tab-backups">💾 Бэкапы</button>
</nav>
<!-- TAB 1: DASHBOARD -->
<section id="tab-dashboard" class="tab-pane active">
<div class="dashboard-grid">
<div class="stat-card">
<div class="stat-icon">👥</div>
<div class="stat-info">
<div id="dash-total-users" class="stat-value">—</div>
<div class="stat-label">Всего игроков</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">⚡</div>
<div class="stat-info">
<div id="dash-active-24h" class="stat-value">—</div>
<div class="stat-label">Активных за 24ч</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">📱</div>
<div class="stat-info">
<div id="dash-active-sessions" class="stat-value" style="color: var(--accent-cyan);">—</div>
<div class="stat-label">Активных сессий</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">📜</div>
<div class="stat-info">
<div id="dash-total-logs" class="stat-value" style="color: var(--accent-purple);">—</div>
<div class="stat-label">Событий входов</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">🎮</div>
<div class="stat-info">
<div id="dash-campaign-levels" class="stat-value" style="color: var(--accent-gold);">25</div>
<div class="stat-label">Этапов кампании</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">💰</div>
<div class="stat-info">
<div id="dash-total-coins" class="stat-value">—</div>
<div class="stat-label">Всего монет в обороте</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">🚫</div>
<div class="stat-info">
<div id="dash-banned-users" class="stat-value">—</div>
<div class="stat-label">Заблокировано</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">🐛</div>
<div class="stat-info">
<div id="dash-total-bugs" class="stat-value">—</div>
<div class="stat-label">Баг-репортов</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">🧟</div>
<div class="stat-info">
<div id="dash-total-zombies" class="stat-value" style="color: var(--accent-red);">—</div>
<div class="stat-label">Зомби уничтожено (всего)</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">🌱</div>
<div class="stat-info">
<div id="dash-total-plants" class="stat-value" style="color: var(--accent-green);">—</div>
<div class="stat-label">Посажено растений</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">☀️</div>
<div class="stat-info">
<div id="dash-total-sun" class="stat-value" style="color: var(--accent-gold);">—</div>
<div class="stat-label">Солнца выращено</div>
</div>
</div>
<div class="stat-card">
<div class="stat-icon">⚖️</div>
<div class="stat-info">
<div id="dash-active-preset" class="stat-value" style="font-size: 18px; color: #a5d6a7;">—</div>
<div class="stat-label">Активный пресет</div>
</div>
</div>
</div>
<!-- Quick Live Events -->
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">⚡ Оперативные Live-События (Серверный переключатель)</div>
<div class="section-desc">Включение глобальных событий для всех подключенных игроков в реальном времени.</div>
</div>
<button id="btn-save-events-quick" class="btn btn-primary btn-sm">💾 Применить события</button>
</div>
<div class="events-grid">
<div class="event-card">
<div class="event-info">
<h4>🌟 Double Gold Weekend</h4>
<p>Удваивает выпадение монет из зомби и в Саду Дзен.</p>
</div>
<label class="switch">
<input type="checkbox" id="event-doubleGold">
<span class="slider-round"></span>
</label>
</div>
<div class="event-card">
<div class="event-info">
<h4>⚡ Fast Cooldowns</h4>
<p>Ускоренная перезарядка семян для динамичного боя.</p>
</div>
<label class="switch">
<input type="checkbox" id="event-fastCooldowns">
<span class="slider-round"></span>
</label>
</div>
<div class="event-card">
<div class="event-info">
<h4>☀️ Super Sun Drop</h4>
<p>Солнце с неба и подсолнухов падает в 2 раза чаще.</p>
</div>
<label class="switch">
<input type="checkbox" id="event-infiniteSun">
<span class="slider-round"></span>
</label>
</div>
<div class="event-card">
<div class="event-info">
<h4>🧟 Turbo Zombie Wave</h4>
<p>Зомби бегут и атакуют с повышенной скоростью (+30%).</p>
</div>
<label class="switch">
<input type="checkbox" id="event-turboZombies">
<span class="slider-round"></span>
</label>
</div>
</div>
</div>
</section>
<!-- TAB: CAMPAIGN LEVEL EDITOR -->
<section id="tab-levels" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">🎮 Визуальный редактор этапов кампании</div>
<div class="section-desc">Настройка 25 уровней в 5 мирах: состав волн, биомы, награды, модификаторы и диалоги Дэйва.</div>
</div>
<div style="display: flex; gap: 8px; flex-wrap: wrap;">
<button id="btn-reload-levels" class="btn btn-secondary btn-sm" title="Загрузить все уровни с сервера">📋 Загрузить все уровни</button>
<button id="btn-reset-level" class="btn btn-danger btn-sm" title="Сбросить текущий уровень к заводским настройкам">🔄 Сбросить к стандарту</button>
<button id="btn-save-level" class="btn btn-primary btn-sm" title="Сохранить уровень в базу данных">💾 Сохранить уровень</button>
</div>
</div>
<!-- Level Selector Toolbar -->
<div class="level-selector-bar">
<div class="level-selector-left">
<label class="form-label" style="margin-bottom:0; font-weight: bold;">Выбор уровня:</label>
<select id="level-select-dropdown" class="form-select" style="min-width: 240px;">
<!-- Populated via JS -->
</select>
<button id="btn-create-custom-level" class="btn btn-secondary btn-sm">➕ Создать этап</button>
</div>
<div class="level-badge-info">
Текущий этап: <span id="current-level-badge-code" class="code-badge">1-1</span>
<span id="current-level-badge-world" class="world-tag">☀️ Солнечный День</span>
</div>
</div>
<!-- Level Quick Grid Selector (1-1 .. 5-5) -->
<div class="levels-grid-nav" id="levels-grid-selector">
<!-- 25 level pills populated dynamically via JS -->
</div>
<!-- Level Editor Form Layout -->
<div class="level-editor-layout">
<!-- Column 1: Basic Info & Modifiers -->
<div class="level-editor-col">
<!-- 1. Basic Level Info -->
<div class="sub-panel">
<h3 class="sub-panel-title">📋 Основная информация об этапе</h3>
<div class="form-row-2">
<div class="form-group">
<label class="form-label">Код уровня (Code):</label>
<input type="text" id="level-code" class="form-input" placeholder="например, 1-1" value="1-1">
</div>
<div class="form-group">
<label class="form-label">Порядковый номер (#):</label>
<input type="number" id="level-number" class="form-input" min="1" max="100" value="1">
</div>
</div>
<div class="form-group">
<label class="form-label">Название этапа (Title):</label>
<input type="text" id="level-title" class="form-input" placeholder="Название..." value="Первые шаги">
</div>
<div class="form-group">
<label class="form-label">Описание и подсказка (Description):</label>
<textarea id="level-desc" class="form-textarea" rows="2" placeholder="Краткое описание уровня...">Знакомство с садом и простыми зомби</textarea>
</div>
<div class="form-row-2">
<div class="form-group">
<label class="form-label">Мир (World):</label>
<select id="level-world" class="form-select">
<option value="1">1: ☀️ Солнечный День (Day)</option>
<option value="2">2: 🌙 Ночной Двор (Night)</option>
<option value="3">3: 🏊 Бассейн (Pool)</option>
<option value="4">4: 🌫️ Ночной Туман (Fog)</option>
<option value="5">5: 🏠 Крыша Дома (Roof)</option>
</select>
</div>
<div class="form-group">
<label class="form-label">Биом / Окружение (Biome):</label>
<select id="level-biome" class="form-select">
<option value="day">☀️ День (day)</option>
<option value="night">🌙 Ночь (night)</option>
<option value="pool">🏊 Бассейн (pool)</option>
<option value="fog">🌫️ Туман (fog)</option>
<option value="roof">🏠 Крыша (roof)</option>
</select>
</div>
</div>
<div class="form-row-3">
<div class="form-group">
<label class="form-label">Награда (Монеты 💰):</label>
<input type="number" id="level-reward-coins" class="form-input" value="100" min="0" step="10">
</div>
<div class="form-group">
<label class="form-label">Награда (Кристаллы 💎):</label>
<input type="number" id="level-reward-crystals" class="form-input" value="0" min="0" step="1">
</div>
<div class="form-group" style="display:flex; flex-direction:column; justify-content:center;">
<label class="form-label">Босс-уровень:</label>
<label class="checkbox-label" style="margin-top:6px;">
<input type="checkbox" id="level-is-boss">
<span style="color: var(--accent-red); font-weight:bold;">👑 Финальный Босс</span>
</label>
</div>
</div>
</div>
<!-- 2. Level Modifiers -->
<div class="sub-panel" style="margin-top: 16px;">
<h3 class="sub-panel-title">⚡ Модификаторы и правила этапа</h3>
<div class="control-item" style="margin-bottom: 12px;">
<div class="control-header">
<span class="control-label">🧟 Здоровье зомби (HP Multiplier)</span>
<span id="val-mod-zombie-hp" class="control-badge">1.0x</span>
</div>
<input type="range" id="mod-zombie-hp" class="range-slider" min="0.5" max="3.0" step="0.1" value="1.0">
</div>
<div class="control-item" style="margin-bottom: 12px;">
<div class="control-header">
<span class="control-label">🏃 Скорость зомби (Speed Multiplier)</span>
<span id="val-mod-zombie-speed" class="control-badge">1.0x</span>
</div>
<input type="range" id="mod-zombie-speed" class="range-slider" min="0.5" max="2.5" step="0.1" value="1.0">
</div>
<div class="form-row-2" style="margin-bottom: 12px;">
<div class="form-group">
<label class="form-label">Кастомное стартовое солнце:</label>
<input type="number" id="mod-starting-sun" class="form-input" placeholder="По умолчанию (50)" value="50" min="0" step="25">
</div>
<div class="form-group">
<label class="form-label">Специальное Live-событие:</label>
<select id="mod-special-event" class="form-select">
<option value="none">Стандартный бой (нет)</option>
<option value="doubleGold">🌟 Двойное золото (Double Gold)</option>
<option value="fastCooldowns">⚡ Турбо перезарядка (Fast CD)</option>
<option value="infiniteSun">☀️ Обильное солнце (Sun Drop x2)</option>
<option value="turboZombies">🧟 Яростные зомби (Turbo)</option>
</select>
</div>
</div>
<div class="form-row-2">
<label class="checkbox-label">
<input type="checkbox" id="mod-conveyor-deck">
<span>📦 Режим конвейерной ленты</span>
</label>
<label class="checkbox-label">
<input type="checkbox" id="mod-fast-recharge">
<span>⚡ Ускоренная перезарядка семян</span>
</label>
</div>
</div>
<!-- 3. Dave Dialogue Editor -->
<div class="sub-panel" style="margin-top: 16px;">
<h3 class="sub-panel-title">🧔 Диалог Безумного Дэйва перед боем</h3>
<div class="form-row-2">
<div class="form-group">
<label class="form-label">Иконка спикера:</label>
<select id="dialogue-speaker" class="form-select">
<option value="🧔">🧔 Безумный Дэйв</option>
<option value="🌻">🌻 Подсолнух</option>
<option value="🧟">🧟 Доктор Зомбосс</option>
<option value="🧠">🧠 Мозги!</option>
<option value="☀️">☀️ Солнце</option>
<option value="🏊">🏊 Водный спасатель</option>
<option value="🌫️">🌫️ Мгла и туман</option>
<option value="🏠">🏠 Хозяин дома</option>
<option value="🤖">🤖 Zombot 1000</option>
</select>
</div>
<div class="form-group">
<label class="form-label">Текст кнопки подтверждения:</label>
<input type="text" id="dialogue-btn-text" class="form-input" value="ДАЛЕЕ / В БОЙ ⚔️">
</div>
</div>
<div class="form-group">
<label class="form-label">Заголовок сообщения:</label>
<input type="text" id="dialogue-title" class="form-input" placeholder="Заголовок диалога...">
</div>
<div class="form-group">
<label class="form-label">Текст реплики:</label>
<textarea id="dialogue-text" class="form-textarea" rows="3" placeholder="Реплика Дэйва перед началом уровня (оставьте пустым, если диалог не требуется)..."></textarea>
</div>
<!-- Live Preview Box -->
<div class="dialogue-preview-box" id="dialogue-preview-box">
<div class="dialogue-preview-speaker" id="dialogue-preview-speaker">🧔</div>
<div class="dialogue-preview-content">
<div class="dialogue-preview-title" id="dialogue-preview-title">Безумный Дэйв предупреждает:</div>
<div class="dialogue-preview-text" id="dialogue-preview-text">Эй, сосед! Будь начеку!</div>
<div class="dialogue-preview-btn" id="dialogue-preview-btn">ДАЛЕЕ / В БОЙ ⚔️</div>
</div>
</div>
</div>
</div>
<!-- Column 2: Visual Wave Configurator -->
<div class="level-editor-col">
<div class="sub-panel" style="min-height: 100%;">
<div class="sub-panel-header">
<div>
<h3 class="sub-panel-title">🌊 Визуальный конфигуратор волн</h3>
<div class="section-desc">Настройка состава зомби, плотности и таймингов каждой волны.</div>
</div>
<button id="btn-add-wave" class="btn btn-primary btn-sm">➕ Добавить волну</button>
</div>
<!-- Waves List Container -->
<div id="level-waves-container" class="waves-list-container">
<!-- Dynamically populated wave cards -->
</div>
</div>
</div>
</div>
</div>
</section>
<!-- TAB: ACTIVE SESSIONS -->
<section id="tab-sessions" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">📱 Активные сессии игроков в реальном времени</div>
<div class="section-desc">Мониторинг авторизованных токенов, IP-адресов, устройств и завершение подозрительных сессий.</div>
</div>
<div style="display: flex; gap: 8px; align-items: center;">
<span class="badge badge-info">Активно: <b id="sessions-total-count">0</b></span>
<button id="btn-refresh-sessions" class="btn btn-secondary btn-sm">🔄 Обновить</button>
</div>
</div>
<!-- Filter Bar -->
<div style="display: flex; gap: 12px; margin-bottom: 16px; flex-wrap: wrap;">
<input type="text" id="sessions-search-input" class="form-input" style="max-width: 320px;" placeholder="🔍 Поиск по нику игрока или IP...">
</div>
<div class="table-responsive">
<table class="admin-table">
<thead>
<tr>
<th>Игрок</th>
<th>IP-адрес</th>
<th>Устройство и браузер</th>
<th>Создана</th>
<th>Последняя активность</th>
<th>Токен</th>
<th>Действия</th>
</tr>
</thead>
<tbody id="sessions-table-body">
<tr><td colspan="7" style="text-align: center; color: var(--text-dim);">Загрузка активных сессий...</td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- TAB: LOGIN AUDIT LOGS -->
<section id="tab-logs" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">📜 Журнал аудита авторизаций и входов</div>
<div class="section-desc">Полная история попыток входа, регистраций, блокировок и сработок защиты от перебора.</div>
</div>
<div style="display: flex; gap: 8px; align-items: center;">
<span class="badge badge-purple">Событий: <b id="logs-total-count">0</b></span>
<button id="btn-refresh-logs" class="btn btn-secondary btn-sm">🔄 Обновить</button>
</div>
</div>
<!-- Filter Bar -->
<div style="display: flex; gap: 12px; margin-bottom: 16px; flex-wrap: wrap;">
<input type="text" id="logs-filter-username" class="form-input" style="max-width: 240px;" placeholder="🔍 Поиск по нику...">
<input type="text" id="logs-filter-ip" class="form-input" style="max-width: 200px;" placeholder="🔍 Поиск по IP...">
<select id="logs-filter-status" class="form-select" style="max-width: 200px;">
<option value="all">Все статусы</option>
<option value="success">✅ Успешный вход</option>
<option value="registered">🎉 Новая регистрация</option>
<option value="wrong_password">❌ Неверный пароль</option>
<option value="banned_login_attempt">🚫 Заблокирован</option>
<option value="rate_limited">⚠️ Превышен лимит</option>
<option value="user_not_found">❓ Не найден</option>
</select>
</div>
<div class="table-responsive">
<table class="admin-table">
<thead>
<tr>
<th>Время события</th>
<th>Пользователь</th>
<th>IP-адрес</th>
<th>Устройство и браузер</th>
<th>Статус аутентификации</th>
</tr>
</thead>
<tbody id="logs-table-body">
<tr><td colspan="5" style="text-align: center; color: var(--text-dim);">Загрузка журнала аудита...</td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- TAB 2: PLAYERS -->
<section id="tab-players" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">👥 База учетных записей и прогресса игроков</div>
<div class="section-desc">Поиск, просмотр инвентаря, правка баланса, бан и сброс паролей.</div>
</div>
<div style="display: flex; gap: 8px;">
<button id="btn-create-player-open" class="btn btn-primary btn-sm">➕ Создать игрока</button>
<button id="btn-refresh-players" class="btn btn-secondary btn-sm">🔄 Обновить</button>
</div>
</div>
<!-- Filter Bar -->
<div style="display: flex; gap: 12px; margin-bottom: 16px; flex-wrap: wrap;">
<input type="text" id="player-search-input" class="form-input" style="max-width: 280px;" placeholder="🔍 Поиск по нику или ID...">
<select id="player-filter-status" class="form-select" style="max-width: 180px;">
<option value="all">Все игроки</option>
<option value="active">Активные</option>
<option value="banned">Заблокированные</option>
<option value="admin">Администраторы</option>
</select>
<select id="player-sort-select" class="form-select" style="max-width: 180px;">
<option value="id_asc">ID (возрастание)</option>
<option value="id_desc">ID (убывание)</option>
<option value="coins_desc">Монеты (макс.)</option>
<option value="level_desc">Уровень (макс.)</option>
<option value="login_desc">Последний вход</option>
</select>
</div>
<div class="table-responsive">
<table class="admin-table">
<thead>
<tr>
<th>ID</th>
<th>Никнейм</th>
<th>Статус</th>
<th>Уровень</th>
<th>Монеты</th>
<th>Рекорд</th>
<th>Регистрация</th>
<th>Последний вход</th>
<th>Действия</th>
</tr>
</thead>
<tbody id="players-table-body">
<tr><td colspan="9" style="text-align: center; color: var(--text-dim);">Загрузка игроков...</td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- TAB 3: ECONOMY -->
<section id="tab-economy" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">💰 Баланс экономики, цен и солнца</div>
<div class="section-desc">Управление генерацией ресурсов, стоимостью карт и дропом монет.</div>
</div>
<button id="btn-save-economy" class="btn btn-primary btn-sm">💾 Сохранить экономику</button>
</div>
<div class="controls-grid">
<div class="control-item">
<div class="control-header">
<span class="control-label">☀️ Множитель солнца</span>
<span id="val-econ-sunMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="econ-sunMultiplier" class="range-slider" min="0.2" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Увеличивает количество солнца, даваемое подсолнухами и падающее с неба.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">🌱 Стартовое солнце</span>
<span id="val-econ-startingSun" class="control-badge">50</span>
</div>
<input type="range" id="econ-startingSun" class="range-slider" min="0" max="1000" step="25" value="50">
<p class="section-desc">Количество солнца в начале каждого уровня.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">🪙 Дроп монет из зомби</span>
<span id="val-econ-coinDropRate" class="control-badge">1.0x</span>
</div>
<input type="range" id="econ-coinDropRate" class="range-slider" min="0.1" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Вероятность и частота выпадения серебряных и золотых монет.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">☁️ Частота солнца с неба</span>
<span id="val-econ-sunDropRate" class="control-badge">1.0x</span>
</div>
<input type="range" id="econ-sunDropRate" class="range-slider" min="0.1" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Интервал падения небесного солнца на дневных уровнях.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">🛒 Множитель цен в магазине</span>
<span id="val-econ-plantCostMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="econ-plantCostMultiplier" class="range-slider" min="0.1" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Стоимость покупки закрытых растений в магазине Дэйва.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">🔧 Стоимость крафта в мастерской</span>
<span id="val-econ-upgradeCostMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="econ-upgradeCostMultiplier" class="range-slider" min="0.1" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Расход материалов на прокачку 2 и 3 уровней растений.</p>
</div>
</div>
</div>
</section>
<!-- TAB 4: ZOMBIES & COMBAT -->
<section id="tab-zombies" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">🧟 Баланс зомби и боевой сложности</div>
<div class="section-desc">Глобальные множители характеристик орды и плотности волн.</div>
</div>
<button id="btn-save-zombies" class="btn btn-primary btn-sm">💾 Сохранить параметры зомби</button>
</div>
<div class="controls-grid">
<div class="control-item">
<div class="control-header">
<span class="control-label">❤️ Здоровье зомби (HP)</span>
<span id="val-zom-hpMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="zom-hpMultiplier" class="range-slider" min="0.2" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Запас прочности всех типов зомби и боссов.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">🏃 Скорость передвижения</span>
<span id="val-zom-speedMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="zom-speedMultiplier" class="range-slider" min="0.2" max="3.0" step="0.1" value="1.0">
<p class="section-desc">Скорость ходьбы и бега зомби по газону.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">💥 Урон от укусов зомби</span>
<span id="val-zom-damageMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="zom-damageMultiplier" class="range-slider" min="0.2" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Урон, наносимый растениям при поедании.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">🌊 Плотность спавна волн</span>
<span id="val-zom-waveDensityMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="zom-waveDensityMultiplier" class="range-slider" min="0.5" max="3.0" step="0.1" value="1.0">
<p class="section-desc">Количество зомби, появляющихся в каждой волне.</p>
</div>
</div>
</div>
</section>
<!-- TAB 5: PLANTS -->
<section id="tab-plants" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">🌻 Баланс растений и стрельбы</div>
<div class="section-desc">Урон снарядов, прочность стеноорехов и скорость перезарядки семян.</div>
</div>
<button id="btn-save-plants" class="btn btn-primary btn-sm">💾 Сохранить растения</button>
</div>
<div class="controls-grid">
<div class="control-item">
<div class="control-header">
<span class="control-label">🎯 Урон снарядов растений</span>
<span id="val-plant-damageMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="plant-damageMultiplier" class="range-slider" min="0.2" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Урон всех типов горошин, спор и снарядов катапульт.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">🛡️ Прочность растений (HP)</span>
<span id="val-plant-hpMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="plant-hpMultiplier" class="range-slider" min="0.2" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Здоровье Стеноорехов, Высоких орехов и обычных трав.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">⏳ Скорость перезарядки семян (CD)</span>
<span id="val-plant-cooldownMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="plant-cooldownMultiplier" class="range-slider" min="0.1" max="3.0" step="0.1" value="1.0">
<p class="section-desc">Меньше — быстрее готовность пакетов семян в слотах.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">☀️ Частота производства подсолнухов</span>
<span id="val-plant-sunProduceIntervalMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="plant-sunProduceIntervalMultiplier" class="range-slider" min="0.2" max="3.0" step="0.1" value="1.0">
<p class="section-desc">Меньше — чаще Подсолнухи и Солнцегрибы генерируют солнце.</p>
</div>
</div>
</div>
</section>
<!-- TAB 6: ZEN GARDEN -->
<section id="tab-zengarden" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">🌿 Баланс Сада Дзен и пассивного дохода</div>
<div class="section-desc">Шанс выпадения саженцев, скорость роста и сбор монет улиткой Стинки.</div>
</div>
<button id="btn-save-zengarden" class="btn btn-primary btn-sm">💾 Сохранить Сад Дзен</button>
</div>
<div class="controls-grid">
<div class="control-item">
<div class="control-header">
<span class="control-label">🎁 Шанс выпадения саженцев из зомби</span>
<span id="val-zen-dropRateMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="zen-dropRateMultiplier" class="range-slider" min="0.1" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Частота получения новых горшечных ростков в боях.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">🌱 Скорость созревания растений</span>
<span id="val-zen-growthRateMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="zen-growthRateMultiplier" class="range-slider" min="0.2" max="5.0" step="0.1" value="1.0">
<p class="section-desc">Ускорение перехода саженца от ростка до взрослого цветка.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">🧪 Эффективность удобрений</span>
<span id="val-zen-fertilizerMultiplier" class="control-badge">1.0x</span>
</div>
<input type="range" id="zen-fertilizerMultiplier" class="range-slider" min="0.5" max="4.0" step="0.1" value="1.0">
<p class="section-desc">Бонус к производству золотых монет при уходе.</p>
</div>
<div class="control-item">
<div class="control-header">
<span class="control-label">💧 Интервал полива (минуты)</span>
<span id="val-zen-waterIntervalMinutes" class="control-badge">30 мин</span>
</div>
<input type="range" id="zen-waterIntervalMinutes" class="range-slider" min="1" max="120" step="1" value="30">
<p class="section-desc">Как часто растениям в саду требуется вода.</p>
</div>
</div>
</div>
</section>
<!-- TAB 7: PRESETS & EVENTS -->
<section id="tab-presets" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">⚡ Готовые пресеты сложности и Live-События</div>
<div class="section-desc">Мгновенное переключение баланса всей игры на сервере одним нажатием.</div>
</div>
</div>
<h3 style="font-size: 16px; margin-bottom: 12px; color: var(--accent-cyan);">📚 Каталог пресетов баланса</h3>
<div class="presets-grid">
<div class="preset-card">
<div class="preset-title">🌻 Classic 2009</div>
<div class="preset-desc">Классический баланс оригинальной Plants vs. Zombies 2009 года. Полная гармония и аутентичность.</div>
<button class="btn btn-secondary btn-sm btn-apply-preset" data-preset="Classic 2009">Применить Classic</button>
</div>
<div class="preset-card">
<div class="preset-title">💀 Hardcore</div>
<div class="preset-desc">Для ветеранов: зомби толще и быстрее (+60% HP, +30% Speed), меньше солнца и золота (-20%), жесткие волны.</div>
<button class="btn btn-secondary btn-sm btn-apply-preset" data-preset="Hardcore">Применить Hardcore</button>
</div>
<div class="preset-card">
<div class="preset-title">☕ Casual Chill</div>
<div class="preset-desc">Расслабленный режим: стартовое солнце 150, быстрый откат семян, ослабленные зомби (-40% HP), щедрые монеты.</div>
<button class="btn btn-secondary btn-sm btn-apply-preset" data-preset="Casual Chill">Применить Casual</button>
</div>
<div class="preset-card">
<div class="preset-title">💥 Mayhem Mode</div>
<div class="preset-desc">Полный хаос: тройной спавн зомби, тройной урон растений, фонтаны солнца и золота!</div>
<button class="btn btn-secondary btn-sm btn-apply-preset" data-preset="Mayhem Mode">Применить Mayhem</button>
</div>
<div class="preset-card">
<div class="preset-title">⚡ Speedrun 2x</div>
<div class="preset-desc">Скоростное прохождение: зомби и растения работают на скорости 1.5x, мгновенный откат семян.</div>
<button class="btn btn-secondary btn-sm btn-apply-preset" data-preset="Speedrun 2x">Применить Speedrun</button>
</div>
</div>
</div>
</section>
<!-- TAB 8: BUG REPORTS -->
<section id="tab-bugs" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">🐛 Модерация баг-репортов сообщества</div>
<div class="section-desc">Просмотр отзывов игроков, смена статусов, официальные ответы и удаление спама.</div>
</div>
<button id="btn-refresh-bugs" class="btn btn-secondary btn-sm">🔄 Обновить баги</button>
</div>
<!-- Filter Bar -->
<div style="display: flex; gap: 12px; margin-bottom: 16px; flex-wrap: wrap;">
<select id="bug-filter-status" class="form-select" style="max-width: 200px;">
<option value="all">Все статусы</option>
<option value="новый">🔴 Новые</option>
<option value="в работе">🟡 В работе</option>
<option value="исправлено">✅ Исправленные</option>
<option value="отклонено">⚪ Отклоненные</option>
</select>
<select id="bug-filter-category" class="form-select" style="max-width: 200px;">
<option value="all">Все категории</option>
<option value="bug">Баги</option>
<option value="feature">Идеи / Фичи</option>
<option value="visual">Графика и UI</option>
<option value="balance">Баланс</option>
</select>
</div>
<div class="table-responsive">
<table class="admin-table">
<thead>
<tr>
<th>ID</th>
<th>Дата</th>
<th>Автор</th>
<th>Категория</th>
<th>Статус</th>
<th>Описание проблемы</th>
<th>Ответ / Решение</th>
<th>Действия</th>
</tr>
</thead>
<tbody id="bugs-table-body">
<tr><td colspan="8" style="text-align: center; color: var(--text-dim);">Загрузка баг-репортов...</td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- TAB 9: BACKUPS -->
<section id="tab-backups" class="tab-pane">
<div class="section-panel">
<div class="section-header">
<div>
<div class="section-title">💾 Резервные копии и восстановление базы данных</div>
<div class="section-desc">Полный экспорт всех игроков, профилей, рекордов, конфигураций и баг-репортов в формате JSON.</div>
</div>
</div>
<div class="controls-grid" style="grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));">
<div class="control-item">
<h4 style="font-size: 16px; color: var(--accent-green); margin-bottom: 8px;">📤 Экспорт резервной копии</h4>
<p class="section-desc" style="margin-bottom: 16px;">Выгрузка полного слепка SQLite базы данных в файл pvz_backup.json для сохранения на локальный диск.</p>
<button id="btn-export-backup" class="btn btn-primary">💾 Скачать полный бэкап</button>
</div>
<div class="control-item">
<h4 style="font-size: 16px; color: var(--accent-gold); margin-bottom: 8px;">📥 Восстановление из файла</h4>
<p class="section-desc" style="margin-bottom: 16px;">Восстановление базы данных из ранее сохраненного файла бэкапа JSON.</p>
<input type="file" id="backup-file-input" accept=".json" style="display: none;">
<button id="btn-trigger-import" class="btn btn-warning">📂 Выбрать файл и восстановить</button>
</div>
</div>
</div>
</section>
</div>
</div>
<!-- MODAL: LOGIN -->
<div id="modal-login" class="modal-overlay">
<div class="modal-box">
<div class="modal-header">
<div class="modal-title">🔑 Авторизация администратора</div>
<button class="modal-close-btn" data-close="modal-login">✕</button>
</div>
<div class="modal-body">
<p class="section-desc" style="margin-bottom: 16px;">Введите мастер-пароль администратора для получения полного доступа к редактированию баланса, управлению игроками и бэкапам.</p>
<div class="form-group">
<label class="form-label">Пароль администратора:</label>
<input type="password" id="admin-password-input" class="form-input" placeholder="Пароль администратора...">
</div>
<div id="login-error-msg" class="form-error" style="display: none; color: var(--accent-red); font-size: 13px; margin-top: 8px;"></div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-close="modal-login">Отмена</button>
<button id="btn-submit-login" class="btn btn-primary">Войти в панель</button>
</div>
</div>
</div>
<!-- MODAL: CHANGE ADMIN PASSWORD -->
<div id="modal-admin-password" class="modal-overlay">
<div class="modal-box">
<div class="modal-header">
<div class="modal-title">🔑 Смена мастер-пароля администратора</div>
<button class="modal-close-btn" data-close="modal-admin-password">✕</button>
</div>
<div class="modal-body">
<div class="form-group">
<label class="form-label">Текущий пароль:</label>
<input type="password" id="admin-current-password" class="form-input" placeholder="Введите текущий пароль...">
</div>
<div class="form-group">
<label class="form-label">Новый пароль (минимум 6 символов):</label>
<input type="password" id="admin-new-password" class="form-input" placeholder="Введите новый пароль...">
</div>
<div class="form-group">
<label class="form-label">Повторите новый пароль:</label>
<input type="password" id="admin-confirm-password" class="form-input" placeholder="Повторите новый пароль...">
</div>
<div id="admin-password-error" class="form-error" style="display: none; color: var(--accent-red); font-size: 13px; margin-top: 8px;"></div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-close="modal-admin-password">Отмена</button>
<button id="btn-submit-change-admin-password" class="btn btn-primary">💾 Сохранить новый пароль</button>
</div>
</div>
</div>
<!-- MODAL: EDIT PLAYER -->
<div id="modal-edit-player" class="modal-overlay">
<div class="modal-box" style="max-width: 600px;">
<div class="modal-header">
<div class="modal-title">✏️ Редактирование игрока: <span id="edit-player-title-name" style="color: var(--accent-cyan);"></span></div>
<button class="modal-close-btn" data-close="modal-edit-player">✕</button>
</div>
<div class="modal-body">
<input type="hidden" id="edit-player-id">
<div class="form-row-2">
<div class="form-group">
<label class="form-label">Баланс монет (Coins):</label>
<input type="number" id="edit-player-coins" class="form-input" min="0" step="10">
</div>
<div class="form-group">
<label class="form-label">Текущий уровень (Level):</label>
<input type="number" id="edit-player-level" class="form-input" min="1" max="25">
</div>
</div>
<div class="form-row-2">
<div class="form-group">
<label class="form-label">Макс. открытый уровень:</label>
<input type="number" id="edit-player-maxlevel" class="form-input" min="1" max="25">
</div>
<div class="form-group">
<label class="form-label">Рекорд очков (High Score):</label>
<input type="number" id="edit-player-highscore" class="form-input" min="0" step="100">
</div>
</div>
<h4 style="color: #a5d6a7; margin: 16px 0 8px; font-size: 13px;">🧪 Материалы крафта в Мастерской</h4>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 10px; margin-bottom: 16px;">
<div>
<label class="form-label">Биогумус 🌿</label>
<input type="number" id="edit-player-mat-bioHumus" class="form-input" min="0">
</div>
<div>
<label class="form-label">Металлолом ⚙️</label>
<input type="number" id="edit-player-mat-scrapMetal" class="form-input" min="0">
</div>
<div>
<label class="form-label">Эссенция ☀️</label>
<input type="number" id="edit-player-mat-sunEssence" class="form-input" min="0">
</div>
<div>
<label class="form-label">Кристаллы 💎</label>
<input type="number" id="edit-player-mat-crystals" class="form-input" min="0">
</div>
</div>
<h4 style="color: #a5d6a7; margin: 16px 0 8px; font-size: 13px;">🌿 Сад Дзен</h4>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 10px; margin-bottom: 16px;">
<div>
<label class="form-label">Удобрения 🧪</label>
<input type="number" id="edit-player-zen-fertilizer" class="form-input" min="0">
</div>
<div>
<label class="form-label">Шоколад 🍫</label>
<input type="number" id="edit-player-zen-chocolate" class="form-input" min="0">
</div>
</div>
<div class="form-group">
<label class="form-label">Тема оформления (Theme):</label>
<select id="edit-player-theme" class="form-select">
<option value="classic">Классическая (Classic)</option>
<option value="night">Ночная (Night)</option>
<option value="cyberpunk">Киберпанк (Cyberpunk)</option>
</select>
</div>
<div style="border-top: 1px solid var(--border-color); padding-top: 12px; margin-top: 12px; display: flex; gap: 16px;">
<label style="display: flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer;">
<input type="checkbox" id="edit-player-is-admin">
<span style="color: var(--accent-gold);">⭐ Права администратора</span>
</label>
<label style="display: flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer;">
<input type="checkbox" id="edit-player-is-banned">
<span style="color: var(--accent-red);">🚫 Блокировка аккаунта</span>
</label>
</div>
<div id="edit-ban-reason-container" class="form-group" style="margin-top: 12px; display: none;">
<label class="form-label">Причина блокировки:</label>
<input type="text" id="edit-player-ban-reason" class="form-input" placeholder="Укажите причину бана...">
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-close="modal-edit-player">Отмена</button>
<button id="btn-save-player-edit" class="btn btn-primary">💾 Сохранить изменения</button>
</div>
</div>
</div>
<!-- MODAL: PLAYER STATS & INSPECT -->
<div id="modal-player-stats" class="modal-overlay">
<div class="modal-box" style="max-width: 680px;">
<div class="modal-header">
<div class="modal-title">📊 Статистика игрока: <span id="stats-player-username" style="color: var(--accent-cyan);"></span> <span id="stats-player-badge"></span></div>
<button class="modal-close-btn" data-close="modal-player-stats">✕</button>
</div>
<div class="modal-body">
<input type="hidden" id="stats-player-id">
<div style="display: flex; justify-content: space-between; align-items: center; background: rgba(15, 23, 42, 0.6); padding: 12px 16px; border-radius: 8px; margin-bottom: 16px; border: 1px solid var(--border-color);">
<div>
<div style="font-size: 11px; color: var(--text-dim); text-transform: uppercase;">Аккаунт</div>
<div style="font-size: 15px; font-weight: bold; color: #fff;" id="stats-player-id-line">ID #—</div>
</div>
<div>
<div style="font-size: 11px; color: var(--text-dim); text-transform: uppercase;">Регистрация</div>
<div style="font-size: 13px; color: var(--text-main);" id="stats-player-created">—</div>
</div>
<div>
<div style="font-size: 11px; color: var(--text-dim); text-transform: uppercase;">Последний вход</div>
<div style="font-size: 13px; color: var(--text-main);" id="stats-player-login">—</div>
</div>
</div>
<h4 style="color: var(--accent-cyan); margin: 0 0 10px; font-size: 13px; text-transform: uppercase; letter-spacing: 0.5px;">⚔️ Боевая статистика (Lifetime)</h4>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; margin-bottom: 16px;">
<div class="stat-card" style="padding: 10px;">
<div style="font-size: 18px; font-weight: bold; color: var(--accent-red);" id="stats-zombies-killed">0</div>
<div style="font-size: 11px; color: var(--text-dim);">🧟 Зомби убито</div>
</div>
<div class="stat-card" style="padding: 10px;">
<div style="font-size: 18px; font-weight: bold; color: var(--accent-gold);" id="stats-sun-produced">0</div>
<div style="font-size: 11px; color: var(--text-dim);">☀️ Солнца собрано</div>
</div>
<div class="stat-card" style="padding: 10px;">
<div style="font-size: 18px; font-weight: bold; color: var(--accent-green);" id="stats-plants-planted">0</div>
<div style="font-size: 11px; color: var(--text-dim);">🌱 Посажено растений</div>
</div>
<div class="stat-card" style="padding: 10px;">
<div style="font-size: 18px; font-weight: bold; color: var(--accent-cyan);" id="stats-levels-cleared">0</div>
<div style="font-size: 11px; color: var(--text-dim);">🎖️ Этапов пройдено</div>
</div>
<div class="stat-card" style="padding: 10px;">
<div style="font-size: 18px; font-weight: bold; color: var(--accent-gold);" id="stats-coins-earned">0</div>
<div style="font-size: 11px; color: var(--text-dim);">💰 Всего заработано</div>
</div>
</div>
<h4 style="color: #a5d6a7; margin: 16px 0 10px; font-size: 13px; text-transform: uppercase; letter-spacing: 0.5px;">🧪 Ресурсы и материалы</h4>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 10px; margin-bottom: 16px;">
<div style="background: rgba(30, 41, 59, 0.7); padding: 8px 12px; border-radius: 6px; border: 1px solid var(--border-color);">
<div style="font-size: 11px; color: var(--text-dim);">Монеты 💰</div>
<div style="font-size: 16px; font-weight: bold; color: var(--accent-gold);" id="stats-coins-val">0</div>
</div>
<div style="background: rgba(30, 41, 59, 0.7); padding: 8px 12px; border-radius: 6px; border: 1px solid var(--border-color);">
<div style="font-size: 11px; color: var(--text-dim);">Биогумус 🌿</div>
<div style="font-size: 16px; font-weight: bold; color: #81c784;" id="stats-biohumus-val">0</div>
</div>
<div style="background: rgba(30, 41, 59, 0.7); padding: 8px 12px; border-radius: 6px; border: 1px solid var(--border-color);">
<div style="font-size: 11px; color: var(--text-dim);">Металлолом ⚙️</div>
<div style="font-size: 16px; font-weight: bold; color: #90caf9;" id="stats-scrap-val">0</div>
</div>
<div style="background: rgba(30, 41, 59, 0.7); padding: 8px 12px; border-radius: 6px; border: 1px solid var(--border-color);">
<div style="font-size: 11px; color: var(--text-dim);">Эссенция ☀️</div>
<div style="font-size: 16px; font-weight: bold; color: #ffe082;" id="stats-essence-val">0</div>
</div>
<div style="background: rgba(30, 41, 59, 0.7); padding: 8px 12px; border-radius: 6px; border: 1px solid var(--border-color);">
<div style="font-size: 11px; color: var(--text-dim);">Кристаллы 💎</div>
<div style="font-size: 16px; font-weight: bold; color: #b39ddb;" id="stats-crystals-val">0</div>
</div>
</div>
<h4 style="color: #80cbc4; margin: 16px 0 10px; font-size: 13px; text-transform: uppercase; letter-spacing: 0.5px;">🌿 Сад Дзен и Рекорды</h4>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 12px;">
<div style="background: rgba(30, 41, 59, 0.7); padding: 10px 14px; border-radius: 6px; border: 1px solid var(--border-color);">
<div style="font-size: 12px; font-weight: 600; color: #a7f3d0; margin-bottom: 6px;">🪴 Сад Дзен</div>
<div style="font-size: 13px;" id="stats-zen-summary">—</div>
</div>
<div style="background: rgba(30, 41, 59, 0.7); padding: 10px 14px; border-radius: 6px; border: 1px solid var(--border-color);">
<div style="font-size: 12px; font-weight: 600; color: #fde68a; margin-bottom: 6px;">🏆 Лучший счет</div>
<div style="font-size: 13px;" id="stats-scores-summary">—</div>
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-close="modal-player-stats">Закрыть</button>
<button id="btn-stats-jump-edit" class="btn btn-primary">✏️ Редактировать ресурсы</button>
</div>
</div>
</div>
<!-- MODAL: CREATE PLAYER -->
<div id="modal-create-player" class="modal-overlay">
<div class="modal-box">
<div class="modal-header">
<div class="modal-title">➕ Создать нового игрока</div>
<button class="modal-close-btn" data-close="modal-create-player">✕</button>
</div>
<div class="modal-body">
<div class="form-group">
<label class="form-label">Имя пользователя (логин):</label>
<input type="text" id="create-player-username" class="form-input" placeholder="Логин игрока..." maxlength="20">
</div>
<div class="form-group">
<label class="form-label">Пароль:</label>
<input type="password" id="create-player-password" class="form-input" placeholder="Пароль...">
</div>
<div class="form-group">
<label class="form-label">Стартовые монеты:</label>
<input type="number" id="create-player-coins" class="form-input" value="150" min="0">
</div>
<label style="display: flex; align-items: center; gap: 8px; font-size: 13px; cursor: pointer;">
<input type="checkbox" id="create-player-is-admin">
<span>Сделать администратором</span>
</label>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-close="modal-create-player">Отмена</button>
<button id="btn-submit-create-player" class="btn btn-primary">Создать игрока</button>
</div>
</div>
</div>
<!-- MODAL: RESET PASSWORD -->
<div id="modal-reset-password" class="modal-overlay">
<div class="modal-box">
<div class="modal-header">
<div class="modal-title">🔑 Сброс пароля игрока <span id="reset-pwd-username" style="color:#00e5ff;"></span></div>
<button class="modal-close-btn" data-close="modal-reset-password">✕</button>
</div>
<div class="modal-body">
<input type="hidden" id="reset-pwd-user-id">
<div class="form-group">
<label class="form-label">Новый пароль:</label>
<input type="password" id="reset-pwd-input" class="form-input" placeholder="Введите новый пароль...">
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-close="modal-reset-password">Отмена</button>
<button id="btn-submit-reset-pwd" class="btn btn-danger">Сбросить пароль</button>
</div>
</div>
</div>
<!-- MODAL: MODERATE BUG -->
<div id="modal-moderate-bug" class="modal-overlay">
<div class="modal-box">
<div class="modal-header">
<div class="modal-title">🐛 Модерация баг-репорта #<span id="bug-mod-id"></span></div>
<button class="modal-close-btn" data-close="modal-moderate-bug">✕</button>
</div>
<div class="modal-body">
<div style="background: rgba(255,255,255,0.04); padding: 12px; border-radius: var(--radius-md); margin-bottom: 16px;">
<div style="font-size: 11px; color: var(--text-muted);" id="bug-mod-meta"></div>
<div style="font-size: 13px; color: var(--text-main); margin-top: 6px;" id="bug-mod-text"></div>
</div>
<div class="form-group">
<label class="form-label">Статус обращения:</label>
<select id="bug-mod-status" class="form-select">
<option value="новый">🔴 Новый</option>
<option value="в работе">🟡 В работе</option>
<option value="исправлено">✅ Исправлено</option>
<option value="отклонено">⚪ Отклонено</option>
</select>
</div>
<div class="form-group">
<label class="form-label">Официальный ответ администратора / фикс:</label>
<textarea id="bug-mod-reply" class="form-textarea" rows="3" placeholder="Укажите версию фикса или пояснение..."></textarea>
</div>
</div>
<div class="modal-footer">
<button id="btn-bug-delete" class="btn btn-danger btn-sm" style="margin-right: auto;">🗑️ Удалить</button>
<button class="btn btn-secondary" data-close="modal-moderate-bug">Отмена</button>
<button id="btn-bug-mod-save" class="btn btn-primary">💾 Сохранить статус</button>
</div>
</div>
</div>
<!-- Toast Container -->
<div id="toast-container" class="toast-container"></div>
<!-- Scripts -->
<script src="js/configurator.js"></script>
</body>
</html>