yipter commited on
Commit
e9f7374
·
verified ·
1 Parent(s): d89631d

all texts in French

Browse files
Files changed (4) hide show
  1. components/footer.js +30 -36
  2. components/navbar.js +17 -20
  3. index.html +85 -91
  4. script.js +31 -40
components/footer.js CHANGED
@@ -75,14 +75,12 @@ class CustomFooter extends HTMLElement {
75
  background-clip: text;
76
  font-family: 'Poppins', sans-serif;
77
  }
78
-
79
  .footer-description {
80
  color: #9CA3AF;
81
  line-height: 1.6;
82
  font-size: 0.95rem;
83
  }
84
-
85
- .section-title {
86
  font-size: 1.125rem;
87
  font-weight: 600;
88
  margin-bottom: 0.5rem;
@@ -274,9 +272,9 @@ class CustomFooter extends HTMLElement {
274
  <div class="logo-text">FaceSwap Magic</div>
275
  </a>
276
  <p class="footer-description">
277
- Transform faces with AI magic. Create hilarious memes, character transformations, and creative edits with our advanced face swapping technology.
278
  </p>
279
- <div class="social-links">
280
  <a href="https://twitter.com" class="social-link" target="_blank" rel="noopener noreferrer">
281
  <i data-feather="twitter"></i>
282
  </a>
@@ -291,87 +289,84 @@ class CustomFooter extends HTMLElement {
291
  </a>
292
  </div>
293
  </div>
294
-
295
  <!-- Quick Links -->
296
  <div class="footer-section">
297
- <h3 class="section-title">Quick Links</h3>
298
  <div class="footer-links">
299
  <a href="index.html" class="footer-link">
300
  <i data-feather="home"></i>
301
- Home
302
  </a>
303
  <a href="#features" class="footer-link">
304
  <i data-feather="zap"></i>
305
- Features
306
  </a>
307
  <a href="gallery.html" class="footer-link">
308
  <i data-feather="image"></i>
309
- Gallery
310
  </a>
311
  <a href="pricing.html" class="footer-link">
312
  <i data-feather="dollar-sign"></i>
313
- Pricing
314
  </a>
315
  <a href="about.html" class="footer-link">
316
  <i data-feather="info"></i>
317
- About Us
318
  </a>
319
  </div>
320
  </div>
321
-
322
  <!-- Legal -->
323
  <div class="footer-section">
324
- <h3 class="section-title">Legal</h3>
325
  <div class="footer-links">
326
  <a href="privacy.html" class="footer-link">
327
  <i data-feather="shield"></i>
328
- Privacy Policy
329
  </a>
330
  <a href="terms.html" class="footer-link">
331
  <i data-feather="file-text"></i>
332
- Terms of Service
333
  </a>
334
  <a href="cookies.html" class="footer-link">
335
  <i data-feather="cookie"></i>
336
- Cookie Policy
337
  </a>
338
  <a href="guidelines.html" class="footer-link">
339
  <i data-feather="check-circle"></i>
340
- Community Guidelines
341
  </a>
342
  <a href="contact.html" class="footer-link">
343
  <i data-feather="mail"></i>
344
- Contact Us
345
  </a>
346
  </div>
347
  </div>
348
-
349
- <!-- Newsletter -->
350
  <div class="footer-section">
351
- <h3 class="section-title">Stay Updated</h3>
352
  <p class="footer-description">
353
- Subscribe to our newsletter for the latest features, updates, and face swapping tips.
354
  </p>
355
- <form class="newsletter-form" id="newsletterForm">
356
- <input type="email" class="newsletter-input" placeholder="Your email address" required>
357
  <button type="submit" class="newsletter-button">
358
  <i data-feather="send"></i>
359
- Subscribe
360
  </button>
361
- </form>
362
  </div>
363
  </div>
364
 
365
  <div class="footer-bottom">
366
  <div class="copyright">
367
- &copy; 2024 FaceSwap Magic. All rights reserved.
368
  </div>
369
  <div class="legal-links">
370
- <a href="privacy.html" class="legal-link">Privacy Policy</a>
371
- <a href="terms.html" class="legal-link">Terms of Service</a>
372
- <a href="cookies.html" class="legal-link">Cookie Policy</a>
373
  </div>
374
- </div>
375
  </div>
376
 
377
  <!-- Back to Top Button -->
@@ -399,15 +394,14 @@ class CustomFooter extends HTMLElement {
399
  if (email && this.validateEmail(email)) {
400
  // In a real app, this would send to your backend
401
  console.log('Newsletter subscription:', email);
402
-
403
  // Show success message
404
- alert('Thank you for subscribing to our newsletter!');
405
 
406
  // Reset form
407
  form.reset();
408
  } else {
409
- alert('Please enter a valid email address.');
410
- }
411
  });
412
  }
413
  }
 
75
  background-clip: text;
76
  font-family: 'Poppins', sans-serif;
77
  }
 
78
  .footer-description {
79
  color: #9CA3AF;
80
  line-height: 1.6;
81
  font-size: 0.95rem;
82
  }
