Transformez votre corps
en 30 jours

Découvrez la méthode nutritionnelle qui a aidé +50,000 personnes à atteindre leurs objectifs

Offre limitée - seulement 7 places restantes

Nutrition santé

Pourquoi choisir FitNut ?

🎯

100% Personnalisé

Un plan nutritionnel adapté à votre métabolisme, vos goûts et vos objectifs

Résultats en 30 jours

Études cliniques prouvant des résultats significatifs dès la première semaine

🔄

100% Flexible

Préparez vos repas en 15 minutes maximum - compatible avec votre emploi du temps

💰

Aucune restriction

Apprenez à manger sainement sans vous priver - mangez même vos plats préférés !

Ce que vous allez recevoir

01

Évaluation personnalisée

Test métabolique complet + questionnaire alimentaire

Évaluation
02

Plan nutritionnel

Menu hebdomadaire détaillé avec recettes simples

Plan nutrition
03

Séance coaching

Appel de 30 min avec un expert nutritionniste certifié

Coaching
04

Accès illimité

Groupe privé + bonus exclusifs pendant 12 mois

Groupe

Choisissez votre offre

Starter
49€

Par mois

  • ✓ Plan nutritionnel personnalisé
  • ✓ Accès à la communauté
  • ✓ Support email
  • ✗ Coaching exclusif
  • ✗ Bonus exclusifs
-50%
Ultimate
147€

6 mois - paiement unique

  • ✓ Tout de Pro
  • ✓ Bonus exclusifs
  • ✓ Produits santé offerts
  • ✓ Séances vidéo illimitées
  • ✓ Garantie satisfaction
🛡️

Garantie 100% satisfait ou remboursé

Essayez pendant 30 jours. Si vous n'êtes pas satisfait, nous vous remboursons intégralement.

