Aleksmorshen commited on
Commit
acde818
·
verified ·
1 Parent(s): fea9ee3

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +303 -369
index.html CHANGED
@@ -1,444 +1,378 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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>LMArena Pro Wrapper</title>
7
  <style>
8
- body, html {
9
- margin: 0;
10
- padding: 0;
11
- height: 100%;
12
- width: 100%;
13
- overflow: hidden;
14
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
15
- background-color: #f0f0f0;
16
- }
17
-
18
- /* Контейнер для iframe */
19
- .iframe-container {
20
- width: 100%;
21
- height: 100%;
22
- position: absolute;
23
- top: 0;
24
- left: 0;
25
- z-index: 1;
26
- }
27
-
28
- iframe {
29
- width: 100%;
30
- height: 100%;
31
- border: none;
32
- display: block;
33
  }
34
 
35
- /* Плавающая кнопка */
36
- .fab-btn {
37
- position: fixed;
38
- right: 20px;
39
- top: 50%;
40
- transform: translateY(-50%);
41
- width: 60px;
42
- height: 60px;
43
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
44
- color: white;
45
- border-radius: 50%;
46
- border: none;
47
- box-shadow: 0 4px 15px rgba(0,0,0,0.3);
48
- cursor: pointer;
49
- z-index: 9999; /* Поверх iframe */
50
- font-size: 28px;
51
  display: flex;
52
- align-items: center;
53
- justify-content: center;
54
- transition: transform 0.2s, box-shadow 0.2s;
55
- }
56
-
57
- .fab-btn:hover {
58
- transform: translateY(-50%) scale(1.1);
59
- box-shadow: 0 6px 20px rgba(0,0,0,0.4);
60
- }
61
-
62
- .fab-btn:active {
63
- transform: translateY(-50%) scale(0.95);
64
- }
65
-
66
- /* Модальное окно */
67
- .modal-overlay {
68
- display: none;
69
- position: fixed;
70
- top: 0;
71
- left: 0;
72
- width: 100%;
73
- height: 100%;
74
- background-color: rgba(0, 0, 0, 0.6);
75
- backdrop-filter: blur(3px);
76
- z-index: 10000;
77
  justify-content: center;
78
  align-items: center;
 
79
  }
80
 
81
- .modal-content {
82
- background-color: #fff;
83
- padding: 0;
 
 
84
  border-radius: 16px;
85
- width: 90%;
86
- max-width: 550px;
87
- max-height: 90vh;
88
- overflow-y: auto;
89
- box-shadow: 0 10px 30px rgba(0,0,0,0.3);
90
- display: flex;
91
- flex-direction: column;
92
- animation: fadeIn 0.3s ease-out;
93
  }
94
 
95
- @keyframes fadeIn {
96
- from { opacity: 0; transform: translateY(20px); }
97
- to { opacity: 1; transform: translateY(0); }
98
- }
99
-
100
- .modal-header {
101
- padding: 20px 25px;
102
- background-color: #f8f9fa;
103
- border-bottom: 1px solid #e9ecef;
104
- display: flex;
105
- justify-content: space-between;
106
- align-items: center;
107
- border-radius: 16px 16px 0 0;
108
- }
109
-
110
- .modal-header h2 {
111
- margin: 0;
112
- font-size: 1.25rem;
113
- color: #333;
114
- }
115
-
116
- .close-btn {
117
- background: none;
118
- border: none;
119
- font-size: 24px;
120
- cursor: pointer;
121
- color: #666;
122
- transition: color 0.2s;
123
  }
124
 
125
- .close-btn:hover {
126
- color: #d32f2f;
 
 
 
127
  }
128
 
129
- .modal-body {
130
- padding: 25px;
 
 
131
  }
132
 
133
- /* Элементы формы */
134
- .form-row {
135
- display: flex;
136
- gap: 15px;
137
- margin-bottom: 15px;
138
  }
139
 
140
  .form-group {
141
- margin-bottom: 15px;
142
- flex: 1;
143
  }
144
 
145
- .form-group label {
146
- display: block;
147
- margin-bottom: 6px;
148
  font-weight: 600;
 
149
  font-size: 0.9rem;
150
- color: #444;
151
  }
152
 
