yakimo commited on
Commit
3352f18
·
verified ·
1 Parent(s): 04f03ab

ПРОМПТ ДЛЯ ИИ-ГЕНЕРАТОРА САЙТА - "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 УРОВНЕЙ)
```

УРО

Files changed (3) hide show
  1. index.html +224 -2
  2. script.js +507 -0
  3. style.css +364 -18
index.html CHANGED
@@ -1,3 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
 
2
-
3
- <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>
script.js ADDED
@@ -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
+ });
style.css CHANGED
@@ -1,28 +1,374 @@
 
 
 
 
 
 
 
1
  body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
 
16
  }
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
 
 
 
 
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
+ }