83
+ .section-title {
 
84
  font-size: 1.125rem;
85
  font-weight: 600;
86
  margin-bottom: 0.5rem;
 
272
  <div class="logo-text">FaceSwap Magic</div>
273
  </a>
274
  <p class="footer-description">
275
+ Transformez les visages avec la magie de l'IA. Créez des mèmes hilarants, des transformations de personnages et des montages créatifs avec notre technologie avancée d'échange de visage.
276
  </p>
277
+ <div class="social-links">
278
  <a href="https://twitter.com" class="social-link" target="_blank" rel="noopener noreferrer">
279
  <i data-feather="twitter"></i>
280
  </a>
 
289
  </a>
290
  </div>
291
  </div>
 
292
  <!-- Quick Links -->
293
  <div class="footer-section">
294
+ <h3 class="section-title">Liens Rapides</h3>
295
  <div class="footer-links">
296
  <a href="index.html" class="footer-link">
297
  <i data-feather="home"></i>
298
+ Accueil
299
  </a>
300
  <a href="#features" class="footer-link">
301
  <i data-feather="zap"></i>
302
+ Fonctionnalités
303
  </a>
304
  <a href="gallery.html" class="footer-link">
305
  <i data-feather="image"></i>
306
+ Galerie
307
  </a>
308
  <a href="pricing.html" class="footer-link">
309
  <i data-feather="dollar-sign"></i>
310
+ Tarifs
311
  </a>
312
  <a href="about.html" class="footer-link">
313
  <i data-feather="info"></i>
314
+ À Propos
315
  </a>
316
  </div>
317
  </div>
 
318
  <!-- Legal -->
319
  <div class="footer-section">
320
+ <h3 class="section-title">Légal</h3>
321
  <div class="footer-links">
322
  <a href="privacy.html" class="footer-link">
323
  <i data-feather="shield"></i>
324
+ Politique de Confidentialité
325
  </a>
326
  <a href="terms.html" class="footer-link">
327
  <i data-feather="file-text"></i>
328
+ Conditions d'Utilisation
329
  </a>
330
  <a href="cookies.html" class="footer-link">
331
  <i data-feather="cookie"></i>
332
+ Politique des Cookies
333
  </a>
334
  <a href="guidelines.html" class="footer-link">
335
  <i data-feather="check-circle"></i>
336
+ Règles de la Communauté
337
  </a>
338
  <a href="contact.html" class="footer-link">
339
  <i data-feather="mail"></i>
340
+ Nous Contacter
341
  </a>
342
  </div>
343
  </div>
344
+ <!-- Newsletter -->
 
345
  <div class="footer-section">
346
+ <h3 class="section-title">Restez Informé</h3>
347
  <p class="footer-description">
348
+ Abonnez-vous à notre newsletter pour les dernières fonctionnalités, mises à jour et conseils d'échange de visage.
349
  </p>
350
+ <form class="newsletter-form" id="newsletterForm">
351
+ <input type="email" class="newsletter-input" placeholder="Votre adresse e-mail" required>
352
  <button type="submit" class="newsletter-button">
353
  <i data-feather="send"></i>
354
+ S'abonner
355
  </button>
356
+ </form>
357
  </div>
358
  </div>
359
 
360
  <div class="footer-bottom">
361
  <div class="copyright">
362
+ &copy; 2024 FaceSwap Magic. Tous droits réservés.
363
  </div>
364
  <div class="legal-links">
365
+ <a href="privacy.html" class="legal-link">Politique de Confidentialité</a>
366
+ <a href="terms.html" class="legal-link">Conditions d'Utilisation</a>
367
+ <a href="cookies.html" class="legal-link">Politique des Cookies</a>
368
  </div>
369
+ </div>
370
  </div>
371
 
372
  <!-- Back to Top Button -->
 
394
  if (email && this.validateEmail(email)) {
395
  // In a real app, this would send to your backend
396
  console.log('Newsletter subscription:', email);
 
397
  // Show success message
398
+ alert('Merci de vous être abonné à notre newsletter !');
399
 
400
  // Reset form
401
  form.reset();
402
  } else {
403
+ alert('Veuillez saisir une adresse e-mail valide.');
404
+ }
405
  });
406
  }
407
  }