153
- .form-group select, .form-group textarea, .form-group input {
154
- width: 100%;
155
  padding: 10px 12px;
156
- border: 1px solid #ddd;
157
  border-radius: 8px;
158
- font-size: 0.95rem;
159
- box-sizing: border-box;
160
  background-color: #fff;
161
- transition: border-color 0.2s;
 
162
  }
163
 
164
- .form-group select:focus, .form-group textarea:focus {
165
- outline: none;
166
- border-color: #667eea;
167
- box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
168
  }
169
 
170
- .form-group textarea {
171
  resize: vertical;
172
  min-height: 80px;
173
  font-family: inherit;
174
  }
175
 
176
- .submit-btn {
177
- width: 100%;
178
- padding: 14px;
179
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
 
 
 
180
  color: white;
181
  border: none;
182
- border-radius: 8px;
183
  font-size: 1.1rem;
184
- font-weight: 600;
 
185
  cursor: pointer;
186
- transition: opacity 0.2s;
187
- margin-top: 10px;
 
 
 
 
 
188
  }
189
 
190
- .submit-btn:hover {
191
- opacity: 0.9;
 
192
  }
193
 
194
- /* Кастомный скроллбар */
195
- .modal-content::-webkit-scrollbar {
196
- width: 8px;
197
- }
198
- .modal-content::-webkit-scrollbar-track {
199
- background: #f1f1f1;
200
  }
201
- .modal-content::-webkit-scrollbar-thumb {
202
- background: #ccc;
203
- border-radius: 4px;
 
 
 
 
 
 
 
 
 
204
  }
205
  </style>
206
  </head>
207
  <body>
208
 
209
- <div class="iframe-container">
210
- <!--
211
- Атрибуты sandbox и allow критически важны для работы авторизации и скриптов.
212
- allow-popups-to-escape-sandbox позволяет открывать окна Google Auth.
213
- -->
214
- <iframe
215
- src="https://lmarena.ai/ru?chat-modality=image&mode=direct"
216
- sandbox="allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts allow-downloads allow-top-navigation-by-user-activation"
217
- allow="clipboard-write; clipboard-read; camera; microphone; geolocation; display-capture; autoplay; fullscreen"
218
- title="LMArena">
219
- </iframe>
220
- </div>
221
-
222
- <!-- Кнопка вызова -->
223
- <button class="fab-btn" onclick="openModal()" title="Сгенерировать Промпт">
224
- 🤖
225
- </button>
226
-
227
- <!-- Модальное окно -->
228
- <div class="modal-overlay" id="promptModal">
229
- <div class="modal-content">
230
- <div class="modal-header">
231
- <h2>Генератор Промпта</h2>
232
- <button class="close-btn" onclick="closeModal()">&times;</button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
233
  </div>
234
 