/* styles.css */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; } .navbar { display: flex; justify-content: space-between; align-items: center; padding: 20px 5%; background: rgba(255, 255, 255, 0.95); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); position: fixed; width: 100%; top: 0; z-index: 1000; } .logo { font-size: 1.5rem; font-weight: bold; color: #667eea; } .back-button { background: #e0e0e0; border: none; padding: 10px 20px; border-radius: 25px; cursor: pointer; font-weight: bold; transition: all 0.3s; } .back-button:hover { background: #d0d0d0; } /* Pages */ .page { padding-top: 80px; min-height: 100vh; } .page.hidden { display: none; } /* Hero Section */ .hero { text-align: center; padding: 100px 5%; color: white; } .hero h1 { font-size: 3rem; margin-bottom: 20px; } .hero p { font-size: 1.2rem; margin-bottom: 30px; } .cta-button { background: #ff6b6b; color: white; border: none; padding: 15px 40px; font-size: 1.2rem; border-radius: 30px; cursor: pointer; transition: transform 0.3s, box-shadow 0.3s; } .cta-button:hover { transform: translateY(-3px); box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); } /* Form Section */ .form-container { max-width: 900px; margin: 0 auto; padding: 40px 20px; } .form-section { background: white; padding: 30px; margin-bottom: 20px; border-radius: 10px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); } .form-section h3 { color: #667eea; margin-bottom: 20px; } .form-group { margin-bottom: 20px; } .form-group label { display: block; margin-bottom: 8px; font-weight: 500; } .form-group input, .form-group select { width: 100%; padding: 12px; border: 1px solid #ddd; border-radius: 5px; font-size: 1rem; transition: border-color 0.3s; } .form-group input:focus, .form-group select:focus { outline: none; border-color: #667eea; } .payment-methods { display: flex; gap: 15px; } .payment-option { flex: 1; } .payment-option input { display: none; } .payment-content { display: flex; align-items: center; gap: 10px; padding: 15px; border: 2px solid #ddd; border-radius: 10px; cursor: pointer; transition: all 0.3s; } .payment-option input:checked + .payment-content { border-color: #667eea; background: #f0f4ff; } .card-details { margin-top: 20px; } .hidden { display: none; } .conditions label { display: block; margin-bottom: 10px; font-size: 0.9rem; } /* Thank You Section */ .thank-you-container { max-width: 800px; margin: 0 auto; padding: 40px 20px; text-align: center; } .success-icon { font-size: 5rem; margin-bottom: 20px; } .thank-you-container h2 { font-size: 2.5rem; color: #667eea; margin-bottom: 20px; } .confirmation { font-size: 1.2rem; color: #666; margin-bottom: 30px; } .order-details, .next-steps { background: white; padding: 30px; border-radius: 10px; margin-bottom: 30px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); } .order-details h3, .next-steps h3 { color: #667eea; margin-bottom: 20px; } .detail-row { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid #eee; } .detail-row:last-child { border-bottom: none; font-size: 1.2rem; font-weight: bold; } .step-list { text-align: left; } .step-item { display: flex; align-items: center; gap: 15px; padding: 15px 0; border-bottom: 1px solid #eee; } .step-item:last-child { border-bottom: none; } .step-number { width: 30px; height: 30px; background: #667eea; color: white; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; } .bonus { background: #f0fff4; border: 2px solid #48bb78; padding: 20px; border-radius: 10px; margin-bottom: 30px; color: #2f855a; font-weight: bold; } .secondary-button { background: transparent; border: 2px solid #667eea; color: #667eea; padding: 12px 30px; border-radius: 30px; cursor: pointer; font-size: 1rem; transition: all 0.3s; } .secondary-button:hover { background: #667eea; color: white; } /* Footer */ .footer { text-align: center; padding: 20px; background: rgba(255, 255, 255, 0.95); margin-top: 50px; } .footer-links { display: flex; justify-content: center; gap: 20px; margin-top: 10px; } .footer-links a { color: #666; text-decoration: none; font-size: 0.9rem; } .footer-links a:hover { color: #667eea; } /* Responsive */ @media (max-width: 768px) { .navbar { flex-direction: column; gap: 10px; } .hero h1 { font-size: 2rem; } .payment-methods { flex-direction: column; } } /* Animations */ @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .page { animation: fadeIn 0.5s ease-in-out; } // script.js // Variables globales let selectedOffer = null; let selectedPrice = null; let selectedDuration = null; // Initialisation document.addEventListener('DOMContentLoaded', function() { // Charger les offres depuis le localStorage si elles existent loadOffers(); // Ajouter les écouteurs d'événements setupEventListeners(); }); // Fonction pour charger les offres depuis le localStorage function loadOffers() { const savedOffers = localStorage.getItem('offers'); if (savedOffers) { selectedOffer = JSON.parse(savedOffers).name; selectedPrice = JSON.parse(savedOffers).price; selectedDuration = JSON.parse(savedOffers).duration; // Mettre à jour l'affichage updateOfferDisplay(); } } // Fonction pour mettre à jour l'affichage de l'offre function updateOfferDisplay() { document.getElementById('selectedOffer').textContent = selectedOffer; document.getElementById('selectedPrice').textContent = selectedPrice; document.getElementById('summaryOffer').textContent = selectedOffer; document.getElementById('summaryPrice').textContent = selectedPrice; document.getElementById('summaryTotal').textContent = selectedPrice; document.getElementById('summaryDuration').textContent = selectedDuration; } // Fonction pour configurer les écouteurs d'événements function setupEventListeners() { // Écouteur pour les changements de sélection d'offre const offerButtons = document.querySelectorAll('.offer-option'); offerButtons.forEach(button => { button.addEventListener('click', selectOffer); }); // Écouteur pour les changements de méthode de paiement const paymentRadios = document.querySelectorAll('input[name="payment"]'); paymentRadios.forEach(radio => { radio.addEventListener('change', togglePaymentDetails); }); // Écouteur pour le formulaire const form = document.getElementById('commandForm'); form.addEventListener('submit', handleFormSubmit); // Écouteur pour le champ de carte de crédit const cardNumberInput = document.getElementById('numero'); cardNumberInput.addEventListener('input', formatCardNumber); // Écouteur pour le champ de date d'expiration const expirationInput = document.getElementById('expiration'); expirationInput.addEventListener('input', formatExpirationDate); } // Fonction pour sélectionner une offre function selectOffer(event) { const selectedOption = event.target.closest('.offer-option'); // Récupérer les données de l'offre const offerData = { name: selectedOption.getAttribute('data-name'), price: selectedOption.getAttribute('data-price'), duration: selectedOption.getAttribute('data-duration') }; // Stocker les données dans le localStorage localStorage.setItem('offers', JSON.stringify(offerData)); // Mettre à jour les variables globales selectedOffer = offerData.name; selectedPrice = offerData.price; selectedDuration = offerData.duration; // Mettre à jour l'affichage updateOfferDisplay(); } // Fonction pour basculer les détails de paiement function togglePaymentDetails(event) { const paymentType = event.target.value; const cardDetails = document.getElementById('card-details'); if (paymentType === 'card') { cardDetails.classList.remove('hidden'); } else { cardDetails.classList.add('hidden'); } } // Fonction pour gérer la soumission du formulaire async function handleFormSubmit(event) { event.preventDefault(); // Récupérer les données du formulaire const formData = new FormData(event.target); const data = Object.fromEntries(formData.entries()); // Valider les données if (!validateForm(data)) { return; } // Simuler l'envoi des données au backend try { const response = await sendFormToBackend(data); if (response.success) { // Afficher la confirmation showConfirmation(); // Rediriger après un certain temps setTimeout(() => { window.location.href = '/confirmation'; }, 3000); } } catch (error) { console.error('Erreur lors de l\'envoi du formulaire:', error); alert('Une erreur est survenue. Veuillez réessayer plus tard.'); } } // Fonction pour valider le formulaire function validateForm(data) { // Vérifier si une offre est sélectionnée if (!selectedOffer) { alert('Veuillez sélectionner une offre'); return false; } // Vérifier si tous les champs obligatoires sont remplis const requiredFields = ['name', 'email', 'password']; for (const field of requiredFields) { if (!data[field] || data[field].trim() === '') { alert(`Le champ ${field} est obligatoire`); return false; } } // Vérifier si l'email est valide const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(data.email)) { alert('Veuillez entrer un email valide'); return false; } // Vérifier si le mot de passe a une longueur minimale if (data.password.length < 6) { alert('Le mot de passe doit contenir au moins 6 caractères'); return false; } return true; } // Fonction pour envoyer les données au backend async function sendFormToBackend(data) { // Simulation d'appel API return new Promise((resolve) => { setTimeout(() => { resolve({ success: true, message: 'Formulaire soumis avec succès' }); }, 2000); }); } // Fonction pour afficher la confirmation function showConfirmation() { // Afficher un message de confirmation alert('Merci pour votre inscription !'); // Masquer le formulaire const form = document.getElementById('commandForm'); form.style.display = 'none'; // Afficher le message de confirmation const confirmation = document.getElementById('confirmation'); confirmation.style.display = 'block'; // Mettre à jour la variable d'état const state = document.getElementById('state'); state.textContent = 'success'; // Mettre à jour le message const message = document.getElementById('message'); message.textContent = 'Votre inscription a été prise en compte.'; } // Fonction pour formater le numéro de carte de crédit function formatCardNumber(input) { let value = input.value.replace(/\s/g, '').replace(/\D/g, ''); let formattedValue = ''; for (let i = 0; i < value.length; i++) { if (i > 0 && i % 4 === 0) { formattedValue += ' '; } formattedValue += value[i]; } input.value = formattedValue; } // Fonction pour formater la date d'expiration function formatExpirationDate(input) { let value = input.value.replace(/\D/g, ''); if (value.length >= 2) { value = value.slice(0, 2) + '/' + value.slice(2); } input.value = value; }