components/navbar.js CHANGED
@@ -230,49 +230,46 @@ class CustomNavbar extends HTMLElement {
230
  <div class="logo-icon">FS</div>
231
  <div class="logo-text">FaceSwap Magic</div>
232
  </a>
233
-
234
  <div class="nav-links">
235
- <a href="index.html" class="nav-link active">Home</a>
236
- <a href="#features" class="nav-link">Features</a>
237
- <a href="#gallery" class="nav-link">Gallery</a>
238
- <a href="pricing.html" class="nav-link">Pricing</a>
239
- <a href="about.html" class="nav-link">About</a>
240
  </div>
241
-
242
  <div class="nav-actions">
243
  <a href="login.html" class="btn-secondary">
244
  <i data-feather="log-in"></i>
245
- Sign In
246
  </a>
247
  <a href="register.html" class="btn-primary">
248
  <i data-feather="user-plus"></i>
249
- Get Started
250
  </a>
251
  </div>
252
-
253
- <button class="mobile-menu-btn" id="mobileMenuBtn">
254
  <i data-feather="menu"></i>
255
  </button>
256
  </div>
257
 
258
  <div class="mobile-menu" id="mobileMenu">
259
  <div class="mobile-nav-links">
260
- <a href="index.html" class="mobile-nav-link active">Home</a>
261
- <a href="#features" class="mobile-nav-link">Features</a>
262
- <a href="#gallery" class="mobile-nav-link">Gallery</a>
263
- <a href="pricing.html" class="mobile-nav-link">Pricing</a>
264
- <a href="about.html" class="mobile-nav-link">About</a>
265
  </div>
266
- <div class="mobile-nav-actions">
267
  <a href="login.html" class="btn-secondary" style="width: 100%; text-align: center;">
268
  <i data-feather="log-in"></i>
269
- Sign In
270
  </a>
271
  <a href="register.html" class="btn-primary" style="width: 100%; text-align: center;">
272
  <i data-feather="user-plus"></i>
273
- Get Started
274
  </a>
275
- </div>
276
  </div>
277
  </div>
278
  </nav>
 
230
  <div class="logo-icon">FS</div>
231
  <div class="logo-text">FaceSwap Magic</div>
232
  </a>
 
233
  <div class="nav-links">
234
+ <a href="index.html" class="nav-link active">Accueil</a>
235
+ <a href="#features" class="nav-link">Fonctionnalités</a>
236
+ <a href="#gallery" class="nav-link">Galerie</a>
237
+ <a href="pricing.html" class="nav-link">Tarifs</a>
238
+ <a href="about.html" class="nav-link">À Propos</a>
239
  </div>
 
240
  <div class="nav-actions">
241
  <a href="login.html" class="btn-secondary">
242
  <i data-feather="log-in"></i>
243
+ Connexion
244
  </a>
245
  <a href="register.html" class="btn-primary">
246
  <i data-feather="user-plus"></i>
247
+ Commencer
248
  </a>
249
  </div>
250
+ <button class="mobile-menu-btn" id="mobileMenuBtn">
 
251
  <i data-feather="menu"></i>
252
  </button>
253
  </div>
254
 
255
  <div class="mobile-menu" id="mobileMenu">
256
  <div class="mobile-nav-links">
257
+ <a href="index.html" class="mobile-nav-link active">Accueil</a>
258
+ <a href="#features" class="mobile-nav-link">Fonctionnalités</a>
259
+ <a href="#gallery" class="mobile-nav-link">Galerie</a>
260
+ <a href="pricing.html" class="mobile-nav-link">Tarifs</a>
261
+ <a href="about.html" class="mobile-nav-link">À Propos</a>
262
  </div>
263
+ <div class="mobile-nav-actions">
264
  <a href="login.html" class="btn-secondary" style="width: 100%; text-align: center;">
265
  <i data-feather="log-in"></i>
266
+ Connexion
267
  </a>
268
  <a href="register.html" class="btn-primary" style="width: 100%; text-align: center;">
269
  <i data-feather="user-plus"></i>
270
+ Commencer
271
  </a>
272
+ </div>
273
  </div>
274
  </div>
275
  </nav>
index.html CHANGED
@@ -3,8 +3,8 @@
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>FaceSwap Magic ✨ - AI Face Transformation Tool</title>
7
- <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
  <link rel="stylesheet" href="style.css">
9
  <script src="https://cdn.tailwindcss.com"></script>
10
  <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
@@ -62,21 +62,21 @@
62
  <section class="mb-16">
63
  <div class="text-center max-w-4xl mx-auto">
64
  <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold mb-6 font-['Poppins']">
65
- Transform Faces with <span class="text-primary">AI Magic</span> ✨
66
  </h1>
67
  <p class="text-lg md:text-xl text-gray-600 mb-10 max-w-3xl mx-auto">
68
- Upload your photos and let our advanced AI technology seamlessly swap faces, create hilarious memes, or generate creative character transformations.
69
  </p>
70
- <div class="flex flex-col sm:flex-row gap-4 justify-center">
71
- <a href="#upload-section" class="bg-primary hover:bg-primary-dark text-white font-medium py-3 px-8 rounded-xl shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 flex items-center justify-center gap-2">
72
- <i data-feather="upload-cloud"></i>
73
- Start Swapping Now
74
- </a>
75
- <a href="#gallery" class="bg-white hover:bg-gray-50 text-dark border-2 border-gray-200 font-medium py-3 px-8 rounded-xl shadow-md hover:shadow-lg transition-all duration-300 flex items-center justify-center gap-2">
76
- <i data-feather="image"></i>
77
- View Gallery
78
- </a>
79
- </div>
80
  </div>
81
  </section>
82
 
@@ -84,30 +84,29 @@
84
  <section id="upload-section" class="mb-20">
85
  <div class="bg-white rounded-2xl shadow-xl p-6 md:p-8">
86
  <h2 class="text-2xl md:text-3xl font-bold mb-8 text-center font-['Poppins'] text-dark">
87
- Upload Your Photos
88
  </h2>
89
-
90
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
91
  <!-- Original Image Upload -->
92
  <div class="space-y-6">
93
  <div class="flex items-center gap-3 mb-4">
94
  <div class="bg-primary/10 p-2 rounded-lg">
95
  <i data-feather="image" class="text-primary"></i>
96
  </div>
97
- <h3 class="text-xl font-semibold">Original Photo</h3>
98
- </div>
99
 
100
  <div class="border-2 border-dashed border-gray-300 rounded-2xl p-6 text-center hover:border-primary transition-colors duration-300 bg-gray-50 min-h-[300px] flex flex-col items-center justify-center">
101
  <div class="mb-4">
102
  <i data-feather="upload" class="w-16 h-16 text-gray-400 mx-auto"></i>
103
  </div>
104
- <p class="text-gray-600 mb-4">Drag & drop your original photo here</p>
105
  <label for="original-upload" class="bg-primary hover:bg-primary-dark text-white font-medium py-2 px-6 rounded-lg cursor-pointer transition-colors inline-block">
106
- Browse Files
107
  </label>
108
  <input type="file" id="original-upload" class="hidden" accept="image/*">
109
- <p class="text-sm text-gray-500 mt-4">Supports JPG, PNG, WEBP up to 10MB</p>
110
- </div>
111
 
112
  <div id="original-preview" class="hidden rounded-xl overflow-hidden shadow-lg">
113
  <img id="original-image" src="" alt="Original" class="w-full h-auto">
@@ -120,20 +119,20 @@
120
  <div class="bg-secondary/10 p-2 rounded-lg">
121
  <i data-feather="user" class="text-secondary"></i>
122
  </div>
123
- <h3 class="text-xl font-semibold">Target Face</h3>
124
- </div>
125
 
126
  <div class="border-2 border-dashed border-gray-300 rounded-2xl p-6 text-center hover:border-secondary transition-colors duration-300 bg-gray-50 min-h-[300px] flex flex-col items-center justify-center">
127
  <div class="mb-4">
128
  <i data-feather="user-plus" class="w-16 h-16 text-gray-400 mx-auto"></i>
129
  </div>
130
- <p class="text-gray-600 mb-4">Drag & drop the face you want to swap</p>
131
  <label for="target-upload" class="bg-secondary hover:bg-secondary-dark text-white font-medium py-2 px-6 rounded-lg cursor-pointer transition-colors inline-block">
132
- Browse Files
133
  </label>
134
  <input type="file" id="target-upload" class="hidden" accept="image/*">
135
- <p class="text-sm text-gray-500 mt-4">Make sure face is clearly visible</p>
136
- </div>
137
 
138
  <div id="target-preview" class="hidden rounded-xl overflow-hidden shadow-lg">
139
  <img id="target-image" src="" alt="Target Face" class="w-full h-auto">
@@ -144,30 +143,29 @@
144
  <!-- Controls -->
145
  <div class="mt-10 pt-8 border-t border-gray-200">
146
  <div class="max-w-2xl mx-auto">
147
- <h3 class="text-xl font-semibold mb-6 text-center">Adjustment Options</h3>
148
-
149
- <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
150
  <div class="space-y-2">
151
- <label class="text-gray-700 font-medium">Face Alignment</label>
152
  <input type="range" min="0" max="100" value="50" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer">
153
  </div>
154
  <div class="space-y-2">
155
- <label class="text-gray-700 font-medium">Skin Tone Match</label>
156
  <input type="range" min="0" max="100" value="75" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer">
157
  </div>
158
  <div class="space-y-2">
159
- <label class="text-gray-700 font-medium">Blend Intensity</label>
160
  <input type="range" min="0" max="100" value="60" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer">
161
  </div>
162
- </div>
163
 
164
  <div class="text-center">
165
  <button id="generate-btn" class="bg-gradient-to-r from-primary to-secondary hover:from-primary-dark hover:to-secondary-dark text-black font-semibold py-4 px-12 rounded-xl shadow-lg hover:shadow-xl transition-all duration-300 transform hover:scale-105 flex items-center gap-3 mx-auto">
166
  <i data-feather="zap"></i>
167
- Generate FaceSwap
168
  </button>
169
- <p class="text-gray-500 text-sm mt-4">Processing usually takes 10-30 seconds</p>
170
- </div>
171
  </div>
172
  </div>
173
  </div>
@@ -177,16 +175,15 @@
177
  <section id="result-section" class="mb-20 hidden">
178
  <div class="bg-gradient-to-r from-primary/5 to-secondary/5 rounded-2xl shadow-xl p-8">
179
  <h2 class="text-2xl md:text-3xl font-bold mb-10 text-center font-['Poppins'] text-dark">
180
- Your Transformed Image
181
  </h2>
182
-
183
- <div class="grid grid-cols-1 lg:grid-cols-3 gap-8 items-center">
184
  <div class="text-center">
185
  <div class="mb-4">
186
  <i data-feather="image" class="w-10 h-10 text-primary mx-auto"></i>
187
  </div>
188
- <h4 class="font-semibold mb-3">Original</h4>
189
- <div class="bg-white rounded-xl shadow-lg overflow-hidden">
190
  <img id="display-original" src="" alt="Original" class="w-full h-48 object-cover">
191
  </div>
192
  </div>
@@ -195,21 +192,21 @@
195
  <div class="mb-4">
196
  <i data-feather="arrow-right" class="w-10 h-10 text-gray-500 mx-auto"></i>
197
  </div>
198
- <h4 class="font-semibold mb-3">AI Processing</h4>
199
  <div class="bg-gradient-to-br from-primary/20 to-secondary/20 rounded-xl p-8 shadow-lg">
200
  <div class="animate-pulse">
201
  <i data-feather="cpu" class="w-16 h-16 text-primary mx-auto"></i>
202
- <p class="mt-4 text-gray-600">Analyzing & Transforming...</p>
203
  </div>
204
  </div>
205
- </div>
206
 
207
  <div class="text-center">
208
  <div class="mb-4">
209
  <i data-feather="star" class="w-10 h-10 text-secondary mx-auto"></i>
210
  </div>
211
- <h4 class="font-semibold mb-3">Result</h4>
212
- <div class="bg-white rounded-xl shadow-lg overflow-hidden relative">
213
  <img id="result-image" src="" alt="Result" class="w-full h-48 object-cover">
214
  <div class="absolute top-2 right-2 bg-secondary text-white text-xs font-bold px-2 py-1 rounded">
215
  NEW
@@ -222,17 +219,17 @@
222
  <div class="flex flex-wrap justify-center gap-4">
223
  <button id="download-btn" class="bg-primary hover:bg-primary-dark text-white font-medium py-3 px-8 rounded-lg shadow hover:shadow-lg transition-all duration-300 flex items-center gap-2">
224
  <i data-feather="download"></i>
225
- Download Result
226
  </button>
227
  <button id="share-btn" class="bg-white hover:bg-gray-50 text-dark border-2 border-gray-200 font-medium py-3 px-8 rounded-lg shadow hover:shadow-lg transition-all duration-300 flex items-center gap-2">
228
  <i data-feather="share-2"></i>
229
- Share
230
  </button>
231
  <button id="try-again-btn" class="bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-8 rounded-lg shadow hover:shadow-lg transition-all duration-300 flex items-center gap-2">
232
  <i data-feather="refresh-cw"></i>
233
- Try Another
234
  </button>
235
- </div>
236
  </div>
237
  </div>
238
  </section>
@@ -240,107 +237,104 @@
240
  <!-- Features Section -->
241
  <section class="mb-20">
242
  <h2 class="text-2xl md:text-3xl font-bold mb-12 text-center font-['Poppins'] text-dark">
243
- Why Choose FaceSwap Magic?
244
  </h2>
245
-
246
- <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
247
  <div class="bg-white rounded-xl p-6 shadow-lg hover:shadow-xl transition-shadow duration-300">
248
  <div class="bg-primary/10 w-12 h-12 rounded-lg flex items-center justify-center mb-4">
249
  <i data-feather="shield" class="text-primary"></i>
250
  </div>
251
- <h3 class="text-xl font-semibold mb-3">Secure & Private</h3>
252
- <p class="text-gray-600">All images are processed securely and automatically deleted after 24 hours. Your privacy is our priority.</p>
253
- </div>
254
 
255
  <div class="bg-white rounded-xl p-6 shadow-lg hover:shadow-xl transition-shadow duration-300">
256
  <div class="bg-secondary/10 w-12 h-12 rounded-lg flex items-center justify-center mb-4">
257
  <i data-feather="zap" class="text-secondary"></i>
258
  </div>
259
- <h3 class="text-xl font-semibold mb-3">AI-Powered Precision</h3>
260
- <p class="text-gray-600">Advanced neural networks ensure realistic face swaps with perfect alignment and natural skin tone matching.</p>
261
- </div>
262
 
263
  <div class="bg-white rounded-xl p-6 shadow-lg hover:shadow-xl transition-shadow duration-300">
264
  <div class="bg-primary/10 w-12 h-12 rounded-lg flex items-center justify-center mb-4">
265
  <i data-feather="smile" class="text-primary"></i>
266
  </div>
267
- <h3 class="text-xl font-semibold mb-3">Fun & Creative</h3>
268
- <p class="text-gray-600">Create hilarious memes, movie character transformations, or just have fun with friends and family photos.</p>
269
- </div>
270
  </div>
271
  </section>
272
 
273
  <!-- Gallery Section -->
274
  <section id="gallery" class="mb-20">
275
  <h2 class="text-2xl md:text-3xl font-bold mb-12 text-center font-['Poppins'] text-dark">
276
- Inspiration Gallery
277
  </h2>
278
-
279
- <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
280
  <!-- Gallery items will be populated by JavaScript -->
281
  <div class="bg-white rounded-xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow duration-300">
282
  <img src="http://static.photos/people/640x360/101" alt="Sample face swap" class="w-full h-48 object-cover">
283
  <div class="p-4">
284
- <h4 class="font-semibold">Celebrity Transformation</h4>
285
- <p class="text-sm text-gray-500 mt-1">User: Alex M.</p>
286
  </div>
287
- </div>
288
 
289
  <div class="bg-white rounded-xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow duration-300">
290
  <img src="http://static.photos/people/640x360/102" alt="Sample face swap" class="w-full h-48 object-cover">
291
  <div class="p-4">
292
- <h4 class="font-semibold">Historical Figure</h4>
293
- <p class="text-sm text-gray-500 mt-1">User: Maria K.</p>
294
  </div>
295
- </div>
296
 
297
  <div class="bg-white rounded-xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow duration-300">
298
  <img src="http://static.photos/people/640x360/103" alt="Sample face swap" class="w-full h-48 object-cover">
299
  <div class="p-4">
300
- <h4 class="font-semibold">Movie Character</h4>
301
- <p class="text-sm text-gray-500 mt-1">User: Sam R.</p>
302
  </div>
303
- </div>
304
  </div>
305
 
306
  <div class="text-center mt-10">
307
  <a href="gallery.html" class="inline-flex items-center gap-2 text-primary hover:text-primary-dark font-semibold">
308
- View Full Gallery
309
  <i data-feather="arrow-right"></i>
310
  </a>
311
- </div>
312
  </section>
313
 
314
  <!-- FAQ Section -->
315
  <section class="mb-20">
316
  <h2 class="text-2xl md:text-3xl font-bold mb-12 text-center font-['Poppins'] text-dark">
317
- Frequently Asked Questions
318
  </h2>
319
-
320
- <div class="max-w-3xl mx-auto space-y-6">
321
  <div class="bg-white rounded-xl p-6 shadow-md">
322
  <h3 class="text-lg font-semibold mb-2 flex items-center gap-3">
323
  <i data-feather="help-circle" class="text-primary"></i>
324
- How accurate are the face swaps?
325
  </h3>
326
- <p class="text-gray-600">Our AI uses advanced facial recognition and blending algorithms to create realistic swaps with proper alignment, skin tone matching, and lighting adjustments.</p>
327
- </div>
328
 
329
  <div class="bg-white rounded-xl p-6 shadow-md">
330
  <h3 class="text-lg font-semibold mb-2 flex items-center gap-3">
331
  <i data-feather="shield" class="text-primary"></i>
332
- Is my data secure?
333
  </h3>
334
- <p class="text-gray-600">Yes! All uploaded images are encrypted and automatically deleted from our servers after 24 hours. We don't store or share your photos.</p>
335
- </div>
336
 
337
  <div class="bg-white rounded-xl p-6 shadow-md">
338
  <h3 class="text-lg font-semibold mb-2 flex items-center gap-3">
339
  <i data-feather="dollar-sign" class="text-primary"></i>
340
- Is FaceSwap Magic free?
341
  </h3>
342
- <p class="text-gray-600">Yes! You get 5 free swaps per day. For unlimited swaps and advanced features, check out our premium plans.</p>
343
- </div>
344
  </div>
345
  </section>
346
  </main>
 
3
  <head>
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>FaceSwap Magic ✨ - Outil de Transformation Faciale par IA</title>
7
+ <link rel="icon" type="image/x-icon" href="/static/favicon.ico">
8
  <link rel="stylesheet" href="style.css">
9
  <script src="https://cdn.tailwindcss.com"></script>
10
  <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
 
62
  <section class="mb-16">
63
  <div class="text-center max-w-4xl mx-auto">
64
  <h1 class="text-4xl md:text-5xl lg:text-6xl font-bold mb-6 font-['Poppins']">
65
+ Transformez les Visages avec la <span class="text-primary">Magie de l'IA</span> ✨
66
  </h1>
67
  <p class="text-lg md:text-xl text-gray-600 mb-10 max-w-3xl mx-auto">
68
+ Téléchargez vos photos et laissez notre technologie IA avancée échanger les visages de manière transparente, créer des mèmes hilarants ou générer des transformations de personnages créatives.
69
  </p>
70
+ <div class="flex flex-col sm:flex-row gap-4 justify-center">
71
+ <a href="#upload-section" class="bg-primary hover:bg-primary-dark text-white font-medium py-3 px-8 rounded-xl shadow-lg hover:shadow-xl transition-all duration-300 transform hover:-translate-y-1 flex items-center justify-center gap-2">
72
+ <i data-feather="upload-cloud"></i>
73
+ Commencer l'Échange
74
+ </a>
75
+ <a href="#gallery" class="bg-white hover:bg-gray-50 text-dark border-2 border-gray-200 font-medium py-3 px-8 rounded-xl shadow-md hover:shadow-lg transition-all duration-300 flex items-center justify-center gap-2">
76
+ <i data-feather="image"></i>
77
+ Voir la Galerie
78
+ </a>
79
+ </div>
80
  </div>
81
  </section>
82
 
 
84
  <section id="upload-section" class="mb-20">
85
  <div class="bg-white rounded-2xl shadow-xl p-6 md:p-8">
86
  <h2 class="text-2xl md:text-3xl font-bold mb-8 text-center font-['Poppins'] text-dark">
87
+ Téléchargez Vos Photos
88
  </h2>
89
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-8">
 
90
  <!-- Original Image Upload -->
91
  <div class="space-y-6">
92
  <div class="flex items-center gap-3 mb-4">
93
  <div class="bg-primary/10 p-2 rounded-lg">
94
  <i data-feather="image" class="text-primary"></i>
95
  </div>
96
+ <h3 class="text-xl font-semibold">Photo Originale</h3>
97
+ </div>
98
 
99
  <div class="border-2 border-dashed border-gray-300 rounded-2xl p-6 text-center hover:border-primary transition-colors duration-300 bg-gray-50 min-h-[300px] flex flex-col items-center justify-center">
100
  <div class="mb-4">
101
  <i data-feather="upload" class="w-16 h-16 text-gray-400 mx-auto"></i>
102
  </div>
103
+ <p class="text-gray-600 mb-4">Glissez-déposez votre photo originale ici</p>
104
  <label for="original-upload" class="bg-primary hover:bg-primary-dark text-white font-medium py-2 px-6 rounded-lg cursor-pointer transition-colors inline-block">
105
+ Parcourir les Fichiers
106
  </label>
107
  <input type="file" id="original-upload" class="hidden" accept="image/*">
108
+ <p class="text-sm text-gray-500 mt-4">Supporte JPG, PNG, WEBP jusqu'à 10Mo</p>
109
+ </div>
110
 
111
  <div id="original-preview" class="hidden rounded-xl overflow-hidden shadow-lg">
112
  <img id="original-image" src="" alt="Original" class="w-full h-auto">
 
119
  <div class="bg-secondary/10 p-2 rounded-lg">
120
  <i data-feather="user" class="text-secondary"></i>
121
  </div>
122
+ <h3 class="text-xl font-semibold">Visage Cible</h3>
123
+ </div>
124
 
125
  <div class="border-2 border-dashed border-gray-300 rounded-2xl p-6 text-center hover:border-secondary transition-colors duration-300 bg-gray-50 min-h-[300px] flex flex-col items-center justify-center">
126
  <div class="mb-4">
127
  <i data-feather="user-plus" class="w-16 h-16 text-gray-400 mx-auto"></i>
128
  </div>
129
+ <p class="text-gray-600 mb-4">Glissez-déposez le visage que vous souhaitez échanger</p>
130
  <label for="target-upload" class="bg-secondary hover:bg-secondary-dark text-white font-medium py-2 px-6 rounded-lg cursor-pointer transition-colors inline-block">
131
+ Parcourir les Fichiers
132
  </label>
133
  <input type="file" id="target-upload" class="hidden" accept="image/*">
134
+ <p class="text-sm text-gray-500 mt-4">Assurez-vous que le visage est clairement visible</p>
135
+ </div>
136
 
137
  <div id="target-preview" class="hidden rounded-xl overflow-hidden shadow-lg">
138
  <img id="target-image" src="" alt="Target Face" class="w-full h-auto">
 
143
  <!-- Controls -->
144
  <div class="mt-10 pt-8 border-t border-gray-200">
145
  <div class="max-w-2xl mx-auto">
146
+ <h3 class="text-xl font-semibold mb-6 text-center">Options d'Ajustement</h3>
147
+ <div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
 
148
  <div class="space-y-2">
149
+ <label class="text-gray-700 font-medium">Alignement du Visage</label>
150
  <input type="range" min="0" max="100" value="50" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer">
151
  </div>
152
  <div class="space-y-2">
153
+ <label class="text-gray-700 font-medium">Correspondance de Teint</label>
154
  <input type="range" min="0" max="100" value="75" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer">
155
  </div>
156
  <div class="space-y-2">
157
+ <label class="text-gray-700 font-medium">Intensité de Fusion</label>
158
  <input type="range" min="0" max="100" value="60" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer">
159
  </div>
160
+ </div>
161
 
162
  <div class="text-center">
163
  <button id="generate-btn" class="bg-gradient-to-r from-primary to-secondary hover:from-primary-dark hover:to-secondary-dark text-black font-semibold py-4 px-12 rounded-xl shadow-lg hover:shadow-xl transition-all duration-300 transform hover:scale-105 flex items-center gap-3 mx-auto">
164
  <i data-feather="zap"></i>
165
+ Générer l'Échange
166
  </button>
167
+ <p class="text-gray-500 text-sm mt-4">Le traitement prend généralement 10 à 30 secondes</p>
168
+ </div>
169
  </div>
170
  </div>
171
  </div>
 
175
  <section id="result-section" class="mb-20 hidden">
176
  <div class="bg-gradient-to-r from-primary/5 to-secondary/5 rounded-2xl shadow-xl p-8">
177
  <h2 class="text-2xl md:text-3xl font-bold mb-10 text-center font-['Poppins'] text-dark">
178
+ Votre Image Transformée
179
  </h2>
180
+ <div class="grid grid-cols-1 lg:grid-cols-3 gap-8 items-center">
 
181
  <div class="text-center">
182
  <div class="mb-4">
183
  <i data-feather="image" class="w-10 h-10 text-primary mx-auto"></i>
184
  </div>
185
+ <h4 class="font-semibold mb-3">Originale</h4>
186
+ <div class="bg-white rounded-xl shadow-lg overflow-hidden">
187
  <img id="display-original" src="" alt="Original" class="w-full h-48 object-cover">
188
  </div>
189
  </div>
 
192
  <div class="mb-4">
193
  <i data-feather="arrow-right" class="w-10 h-10 text-gray-500 mx-auto"></i>
194
  </div>
195
+ <h4 class="font-semibold mb-3">Traitement IA</h4>
196
  <div class="bg-gradient-to-br from-primary/20 to-secondary/20 rounded-xl p-8 shadow-lg">
197
  <div class="animate-pulse">
198
  <i data-feather="cpu" class="w-16 h-16 text-primary mx-auto"></i>
199
+ <p class="mt-4 text-gray-600">Analyse et Transformation...</p>
200
  </div>
201
  </div>
202
+ </div>
203
 
204
  <div class="text-center">
205
  <div class="mb-4">
206
  <i data-feather="star" class="w-10 h-10 text-secondary mx-auto"></i>
207
  </div>
208
+ <h4 class="font-semibold mb-3">Résultat</h4>
209
+ <div class="bg-white rounded-xl shadow-lg overflow-hidden relative">
210
  <img id="result-image" src="" alt="Result" class="w-full h-48 object-cover">
211
  <div class="absolute top-2 right-2 bg-secondary text-white text-xs font-bold px-2 py-1 rounded">
212
  NEW
 
219
  <div class="flex flex-wrap justify-center gap-4">
220
  <button id="download-btn" class="bg-primary hover:bg-primary-dark text-white font-medium py-3 px-8 rounded-lg shadow hover:shadow-lg transition-all duration-300 flex items-center gap-2">
221
  <i data-feather="download"></i>
222
+ Télécharger le Résultat
223
  </button>
224
  <button id="share-btn" class="bg-white hover:bg-gray-50 text-dark border-2 border-gray-200 font-medium py-3 px-8 rounded-lg shadow hover:shadow-lg transition-all duration-300 flex items-center gap-2">
225
  <i data-feather="share-2"></i>
226
+ Partager
227
  </button>
228
  <button id="try-again-btn" class="bg-gray-100 hover:bg-gray-200 text-gray-700 font-medium py-3 px-8 rounded-lg shadow hover:shadow-lg transition-all duration-300 flex items-center gap-2">
229
  <i data-feather="refresh-cw"></i>
230
+ Essayer un Autre
231
  </button>
232
+ </div>
233
  </div>
234
  </div>
235
  </section>
 
237
  <!-- Features Section -->
238
  <section class="mb-20">
239
  <h2 class="text-2xl md:text-3xl font-bold mb-12 text-center font-['Poppins'] text-dark">
240
+ Pourquoi Choisir FaceSwap Magic ?
241
  </h2>
242
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
 
243
  <div class="bg-white rounded-xl p-6 shadow-lg hover:shadow-xl transition-shadow duration-300">
244
  <div class="bg-primary/10 w-12 h-12 rounded-lg flex items-center justify-center mb-4">
245
  <i data-feather="shield" class="text-primary"></i>
246
  </div>
247
+ <h3 class="text-xl font-semibold mb-3">Sécurisé & Privé</h3>
248
+ <p class="text-gray-600">Toutes les images sont traitées de manière sécurisée et automatiquement supprimées après 24 heures. Votre confidentialité est notre priorité.</p>
249
+ </div>
250
 
251
  <div class="bg-white rounded-xl p-6 shadow-lg hover:shadow-xl transition-shadow duration-300">
252
  <div class="bg-secondary/10 w-12 h-12 rounded-lg flex items-center justify-center mb-4">
253
  <i data-feather="zap" class="text-secondary"></i>
254
  </div>
255
+ <h3 class="text-xl font-semibold mb-3">Précision Propulsée par IA</h3>
256
+ <p class="text-gray-600">Des réseaux de neurones avancés garantissent des échanges de visage réalistes avec un alignement parfait et une correspondance naturelle des tons de peau.</p>
257
+ </div>
258
 
259
  <div class="bg-white rounded-xl p-6 shadow-lg hover:shadow-xl transition-shadow duration-300">
260
  <div class="bg-primary/10 w-12 h-12 rounded-lg flex items-center justify-center mb-4">
261
  <i data-feather="smile" class="text-primary"></i>
262
  </div>
263
+ <h3 class="text-xl font-semibold mb-3">Amusant & Créatif</h3>
264
+ <p class="text-gray-600">Créez des mèmes hilarants, des transformations de personnages de films, ou amusez-vous simplement avec des photos d'amis et de famille.</p>
265
+ </div>
266
  </div>
267
  </section>
268
 
269
  <!-- Gallery Section -->
270
  <section id="gallery" class="mb-20">
271
  <h2 class="text-2xl md:text-3xl font-bold mb-12 text-center font-['Poppins'] text-dark">
272
+ Galerie d'Inspiration
273
  </h2>
274
+ <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
 
275
  <!-- Gallery items will be populated by JavaScript -->
276
  <div class="bg-white rounded-xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow duration-300">
277
  <img src="http://static.photos/people/640x360/101" alt="Sample face swap" class="w-full h-48 object-cover">
278
  <div class="p-4">
279
+ <h4 class="font-semibold">Transformation Célébrité</h4>
280
+ <p class="text-sm text-gray-500 mt-1">Utilisateur : Alex M.</p>
281
  </div>
282
+ </div>
283
 
284
  <div class="bg-white rounded-xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow duration-300">
285
  <img src="http://static.photos/people/640x360/102" alt="Sample face swap" class="w-full h-48 object-cover">
286
  <div class="p-4">
287
+ <h4 class="font-semibold">Personnage Historique</h4>
288
+ <p class="text-sm text-gray-500 mt-1">Utilisateur : Maria K.</p>
289
  </div>
290
+ </div>
291
 
292
  <div class="bg-white rounded-xl overflow-hidden shadow-lg hover:shadow-xl transition-shadow duration-300">
293
  <img src="http://static.photos/people/640x360/103" alt="Sample face swap" class="w-full h-48 object-cover">
294
  <div class="p-4">
295
+ <h4 class="font-semibold">Personnage de Film</h4>
296
+ <p class="text-sm text-gray-500 mt-1">Utilisateur : Sam R.</p>
297
  </div>
298
+ </div>
299
  </div>
300
 
301
  <div class="text-center mt-10">
302
  <a href="gallery.html" class="inline-flex items-center gap-2 text-primary hover:text-primary-dark font-semibold">
303
+ Voir la Galerie Complète
304
  <i data-feather="arrow-right"></i>
305
  </a>
306
+ </div>
307
  </section>
308
 
309
  <!-- FAQ Section -->
310
  <section class="mb-20">
311
  <h2 class="text-2xl md:text-3xl font-bold mb-12 text-center font-['Poppins'] text-dark">
312
+ Questions Fréquemment Posées
313
  </h2>
314
+ <div class="max-w-3xl mx-auto space-y-6">
 
315
  <div class="bg-white rounded-xl p-6 shadow-md">
316
  <h3 class="text-lg font-semibold mb-2 flex items-center gap-3">
317
  <i data-feather="help-circle" class="text-primary"></i>
318
+ Quelle est la précision des échanges de visage ?
319
  </h3>
320
+ <p class="text-gray-600">Notre IA utilise des algorithmes avancés de reconnaissance faciale et de fusion pour créer des échanges réalistes avec un alignement approprié, une correspondance des tons de peau et des ajustements d'éclairage.</p>
321
+ </div>
322
 
323
  <div class="bg-white rounded-xl p-6 shadow-md">
324
  <h3 class="text-lg font-semibold mb-2 flex items-center gap-3">
325
  <i data-feather="shield" class="text-primary"></i>
326
+ Mes données sont-elles sécurisées ?
327
  </h3>
328
+ <p class="text-gray-600">Oui ! Toutes les images téléchargées sont chiffrées et automatiquement supprimées de nos serveurs après 24 heures. Nous ne stockons ni ne partageons vos photos.</p>
329
+ </div>
330
 
331
  <div class="bg-white rounded-xl p-6 shadow-md">
332
  <h3 class="text-lg font-semibold mb-2 flex items-center gap-3">
333
  <i data-feather="dollar-sign" class="text-primary"></i>
334
+ FaceSwap Magic est-il gratuit ?
335
  </h3>
336
+ <p class="text-gray-600">Oui ! Vous obtenez 5 échanges gratuits par jour. Pour des échanges illimités et des fonctionnalités avancées, consultez nos formules premium.</p>
337
+ </div>
338
  </div>
339
  </section>
340
  </main>
script.js CHANGED
@@ -1,5 +1,5 @@
1
- // Main JavaScript for FaceSwap Magic Application
2
 
 
3
  // DOM Elements
4
  const originalUpload = document.getElementById('original-upload');
5
  const targetUpload = document.getElementById('target-upload');
@@ -34,9 +34,8 @@ let currentState = {
34
 
35
  // Initialize Application
36
  document.addEventListener('DOMContentLoaded', function() {
37
- console.log('FaceSwap Magic initialized!');
38
-
39
- // Set up event listeners
40
  setupEventListeners();
41
 
42
  // Check for saved state in localStorage
@@ -76,13 +75,13 @@ function handleFileUpload(event, type) {
76
  if (!file) return;
77
 
78
  if (!file.type.match('image.*')) {
79
- showToast('Please upload an image file', 'error');
80
- return;
81
  }
82
 
83
  if (file.size > 10 * 1024 * 1024) { // 10MB limit
84
- showToast('File size must be less than 10MB', 'error');
85
- return;
86
  }
87
 
88
  const reader = new FileReader();
@@ -105,10 +104,8 @@ function handleFileUpload(event, type) {
105
  generateBtn.disabled = false;
106
  generateBtn.classList.remove('opacity-50', 'cursor-not-allowed');
107
  }
108
-
109
- showToast(`${type === 'original' ? 'Original' : 'Target'} image uploaded successfully!`, 'success');
110
-
111
- // Save to localStorage
112
  saveState();
113
  };
114
 
@@ -172,19 +169,18 @@ function setupRangeSliders() {
172
  // Generate face swap (simulated)
173
  function generateFaceSwap() {
174
  if (!currentState.originalImage || !currentState.targetImage) {
175
- showToast('Please upload both images first!', 'error');
176
- return;
177
  }
178
 
179
  // Show loading state
180
  currentState.isProcessing = true;
181
  generateBtn.disabled = true;
182
- generateBtn.innerHTML = `
183
  <div class="spinner"></div>
184
- Processing...
185
  `;
186
-
187
- // Simulate API call delay
188
  setTimeout(() => {
189
  // Get random sample result for demo
190
  const randomIndex = Math.floor(Math.random() * sampleResults.length);
@@ -199,15 +195,13 @@ function generateFaceSwap() {
199
  generateBtn.disabled = false;
200
  generateBtn.innerHTML = `
201
  <i data-feather="zap"></i>
202
- Generate FaceSwap
203
  `;
204
- feather.replace();
205
 
206
  currentState.isProcessing = false;
207
-
208
- showToast('Face swap generated successfully!', 'success');
209
-
210
- // Save state
211
  saveState();
212
  }, 3000);
213
  }
@@ -215,8 +209,8 @@ function generateFaceSwap() {
215
  // Download result
216
  function downloadResult() {
217
  if (!currentState.generatedResult) {
218
- showToast('No result to download!', 'error');
219
- return;
220
  }
221
 
222
  // In a real app, this would download the actual generated image
@@ -227,15 +221,14 @@ function downloadResult() {
227
  document.body.appendChild(link);
228
  link.click();
229
  document.body.removeChild(link);
230
-
231
- showToast('Download started!', 'success');
232
  }
233
 
234
  // Share result
235
  function shareResult() {
236
  if (!currentState.generatedResult) {
237
- showToast('No result to share!', 'error');
238
- return;
239
  }
240
 
241
  if (navigator.share) {
@@ -244,14 +237,14 @@ function shareResult() {
244
  text: 'Check out this awesome face swap I made with FaceSwap Magic!',
245
  url: window.location.href
246
  })
247
- .then(() => showToast('Shared successfully!', 'success'))
248
- .catch(() => showToast('Share cancelled', 'info'));
249
- } else {
250
  // Fallback: copy to clipboard
251
  navigator.clipboard.writeText(window.location.href)
252
- .then(() => showToast('Link copied to clipboard!', 'success'))
253
- .catch(() => showToast('Failed to copy link', 'error'));
254
- }
255
  }
256
 
257
  // Reset application
@@ -287,10 +280,8 @@ function resetApplication() {
287
 
288
  // Scroll to upload section
289
  document.getElementById('upload-section').scrollIntoView({ behavior: 'smooth' });
290
-
291
- showToast('Ready for a new face swap!', 'info');
292
-
293
- // Clear localStorage
294
  localStorage.removeItem('faceswapState');
295
  }
296
 
 
 
1
 
2
+ // JavaScript principal pour l'application FaceSwap Magic
3
  // DOM Elements
4
  const originalUpload = document.getElementById('original-upload');
5
  const targetUpload = document.getElementById('target-upload');
 
34
 
35
  // Initialize Application
36
  document.addEventListener('DOMContentLoaded', function() {
37
+ console.log('FaceSwap Magic initialisé !');
38
+ // Set up event listeners
 
39
  setupEventListeners();
40
 
41
  // Check for saved state in localStorage
 
75
  if (!file) return;
76
 
77
  if (!file.type.match('image.*')) {
78
+ showToast('Veuillez télécharger un fichier image', 'error');
79
+ return;
80
  }
81
 
82
  if (file.size > 10 * 1024 * 1024) { // 10MB limit
83
+ showToast('La taille du fichier doit être inférieure à 10Mo', 'error');
84
+ return;
85
  }
86
 
87
  const reader = new FileReader();
 
104
  generateBtn.disabled = false;
105
  generateBtn.classList.remove('opacity-50', 'cursor-not-allowed');
106
  }
107
+ showToast(`${type === 'original' ? 'Originale' : 'Cible'} image téléchargée avec succès !`, 'success');
108
+ // Save to localStorage
 
 
109
  saveState();
110
  };
111
 
 
169
  // Generate face swap (simulated)
170
  function generateFaceSwap() {
171
  if (!currentState.originalImage || !currentState.targetImage) {
172
+ showToast('Veuillez télécharger les deux images d\'abord !', 'error');
173
+ return;
174
  }
175
 
176
  // Show loading state
177
  currentState.isProcessing = true;
178
  generateBtn.disabled = true;
179
+ generateBtn.innerHTML = `
180
  <div class="spinner"></div>
181
+ Traitement en cours...
182
  `;
183
+ // Simulate API call delay
 
184
  setTimeout(() => {
185
  // Get random sample result for demo
186
  const randomIndex = Math.floor(Math.random() * sampleResults.length);
 
195
  generateBtn.disabled = false;
196
  generateBtn.innerHTML = `
197
  <i data-feather="zap"></i>
198
+ Générer l'Échange
199
  `;
200
+ feather.replace();
201
 
202
  currentState.isProcessing = false;
203
+ showToast('Échange de visage généré avec succès !', 'success');
204
+ // Save state
 
 
205
  saveState();
206
  }, 3000);
207
  }
 
209
  // Download result
210
  function downloadResult() {
211
  if (!currentState.generatedResult) {
212
+ showToast('Aucun résultat à télécharger !', 'error');
213
+ return;
214
  }
215
 
216
  // In a real app, this would download the actual generated image
 
221
  document.body.appendChild(link);
222
  link.click();
223
  document.body.removeChild(link);
224
+ showToast('Téléchargement démarré !', 'success');
 
225
  }
226
 
227
  // Share result
228
  function shareResult() {
229
  if (!currentState.generatedResult) {
230
+ showToast('Aucun résultat à partager !', 'error');
231
+ return;
232
  }
233
 
234
  if (navigator.share) {
 
237
  text: 'Check out this awesome face swap I made with FaceSwap Magic!',
238
  url: window.location.href
239
  })
240
+ .then(() => showToast('Partagé avec succès !', 'success'))
241
+ .catch(() => showToast('Partage annulé', 'info'));
242
+ } else {
243
  // Fallback: copy to clipboard
244
  navigator.clipboard.writeText(window.location.href)
245
+ .then(() => showToast('Lien copié dans le presse-papier !', 'success'))
246
+ .catch(() => showToast('Échec de la copie du lien', 'error'));
247
+ }
248
  }
249
 
250
  // Reset application
 
280
 
281
  // Scroll to upload section
282
  document.getElementById('upload-section').scrollIntoView({ behavior: 'smooth' });
283
+ showToast('Prêt pour un nouvel échange de visage !', 'info');
284
+ // Clear localStorage
 
 
285
  localStorage.removeItem('faceswapState');
286
  }
287