235
- <div class="modal-body">
236
- <form id="promptForm">
237
- <div class="form-row">
238
- <div class="form-group">
239
- <label>Пол</label>
240
- <select id="gender">
241
- <option value="Male">Мужчина</option>
242
- <option value="Female">Женщина</option>
243
- </select>
244
- </div>
245
- <div class="form-group">
246
- <label>Возраст (0-70+)</label>
247
- <select id="age">
248
- <option value="Newborn (0-1 year)">Младенец (0-1)</option>
249
- <option value="Toddler (1-3 years)">Малыш (1-3)</option>
250
- <option value="Child (4-12 years)">Ребенок (4-12)</option>
251
- <option value="Teenager (13-19 years)">Подросток (13-19)</option>
252
- <option value="Young Adult (20-29 years)">20-29 лет</option>
253
- <option value="Adult (30-39 years)">30-39 лет</option>
254
- <option value="Middle-aged (40-49 years)">40-49 лет</option>
255
- <option value="Mature (50-59 years)">50-59 лет</option>
256
- <option value="Elderly (60-69 years)">60-69 лет</option>
257
- <option value="Senior (70+ years)">70+ ��ет</option>
258
- </select>
259
- </div>
260
- </div>
261
-
262
- <div class="form-group">
263
- <label>Национальность</label>
264
- <select id="nationality">
265
- <option value="European">Европейская</option>
266
- <option value="Slavic">Славянская (Русская/Восточная Европа)</option>
267
- <option value="Asian">Азиатская (Китай/Япония/Корея)</option>
268
- <option value="African American">Афроамериканская</option>
269
- <option value="African">Африканская</option>
270
- <option value="Latino/Hispanic">Латиноамериканская</option>
271
- <option value="Indian">Индийская</option>
272
- <option value="Middle Eastern">Ближневосточная (Арабская/Персидская)</option>
273
- <option value="Nordic">Скандинавская</option>
274
- <option value="Native American">Коренной американец</option>
275
- <option value="Mixed Race">Смешанная</option>
276
- </select>
277
- </div>
278
-
279
- <div class="form-row">
280
- <div class="form-group">
281
- <label>Цвет волос</label>
282
- <select id="hairColor">
283
- <option value="Brown">Каштановые</option>
284
- <option value="Blonde">Блонд</option>
285
- <option value="Black">Черные</option>
286
- <option value="Red">Рыжие</option>
287
- <option value="Grey">Седые</option>
288
- <option value="Platinum White">Платиновые</option>
289
- <option value="Dyed Pink">Розовые</option>
290
- <option value="Dyed Blue">Синие</option>
291
- <option value="Bald">Лысый</option>
292
- </select>
293
- </div>
294
- <div class="form-group">
295
- <label>Цвет глаз</label>
296
- <select id="eyeColor">
297
- <option value="Brown">Карие</option>
298
- <option value="Blue">Голубые</option>
299
- <option value="Green">Зеленые</option>
300
- <option value="Grey">Серые</option>
301
- <option value="Hazel">Ореховые</option>
302
- <option value="Amber">Янтарные</option>
303
- <option value="Heterochromia">Гетерохромия (Разные)</option>
304
- </select>
305
- </div>
306
- </div>
307
-
308
- <div class="form-row">
309
- <div class="form-group">
310
- <label>Прическа</label>
311
- <select id="hairstyle">
312
- <option value="Long straight hair">Длинные прямые</option>
313
- <option value="Long wavy hair">Длинные волнистые</option>
314
- <option value="Short bob cut">Короткое каре</option>
315
- <option value="Pixie cut">Пикси (Очень короткие)</option>
316
- <option value="Messy bun">Небрежный пучок</option>
317
- <option value="Ponytail">Хвост</option>
318
- <option value="Crew cut">Ежик (Муж)</option>
319
- <option value="Undercut">Андеркат (Муж)</option>
320
- <option value="Slicked back">Зачесанные назад</option>
321
- <option value="Curly afro">Афро кудри</option>
322
- <option value="Dreadlocks">Дреды</option>
323
- </select>
324
- </div>
325
- <div class="form-group">
326
- <label>Фигура</label>
327
- <select id="bodyType">
328
- <option value="Slim">Стройная</option>
329
- <option value="Athletic">Спортивная/Атлетичная</option>
330
- <option value="Average">Средняя/Обычная</option>
331
- <option value="Muscular">Мускулистая</option>
332
- <option value="Curvy">Пышная (Curvy)</option>
333
- <option value="Plus Size">Полная (Plus Size)</option>
334
- <option value="Skinny">Худощавая</option>
335
- </select>
336
- </div>
337
- </div>
338
-
339
- <div class="form-group">
340
- <label>Стиль фотографии</label>
341
- <select id="style">
342
- <option value="Professional Studio Portrait">Студийный портрет (Проф)</option>
343
- <option value="Candid Street Photography">Уличное фото (Естественное)</option>
344
- <option value="Cinematic Lighting">Кинематографичный свет</option>
345
- <option value="Creative Artistic High Fashion">Творческий Арт / Фэшн</option>
346
- <option value="Cyberpunk Neon">Киберпанк / Неон</option>
347
- <option value="Vintage Film Grain 90s">Винтаж / Пленка 90-х</option>
348
- <option value="Black and White Noir">Чёрно-белый Нуар</option>
349
- <option value="Business Corporate Headshot">Деловой портрет</option>
350
- <option value="Fantasy Ethereal">Фэнтези / Сказочный</option>
351
- <option value="Polaroid Snapshot">Полароид</option>
352
- </select>
353
- </div>
354
-
355
- <div class="form-group">
356
- <label>Дополнительные пожелания</label>
357
- <textarea id="additional" placeholder="Одежда, место действия, эмоции (напр: в красном платье, улыбается, на фоне гор)"></textarea>
358
- </div>
359
-
360
- <button type="button" class="submit-btn" onclick="generateAndCopy()">СКОПИРОВАТЬ JSON</button>
361
- </form>
362
  </div>
