Spaces:
Running
ПРОМПТ ДЛЯ ИИ-ГЕНЕРАТОРА САЙТА - "VLAD-ARCHITECT: REALITY OS"
Browse files```
СОЗДАЙ ПОЛНОФУНКЦИОНАЛЬНУЮ ВЕБ-ИГРУ НА ОСНОВЕ СЛЕДУЮЩИХ ТОЧНЫХ ТРЕБОВАНИЙ:
## 🎯 КОНЦЕПЦИЯ И ЦЕЛЬ
Персонализированная RPG-система, где я - главный герой, а моя реальная жизнь - игровой мир.
Каждое реальное действие влияет на игровой прогресс. Система должна стать операционной средой для управления моей жизнью через игровые механики.
## 👤 ПЕРСОНАЖ (МОИ РЕАЛЬНЫЕ ДАННЫЕ)
```
ИМЯ: Влад
ВОЗРАСТ: 20 лет
ПРОФЕССИЯ: Системный инженер АПС и СОУЭ
ЛОКАЦИЯ: Москва, Дорогобужская 9
ФИНАНСОВАЯ ЦЕЛЬ: 1,000,000 ₽ в ВДО
ТЕКУЩИЙ ПОРТФЕЛЬ: 4,726 ₽
ТЕКУЩИЙ ДОХОД: 165,000 ₽/месяц
КРЕДИТЫ: 300,000 ₽
```
## 📊 СИСТЕМА ХАРАКТЕРИСТИК (0-1000)
```
💪 СИЛА ВОЛИ (SW) - сопротивление импульсам, контроль над зависимостями
🔋 ЭНЕРГИЯ (HP) - ментальный заряд, психологическая выносливость
🎯 ДИСЦИПЛИНА (DISC) - следование системам, тайм-менеджмент
💰 ФИНАНСОВАЯ ГРАМОТНОСТЬ (FG) - понимание инвестиций, управление рисками
⚙️ ТЕХНИЧЕСКАЯ ЭКСПЕРТИЗА (TECH) - глубина инженерных знаний
📊 СИСТЕМНОЕ МЫШЛЕНИЕ (SYS) - видение взаимосвязей, архитектурный подход
👥 ЛИДЕРСТВО (LDR) - управление командами, мотивация
🛡️ СТРЕССОУСТОЙЧИВОСТЬ (STR) - устойчивость к давлению, выгоранию
```
## 🏗️ ДЕТАЛИЗИРОВАННЫЕ ВЕТКИ РАЗВИТИЯ
### 1. ИНЖЕНЕРНАЯ ВЕТКА (15 УРОВНЕЙ)
```
УРОВЕНЬ 1: Монтажник-стажер [0-100,000 EXP]
· Требуемые навыки: базовый монтаж, чтение простых схем
· Доход: 85,000 ₽ (ввод пользователя)
· Обязанности: помощь в монтаже, подготовка материалов
УРОВЕНЬ 2: Монтажник [100,000-250,000 EXP]
· Требуемые навыки: самостоятельный монтаж, знание СНИПов
· Доход: 95,000 ₽ (ввод пользователя)
· Обязанности: монтаж средней сложности, диагностика
УРОВЕНЬ 3: Старший монтажник [250,000-500,000 EXP]
· Требуемые навыки: контроль качества, обучение новичков
· Доход: 110,000 ₽ (ввод пользователя)
· Обязанности: контроль работ, mentoring
УРОВЕНЬ 4: Бригадир монтажников [500,000-1,000,000 EXP]
· Требуемые навыки: управление бригадой, планирование работ
· Доход: 130,000 ₽ (ввод пользователя)
· Обязанности: руководство командой, распределение задач
УРОВЕНЬ 5: Младший наладчик [1,000,000-2,000,000 EXP]
· Требуемые навыки: пусконаладка, базовое программирование
· Доход: 145,000 ₽ (ввод пользователя)
· Обязанности: наладка оборудования, тестирование
УРОВЕНЬ 6: Наладчик [2,000,000-4,000,000 EXP]
· Требуемые навыки: диагностика систем, оптимизация
· Доход: 160,000 ₽ (ввод пользователя)
· Обязанности: сложная наладка, troubleshooting
УРОВЕНЬ 7: Старший наладчик [4,000,000-8,000,000 EXP]
· Требуемые навыки: разработка методик, обучение
· Доход: 180,000 ₽ (ввод пользователя)
· Обязанности: разработка процессов, training
УРОВЕНЬ 8: Инженер-проектировщик [8,000,000-15,000,000 EXP]
· Требуемые навыки: проектирование систем, расчет нагрузок
· Доход: 220,000 ₽ (ввод пользователя)
· Обязанности: создание проектов, расчеты
УРОВЕНЬ 9: Старший инженер-проектировщик [15,000,000-25,000,000 EXP]
· Требуемые навыки: ведение проекта, координация
· Доход: 260,000 ₽ (ввод пользователя)
· Обязанности: управление проектами, координация
УРОВЕНЬ 10: Lead инженер [25,000,000-40,000,000 EXP]
· Требуемые навыки: техническое лидерство, архитектура
· Доход: 300,000 ₽ (ввод пользователя)
· Обязанности: техническая стратегия, архитектура
УРОВЕНЬ 11: Руководитель проектов [40,000,000-60,000,000 EXP]
· Требуемые навыки: управление портфелем проектов
· Доход: 350,000 ₽ (ввод пользователя)
· Обязанности: управление multiple projects
УРОВЕНЬ 12: Начальник отдела [60,000,000-90,000,000 EXP]
· Требуемые навыки: управление отделом, бюджетирование
· Доход: 420,000 ₽ (ввод пользователя)
· Обязанности: руководство отделом, бюджеты
УРОВЕНЬ 13: Технический директор [90,000,000-130,000,000 EXP]
· Требуемые навыки: техническая стратегия компании
· Доход: 500,000 ₽ (ввод пользователя)
· Обязанности: стратегия развития, инновации
УРОВЕНЬ 14: Директор по развитию [130,000,000-180,000,000 EXP]
· Требуемые навыки: бизнес-стратегия, масштабирование
· Доход: 600,000 ₽ (ввод пользователя)
· Обязанности: развитие бизнеса, экспансия
УРОВЕНЬ 15: Основатель технологической компании [180,000,000+ EXP]
· Требуемые навыки: создание компании, стратегическое видение
· Доход: 1,000,000+ ₽ (ввод пользователя)
· Обязанности: создание и развитие компании
```
### 2. ИНВЕСТОРСКАЯ ВЕТКА (12 УРОВНЕЙ)
```
УРОВЕНЬ 1: Финансовый новичок [0-150,000 EXP]
· Навыки: открытие счета, базовые операции
· Доходность: 5-10% (ввод пользователя)
УРОВЕНЬ 2: Начинающий инвестор [150,000-400,000 EXP]
· Навыки: анализ отчетностей, базовый анализ
· Доходность: 10-15% (ввод пользователя)
УРОВЕНЬ 3: Активный инвестор [400,000-900,000 EXP]
· Навыки: технический анализ, фундаментальный анализ
· Доходность: 15-18% (ввод пользователя)
УРОВЕНЬ 4: Опытный инвестор [900,000-1,800,000 EXP]
· Навыки: портфельное инвестирование, диверсификация
· Доходность: 18-20% (ввод пользователя)
УРОВЕНЬ 5: Специалист по ВДО [1,800,000-3,500,000 EXP]
· Навыки: глубокий анализ эмитентов, ВДО-стратегии
· Доходность: 20-22% (ввод пользователя)
УРОВЕНЬ 6: Портфельный менеджер [3,500,000-6,500,000 EXP]
· Навыки: управление портфелем, ребалансировка
· Доходность: 22-24% (ввод пользователя)
УРОВЕНЬ 7: Профессиональный инвестор [6,500,000-11,000,000 EXP]
· Навыки: стратегическое распределение, хеджирование
· Доходность: 24-26% (ввод пользователя)
УРОВЕНЬ 8: Инвестиционный аналитик [11,000,000-17,000,000 EXP]
· Навыки: макроанализ, отраслевой анализ
· Доходность: 26-28% (ввод пользователя)
УРОВЕНЬ 9: Старший инвестор [17,000,000-25,000,000 EXP]
· Навыки: создание стратегий, риск-менеджмент
· Доходность: 28-30% (ввод пользователя)
УРОВЕНЬ 10: Инвестиционный стратег [25,000,000-35,000,000 EXP]
· Навыки: разработка инвестиционных стратегий
· Доходность: 30-32% (ввод пользователя)
УРОВЕНЬ 11: Управляющий активами [35,000,000-50,000,000 EXP]
· Навыки: управление крупными капиталами
· Доходность: 32-35% (ввод пользователя)
УРОВЕНЬ 12: Капитан рынка [50,000,000+ EXP]
· Навыки: создание финансовых систем, алготрейдинг
· Доходность: 35%+ (ввод пользователя)
```
### 3. ЛИЧНОСТНАЯ ВЕТКА (10 УРОВНЕЙ)
```
УРО
- index.html +224 -2
- script.js +507 -0
- style.css +364 -18
|
@@ -1,3 +1,225 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
|
| 2 |
-
|
| 3 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="ru">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>VLAD-ARCHITECT: REALITY OS</title>
|
| 7 |
+
<link rel="stylesheet" href="style.css">
|
| 8 |
+
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
| 9 |
+
</head>
|
| 10 |
+
<body>
|
| 11 |
+
<div class="container">
|
| 12 |
+
<header>
|
| 13 |
+
<h1>VLAD-ARCHITECT: REALITY OS</h1>
|
| 14 |
+
<p>Персонализированная RPG-система для управления реальностью</p>
|
| 15 |
+
</header>
|
| 16 |
|
| 17 |
+
<main>
|
| 18 |
+
<!-- Дашборд -->
|
| 19 |
+
<section class="dashboard">
|
| 20 |
+
<h2>📊 Дашборд</h2>
|
| 21 |
+
|
| 22 |
+
<!-- Характеристики -->
|
| 23 |
+
<div class="characteristics">
|
| 24 |
+
<h3>Характеристики</h3>
|
| 25 |
+
<div class="stats-grid">
|
| 26 |
+
<div class="stat-card">
|
| 27 |
+
<span class="stat-name">💪 Сила воли (SW)</span>
|
| 28 |
+
<div class="progress-bar">
|
| 29 |
+
<div class="progress-fill" style="width: 45%"></div>
|
| 30 |
+
</div>
|
| 31 |
+
<span class="stat-value">450/1000</span>
|
| 32 |
+
</div>
|
| 33 |
+
|
| 34 |
+
<div class="stat-card">
|
| 35 |
+
<span class="stat-name">🔋 Энергия (HP)</span>
|
| 36 |
+
<div class="progress-bar">
|
| 37 |
+
<div class="progress-fill" style="width: 75%"></div>
|
| 38 |
+
</div>
|
| 39 |
+
<span class="stat-value">750/1000</span>
|
| 40 |
+
</div>
|
| 41 |
+
|
| 42 |
+
<div class="stat-card">
|
| 43 |
+
<span class="stat-name">🎯 Дисциплина (DISC)</span>
|
| 44 |
+
<div class="progress-bar">
|
| 45 |
+
<div class="progress-fill" style="width: 60%"></div>
|
| 46 |
+
</div>
|
| 47 |
+
<span class="stat-value">600/1000</span>
|
| 48 |
+
</div>
|
| 49 |
+
|
| 50 |
+
<div class="stat-card">
|
| 51 |
+
<span class="stat-name">💰 Финансовая грамотность (FG)</span>
|
| 52 |
+
<div class="progress-bar">
|
| 53 |
+
<div class="progress-fill" style="width: 35%"></div>
|
| 54 |
+
</div>
|
| 55 |
+
<span class="stat-value">350/1000</span>
|
| 56 |
+
</div>
|
| 57 |
+
|
| 58 |
+
<div class="stat-card">
|
| 59 |
+
<span class="stat-name">⚙️ Техническая экспертиза (TECH)</span>
|
| 60 |
+
<div class="progress-bar">
|
| 61 |
+
<div class="progress-fill" style="width: 55%"></div>
|
| 62 |
+
</div>
|
| 63 |
+
<span class="stat-value">550/1000</span>
|
| 64 |
+
</div>
|
| 65 |
+
|
| 66 |
+
<div class="stat-card">
|
| 67 |
+
<span class="stat-name">📊 Системное мышление (SYS)</span>
|
| 68 |
+
<div class="progress-bar">
|
| 69 |
+
<div class="progress-fill" style="width: 50%"></div>
|
| 70 |
+
</div>
|
| 71 |
+
<span class="stat-value">500/1000</span>
|
| 72 |
+
</div>
|
| 73 |
+
|
| 74 |
+
<div class="stat-card">
|
| 75 |
+
<span class="stat-name">👥 Лидерство (LDR)</span>
|
| 76 |
+
<div class="progress-bar">
|
| 77 |
+
<div class="progress-fill" style="width: 25%"></div>
|
| 78 |
+
</div>
|
| 79 |
+
<span class="stat-value">250/1000</span>
|
| 80 |
+
</div>
|
| 81 |
+
|
| 82 |
+
<div class="stat-card">
|
| 83 |
+
<span class="stat-name">🛡️ Стрессоустойчивость (STR)</span>
|
| 84 |
+
<div class="progress-bar">
|
| 85 |
+
<div class="progress-fill" style="width: 40%"></div>
|
| 86 |
+
</div>
|
| 87 |
+
<span class="stat-value">400/1000</span>
|
| 88 |
+
</div>
|
| 89 |
+
</div>
|
| 90 |
+
</div>
|
| 91 |
+
|
| 92 |
+
<!-- Прогресс к цели -->
|
| 93 |
+
<div class="financial-goal">
|
| 94 |
+
<h3>Прогресс к 1,000,000 ₽</h3>
|
| 95 |
+
<div class="progress-bar large">
|
| 96 |
+
<div class="progress-fill" style="width: 0.47%"></div>
|
| 97 |
+
</div>
|
| 98 |
+
<div class="financial-stats">
|
| 99 |
+
<span>Текущий портфель: 4,726 ₽</span>
|
| 100 |
+
<span>Цель: 1,000,000 ₽</span>
|
| 101 |
+
</div>
|
| 102 |
+
</div>
|
| 103 |
+
|
| 104 |
+
<!-- Активные уровни -->
|
| 105 |
+
<div class="active-levels">
|
| 106 |
+
<h3>Активные уровни</h3>
|
| 107 |
+
<div class="levels-grid">
|
| 108 |
+
<div class="level-card">
|
| 109 |
+
<h4>Инженерная ветка</h4>
|
| 110 |
+
<p>Уровень 4: Бригадир монтажников</p>
|
| 111 |
+
<div class="progress-bar">
|
| 112 |
+
<div class="progress-fill" style="width: 65%"></div>
|
| 113 |
+
</div>
|
| 114 |
+
<span>650,000/1,000,000 EXP</span>
|
| 115 |
+
</div>
|
| 116 |
+
|
| 117 |
+
<div class="level-card">
|
| 118 |
+
<h4>Инвесторская ветка</h4>
|
| 119 |
+
<p>Уровень 1: Финансовый новичок</p>
|
| 120 |
+
<div class="progress-bar">
|
| 121 |
+
<div class="progress-fill" style="width: 3%"></div>
|
| 122 |
+
</div>
|
| 123 |
+
<span>4,726/150,000 EXP</span>
|
| 124 |
+
</div>
|
| 125 |
+
|
| 126 |
+
<div class="level-card">
|
| 127 |
+
<h4>Личностная ветка</h4>
|
| 128 |
+
<p>Уровень 2: Самопознающий</p>
|
| 129 |
+
<div class="progress-bar">
|
| 130 |
+
<div class="progress-fill" style="width: 45%"></div>
|
| 131 |
+
</div>
|
| 132 |
+
<span>112,500/250,000 EXP</span>
|
| 133 |
+
</div>
|
| 134 |
+
</div>
|
| 135 |
+
</div>
|
| 136 |
+
|
| 137 |
+
<!-- Ближайшие цели -->
|
| 138 |
+
<div class="upcoming-goals">
|
| 139 |
+
<h3>Ближайшие цели</h3>
|
| 140 |
+
<ul>
|
| 141 |
+
<li>📈 Повысить финансовую грамотность до 400</li>
|
| 142 |
+
<li>💪 Достичь 500 силы воли</li>
|
| 143 |
+
<li>💰 Инвестировать 100,000 ₽ в ВДО</li>
|
| 144 |
+
<li>⚙️ Пройти курс по системному мышлению</li>
|
| 145 |
+
</ul>
|
| 146 |
+
</div>
|
| 147 |
+
</section>
|
| 148 |
+
|
| 149 |
+
<!-- Быстрый ввод данных -->
|
| 150 |
+
<section class="quick-input">
|
| 151 |
+
<h2>🎯 Быстрый ввод данных</h2>
|
| 152 |
+
<div class="input-grid">
|
| 153 |
+
<button class="action-btn">💼 Работа</button>
|
| 154 |
+
<button class="action-btn">💰 Инвестиции</button>
|
| 155 |
+
<button class="action-btn">🧘 Тренировка</button>
|
| 156 |
+
<button class="action-btn">📚 Обучение</button>
|
| 157 |
+
<button class="action-btn">📝 Медитация</button>
|
| 158 |
+
<button class="action-btn">🏖️ Отдых</button>
|
| 159 |
+
</div>
|
| 160 |
+
|
| 161 |
+
<form class="manual-input">
|
| 162 |
+
<h3>Ручной ввод показателей</h3>
|
| 163 |
+
<div class="form-group">
|
| 164 |
+
<label for="activity-type">Тип активности:</label>
|
| 165 |
+
<select id="activity-type">
|
| 166 |
+
<option value="career">Карьера</option>
|
| 167 |
+
<option value="finance">Финансы</option>
|
| 168 |
+
<option value="personal">Личное развитие</option>
|
| 169 |
+
</select>
|
| 170 |
+
</div>
|
| 171 |
+
|
| 172 |
+
<div class="form-group">
|
| 173 |
+
<label for="activity-description">Описание:</label>
|
| 174 |
+
<input type="text" id="activity-description" placeholder="Что было сделано?">
|
| 175 |
+
</div>
|
| 176 |
+
|
| 177 |
+
<div class="form-group">
|
| 178 |
+
<label for="exp-amount">Количество EXP:</label>
|
| 179 |
+
<input type="number" id="exp-amount" placeholder="Сколько EXP получено?">
|
| 180 |
+
</div>
|
| 181 |
+
|
| 182 |
+
<button type="submit" class="submit-btn">Добавить</button>
|
| 183 |
+
</form>
|
| 184 |
+
</section>
|
| 185 |
+
|
| 186 |
+
<!-- Детализированные отчеты -->
|
| 187 |
+
<section class="detailed-reports">
|
| 188 |
+
<h2>📈 Детализированные отчеты</h2>
|
| 189 |
+
|
| 190 |
+
<div class="report-tabs">
|
| 191 |
+
<button class="tab-btn active">Ежедневно</button>
|
| 192 |
+
<button class="tab-btn">Еженедельно</button>
|
| 193 |
+
<button class="tab-btn">Ежемесячно</button>
|
| 194 |
+
<button class="tab-btn">Годовые цели</button>
|
| 195 |
+
</div>
|
| 196 |
+
|
| 197 |
+
<div class="chart-container">
|
| 198 |
+
<canvas id="progressChart"></canvas>
|
| 199 |
+
</div>
|
| 200 |
+
|
| 201 |
+
<div class="report-content">
|
| 202 |
+
<h3>Ежедневная статистика</h3>
|
| 203 |
+
<ul>
|
| 204 |
+
<li>💼 Работа: 8 часов</li>
|
| 205 |
+
<li>💰 Инвестиции: 30 минут</li>
|
| 206 |
+
<li>🧘 Тренировка: 1 час</li>
|
| 207 |
+
<li>📚 Обучение: 2 часа</li>
|
| 208 |
+
</ul>
|
| 209 |
+
</div>
|
| 210 |
+
</section>
|
| 211 |
+
</main>
|
| 212 |
+
|
| 213 |
+
<footer>
|
| 214 |
+
<p>VLAD-ARCHITECT: REALITY OS v1.0 | Московское время (MSK)</p>
|
| 215 |
+
<div class="footer-actions">
|
| 216 |
+
<button class="footer-btn">💾 Сохранить</button>
|
| 217 |
+
<button class="footer-btn">📤 Экспорт данных</button>
|
| 218 |
+
<button class="footer-btn">📥 Импорт данных</button>
|
| 219 |
+
</div>
|
| 220 |
+
</footer>
|
| 221 |
+
</div>
|
| 222 |
+
|
| 223 |
+
<script src="script.js"></script>
|
| 224 |
+
</body>
|
| 225 |
+
</html>
|
|
@@ -0,0 +1,507 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Инициализация игры
|
| 2 |
+
class RealityOS {
|
| 3 |
+
constructor() {
|
| 4 |
+
this.player = {
|
| 5 |
+
name: "Влад",
|
| 6 |
+
age: 20,
|
| 7 |
+
profession: "Системный инженер АПС и СОУЭ",
|
| 8 |
+
location: "Москва, Дорогобужская 9",
|
| 9 |
+
financialGoal: 1000000,
|
| 10 |
+
currentPortfolio: 4726,
|
| 11 |
+
currentIncome: 165000,
|
| 12 |
+
credits: 300000,
|
| 13 |
+
characteristics: {
|
| 14 |
+
sw: 450, // Сила воли
|
| 15 |
+
hp: 750, // Энергия
|
| 16 |
+
disc: 600, // Дисциплина
|
| 17 |
+
fg: 350, // Финансовая грамотность
|
| 18 |
+
tech: 550, // Техническая экспертиза
|
| 19 |
+
sys: 500, // Системное мышление
|
| 20 |
+
ldr: 250, // Лидерство
|
| 21 |
+
str: 400 // Стрессоустойчивость
|
| 22 |
+
},
|
| 23 |
+
levels: {
|
| 24 |
+
engineering: {
|
| 25 |
+
level: 4,
|
| 26 |
+
exp: 650000,
|
| 27 |
+
maxExp: 1000000,
|
| 28 |
+
title: "Бригадир монтажников"
|
| 29 |
+
},
|
| 30 |
+
investing: {
|
| 31 |
+
level: 1,
|
| 32 |
+
exp: 4726,
|
| 33 |
+
maxExp: 150000,
|
| 34 |
+
title: "Финансовый новичок"
|
| 35 |
+
},
|
| 36 |
+
personal: {
|
| 37 |
+
level: 2,
|
| 38 |
+
exp: 112500,
|
| 39 |
+
maxExp: 250000,
|
| 40 |
+
title: "Самопознающий"
|
| 41 |
+
}
|
| 42 |
+
}
|
| 43 |
+
};
|
| 44 |
+
|
| 45 |
+
this.init();
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
init() {
|
| 49 |
+
this.renderStats();
|
| 50 |
+
this.renderLevels();
|
| 51 |
+
this.initCharts();
|
| 52 |
+
this.setupEventListeners();
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
renderStats() {
|
| 56 |
+
// Обновляем характеристики
|
| 57 |
+
const stats = this.player.characteristics;
|
| 58 |
+
document.querySelector('.stat-value:nth-child(1)').textContent = `${stats.sw}/1000`;
|
| 59 |
+
document.querySelector('.progress-fill:nth-child(1)').style.width = `${stats.sw/10}%`;
|
| 60 |
+
|
| 61 |
+
document.querySelector('.stat-value:nth-child(2)').textContent = `${stats.hp}/1000`;
|
| 62 |
+
document.querySelector('.progress-fill:nth-child(2)').style.width = `${stats.hp/10}%`;
|
| 63 |
+
|
| 64 |
+
document.querySelector('.stat-value:nth-child(3)').textContent = `${stats.disc}/1000`;
|
| 65 |
+
document.querySelector('.progress-fill:nth-child(3)').style.width = `${stats.disc/10}%`;
|
| 66 |
+
|
| 67 |
+
document.querySelector('.stat-value:nth-child(4)').textContent = `${stats.fg}/1000`;
|
| 68 |
+
document.querySelector('.progress-fill:nth-child(4)').style.width = `${stats.fg/10}%`;
|
| 69 |
+
|
| 70 |
+
document.querySelector('.stat-value:nth-child(5)').textContent = `${stats.tech}/1000`;
|
| 71 |
+
document.querySelector('.progress-fill:nth-child(5)').style.width = `${stats.tech/10}%`;
|
| 72 |
+
|
| 73 |
+
document.querySelector('.stat-value:nth-child(6)').textContent = `${stats.sys}/1000`;
|
| 74 |
+
document.querySelector('.progress-fill:nth-child(6)').style.width = `${stats.sys/10}%`;
|
| 75 |
+
|
| 76 |
+
document.querySelector('.stat-value:nth-child(7)').textContent = `${stats.ldr}/1000`;
|
| 77 |
+
document.querySelector('.progress-fill:nth-child(7)').style.width = `${stats.ldr/10}%`;
|
| 78 |
+
|
| 79 |
+
document.querySelector('.stat-value:nth-child(8)').textContent = `${stats.str}/1000`;
|
| 80 |
+
document.querySelector('.progress-fill:nth-child(8)').style.width = `${stats.str/10}%`;
|
| 81 |
+
|
| 82 |
+
// Обновляем финансовый прогресс
|
| 83 |
+
const progressPercent = (this.player.currentPortfolio / this.player.financialGoal) * 100;
|
| 84 |
+
document.querySelector('.financial-stats span:first-child').textContent = `Текущий портфель: ${this.player.currentPortfolio.toLocaleString()} ₽`;
|
| 85 |
+
document.querySelector('.financial-stats span:last-child').textContent = `Цель: ${this.player.financialGoal.toLocaleString()} ₽`;
|
| 86 |
+
document.querySelector('.financial-goal .progress-fill').style.width = `${progressPercent}%`;
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
renderLevels() {
|
| 90 |
+
// Обновляем уровни
|
| 91 |
+
const engLevel = this.player.levels.engineering;
|
| 92 |
+
const invLevel = this.player.levels.investing;
|
| 93 |
+
const perLevel = this.player.levels.personal;
|
| 94 |
+
|
| 95 |
+
document.querySelectorAll('.level-card')[0].innerHTML = `
|
| 96 |
+
<h4>Инженерная ветка</h4>
|
| 97 |
+
<p>Уровень ${engLevel.level}: ${engLevel.title}</p>
|
| 98 |
+
<div class="progress-bar">
|
| 99 |
+
<div class="progress-fill" style="width: ${(engLevel.exp/engLevel.maxExp)*100}%"></div>
|
| 100 |
+
</div>
|
| 101 |
+
<span>${engLevel.exp.toLocaleString()}/${engLevel.maxExp.toLocaleString()} EXP</span>
|
| 102 |
+
`;
|
| 103 |
+
|
| 104 |
+
document.querySelectorAll('.level-card')[1].innerHTML = `
|
| 105 |
+
<h4>Инвесторская ветка</h4>
|
| 106 |
+
<p>Уровень ${invLevel.level}: ${invLevel.title}</p>
|
| 107 |
+
<div class="progress-bar">
|
| 108 |
+
<div class="progress-fill" style="width: ${(invLevel.exp/invLevel.maxExp)*100}%"></div>
|
| 109 |
+
</div>
|
| 110 |
+
<span>${invLevel.exp.toLocaleString()}/${invLevel.maxExp.toLocaleString()} EXP</span>
|
| 111 |
+
`;
|
| 112 |
+
|
| 113 |
+
document.querySelectorAll('.level-card')[2].innerHTML = `
|
| 114 |
+
<h4>Личностная ветка</h4>
|
| 115 |
+
<p>Уровень ${perLevel.level}: ${perLevel.title}</p>
|
| 116 |
+
<div class="progress-bar">
|
| 117 |
+
<div class="progress-fill" style="width: ${(perLevel.exp/perLevel.maxExp)*100}%"></div>
|
| 118 |
+
</div>
|
| 119 |
+
<span>${perLevel.exp.toLocaleString()}/${perLevel.maxExp.toLocaleString()} EXP</span>
|
| 120 |
+
`;
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
initCharts() {
|
| 124 |
+
const ctx = document.getElementById('progressChart').getContext('2d');
|
| 125 |
+
this.chart = new Chart(ctx, {
|
| 126 |
+
type: 'line',
|
| 127 |
+
data: {
|
| 128 |
+
labels: ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'],
|
| 129 |
+
datasets: [{
|
| 130 |
+
label: 'Прогресс по характеристикам',
|
| 131 |
+
data: [
|
| 132 |
+
this.player.characteristics.sw,
|
| 133 |
+
this.player.characteristics.hp,
|
| 134 |
+
this.player.characteristics.disc,
|
| 135 |
+
this.player.characteristics.fg,
|
| 136 |
+
this.player.characteristics.tech,
|
| 137 |
+
this.player.characteristics.sys,
|
| 138 |
+
this.player.characteristics.ldr
|
| 139 |
+
],
|
| 140 |
+
borderColor: '#3498db',
|
| 141 |
+
backgroundColor: 'rgba(52, 152, 219, 0.1)',
|
| 142 |
+
tension: 0.4,
|
| 143 |
+
fill: true
|
| 144 |
+
}]
|
| 145 |
+
},
|
| 146 |
+
options: {
|
| 147 |
+
responsive: true,
|
| 148 |
+
maintainAspectRatio: false,
|
| 149 |
+
scales: {
|
| 150 |
+
y: {
|
| 151 |
+
beginAtZero: true,
|
| 152 |
+
max: 1000
|
| 153 |
+
}
|
| 154 |
+
}
|
| 155 |
+
}
|
| 156 |
+
});
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
setupEventListeners() {
|
| 160 |
+
// Кнопки быстрого ввода
|
| 161 |
+
document.querySelectorAll('.action-btn').forEach(button => {
|
| 162 |
+
button.addEventListener('click', (e) => {
|
| 163 |
+
const action = e.target.textContent;
|
| 164 |
+
this.handleQuickAction(action);
|
| 165 |
+
});
|
| 166 |
+
});
|
| 167 |
+
|
| 168 |
+
// Форма ручного ввода
|
| 169 |
+
document.querySelector('.manual-input').addEventListener('submit', (e) => {
|
| 170 |
+
e.preventDefault();
|
| 171 |
+
this.handleManualInput();
|
| 172 |
+
});
|
| 173 |
+
|
| 174 |
+
// Вкладки отчетов
|
| 175 |
+
document.querySelectorAll('.tab-btn').forEach(button => {
|
| 176 |
+
button.addEventListener('click', (e) => {
|
| 177 |
+
document.querySelectorAll('.tab-btn').forEach(btn => btn.classList.remove('active'));
|
| 178 |
+
e.target.classList.add('active');
|
| 179 |
+
this.updateReportContent(e.target.textContent);
|
| 180 |
+
});
|
| 181 |
+
});
|
| 182 |
+
|
| 183 |
+
// Кнопки футера
|
| 184 |
+
document.querySelectorAll('.footer-btn').forEach(button => {
|
| 185 |
+
button.addEventListener('click', (e) => {
|
| 186 |
+
const action = e.target.textContent.trim();
|
| 187 |
+
this.handleFooterAction(action);
|
| 188 |
+
});
|
| 189 |
+
});
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
handleQuickAction(action) {
|
| 193 |
+
let expGain = 0;
|
| 194 |
+
let characteristic = '';
|
| 195 |
+
|
| 196 |
+
switch(action) {
|
| 197 |
+
case '💼 Работа':
|
| 198 |
+
expGain = 50;
|
| 199 |
+
characteristic = 'tech';
|
| 200 |
+
break;
|
| 201 |
+
case '💰 Инвестиции':
|
| 202 |
+
expGain = 30;
|
| 203 |
+
characteristic = 'fg';
|
| 204 |
+
break;
|
| 205 |
+
case '🧘 Тренировка':
|
| 206 |
+
expGain = 40;
|
| 207 |
+
characteristic = 'hp';
|
| 208 |
+
break;
|
| 209 |
+
case '📚 Обучение':
|
| 210 |
+
expGain = 35;
|
| 211 |
+
characteristic = 'sys';
|
| 212 |
+
break;
|
| 213 |
+
case '📝 Медитация':
|
| 214 |
+
expGain = 25;
|
| 215 |
+
characteristic = 'sw';
|
| 216 |
+
break;
|
| 217 |
+
case '🏖️ Отдых':
|
| 218 |
+
expGain = 20;
|
| 219 |
+
characteristic = 'hp';
|
| 220 |
+
break;
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
if (characteristic) {
|
| 224 |
+
this.player.characteristics[characteristic] += expGain;
|
| 225 |
+
if (this.player.characteristics[characteristic] > 1000) {
|
| 226 |
+
this.player.characteristics[characteristic] = 1000;
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
// Также добавляем EXP в соответствующую ветку
|
| 230 |
+
if (characteristic === 'tech') {
|
| 231 |
+
this.player.levels.engineering.exp += expGain * 100;
|
| 232 |
+
if (this.player.levels.engineering.exp >= this.player.levels.engineering.maxExp) {
|
| 233 |
+
this.levelUp('engineering');
|
| 234 |
+
}
|
| 235 |
+
} else if (characteristic === 'fg') {
|
| 236 |
+
this.player.levels.investing.exp += expGain * 100;
|
| 237 |
+
if (this.player.levels.investing.exp >= this.player.levels.investing.maxExp) {
|
| 238 |
+
this.levelUp('investing');
|
| 239 |
+
}
|
| 240 |
+
} else {
|
| 241 |
+
this.player.levels.personal.exp += expGain * 100;
|
| 242 |
+
if (this.player.levels.personal.exp >= this.player.levels.personal.maxExp) {
|
| 243 |
+
this.levelUp('personal');
|
| 244 |
+
}
|
| 245 |
+
}
|
| 246 |
+
|
| 247 |
+
this.renderStats();
|
| 248 |
+
this.renderLevels();
|
| 249 |
+
this.showNotification(`Получено ${expGain} EXP за ${action}`);
|
| 250 |
+
}
|
| 251 |
+
}
|
| 252 |
+
|
| 253 |
+
handleManualInput() {
|
| 254 |
+
const activityType = document.getElementById('activity-type').value;
|
| 255 |
+
const description = document.getElementById('activity-description').value;
|
| 256 |
+
const expAmount = parseInt(document.getElementById('exp-amount').value) || 0;
|
| 257 |
+
|
| 258 |
+
if (!description || expAmount <= 0) {
|
| 259 |
+
this.showNotification('Пожалуйста, заполните все поля корректно', 'error');
|
| 260 |
+
return;
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
// Добавляем EXP в зависимости от типа активности
|
| 264 |
+
switch(activityType) {
|
| 265 |
+
case 'career':
|
| 266 |
+
this.player.levels.engineering.exp += expAmount;
|
| 267 |
+
if (this.player.levels.engineering.exp >= this.player.levels.engineering.maxExp) {
|
| 268 |
+
this.levelUp('engineering');
|
| 269 |
+
}
|
| 270 |
+
break;
|
| 271 |
+
case 'finance':
|
| 272 |
+
this.player.levels.investing.exp += expAmount;
|
| 273 |
+
if (this.player.levels.investing.exp >= this.player.levels.investing.maxExp) {
|
| 274 |
+
this.levelUp('investing');
|
| 275 |
+
}
|
| 276 |
+
this.player.currentPortfolio += expAmount; // Упрощение для демонстрации
|
| 277 |
+
break;
|
| 278 |
+
case 'personal':
|
| 279 |
+
this.player.levels.personal.exp += expAmount;
|
| 280 |
+
if (this.player.levels.personal.exp >= this.player.levels.personal.maxExp) {
|
| 281 |
+
this.levelUp('personal');
|
| 282 |
+
}
|
| 283 |
+
break;
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
this.renderStats();
|
| 287 |
+
this.renderLevels();
|
| 288 |
+
this.showNotification(`Добавлено ${expAmount} EXP: ${description}`);
|
| 289 |
+
|
| 290 |
+
// Очищаем форму
|
| 291 |
+
document.getElementById('activity-description').value = '';
|
| 292 |
+
document.getElementById('exp-amount').value = '';
|
| 293 |
+
}
|
| 294 |
+
|
| 295 |
+
levelUp(branch) {
|
| 296 |
+
this.player.levels[branch].level++;
|
| 297 |
+
this.player.levels[branch].exp = 0;
|
| 298 |
+
|
| 299 |
+
// Увеличиваем максимальный EXP для следующего уровня
|
| 300 |
+
const nextLevel = this.player.levels[branch].level;
|
| 301 |
+
switch(branch) {
|
| 302 |
+
case 'engineering':
|
| 303 |
+
this.player.levels[branch].maxExp = nextLevel < 15 ? Math.pow(2, nextLevel) * 50000 : 180000000;
|
| 304 |
+
this.player.levels[branch].title = this.getEngineeringTitle(nextLevel);
|
| 305 |
+
break;
|
| 306 |
+
case 'investing':
|
| 307 |
+
this.player.levels[branch].maxExp = nextLevel < 12 ? nextLevel * 150000 : 50000000;
|
| 308 |
+
this.player.levels[branch].title = this.getInvestingTitle(nextLevel);
|
| 309 |
+
break;
|
| 310 |
+
case 'personal':
|
| 311 |
+
this.player.levels[branch].maxExp = nextLevel < 10 ? nextLevel * 100000 : 16000000;
|
| 312 |
+
this.player.levels[branch].title = this.getPersonalTitle(nextLevel);
|
| 313 |
+
break;
|
| 314 |
+
}
|
| 315 |
+
|
| 316 |
+
this.showNotification(`🎉 Повышение уровня! Теперь вы: ${this.player.levels[branch].title}`, 'success');
|
| 317 |
+
}
|
| 318 |
+
|
| 319 |
+
getEngineeringTitle(level) {
|
| 320 |
+
const titles = [
|
| 321 |
+
"", "Монтажник-стажер", "Монтажник", "Старший монтажник",
|
| 322 |
+
"Бригадир монтажников", "Младший наладчик", "Наладчик",
|
| 323 |
+
"Старший наладчик", "Инженер-проектировщик", "Старший инженер-проектировщик",
|
| 324 |
+
"Lead инженер", "Руководитель проектов", "Начальник отдела",
|
| 325 |
+
"Технический директор", "Директор по развитию", "Основатель технологической компании"
|
| 326 |
+
];
|
| 327 |
+
return titles[level] || "Неизвестный уровень";
|
| 328 |
+
}
|
| 329 |
+
|
| 330 |
+
getInvestingTitle(level) {
|
| 331 |
+
const titles = [
|
| 332 |
+
"", "Финансовый новичок", "Начинающий инвестор", "Активный инвестор",
|
| 333 |
+
"Опытный инвестор", "Специалист по ВДО", "Портфельный менеджер",
|
| 334 |
+
"Профессиональный инвестор", "Инвестиционный аналитик", "Старший инвестор",
|
| 335 |
+
"Инвестиционный стратег", "Управляющий активами", "Капитан рынка"
|
| 336 |
+
];
|
| 337 |
+
return titles[level] || "Неизвестный уровень";
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
getPersonalTitle(level) {
|
| 341 |
+
const titles = [
|
| 342 |
+
"", "Искатель", "Самопознающий", "Практик", "Осознанный",
|
| 343 |
+
"Дисциплинированный", "Сбалансированный", "Мастер привычек",
|
| 344 |
+
"Лидер", "Мудрец", "Просветленный"
|
| 345 |
+
];
|
| 346 |
+
return titles[level] || "Неизвестный уровень";
|
| 347 |
+
}
|
| 348 |
+
|
| 349 |
+
updateReportContent(period) {
|
| 350 |
+
const reportContent = document.querySelector('.report-content');
|
| 351 |
+
switch(period) {
|
| 352 |
+
case 'Ежедневно':
|
| 353 |
+
reportContent.innerHTML = `
|
| 354 |
+
<h3>Ежедневная статистика</h3>
|
| 355 |
+
<ul>
|
| 356 |
+
<li>💼 Работа: 8 часов</li>
|
| 357 |
+
<li>💰 Инвестиции: 30 минут</li>
|
| 358 |
+
<li>🧘 Тренировка: 1 час</li>
|
| 359 |
+
<li>📚 Обучение: 2 часа</li>
|
| 360 |
+
</ul>
|
| 361 |
+
`;
|
| 362 |
+
break;
|
| 363 |
+
case 'Еженедельно':
|
| 364 |
+
reportContent.innerHTML = `
|
| 365 |
+
<h3>Еженедельный аудит</h3>
|
| 366 |
+
<ul>
|
| 367 |
+
<li>📈 Прогресс по всем веткам: +2.5%</li>
|
| 368 |
+
<li>💰 Финансовый портфель: +1,200 ₽</li>
|
| 369 |
+
<li>🎯 Выполнено 4 из 5 недельных квестов</li>
|
| 370 |
+
<li>🏆 Получено 2 достижения</li>
|
| 371 |
+
</ul>
|
| 372 |
+
`;
|
| 373 |
+
break;
|
| 374 |
+
case 'Ежемесячно':
|
| 375 |
+
reportContent.innerHTML = `
|
| 376 |
+
<h3>Ежемесячный отчет</h3>
|
| 377 |
+
<ul>
|
| 378 |
+
<li>📊 Общий прогресс: +12%</li>
|
| 379 |
+
<li>💰 Доход: 165,000 ₽</li>
|
| 380 |
+
<li>📈 Инвестиционная доходность: 1.8%</li>
|
| 381 |
+
<li>🎯 Достигнуты 2 цели из 5</li>
|
| 382 |
+
</ul>
|
| 383 |
+
`;
|
| 384 |
+
break;
|
| 385 |
+
case 'Годовые цели':
|
| 386 |
+
reportContent.innerHTML = `
|
| 387 |
+
<h3>Годовые цели</h3>
|
| 388 |
+
<ul>
|
| 389 |
+
<li>🚀 Достичь уровня 6 в инженерной ветке</li>
|
| 390 |
+
<li>💰 Накопить 150,000 ₽ в портфеле</li>
|
| 391 |
+
<li>🧠 Повысить все характеристики до 600+</li>
|
| 392 |
+
<li>🏆 Получить 10 достижений</li>
|
| 393 |
+
</ul>
|
| 394 |
+
`;
|
| 395 |
+
break;
|
| 396 |
+
}
|
| 397 |
+
}
|
| 398 |
+
|
| 399 |
+
handleFooterAction(action) {
|
| 400 |
+
switch(action) {
|
| 401 |
+
case '💾 Сохранить':
|
| 402 |
+
this.saveGame();
|
| 403 |
+
break;
|
| 404 |
+
case '📤 Экспорт данных':
|
| 405 |
+
this.exportData();
|
| 406 |
+
break;
|
| 407 |
+
case '📥 Импорт данных':
|
| 408 |
+
this.importData();
|
| 409 |
+
break;
|
| 410 |
+
}
|
| 411 |
+
}
|
| 412 |
+
|
| 413 |
+
saveGame() {
|
| 414 |
+
localStorage.setItem('realityOS_save', JSON.stringify(this.player));
|
| 415 |
+
this.showNotification('Игра сохранена успешно!', 'success');
|
| 416 |
+
}
|
| 417 |
+
|
| 418 |
+
exportData() {
|
| 419 |
+
const dataStr = JSON.stringify(this.player);
|
| 420 |
+
const dataUri = 'data:application/json;charset=utf-8,'+ encodeURIComponent(dataStr);
|
| 421 |
+
|
| 422 |
+
const exportFileDefaultName = 'reality_os_save.json';
|
| 423 |
+
|
| 424 |
+
const linkElement = document.createElement('a');
|
| 425 |
+
linkElement.setAttribute('href', dataUri);
|
| 426 |
+
linkElement.setAttribute('download', exportFileDefaultName);
|
| 427 |
+
linkElement.click();
|
| 428 |
+
|
| 429 |
+
this.showNotification('Данные экспортированы!', 'success');
|
| 430 |
+
}
|
| 431 |
+
|
| 432 |
+
importData() {
|
| 433 |
+
const input = document.createElement('input');
|
| 434 |
+
input.type = 'file';
|
| 435 |
+
input.accept = '.json';
|
| 436 |
+
|
| 437 |
+
input.onchange = e => {
|
| 438 |
+
const file = e.target.files[0];
|
| 439 |
+
const reader = new FileReader();
|
| 440 |
+
reader.onload = event => {
|
| 441 |
+
try {
|
| 442 |
+
const data = JSON.parse(event.target.result);
|
| 443 |
+
this.player = data;
|
| 444 |
+
this.renderStats();
|
| 445 |
+
this.renderLevels();
|
| 446 |
+
this.showNotification('Данные импортированы успешно!', 'success');
|
| 447 |
+
} catch (error) {
|
| 448 |
+
this.showNotification('Ошибка при импорте данных', 'error');
|
| 449 |
+
}
|
| 450 |
+
};
|
| 451 |
+
reader.readAsText(file);
|
| 452 |
+
};
|
| 453 |
+
|
| 454 |
+
input.click();
|
| 455 |
+
}
|
| 456 |
+
|
| 457 |
+
showNotification(message, type = 'info') {
|
| 458 |
+
// Создаем элемент уведомления
|
| 459 |
+
const notification = document.createElement('div');
|
| 460 |
+
notification.className = `notification ${type}`;
|
| 461 |
+
notification.textContent = message;
|
| 462 |
+
|
| 463 |
+
// Стили для уведомления
|
| 464 |
+
Object.assign(notification.style, {
|
| 465 |
+
position: 'fixed',
|
| 466 |
+
top: '20px',
|
| 467 |
+
right: '20px',
|
| 468 |
+
padding: '15px 25px',
|
| 469 |
+
borderRadius: '8px',
|
| 470 |
+
color: 'white',
|
| 471 |
+
fontWeight: 'bold',
|
| 472 |
+
zIndex: '1000',
|
| 473 |
+
boxShadow: '0 5px 15px rgba(0,0,0,0.3)',
|
| 474 |
+
transform: 'translateX(100%)',
|
| 475 |
+
transition: 'transform 0.3s ease'
|
| 476 |
+
});
|
| 477 |
+
|
| 478 |
+
// Цвета для разных типов уведомлений
|
| 479 |
+
if (type === 'success') {
|
| 480 |
+
notification.style.background = 'linear-gradient(135deg, #2ecc71, #27ae60)';
|
| 481 |
+
} else if (type === 'error') {
|
| 482 |
+
notification.style.background = 'linear-gradient(135deg, #e74c3c, #c0392b)';
|
| 483 |
+
} else {
|
| 484 |
+
notification.style.background = 'linear-gradient(135deg, #3498db, #2980b9)';
|
| 485 |
+
}
|
| 486 |
+
|
| 487 |
+
document.body.appendChild(notification);
|
| 488 |
+
|
| 489 |
+
// Анимация появления
|
| 490 |
+
setTimeout(() => {
|
| 491 |
+
notification.style.transform = 'translateX(0)';
|
| 492 |
+
}, 100);
|
| 493 |
+
|
| 494 |
+
// Удаление через 3 секунды
|
| 495 |
+
setTimeout(() => {
|
| 496 |
+
notification.style.transform = 'translateX(100%)';
|
| 497 |
+
setTimeout(() => {
|
| 498 |
+
document.body.removeChild(notification);
|
| 499 |
+
}, 300);
|
| 500 |
+
}, 3000);
|
| 501 |
+
}
|
| 502 |
+
}
|
| 503 |
+
|
| 504 |
+
// Инициализация игры при загрузке страницы
|
| 505 |
+
document.addEventListener('DOMContentLoaded', () => {
|
| 506 |
+
window.game = new RealityOS();
|
| 507 |
+
});
|
|
@@ -1,28 +1,374 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
body {
|
| 2 |
-
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
margin-top: 0;
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
|
|
|
| 16 |
}
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
border: 1px solid lightgray;
|
| 23 |
-
border-radius: 16px;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* Общие стили */
|
| 2 |
+
* {
|
| 3 |
+
margin: 0;
|
| 4 |
+
padding: 0;
|
| 5 |
+
box-sizing: border-box;
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
body {
|
| 9 |
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
|
| 10 |
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
| 11 |
+
color: #333;
|
| 12 |
+
line-height: 1.6;
|
| 13 |
+
padding: 20px;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
.container {
|
| 17 |
+
max-width: 1200px;
|
| 18 |
+
margin: 0 auto;
|
| 19 |
+
background: rgba(255, 255, 255, 0.95);
|
| 20 |
+
border-radius: 15px;
|
| 21 |
+
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
|
| 22 |
+
overflow: hidden;
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
header {
|
| 26 |
+
background: linear-gradient(135deg, #2c3e50, #3498db);
|
| 27 |
+
color: white;
|
| 28 |
+
padding: 30px;
|
| 29 |
+
text-align: center;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
header h1 {
|
| 33 |
+
font-size: 2.5rem;
|
| 34 |
+
margin-bottom: 10px;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
header p {
|
| 38 |
+
font-size: 1.2rem;
|
| 39 |
+
opacity: 0.9;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
main {
|
| 43 |
+
padding: 30px;
|
| 44 |
}
|
| 45 |
|
| 46 |
+
section {
|
| 47 |
+
margin-bottom: 40px;
|
|
|
|
| 48 |
}
|
| 49 |
|
| 50 |
+
h2 {
|
| 51 |
+
color: #2c3e50;
|
| 52 |
+
margin-bottom: 20px;
|
| 53 |
+
font-size: 1.8rem;
|
| 54 |
+
border-bottom: 3px solid #3498db;
|
| 55 |
+
padding-bottom: 10px;
|
| 56 |
}
|
| 57 |
|
| 58 |
+
h3 {
|
| 59 |
+
color: #34495e;
|
| 60 |
+
margin-bottom: 15px;
|
| 61 |
+
font-size: 1.4rem;
|
|
|
|
|
|
|
| 62 |
}
|
| 63 |
|
| 64 |
+
/* Стили для характеристик */
|
| 65 |
+
.stats-grid {
|
| 66 |
+
display: grid;
|
| 67 |
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
| 68 |
+
gap: 20px;
|
| 69 |
+
margin-bottom: 30px;
|
| 70 |
}
|
| 71 |
+
|
| 72 |
+
.stat-card {
|
| 73 |
+
background: white;
|
| 74 |
+
border-radius: 10px;
|
| 75 |
+
padding: 20px;
|
| 76 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
| 77 |
+
transition: transform 0.3s ease;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
.stat-card:hover {
|
| 81 |
+
transform: translateY(-5px);
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
.stat-name {
|
| 85 |
+
font-weight: bold;
|
| 86 |
+
display: block;
|
| 87 |
+
margin-bottom: 10px;
|
| 88 |
+
color: #2c3e50;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
.progress-bar {
|
| 92 |
+
height: 12px;
|
| 93 |
+
background: #ecf0f1;
|
| 94 |
+
border-radius: 6px;
|
| 95 |
+
overflow: hidden;
|
| 96 |
+
margin-bottom: 10px;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
.progress-fill {
|
| 100 |
+
height: 100%;
|
| 101 |
+
background: linear-gradient(90deg, #3498db, #2ecc71);
|
| 102 |
+
border-radius: 6px;
|
| 103 |
+
transition: width 0.5s ease;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
.stat-value {
|
| 107 |
+
font-size: 0.9rem;
|
| 108 |
+
color: #7f8c8d;
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
/* Финансовая цель */
|
| 112 |
+
.financial-goal {
|
| 113 |
+
background: white;
|
| 114 |
+
border-radius: 10px;
|
| 115 |
+
padding: 25px;
|
| 116 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
| 117 |
+
margin-bottom: 30px;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
.financial-stats {
|
| 121 |
+
display: flex;
|
| 122 |
+
justify-content: space-between;
|
| 123 |
+
margin-top: 15px;
|
| 124 |
+
font-weight: bold;
|
| 125 |
+
color: #2c3e50;
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
.progress-bar.large .progress-fill {
|
| 129 |
+
background: linear-gradient(90deg, #f39c12, #e74c3c);
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
/* Активные уровни */
|
| 133 |
+
.levels-grid {
|
| 134 |
+
display: grid;
|
| 135 |
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
| 136 |
+
gap: 20px;
|
| 137 |
+
}
|
| 138 |
+
|
| 139 |
+
.level-card {
|
| 140 |
+
background: white;
|
| 141 |
+
border-radius: 10px;
|
| 142 |
+
padding: 20px;
|
| 143 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
.level-card h4 {
|
| 147 |
+
color: #2c3e50;
|
| 148 |
+
margin-bottom: 10px;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
.level-card p {
|
| 152 |
+
color: #7f8c8d;
|
| 153 |
+
margin-bottom: 15px;
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
/* Ближайшие цели */
|
| 157 |
+
.upcoming-goals ul {
|
| 158 |
+
list-style-type: none;
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
.upcoming-goals li {
|
| 162 |
+
padding: 15px;
|
| 163 |
+
background: white;
|
| 164 |
+
border-radius: 8px;
|
| 165 |
+
margin-bottom: 10px;
|
| 166 |
+
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.08);
|
| 167 |
+
display: flex;
|
| 168 |
+
align-items: center;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
.upcoming-goals li:before {
|
| 172 |
+
content: "→";
|
| 173 |
+
margin-right: 10px;
|
| 174 |
+
color: #3498db;
|
| 175 |
+
font-weight: bold;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
/* Быстрый ввод данных */
|
| 179 |
+
.input-grid {
|
| 180 |
+
display: grid;
|
| 181 |
+
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
| 182 |
+
gap: 15px;
|
| 183 |
+
margin-bottom: 30px;
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
.action-btn {
|
| 187 |
+
background: linear-gradient(135deg, #3498db, #2ecc71);
|
| 188 |
+
color: white;
|
| 189 |
+
border: none;
|
| 190 |
+
padding: 15px;
|
| 191 |
+
border-radius: 8px;
|
| 192 |
+
cursor: pointer;
|
| 193 |
+
font-weight: bold;
|
| 194 |
+
transition: all 0.3s ease;
|
| 195 |
+
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
|
| 196 |
+
}
|
| 197 |
+
|
| 198 |
+
.action-btn:hover {
|
| 199 |
+
transform: translateY(-3px);
|
| 200 |
+
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.2);
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
.manual-input {
|
| 204 |
+
background: white;
|
| 205 |
+
padding: 25px;
|
| 206 |
+
border-radius: 10px;
|
| 207 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
| 208 |
+
}
|
| 209 |
+
|
| 210 |
+
.form-group {
|
| 211 |
+
margin-bottom: 20px;
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
.form-group label {
|
| 215 |
+
display: block;
|
| 216 |
+
margin-bottom: 8px;
|
| 217 |
+
font-weight: bold;
|
| 218 |
+
color: #2c3e50;
|
| 219 |
+
}
|
| 220 |
+
|
| 221 |
+
.form-group input,
|
| 222 |
+
.form-group select {
|
| 223 |
+
width: 100%;
|
| 224 |
+
padding: 12px;
|
| 225 |
+
border: 2px solid #bdc3c7;
|
| 226 |
+
border-radius: 6px;
|
| 227 |
+
font-size: 1rem;
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
+
.form-group input:focus,
|
| 231 |
+
.form-group select:focus {
|
| 232 |
+
border-color: #3498db;
|
| 233 |
+
outline: none;
|
| 234 |
+
}
|
| 235 |
+
|
| 236 |
+
.submit-btn {
|
| 237 |
+
background: linear-gradient(135deg, #9b59b6, #3498db);
|
| 238 |
+
color: white;
|
| 239 |
+
border: none;
|
| 240 |
+
padding: 15px 30px;
|
| 241 |
+
border-radius: 8px;
|
| 242 |
+
cursor: pointer;
|
| 243 |
+
font-weight: bold;
|
| 244 |
+
font-size: 1.1rem;
|
| 245 |
+
transition: all 0.3s ease;
|
| 246 |
+
}
|
| 247 |
+
|
| 248 |
+
.submit-btn:hover {
|
| 249 |
+
transform: translateY(-3px);
|
| 250 |
+
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.2);
|
| 251 |
+
}
|
| 252 |
+
|
| 253 |
+
/* Детализированные отчеты */
|
| 254 |
+
.report-tabs {
|
| 255 |
+
display: flex;
|
| 256 |
+
gap: 10px;
|
| 257 |
+
margin-bottom: 25px;
|
| 258 |
+
flex-wrap: wrap;
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
.tab-btn {
|
| 262 |
+
background: #ecf0f1;
|
| 263 |
+
border: none;
|
| 264 |
+
padding: 12px 20px;
|
| 265 |
+
border-radius: 6px;
|
| 266 |
+
cursor: pointer;
|
| 267 |
+
font-weight: bold;
|
| 268 |
+
transition: all 0.3s ease;
|
| 269 |
+
}
|
| 270 |
+
|
| 271 |
+
.tab-btn.active,
|
| 272 |
+
.tab-btn:hover {
|
| 273 |
+
background: #3498db;
|
| 274 |
+
color: white;
|
| 275 |
+
}
|
| 276 |
+
|
| 277 |
+
.chart-container {
|
| 278 |
+
background: white;
|
| 279 |
+
padding: 20px;
|
| 280 |
+
border-radius: 10px;
|
| 281 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
| 282 |
+
margin-bottom: 25px;
|
| 283 |
+
height: 400px;
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
.report-content {
|
| 287 |
+
background: white;
|
| 288 |
+
padding: 25px;
|
| 289 |
+
border-radius: 10px;
|
| 290 |
+
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
| 291 |
+
}
|
| 292 |
+
|
| 293 |
+
.report-content ul {
|
| 294 |
+
list-style-type: none;
|
| 295 |
+
}
|
| 296 |
+
|
| 297 |
+
.report-content li {
|
| 298 |
+
padding: 12px;
|
| 299 |
+
border-bottom: 1px solid #ecf0f1;
|
| 300 |
+
}
|
| 301 |
+
|
| 302 |
+
.report-content li:last-child {
|
| 303 |
+
border-bottom: none;
|
| 304 |
+
}
|
| 305 |
+
|
| 306 |
+
/* Футер */
|
| 307 |
+
footer {
|
| 308 |
+
background: #2c3e50;
|
| 309 |
+
color: white;
|
| 310 |
+
padding: 25px;
|
| 311 |
+
text-align: center;
|
| 312 |
+
}
|
| 313 |
+
|
| 314 |
+
.footer-actions {
|
| 315 |
+
display: flex;
|
| 316 |
+
justify-content: center;
|
| 317 |
+
gap: 15px;
|
| 318 |
+
margin-top: 20px;
|
| 319 |
+
flex-wrap: wrap;
|
| 320 |
+
}
|
| 321 |
+
|
| 322 |
+
.footer-btn {
|
| 323 |
+
background: rgba(255, 255, 255, 0.2);
|
| 324 |
+
color: white;
|
| 325 |
+
border: 2px solid rgba(255, 255, 255, 0.3);
|
| 326 |
+
padding: 12px 20px;
|
| 327 |
+
border-radius: 6px;
|
| 328 |
+
cursor: pointer;
|
| 329 |
+
transition: all 0.3s ease;
|
| 330 |
+
}
|
| 331 |
+
|
| 332 |
+
.footer-btn:hover {
|
| 333 |
+
background: rgba(255, 255, 255, 0.3);
|
| 334 |
+
transform: translateY(-2px);
|
| 335 |
+
}
|
| 336 |
+
|
| 337 |
+
/* Адаптивность */
|
| 338 |
+
@media (max-width: 768px) {
|
| 339 |
+
body {
|
| 340 |
+
padding: 10px;
|
| 341 |
+
}
|
| 342 |
+
|
| 343 |
+
header {
|
| 344 |
+
padding: 20px;
|
| 345 |
+
}
|
| 346 |
+
|
| 347 |
+
header h1 {
|
| 348 |
+
font-size: 2rem;
|
| 349 |
+
}
|
| 350 |
+
|
| 351 |
+
main {
|
| 352 |
+
padding: 20px;
|
| 353 |
+
}
|
| 354 |
+
|
| 355 |
+
.stats-grid,
|
| 356 |
+
.levels-grid,
|
| 357 |
+
.input-grid {
|
| 358 |
+
grid-template-columns: 1fr;
|
| 359 |
+
}
|
| 360 |
+
|
| 361 |
+
.financial-stats {
|
| 362 |
+
flex-direction: column;
|
| 363 |
+
gap: 10px;
|
| 364 |
+
}
|
| 365 |
+
|
| 366 |
+
.report-tabs {
|
| 367 |
+
flex-direction: column;
|
| 368 |
+
}
|
| 369 |
+
|
| 370 |
+
.footer-actions {
|
| 371 |
+
flex-direction: column;
|
| 372 |
+
align-items: center;
|
| 373 |
+
}
|
| 374 |
+
}
|