VSPAN commited on
Commit
50fd41d
·
verified ·
1 Parent(s): a45b393

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +565 -18
index.html CHANGED
@@ -1,19 +1,566 @@
1
  <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <!DOCTYPE html>
2
+ <html lang="ru">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>V-SPAN | VSteam Ultimate</title>
6
+ <style>
7
+ /* Глобальные стили */
8
+ body {
9
+ background: linear-gradient(135deg, #1b2838, #0e1a27);
10
+ color: #c6d4df;
11
+ font-family: 'Arial', sans-serif;
12
+ margin: 0;
13
+ min-height: 100vh;
14
+ line-height: 1.6;
15
+ }
16
+
17
+ .container {
18
+ max-width: 1200px;
19
+ margin: 0 auto;
20
+ padding: 20px;
21
+ }
22
+
23
+ /* Навигация */
24
+ .nav {
25
+ background: rgba(23, 26, 33, 0.9);
26
+ padding: 15px;
27
+ margin-bottom: 30px;
28
+ display: flex;
29
+ gap: 20px;
30
+ border-bottom: 2px solid #67c1f5;
31
+ backdrop-filter: blur(10px);
32
+ border-radius: 10px;
33
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
34
+ }
35
+
36
+ .nav-button {
37
+ background: none;
38
+ border: none;
39
+ color: #c6d4df;
40
+ cursor: pointer;
41
+ padding: 10px 20px;
42
+ transition: all 0.3s ease;
43
+ font-size: 16px;
44
+ border-radius: 5px;
45
+ }
46
+
47
+ .nav-button:hover {
48
+ color: #67c1f5;
49
+ background: rgba(103, 193, 245, 0.1);
50
+ transform: translateY(-2px);
51
+ }
52
+
53
+ /* Страница входа */
54
+ .login-box {
55
+ max-width: 400px;
56
+ margin: 100px auto;
57
+ padding: 40px;
58
+ background: rgba(23, 26, 33, 0.9);
59
+ border-radius: 15px;
60
+ text-align: center;
61
+ backdrop-filter: blur(10px);
62
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
63
+ border: 1px solid rgba(103, 193, 245, 0.2);
64
+ }
65
+
66
+ .login-input {
67
+ width: 100%;
68
+ padding: 12px;
69
+ margin: 10px 0;
70
+ background: rgba(42, 71, 94, 0.5);
71
+ border: 1px solid rgba(103, 193, 245, 0.3);
72
+ color: white;
73
+ border-radius: 5px;
74
+ font-size: 16px;
75
+ transition: all 0.3s ease;
76
+ }
77
+
78
+ .login-input:focus {
79
+ border-color: #67c1f5;
80
+ box-shadow: 0 0 8px rgba(103, 193, 245, 0.4);
81
+ outline: none;
82
+ }
83
+
84
+ .error-message {
85
+ color: #ff4444;
86
+ margin: 10px 0;
87
+ display: none;
88
+ font-size: 14px;
89
+ }
90
+
91
+ /* Карточки игр */
92
+ .store-grid {
93
+ display: grid;
94
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
95
+ gap: 20px;
96
+ margin-top: 30px;
97
+ }
98
+
99
+ .game-card {
100
+ background: rgba(42, 71, 94, 0.7);
101
+ border-radius: 10px;
102
+ overflow: hidden;
103
+ transition: all 0.3s ease;
104
+ border: 1px solid transparent;
105
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
106
+ }
107
+
108
+ .game-card:hover {
109
+ border-color: #67c1f5;
110
+ transform: translateY(-5px);
111
+ box-shadow: 0 8px 25px rgba(103, 193, 245, 0.3);
112
+ }
113
+
114
+ .game-image {
115
+ width: 100%;
116
+ height: 150px;
117
+ object-fit: cover;
118
+ border-bottom: 2px solid rgba(103, 193, 245, 0.2);
119
+ }
120
+
121
+ .game-card h3 {
122
+ margin: 15px;
123
+ font-size: 18px;
124
+ color: #67c1f5;
125
+ }
126
+
127
+ .game-card p {
128
+ margin: 0 15px 15px;
129
+ font-size: 14px;
130
+ color: #a8b5c0;
131
+ }
132
+
133
+ /* Кнопки */
134
+ .steam-button {
135
+ background: linear-gradient(135deg, #67c1f5, #4da8d3);
136
+ color: #1b2838;
137
+ border: none;
138
+ padding: 12px 25px;
139
+ cursor: pointer;
140
+ font-weight: bold;
141
+ border-radius: 5px;
142
+ transition: all 0.3s ease;
143
+ margin: 15px;
144
+ width: calc(100% - 30px);
145
+ box-shadow: 0 4px 15px rgba(103, 193, 245, 0.3);
146
+ }
147
+
148
+ .steam-button:hover {
149
+ transform: translateY(-2px);
150
+ box-shadow: 0 6px 20px rgba(103, 193, 245, 0.4);
151
+ }
152
+
153
+ .steam-button:disabled {
154
+ background: #2a475e;
155
+ color: #677a8a;
156
+ cursor: not-allowed;
157
+ box-shadow: none;
158
+ }
159
+
160
+ /* Профиль */
161
+ .profile-header {
162
+ display: flex;
163
+ align-items: center;
164
+ gap: 20px;
165
+ margin-bottom: 30px;
166
+ background: rgba(23, 26, 33, 0.9);
167
+ padding: 20px;
168
+ border-radius: 10px;
169
+ backdrop-filter: blur(10px);
170
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3);
171
+ }
172
+
173
+ .profile-avatar {
174
+ width: 150px;
175
+ height: 150px;
176
+ border-radius: 50%;
177
+ border: 3px solid #67c1f5;
178
+ box-shadow: 0 4px 15px rgba(103, 193, 245, 0.3);
179
+ }
180
+
181
+ .profile-name {
182
+ font-size: 24px;
183
+ font-weight: bold;
184
+ color: #67c1f5;
185
+ }
186
+
187
+ .profile-level {
188
+ background: rgba(42, 71, 94, 0.7);
189
+ padding: 5px 10px;
190
+ border-radius: 5px;
191
+ display: inline-block;
192
+ margin-top: 5px;
193
+ font-size: 14px;
194
+ }
195
+
196
+ .profile-progress {
197
+ background: rgba(23, 26, 33, 0.7);
198
+ height: 10px;
199
+ border-radius: 5px;
200
+ margin: 10px 0;
201
+ overflow: hidden;
202
+ }
203
+
204
+ .profile-progress-bar {
205
+ background: linear-gradient(135deg, #67c1f5, #4da8d3);
206
+ height: 100%;
207
+ width: 30%;
208
+ border-radius: 5px;
209
+ }
210
+
211
+ /* Друзья */
212
+ .friends-grid {
213
+ display: grid;
214
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
215
+ gap: 15px;
216
+ margin-top: 20px;
217
+ }
218
+
219
+ .friend-card {
220
+ background: rgba(42, 71, 94, 0.7);
221
+ padding: 15px;
222
+ border-radius: 10px;
223
+ text-align: center;
224
+ transition: all 0.3s ease;
225
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
226
+ }
227
+
228
+ .friend-card:hover {
229
+ transform: translateY(-3px);
230
+ box-shadow: 0 6px 20px rgba(103, 193, 245, 0.3);
231
+ }
232
+
233
+ .friend-avatar {
234
+ width: 50px;
235
+ height: 50px;
236
+ border-radius: 50%;
237
+ margin-bottom: 10px;
238
+ border: 2px solid #67c1f5;
239
+ }
240
+
241
+ /* Анимации */
242
+ @keyframes fadeIn {
243
+ from { opacity: 0; transform: translateY(20px); }
244
+ to { opacity: 1; transform: translateY(0); }
245
+ }
246
+
247
+ .fade-in {
248
+ animation: fadeIn 0.5s ease-out;
249
+ }
250
+ </style>
251
+ </head>
252
+ <body>
253
+ <!-- Страница входа -->
254
+ <div id="loginPage">
255
+ <div class="login-box">
256
+ <h2>Вход в VSteam</h2>
257
+ <input type="text" id="loginInput" class="login-input" placeholder="Имя">
258
+ <input type="password" id="passwordInput" class="login-input" placeholder="Пароль">
259
+ <div class="error-message" id="loginError">Неверные данные!</div>
260
+ <button class="steam-button" id="loginButton" style="width: 100%">Войти</button>
261
+ </div>
262
+ </div>
263
+
264
+ <!-- Основной интерфейс -->
265
+ <div id="mainPage" style="display: none">
266
+ <div class="container">
267
+ <!-- Навигация -->
268
+ <div class="nav">
269
+ <button class="nav-button" onclick="showSection('profile')">Профиль</button>
270
+ <button class="nav-button" onclick="showSection('store')">Магазин</button>
271
+ <button class="nav-button" onclick="showSection('payment')">Пополнить баланс</button>
272
+ <div style="margin-left: auto; display: flex; align-items: center; gap: 10px">
273
+ Баланс: <span id="balance">0</span> ₴
274
+ </div>
275
+ </div>
276
+
277
+ <!-- Профиль -->
278
+ <div id="profileSection">
279
+ <div class="profile-header">
280
+ <img src="https://avatars.fastly.steamstatic.com/f5b6269689db341d0d3a7f9574fcc4714b47b055_full.jpg"
281
+ alt="Аватар" class="profile-avatar">
282
+ <div class="profile-info">
283
+ <div class="profile-name">V-SPAN</div>
284
+ <div>United States</div>
285
+ <div class="profile-level">Уровень 19</div>
286
+ <div class="profile-progress">
287
+ <div class="profile-progress-bar" style="width: 30%"></div>
288
+ </div>
289
+ <div>Rookie Miner</div>
290
+ <div>100 ед. опыта</div>
291
+ <button class="steam-button">Редактировать профиль</button>
292
+ </div>
293
+ </div>
294
+
295
+ <div class="profile-section">
296
+ <h2>О себе</h2>
297
+ <p>Для знакомых я просто Джонни. 24 Года Не женатый.<br>
298
+ Пиши желательно по делу или для обычного приятного разговора.<br>
299
+ 𝐃𝐢𝐬𝐜𝐨𝐫𝐝: johnny_raspberry<br>
300
+ уʙᴧᴇчᴇния: ᴩиᴄоʙᴀниᴇ, чᴛᴇниᴇ ᴋниᴦ, ᴄоздᴀниᴇ и ᴨᴩодᴀжᴀ ᴋниᴦ<br>
301
+ инᴛᴇᴩᴇᴄы ʙ иᴦᴩᴀх: нᴀᴄᴛоᴧьныᴇ ᴩоᴧᴇʙыᴇ иᴦᴩы, оᴄобᴇнно ᴅᴜɴɢᴇᴏɴs ᴀɴᴅ ᴅʀᴀɢᴏɴs (ᴅɴᴅ)</p>
302
+ <p>Соси письку, братан. - zakat</p>
303
+ </div>
304
+
305
+ <div class="profile-section">
306
+ <h2>Друзья</h2>
307
+ <div class="friends-grid" id="friendsGrid"></div>
308
+ </div>
309
+
310
+ <div class="profile-section">
311
+ <h2>Библиотека игр</h2>
312
+ <div id="userGames"></div>
313
+ </div>
314
+ </div>
315
+
316
+ <!-- Магазин -->
317
+ <div id="storeSection" style="display: none">
318
+ <h2>Магазин ВSteam</h2>
319
+ <div class="store-grid" id="storeGrid"></div>
320
+ </div>
321
+
322
+ <!-- Пополнение баланса -->
323
+ <div id="paymentSection" style="display: none">
324
+ <div class="payment-box">
325
+ <h2 style="text-align: center">Пополнение баланса</h2>
326
+ <input type="number" class="payment-input" id="amount" placeholder="Сумма в гривнах">
327
+ <button class="steam-button" style="width: 100%" id="addFundsButton">
328
+ Мгновенное пополнение ✨
329
+ </button>
330
+ <div style="text-align: center; margin-top: 15px; color: #888">
331
+ (Функция в бета-тесте — деньги не списываются)
332
+ </div>
333
+ </div>
334
+ </div>
335
+ </div>
336
+ </div>
337
+
338
+ <script>
339
+ // Данные аккаунта
340
+ const account = {
341
+ login: 'V-SPAN',
342
+ password: '11.08.2024 1:53',
343
+ balance: 305,
344
+ library: [],
345
+ level: 19,
346
+ experience: 301,
347
+ friends: [
348
+ { name: 'Aristople', status: 'В сети: 7 ч., 9 мин. назад' },
349
+ { name: 'Rock MeN', status: 'В сети: 14 дн. назад' },
350
+ { name: 'Zakati', status: 'В сети' }
351
+ ]
352
+ }
353
+
354
+ // Игры в магазине
355
+ const games = [
356
+ { id: 1, title: 'Dota 3', price: 499, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/570/header.jpg' },
357
+ { id: 2, title: 'CS:GO Ultimate', price: 799, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/730/header.jpg' },
358
+ { id: 3, title: 'The Witcher 4: Wild Dream', price: 1299, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/292030/header.jpg' },
359
+ { id: 4, title: 'Cyberpunk 2078', price: 1599, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/1091500/header.jpg' },
360
+ { id: 5, title: 'Elden Ring: Shadow of the Moon', price: 1799, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/1245620/header.jpg' },
361
+ { id: 6, title: 'Starfield: Galactic Empire', price: 1999, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/1716740/header.jpg' },
362
+ { id: 7, title: 'Baldur\'s Gate 4', price: 1499, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/1086940/header.jpg' },
363
+ { id: 8, title: 'Half-Life 3', price: 999, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/220/header.jpg' },
364
+ { id: 9, title: 'Portal 3', price: 899, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/400/header.jpg' },
365
+ { id: 10, title: 'GTA VI', price: 2499, image: 'https://cdn.cloudflare.steamstatic.com/steam/apps/271590/header.jpg' }
366
+ ]
367
+
368
+ // Инициализация приложения
369
+ function init() {
370
+ document.getElementById('loginButton').addEventListener('click', login)
371
+ document.getElementById('addFundsButton').addEventListener('click', addFunds)
372
+ }
373
+
374
+ // Система входа
375
+ function login() {
376
+ const login = document.getElementById('loginInput').value
377
+ const password = document.getElementById('passwordInput').value
378
+
379
+ if(login === account.login && password === account.password) {
380
+ document.getElementById('loginPage').style.display = 'none'
381
+ document.getElementById('mainPage').style.display = 'block'
382
+ initApp()
383
+ } else {
384
+ document.getElementById('loginError').style.display = 'block'
385
+ }
386
+ }
387
+
388
+ // Инициализация приложения после входа
389
+ function initApp() {
390
+ updateBalance()
391
+ renderStore()
392
+ renderLibrary()
393
+ renderFriends()
394
+ document.getElementById('amount').value = 500
395
+ showSection('profile')
396
+ }
397
+
398
+ // Обновление баланса
399
+ function updateBalance() {
400
+ const balanceElement = document.getElementById('balance')
401
+ if(balanceElement) {
402
+ balanceElement.textContent = account.balance
403
+ }
404
+ }
405
+
406
+ // Отрисовка магазина
407
+ function renderStore() {
408
+ const storeGrid = document.getElementById('storeGrid')
409
+ if(storeGrid) {
410
+ storeGrid.innerHTML = games.map(game => `
411
+ <div class="game-card" ${account.library.some(g => g.id === game.id) ? 'data-owned="true"' : ''}>
412
+ <img src="${game.image}" class="game-image">
413
+ <div style="padding: 15px">
414
+ <h3>${game.title}</h3>
415
+ <div style="margin: 15px 0; color: #67c1f5">${game.price} ₴</div>
416
+ <button class="steam-button"
417
+ onclick="buyGame(${game.id})"
418
+ ${account.library.some(g => g.id === game.id) ? 'disabled' : ''}>
419
+ ${account.library.some(g => g.id === game.id) ? 'В библиотеке' : 'Купить'}
420
+ </button>
421
+ </div>
422
+ </div>
423
+ `).join('')
424
+ }
425
+ }
426
+
427
+ // Отрисовка библиотеки
428
+ function renderLibrary() {
429
+ const library = document.getElementById('userGames')
430
+ if(library) {
431
+ library.innerHTML = account.library.length ?
432
+ account.library.map(game => `
433
+ <div class="game-card">
434
+ <img src="${game.image}" class="game-image">
435
+ <div style="padding: 15px">
436
+ <h3>${game.title}</h3>
437
+ <button class="steam-button" disabled>Установить</button>
438
+ </div>
439
+ </div>
440
+ `).join('') :
441
+ '<p>Ваша библиотека пуста. Купите игры в магазине!</p>'
442
+ }
443
+ }
444
+
445
+ // Отрисовка друзей
446
+ function renderFriends() {
447
+ const friendsGrid = document.getElementById('friendsGrid')
448
+ if(friendsGrid) {
449
+ friendsGrid.innerHTML = account.friends.map(friend => `
450
+ <div class="friend-card">
451
+ <div>${friend.name}</div>
452
+ <div class="friend-status">${friend.status}</div>
453
+ </div>
454
+ `).join('')
455
+ }
456
+ }
457
+
458
+ // Покупка игры
459
+ function buyGame(gameId) {
460
+ const game = games.find(g => g.id === gameId)
461
+ if(!game) return alert('Игра не найдена!')
462
+
463
+ if(account.balance >= game.price) {
464
+ account.balance -= game.price
465
+ account.library.push(game)
466
+ updateBalance()
467
+ renderStore()
468
+ renderLibrary()
469
+ alert(`🎉 Вы купили "${game.title}"!`)
470
+ } else {
471
+ alert('🚫 Недостаточно средств!')
472
+ }
473
+ }
474
+
475
+ // Пополнение баланса
476
+ function addFunds() {
477
+ const amount = Number(document.getElementById('amount').value)
478
+ if(amount > 0 && amount <= 10000) {
479
+ account.balance += amount
480
+ updateBalance()
481
+ alert(`✅ Баланс пополнен на ${amount} ₴!`)
482
+ } else {
483
+ alert('⚠ Введите сумму от 1 до 10 000 гривен')
484
+ }
485
+ }
486
+
487
+ // Переключение разделов
488
+ function showSection(section) {
489
+ document.querySelectorAll('[id$="Section"]').forEach(el => el.style.display = 'none')
490
+ const sectionElement = document.getElementById(section + 'Section')
491
+ if(sectionElement) {
492
+ sectionElement.style.display = 'block'
493
+ }
494
+ if(section === 'store') renderStore()
495
+ if(section === 'profile') renderLibrary()
496
+ }
497
+
498
+ // Инициализация при загрузке страницы
499
+ window.addEventListener('load', init)
500
+ </script>
501
+ <script>
502
+ // Функция для "установки" игры
503
+ function installGame(gameId) {
504
+ const game = games.find(g => g.id === gameId);
505
+ if (!game) return;
506
+
507
+ const installButton = document.querySelector(`.install-button[data-game-id="${gameId}"]`);
508
+ const progressBar = document.querySelector(`.install-progress[data-game-id="${gameId}"] .install-progress-bar`);
509
+ const message = document.querySelector(`.install-message[data-game-id="${gameId}"]`);
510
+
511
+ if (installButton && progressBar && message) {
512
+ installButton.disabled = true;
513
+ installButton.textContent = 'Установка...';
514
+ progressBar.parentElement.style.display = 'block';
515
+ message.style.display = 'block';
516
+
517
+ let progress = 0;
518
+ const interval = setInterval(() => {
519
+ progress += 10;
520
+ progressBar.style.width = `${progress}%`;
521
+
522
+ if (progress >= 100) {
523
+ clearInterval(interval);
524
+ installButton.textContent = 'Установлено';
525
+ message.textContent = 'Игра успешно установлена!';
526
+
527
+ // Шутка после установки
528
+ setTimeout(() => {
529
+ window.location.href = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ';
530
+ // Здесь можно добавить ссылку или что-то ещё
531
+ }, 1000);
532
+ }
533
+ }, 300);
534
+ }
535
+ }
536
+
537
+ // Отрисовка библиотеки с кнопкой установки
538
+ function renderLibrary() {
539
+ const library = document.getElementById('userGames');
540
+ if (library) {
541
+ library.innerHTML = account.library.length ?
542
+ account.library.map(game => `
543
+ <div class="game-card">
544
+ <img src="${game.image}" class="game-image">
545
+ <div style="padding: 15px">
546
+ <h3>${game.title}</h3>
547
+ <button class="steam-button install-button" data-game-id="${game.id}" onclick="installGame(${game.id})">
548
+ Установить
549
+ </button>
550
+ <div class="install-progress" data-game-id="${game.id}">
551
+ <div class="install-progress-bar"></div>
552
+ </div>
553
+ <div class="install-message" data-game-id="${game.id}">
554
+ Установка...
555
+ </div>
556
+ </div>
557
+ </div>
558
+ `).join('') :
559
+ '<p>Ваша библиотека пуста. Купите игры в магазине!</p>';
560
+ }
561
+ }
562
+
563
+ // Остальной код остаётся без изменений
564
+ </script>
565
+ </body>
566
+ </html>