363
- </div>
364
  </div>
365
 
366
  <script>
367
- function openModal() {
368
- document.getElementById('promptModal').style.display = 'flex';
369
- }
370
-
371
- function closeModal() {
372
- document.getElementById('promptModal').style.display = 'none';
373
- }
374
-
375
- window.onclick = function(event) {
376
- const modal = document.getElementById('promptModal');
377
- if (event.target == modal) {
378
- closeModal();
379
- }
380
- }
381
-
382
- async function generateAndCopy() {
383
- const gender = document.getElementById('gender').value;
384
- const age = document.getElementById('age').value;
385
- const nationality = document.getElementById('nationality').value;
386
- const hairColor = document.getElementById('hairColor').value;
387
- const eyeColor = document.getElementById('eyeColor').value;
388
- const hairstyle = document.getElementById('hairstyle').value;
389
- const bodyType = document.getElementById('bodyType').value;
390
- const style = document.getElementById('style').value;
391
- const additional = document.getElementById('additional').value;
392
-
393
- // Формируем чистый промпт на основе JSON
394
- const promptData = {
395
- "character": {
396
- "gender": gender,
397
- "age_group": age,
398
- "ethnicity": nationality,
399
- "features": {
400
- "hair": `${hairColor}, ${hairstyle}`,
401
- "eyes": eyeColor,
402
- "body": bodyType
403
- }
404
- },
405
- "style": style,
406
- "details": additional ? additional : "No specific details provided",
407
- "quality": "8k, photorealistic, masterpiece, high details"
408
  };
409
 
410
- const jsonString = JSON.stringify(promptData, null, 2);
411
 
 
 
412
  try {
413
  if (navigator.clipboard && navigator.clipboard.writeText) {
414
  await navigator.clipboard.writeText(jsonString);
 
415
  } else {
416
- // Fallback для некоторых версий WebView
417
- const textarea = document.createElement("textarea");
418
- textarea.value = jsonString;
419
- textarea.style.position = "fixed";
420
- document.body.appendChild(textarea);
421
- textarea.focus();
422
- textarea.select();
423
- document.execCommand("copy");
424
- document.body.removeChild(textarea);
425
  }
426
-
427
- // Визуальное подтверждение на кнопке
428
- const btn = document.querySelector('.submit-btn');
429
- const originalText = btn.innerText;
430
- btn.innerText = "СКОПИРОВАНО! ✅";
431
- btn.style.background = "#4CAF50";
432
-
433
- setTimeout(() => {
434
- closeModal();
435
- btn.innerText = originalText;
436
- btn.style.background = "";
437
- }, 1000);
438
-
439
  } catch (err) {
440
- console.error('Ошибка:', err);
441
- alert("Не удалось скопировать. Проверьте разрешения браузера.");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
442
  }
443
  }
444
  </script>
 
1
+ Отличная идея. Это гораздо более надежный и удобный подход, так как он обходит все проблемы с безопасностью браузеров (iframe блокировки) и делает процесс создания промпта основным действием.
2
+
3
+ Логика теперь такая:
4
+
5
+ Вы открываете файл.
6
+
7
+ Видите красивую форму на весь экран.
8
+
9
+ Заполняете параметры.
10
+
11
+ Нажимаете кнопку — код копируется в буфер, и сайт lmarena.ai сразу открывается в новой вкладке, где вам останется только нажать Ctrl+V.
12
+
13
+ Вот полный код одним файлом:
14
+
15
+ code
16
+ Html
17
+ play_circle
18
+ download
19
+ content_copy
20
+ expand_less
21
  <!DOCTYPE html>
22
  <html lang="ru">
23
  <head>
24
  <meta charset="UTF-8">
25
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
26
+ <title>AI Prompt Generator & Launcher</title>
27
  <style>
28
+ :root {
29
+ --primary: #4F46E5;
30
+ --primary-hover: #4338ca;
31
+ --bg: #F3F4F6;
32
+ --card-bg: #ffffff;
33
+ --text: #1F2937;
34
+ --border: #D1D5DB;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  }
36
 
37
+ body {
38
+ font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
39
+ background-color: var(--bg);
40
+ color: var(--text);
41
+ margin: 0;
42
+ padding: 20px;
 
 
 
 
 
 
 
 
 
 
43
  display: flex;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  justify-content: center;
45
  align-items: center;
46
+ min-height: 100vh;
47
  }
48
 
49
+ .container {
50
+ background-color: var(--card-bg);
51
+ width: 100%;
52
+ max-width: 600px;
53
+ padding: 30px;
54
  border-radius: 16px;
55
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
 
 
 
 
 
 
 
56
  }
57
 
58
+ h1 {
59
+ text-align: center;
60
+ color: var(--primary);
61
+ margin-top: 0;
62
+ margin-bottom: 5px;
63
+ font-size: 1.8rem;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  }
65
 
66
+ p.subtitle {
67
+ text-align: center;
68
+ color: #6B7280;
69
+ margin-bottom: 25px;
70
+ font-size: 0.95rem;
71
  }
72
 
73
+ .form-grid {
74
+ display: grid;
75
+ grid-template-columns: 1fr 1fr;
76
+ gap: 15px;
77
  }
78
 
79
+ .full-width {
80
+ grid-column: span 2;
 
 
 
81
  }
82
 
83
  .form-group {
84
+ display: flex;
85
+ flex-direction: column;
86
  }
87
 
88
+ label {
 
 
89
  font-weight: 600;
90
+ margin-bottom: 6px;
91
  font-size: 0.9rem;
92
+ color: #374151;
93
  }
94
 
95
+ select, textarea, input {
 
96
  padding: 10px 12px;
97
+ border: 1px solid var(--border);
98
  border-radius: 8px;
99
+ font-size: 1rem;
 
100
  background-color: #fff;
101
+ transition: border-color 0.2s, box-shadow 0.2s;
102
+ outline: none;
103
  }
104
 
105
+ select:focus, textarea:focus {
106
+ border-color: var(--primary);
107
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);
 
108
  }
109
 
110
+ textarea {
111
  resize: vertical;
112
  min-height: 80px;
113
  font-family: inherit;
114
  }
115
 
116
+ .btn-container {
117
+ margin-top: 25px;
118
+ text-align: center;
119
+ }
120
+
121
+ .action-btn {
122
+ background-color: var(--primary);
123
  color: white;
124
  border: none;
125
+ padding: 14px 28px;
126
  font-size: 1.1rem;
127
+ font-weight: bold;
128
+ border-radius: 10px;
129
  cursor: pointer;
130
+ width: 100%;
131
+ transition: background-color 0.2s, transform 0.1s;
132
+ box-shadow: 0 4px 6px rgba(79, 70, 229, 0.2);
133
+ display: flex;
134
+ justify-content: center;
135
+ align-items: center;
136
+ gap: 10px;
137
  }
138
 
139
+ .action-btn:hover {
140
+ background-color: var(--primary-hover);
141
+ transform: translateY(-1px);
142
  }
143
 
144
+ .action-btn:active {
145
+ transform: translateY(1px);
 
 
 
 
146
  }
147
+
148
+ /* Адаптивность для мобильных */
149
+ @media (max-width: 500px) {
150
+ .form-grid {
151
+ grid-template-columns: 1fr;
152
+ }
153
+ .full-width {
154
+ grid-column: span 1;
155
+ }
156
+ .container {
157
+ padding: 20px;
158
+ }
159
  }
160
  </style>
161
  </head>
162
  <body>
163
 
164
+ <div class="container">
165
+ <h1>Генератор Персонажа</h1>
166
+ <p class="subtitle">Настройте параметры, скопируйте JSON и перейдите в редактор</p>
167
+
168
+ <form id="promptForm">
169
+ <div class="form-grid">
170
+ <!-- Пол -->
171
+ <div class="form-group">
172
+ <label for="gender">Пол</label>
173
+ <select id="gender">
174
+ <option value="Female">Женщина</option>
175
+ <option value="Male">Мужчина</option>
176
+ </select>
177
+ </div>
178
+
179
+ <!-- Возраст -->
180
+ <div class="form-group">
181
+ <label for="age">Возраст</label>
182
+ <select id="age">
183
+ <option value="Newborn (0-1 year)">Младенец (0-1)</option>
184
+ <option value="Toddler (1-3 years)">Малыш (1-3)</option>
185
+ <option value="Child (4-9 years)">Ребенок (4-9)</option>
186
+ <option value="Preteen (10-12 years)">Ребенок (10-12)</option>
187
+ <option value="Teenager (13-19 years)">Подросток (13-19)</option>
188
+ <option value="Young Adult (20-29 years)">20-29 лет</option>
189
+ <option value="Adult (30-39 years)">30-39 лет</option>
190
+ <option value="Middle-aged (40-49 years)">40-49 лет</option>
191
+ <option value="Mature (50-59 years)">50-59 лет</option>
192
+ <option value="Elderly (60-69 years)">60-69 лет</option>
193
+ <option value="Senior (70+ years)">70+ лет</option>
194
+ </select>
195
+ </div>
196
+
197
+ <!-- Национальность -->
198
+ <div class="form-group">
199
+ <label for="nationality">Национальность</label>
200
+ <select id="nationality">
201
+ <option value="European">Европейская</option>
202
+ <option value="Slavic">Славянская</option>
203
+ <option value="Asian">Азиатская</option>
204
+ <option value="African">Африканская</option>
205
+ <option value="African American">Афроамериканская</option>
206
+ <option value="Latino">Латиноамериканская</option>
207
+ <option value="Indian">Индийская</option>
208
+ <option value="Middle Eastern">Ближневосточная</option>
209
+ <option value="Nordic">Скандинавская</option>
210
+ <option value="Mixed Race">Смешанная</option>
211
+ </select>
212
+ </div>
213
+
214
+ <!-- Фигура -->
215
+ <div class="form-group">
216
+ <label for="bodyType">Фигура</label>
217
+ <select id="bodyType">
218
+ <option value="Slim">Стройная</option>
219
+ <option value="Athletic">Спортивная</option>
220
+ <option value="Average">Обычная</option>
221
+ <option value="Muscular">Мускулистая</option>
222
+ <option value="Curvy">Пышная (Curvy)</option>
223
+ <option value="Plus Size">Полная (Plus Size)</option>
224
+ <option value="Skinny">Очень худая</option>
225
+ </select>
226
+ </div>
227
+
228
+ <!-- Волосы -->
229
+ <div class="form-group">
230
+ <label for="hairColor">Цвет волос</label>
231
+ <select id="hairColor">
232
+ <option value="Brown">Каштановые</option>
233
+ <option value="Blonde">Блонд</option>
234
+ <option value="Black">Черные</option>
235
+ <option value="Red">Рыжие</option>
236
+ <option value="Grey">Седые</option>
237
+ <option value="White">Белые</option>
238
+ <option value="Dyed Pink">Розовые</option>
239
+ <option value="Dyed Blue">Синие</option>
240
+ <option value="Bald">Лысый</option>
241
+ </select>
242
+ </div>
243
+
244
+ <!-- Прическа -->
245
+ <div class="form-group">
246
+ <label for="hairstyle">Прическа</label>
247
+ <select id="hairstyle">
248
+ <option value="Long straight">Длинные прямые</option>
249
+ <option value="Wavy">Волнистые</option>
250
+ <option value="Curly">Кудрявые</option>
251
+ <option value="Bob cut">Каре</option>
252
+ <option value="Short cut">Короткая стрижка</option>
253
+ <option value="Ponytail">Хвост</option>
254
+ <option value="Bun">Пучок</option>
255
+ <option value="Braids">Косички</option>
256
+ <option value="Dreadlocks">Дреды</option>
257
+ <option value="Bald">Налысо</option>
258
+ </select>
259
+ </div>
260
+
261
+ <!-- Глаза -->
262
+ <div class="form-group">
263
+ <label for="eyeColor">Цвет глаз</label>
264
+ <select id="eyeColor">
265
+ <option value="Brown">Карие</option>
266
+ <option value="Blue">Голубые</option>
267
+ <option value="Green">Зеленые</option>
268
+ <option value="Grey">Серые</option>
269
+ <option value="Hazel">Ореховые</option>
270
+ <option value="Heterochromia">Разные (Гетерохромия)</option>
271
+ </select>
272
+ </div>
273
+
274
+ <!-- Стиль -->
275
+ <div class="form-group">
276
+ <label for="style">Стиль фото</label>
277
+ <select id="style">
278
+ <option value="Professional Studio Portrait">Студийный портрет</option>
279
+ <option value="Cinematic Lighting">Кинематографичный</option>
280
+ <option value="Candid Street Photography">Уличное фото</option>
281
+ <option value="Artistic Creative">Творческий / Арт</option>
282
+ <option value="Cyberpunk Neon">Киберпанк / Неон</option>
283
+ <option value="Black and White">Чёрно-белое</option>
284
+ <option value="Vintage Polaroid">Винтаж / Полароид</option>
285
+ <option value="Fashion Editorial">Фэшн (Журнальный)</option>
286
+ <option value="Corporate Headshot">Бизнес портрет</option>
287
+ <option value="Fantasy">Фэнтези</option>
288
+ <option value="Anime Style">Аниме стиль</option>
289
+ </select>
290
+ </div>
291
+
292
+ <!-- Доп инфо -->
293
+ <div class="form-group full-width">
294
+ <label for="additional">Дополнительные пожелания</label>
295
+ <textarea id="additional" placeholder="Опишите одежду, локацию, освещение или эмоции (например: в красном костюме, смеется, на фоне Эйфелевой башни)"></textarea>
296
+ </div>
297
  </div>
298
 
299
+ <div class="btn-container">
300
+ <button type="button" class="action-btn" onclick="processAndOpen()">
301
+ <span>СКОПИРОВАТЬ И ОТКРЫТЬ САЙТ</span>
302
+ <span style="font-size: 1.2em">🚀</span>
303
+ </button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
304
  </div>
305
+ </form>
306
  </div>
307
 
308
  <script>
309
+ async function processAndOpen() {
310
+ const btn = document.querySelector('.action-btn');
311
+ const originalText = btn.innerHTML;
312
+
313
+ // 1. Сбор данных
314
+ const data = {
315
+ prompt_settings: {
316
+ subject: {
317
+ gender: document.getElementById('gender').value,
318
+ age: document.getElementById('age').value,
319
+ ethnicity: document.getElementById('nationality').value,
320
+ appearance: {
321
+ body: document.getElementById('bodyType').value,
322
+ hair: `${document.getElementById('hairColor').value}, ${document.getElementById('hairstyle').value}`,
323
+ eyes: document.getElementById('eyeColor').value
324
+ }
325
+ },
326
+ style: document.getElementById('style').value,
327
+ details: document.getElementById('additional').value || "High quality, sharp focus",
328
+ technical: "8k resolution, photorealistic, masterpiece"
329
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
  };
331
 
332
+ const jsonString = JSON.stringify(data, null, 2);
333
 
334
+ // 2. Копирование
335
+ let copied = false;
336
  try {
337
  if (navigator.clipboard && navigator.clipboard.writeText) {
338
  await navigator.clipboard.writeText(jsonString);
339
+ copied = true;
340
  } else {
341
+ throw new Error("Clipboard API unavailable");
 
 
 
 
 
 
 
 
342
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  } catch (err) {
344
+ // Fallback для старых браузеров
345
+ const textArea = document.createElement("textarea");
346
+ textArea.value = jsonString;
347
+ textArea.style.position = "fixed";
348
+ document.body.appendChild(textArea);
349
+ textArea.focus();
350
+ textArea.select();
351
+ try {
352
+ document.execCommand('copy');
353
+ copied = true;
354
+ } catch (e) {
355
+ console.error("Copy failed", e);
356
+ alert("Не удалось скопировать автоматически. Пожалуйста, скопируйте текст вручную.");
357
+ }
358
+ document.body.removeChild(textArea);
359
+ }
360
+
361
+ // 3. Визуальная индикация и открытие ссылки
362
+ if (copied) {
363
+ btn.style.backgroundColor = "#10B981"; // Зеленый цвет
364
+ btn.innerHTML = "СКОПИРОВАНО! ОТКРЫВАЮ... ✅";
365
+
366
+ setTimeout(() => {
367
+ // Открытие ссылки в новой вкладке
368
+ window.open('https://lmarena.ai/ru?chat-modality=image&mode=direct', '_blank');
369
+
370
+ // Возврат кнопки в исходное состояние
371
+ setTimeout(() => {
372
+ btn.style.backgroundColor = "";
373
+ btn.innerHTML = originalText;
374
+ }, 1000);
375
+ }, 800);
376
  }
377
  }
378
  </script>