Afficher la table des matières Masquer la table des matières
- Composition idéale de l’assiette de crudités : légumes indispensables et touches originales
- Adapter la composition selon la saison pour une fraîcheur maximum
- Sauces artisanales qui subliment la recette et font saliver vos invités
- Choisir la taille du plateau et la quantité selon l’événement
- ${escapeHtml(texts.title)} ${escapeHtml(texts.intro)} ${escapeHtml(texts.startBtn)} Astuce : utilisez Tab et Entrée pour naviguer et sélectionner. `; document.getElementById("start-quiz").addEventListener("click", () => { renderQuestion(0); }); } /* ---------- Rendu d'une question ---------- */ function renderQuestion(index) { currentIndex = index; const q = quizData[index]; // Créer le markup de la question et options let optionsHtml = q.options.map((opt, i) => { const optId = `${q.id}-opt-${i}`; const isMulti = q.type === "multi"; const role = isMulti ? "checkbox" : "radio"; const checked = getSavedSelection(q.id, opt.key) ? "aria-checked='true'" : "aria-checked='false'"; return ` ${escapeHtml(opt.key)} ${escapeHtml(opt.label)} ${escapeHtml(opt.explanation)} `; }).join(""); // Controls: Prev / Next or Submit const isFirst = index === 0; const isLast = index === quizData.length - 1; container.innerHTML = ` Question ${index + 1} / ${quizData.length} Score partiel : -- ${escapeHtml(q.question)} ${optionsHtml} ${escapeHtml(texts.prevBtn)} ${isLast ? `${escapeHtml(texts.submitBtn)}` : `${escapeHtml(texts.nextBtn)}`} ${q.type === "multi" ? "Vous pouvez sélectionner plusieurs options." : "Sélectionnez une option."} `; // Mettre à jour score partiel updatePartialScoreDisplay(); // Attacher événements aux options const optionButtons = container.querySelectorAll(".option-btn"); optionButtons.forEach(btn => { btn.addEventListener("click", () => { handleOptionSelect(q, btn); }); // Permettre sélection via Entrée / Espace (accessible) btn.addEventListener("keydown", (e) => { if (e.key === " " || e.key === "Enter") { e.preventDefault(); btn.click(); } }); // Rendre focus visible btn.setAttribute("tabindex", "0"); }); // Navigation const prevBtn = document.getElementById("prev-btn"); if (prevBtn && !isFirst) prevBtn.addEventListener("click", () => renderQuestion(index - 1)); const nextBtn = document.getElementById("next-btn"); if (nextBtn) nextBtn.addEventListener("click", () => { if (q.type === "multi") { // vérifier sélection min const sel = answers[q.id] || []; if ((q.minSelect || 1) > sel.length) { showTemporaryHint(`Sélectionnez au moins ${q.minSelect || 1} option(s).`); return; } } else { if (!answers[q.id]) { showTemporaryHint("Veuillez sélectionner une option avant de continuer."); return; } } renderQuestion(index + 1); }); const submitBtn = document.getElementById("submit-btn"); if (submitBtn) submitBtn.addEventListener("click", handleSubmit); } /* ---------- Gestion de la sélection d'une option ---------- */ function handleOptionSelect(question, btnEl) { const optKey = btnEl.getAttribute("data-opt-key"); if (question.type === "single") { // Décocher tous, cocher celui-ci question.options.forEach((opt, i) => { const id = `${question.id}-opt-${i}`; const el = document.getElementById(id); if (el) { el.setAttribute("aria-checked", opt.key === optKey ? "true" : "false"); } }); answers[question.id] = optKey; } else if (question.type === "multi") { // bascule const current = answers[question.id] || []; const idx = current.indexOf(optKey); if (idx === -1) current.push(optKey); else current.splice(idx, 1); answers[question.id] = current; // mettre à jour aria-checked question.options.forEach((opt, i) => { const id = `${question.id}-opt-${i}`; const el = document.getElementById(id); if (el) { el.setAttribute("aria-checked", (answers[question.id] || []).includes(opt.key) ? "true" : "false"); } }); } // Mettre à jour score partiel visible updatePartialScoreDisplay(); } /* ---------- Calcul du score total ---------- */ function calculateScore() { let total = 0; quizData.forEach(q => { const sel = answers[q.id]; if (!sel) return; if (q.type === "single") { const opt = q.options.find(o => o.key === sel); if (opt) total += opt.score; } else if (q.type === "multi") { (sel || []).forEach(k => { const opt = q.options.find(o => o.key === k); if (opt) total += opt.score; }); } }); // Normaliser sur 100 (approximatif) const maxPossible = quizData.reduce((acc, q) => { if (q.type === "single") acc += Math.max(...q.options.map(o => o.score)); else if (q.type === "multi") acc += q.options.reduce((a,b) => a + b.score, 0); return acc; }, 0); const percent = maxPossible ? Math.round((total / maxPossible) * 100) : 0; return { total, percent }; } /* ---------- Afficher score partiel (pour la question courante) ---------- */ function updatePartialScoreDisplay() { const el = document.getElementById("partial-score"); if (!el) return; let part = 0; // Calculer score pour les questions déjà répondues quizData.forEach(q => { const sel = answers[q.id]; if (!sel) return; if (q.type === "single") { const opt = q.options.find(o => o.key === sel); if (opt) part += opt.score; } else { (sel || []).forEach(k => { const opt = q.options.find(o => o.key === k); if (opt) part += opt.score; }); } }); el.textContent = `${part} pts`; } /* ---------- Soumission du quiz et affichage des résultats ---------- */ function handleSubmit() { // Vérifier que toutes les questions sont répondues (au moins 1 pour multi) for (const q of quizData) { const sel = answers[q.id]; if (!sel || (Array.isArray(sel) && sel.length === 0)) { showTemporaryHint("Veuillez répondre à toutes les questions avant de soumettre."); return; } } const { total, percent } = calculateScore(); // Générer message de feedback const fb = texts.feedback.slice().reverse().find(f => percent >= f.min) || texts.feedback[0]; // Générer composition recommandée basée sur réponses const composition = generateCompositionFromAnswers(); // Suggestions / astuces (quelques règles simples) const tips = [ "Variez les textures : combinez croquant, fondant et juteux.", "Jouez sur les couleurs : au moins 3 tons différents rendent l'assiette plus appétissante.", "Placez les dips au centre ou en plusieurs petites coupelles pour l'équilibre visuel.", "Ajoutez des éléments à grignoter (crackers, graines) pour varier les prises en main." ]; // Afficher résultat container.innerHTML = ` ${escapeHtml(texts.scorePrefix)} ${percent}% ${escapeHtml(fb.text)} ${escapeHtml(texts.recommendationTitle)} ${composition.map(row => ` ${escapeHtml(row.title)} ${escapeHtml(row.items.join(", "))} `).join("")} ${escapeHtml(texts.tipsTitle)} ${tips.map(t => `${escapeHtml(t)}`).join("")} ${escapeHtml(texts.tryAgainBtn)} Copier la composition Imprimer (format simple) `; document.getElementById("retry-btn").addEventListener("click", renderIntro); document.getElementById("copy-btn").addEventListener("click", () => { const textToCopy = buildPlainTextResult(percent, fb.text, composition, tips); navigator.clipboard?.writeText(textToCopy).then(() => { const f = document.getElementById("copy-feedback"); f.textContent = texts.savingText; setTimeout(() => f.textContent = "", 2500); }).catch(() => { const f = document.getElementById("copy-feedback"); f.textContent = "Impossible de copier automatiquement. Sélectionnez et copiez manuellement."; }); }); document.getElementById("print-btn").addEventListener("click", () => { const w = window.open("", "_blank"); w.document.write(`${escapeHtml(buildPlainTextResult(percent, fb.text, composition, tips))}`); w.document.close(); w.print(); }); } /* ---------- Génére une composition en fonction des réponses ---------- */ function generateCompositionFromAnswers() { // Base d'ingrédients const ingredients = { croquant: ["Bâtonnets de carotte", "Batônnets de concombre", "Céleri branche"], fondant: ["Avocat tranché", "Tomates confites", "Poivron rôti"], juteux: ["Tomates cerises", "Radis entiers"], verts: ["Concombre", "Courgette crue en rubans", "Feuilles de roquette"], vibrants: ["Carottes multicolores", "Poivrons jaune et rouge", "Tomates cerises"], crackers: ["Crackers aux graines", "Pain pita grillé"], noix: ["Amandes grillées", "Graines de courge"] }; // Déduire préférences const chosenTextures = answers["q2"] || []; const dipKey = answers["q3"]; const paletteKey = answers["q4"]; const sideChoice = answers["q5"]; const effort = answers["q6"]; const plate = []; // 1 - Dip central const dipMap = { "A": "Houmous maison", "B": "Yaourt aux herbes", "C": "Tapenade/pesto" }; plate.push({ title: "Dip(s)", items: [dipMap[dipKey] || "Houmous"] }); // 2 - Légumes selon textures const vegs = new Set(); if (chosenTextures.includes("A")) { ingredients.croquant.forEach(i=>vegs.add(i)); } if (chosenTextures.includes("B")) { ingredients.fondant.forEach(i=>vegs.add(i)); } if (chosenTextures.includes("C")) { ingredients.juteux.forEach(i=>vegs.add(i)); } // si aucune texture explicite (par sécurité), proposer mix if (vegs.size === 0) { ["Bâtonnets de carotte", "Tomates cerises", "Avocat tranché"].forEach(i=>vegs.add(i)); } plate.push({ title: "Légumes principaux", items: Array.from(vegs).slice(0,8) }); // 3 - Palette de couleurs if (paletteKey === "A") plate.push({ title: "Palette colorée", items: ingredients.vibrants.slice(0,3) }); else if (paletteKey === "B") plate.push({ title: "Palette verte", items: ingredients.greens ? ingredients.greens.slice(0,3) : ingredients.greens }); else plate.push({ title: "Contrastes", items: ["Tomates cerises", "Concombre", "Radis"] }); // 4 - Éléments à grignoter if (sideChoice === "A") plate.push({ title: "À grignoter", items: ingredients.crackers.slice(0,2) }); else if (sideChoice === "C") plate.push({ title: "Garnitures croquantes", items: ingredients.noix.slice(0,2) }); // 5 - Conseil selon niveau d'effort const effortAdvice = { "A": "Disposition rapide : couper uniformément en bâtonnets et placer un dip central.", "B": "Soignez les coupes en rubans et groupes par couleur.", "C": "Prévoyez petites coupelles, étages et herbes fraîches pour une présentation soignée." }; plate.push({ title: "Conseil de présentation", items: [effortAdvice[effort] || effortAdvice["B"]] }); return plate; } /* ---------- Helpers ---------- */ function getSavedSelection(qId, optKey) { const sel = answers[qId]; if (!sel) return false; if (Array.isArray(sel)) return sel.includes(optKey); return sel === optKey; } function showTemporaryHint(msg) { const el = container.querySelector("#hint-zone"); if (!el) return; el.textContent = msg; setTimeout(() => { if (el) { el.textContent = ""; } }, 2500); } /* Construire un texte simple du résultat pour le copier/imprimer */ function buildPlainTextResult(percent, feedback, composition, tips) { let out = `${texts.title}nScore: ${percent}%nn${feedback}nn${texts.recommendationTitle}:n`; composition.forEach(c => { out += `- ${c.title}: ${c.items.join(", ")}n`; }); out += `n${texts.tipsTitle}:n`; tips.forEach(t => out += `- ${t}n`); return out; } /* Petit utilitaire pour échapper HTML */ function escapeHtml(str) { if (typeof str !== "string") return str; return str.replace(/[&"']/g, (m) => ({ '&': '&', '': '>', '"': '"', "'": ''' }[m])); } /* ---------- Démarrage ---------- */ renderIntro(); /* ---------- Note sur l'usage d'APIs externes ---------- Ce quiz n'utilise aucune API externe (données embarquées) pour rester 100% gratuit et offline. Si vous souhaitez enrichir les recettes via une API publique gratuite (ex. endpoint de recettes), n'oubliez pas d'utiliser un service sans clé payante et d'inclure l'exemple de réponse JSON dans un commentaire, conformément aux contraintes. */ Événements adaptés : mariages, réceptions et apéros d’entreprise Le plateau de crudités séduit pour les mariages et fêtes car il apporte légèreté et couleur à l’apéritif; il s’accorde particulièrement bien avec des vins rosés ou des eaux aromatisées. Pour un repas d’entreprise privilégiez des portions modulables et des sauces clairement identifiées pour tenir compte des régimes alimentaires. Insight : prévoir une option végétalienne et une option relevée satisfait la majorité des invités sans complexifier la logistique. Cette Salade Melon Sucrée-Salée Va Révolutionner Vos Repas D’Été En 10 Minutes Cette salade melon sucrée-salée révolutionne vos repas d’été : rapide, facile et prête en 10 minutes, elle combine fraîcheur et contraste de saveurs pour un plat léger et rafraîchissant 🍈⏱️. Les instructions suivantes expliquent exactement quoi acheter, comment découper et… 7 Idées De Repas Ete Soir Ultra Rafraîchissantes Prêtes En 20 Minutes Chrono Besoin d’un dîner léger qui rafraîchit et se prépare en un éclair ? Voici 7 idées de repas d’été prêtes en moins de 20 minutes, pensées pour profiter du soir sans transpirer en cuisine 🌿. Éloïse reçoit des amis après… Techniques de présentation et conservation pour une entrée qui attire le regard
- Techniques avancées pour impressionner : pyramides végétales et contenants naturels
- Variantes saisonnières, accompagnements gourmands et conseils anti-gaspillage
Composez l’assiette de crudités parfaite dès maintenant : sélectionnez une base de neuf légumes variés, ajoutez 2 à 3 sauces artisanales, choisissez la taille du plateau selon le nombre d’invités, puis soignez la présentation en cercles concentriques ou en relief pour faire réellement saliver vos convives. Cette méthode claire et répétable garantit une fraîcheur optimale et des saveurs harmonieuses à chaque service.
Pourquoi ça marche : une composition équilibrée multiplie les textures et favorise l’absorption des vitamines grâce aux sauces à l’huile d’olive, tandis que la présentation stimule l’appétit dès la vue de l’assiette. Appliquer ces étapes simples transforme une entrée classique en moment convivial mémorable pour vos invités.
Composition idéale de l’assiette de crudités : légumes indispensables et touches originales
Priorisez une base de légumes croquants et colorés : chou-fleur, endive, tomate cerise, concombre, champignon de Paris, radis, fenouil, carotte et poivron, en variant les couleurs pour l’impact visuel. Ajoutez une ou deux touches inattendues comme asperges ou mini épis de maïs pour surprendre les papilles et créer du contraste.
Exemple concret : Claire, organisatrice à Marseille, compose toujours son assiette avec au moins trois teintes contrastées et une texture fondante (avocat ou aubergine) pour équilibrer le croquant. Cette règle simple accroît immédiatement l’attrait visuel et la sensation de fraîcheur.
Adapter la composition selon la saison pour une fraîcheur maximum
Au printemps privilégiez asperges, petits pois et jeunes pousses; en été misez sur tomates anciennes, courgettes et fruits comme le melon pour une note sucrée. En automne et hiver, incorporez fenouil, betterave crue et agrumes pour renforcer les apports en vitamine C.
Astuce terrain : acheter au marché local la veille permet souvent de trouver des variétés anciennes qui font réellement saliver vos invités et allègent la facture.
À lire Le dessert individuel le plus simple pour vos fêtes
Le dessert individuel le plus simple pour vos fêtes
Le dessert individuel le plus simple pour vos fêtes : préparez des verrines cheesecake sans cuisson, prêtes en 30 minutes et faciles à servir, idéales pour offrir une portion unique élégante à chaque invité 🍰🎉. Recette express de verrines cheesecake…
7 Idées De Pique Nique Enfant Que Vos Petits Vont Adorer (Et Vous Aussi)
Transformez chaque sortie scolaire en un moment gourmand, pratique et créatif : ces 7 idées de pique-nique enfant offrent des recettes faciles à préparer, des astuces de conservation et des activités pour profiter du plein air en famille. Les conseils…
Sauces artisanales qui subliment la recette et font saliver vos invités
Choisissez 2 à 3 sauces contrastées : anchoïade pour une note iodée, tapenade noire ou verte pour l’onctuosité, et une option végétale comme une sauce pois chiche ou crème d’avocat. Préparez 100 ml pour un petit plateau et 200 ml pour les formats moyens à grands afin d’ajuster la générosité selon le nombre d’invités.
Suggestion pratique : préparer les sauces la veille renforce les arômes; conservez-les au frais dans des verrines hermétiques et sortez-les 15 minutes avant le service pour révéler les saveurs.
Pour approfondir les combinaisons classiques et obtenir des recettes faciles à reproduire, consultez des guides pratiques comme une recette complète pour plateaux et des astuces pour composer une assiette réussie sur des conseils nutritionnels pratiques. Ces ressources détaillent volumes et accords.
À lire 7 Idées De Pique Nique Enfant Que Vos Petits Vont Adorer (Et Vous Aussi)
Cette Confiture De Fraises Maison Va Ruiner Votre Version Industrielle Pour Toujours
Cette confiture de fraises maison transforme le fruit en une gourmandise brillante et pleine de caractère — bien loin de la version industrielle. Suivez une méthode simple, maîtrisez le point de gélification et utilisez un petit secret naturel pour obtenir…
Ces Lasagnes Vegetariennes Ultra Gourmandes Vont Faire Oublier La Viande À Toute La Famille
Ces lasagnes végétariennes ultra gourmandes vont faire oublier la viande : un gratin doré, des couches fondantes de légumes et une béchamel soyeuse créent une recette familiale qui séduit instantanément. Testée pour des repas conviviaux, elle est simple à préparer…
Choisir la taille du plateau et la quantité selon l’événement
Décidez la taille en fonction du format de la réception : un petit plateau (sauce 100 ml) suffit pour 4-6 personnes, un format moyen (200 ml) convient à 8-12 personnes, tandis que les grands plateaux à plusieurs sauces couvrent 15-25 invités. Adapter le nombre de sauces permet d’offrir des choix sans gaspiller.
Cas pratique : pour un cocktail d’entreprise, Claire combine trois plateaux moyens répartis sur plusieurs points du buffet pour éviter les files et maintenir la fraîcheur; ceci favorise la circulation et les échanges entre collègues.
Événements adaptés : mariages, réceptions et apéros d’entreprise
Le plateau de crudités séduit pour les mariages et fêtes car il apporte légèreté et couleur à l’apéritif; il s’accorde particulièrement bien avec des vins rosés ou des eaux aromatisées. Pour un repas d’entreprise privilégiez des portions modulables et des sauces clairement identifiées pour tenir compte des régimes alimentaires.
À lire Cette Confiture De Fraises Maison Va Ruiner Votre Version Industrielle Pour Toujours
Insight : prévoir une option végétalienne et une option relevée satisfait la majorité des invités sans complexifier la logistique.
Cette Salade Melon Sucrée-Salée Va Révolutionner Vos Repas D’Été En 10 Minutes
Cette salade melon sucrée-salée révolutionne vos repas d’été : rapide, facile et prête en 10 minutes, elle combine fraîcheur et contraste de saveurs pour un plat léger et rafraîchissant 🍈⏱️. Les instructions suivantes expliquent exactement quoi acheter, comment découper et…
7 Idées De Repas Ete Soir Ultra Rafraîchissantes Prêtes En 20 Minutes Chrono
Besoin d’un dîner léger qui rafraîchit et se prépare en un éclair ? Voici 7 idées de repas d’été prêtes en moins de 20 minutes, pensées pour profiter du soir sans transpirer en cuisine 🌿. Éloïse reçoit des amis après…
Techniques de présentation et conservation pour une entrée qui attire le regard
La présentation prime : disposez les légumes en cercles concentriques ou en spirale, variez les hauteurs avec de petites pyramides et utilisez des poivrons évidés comme coupelles pour les sauces; ces détails transforment l’assiette en œuvre d’art. La mise en scène visuelle provoque immédiatement l’envie et fait saliver.
Conservation : taillez au dernier moment quand c’est possible, stockez entre 2°C et 4°C, et servez sur glace pilée lors d’événements prolongés pour préserver la fraîcheur. Emballer sous cloche ou film alimentaire protège aussi de la déshydratation pendant le transport.
À lire Ces Lasagnes Vegetariennes Ultra Gourmandes Vont Faire Oublier La Viande À Toute La Famille
Pour des idées de présentation qui font effet sur vos buffets, inspirez-vous d’astuces professionnelles et de mises en scène originales disponibles sur des conseils de présentation. Ces techniques transforment une simple assiette en point focal.
Techniques avancées pour impressionner : pyramides végétales et contenants naturels
La “pièce montée végétale” assemble légumes sur des piques dans une demi-pastèque ou un chou pour créer du volume et attirer l’œil; utiliser des feuilles d’endive comme petites barquettes ajoute raffinement et praticité. Ces méthodes réduisent aussi le recours au plastique et renforcent l’impact visuel.
Phrase-clé : jouer sur les textures et les contenants naturels élève instantanément l’assiette en expérience gustative.
Ailes de BBQ Glacées Prêtes en 30 Minutes Top Chrono !
Ailes de BBQ Glacées prêtes en 30 minutes : sucrées, collantes et croustillantes grâce à l’air fryer, pour un repas convivial improvisé. 🔥🍯⏱️ Chaque étape ci‑dessous indique exactement quoi faire, avec temps et températures précis pour réussir cette recette facile…
Le Gratin Dauphinois Authentique : L’Erreur Que Tout Le Monde Commet Encore
Point clé : l’erreur que beaucoup commettent encore avec le Gratin Dauphinois n’est pas seulement d’y mettre du fromage, c’est surtout de laver les pommes de terre après les avoir coupées — on enlève alors l’amidon qui crée la liaison…
À lire Cette Salade Melon Sucrée-Salée Va Révolutionner Vos Repas D’Été En 10 Minutes
Variantes saisonnières, accompagnements gourmands et conseils anti-gaspillage
Adaptez les accompagnements : au printemps ajoutez fleurs comestibles et fraises, en été intégrez melon et abricots secs, en automne pensez aux noix et figues, en hiver variez avec agrumes et légumes racines. Ces adaptations gardent la recette pertinente toute l’année et étonnent les invités par la richesse des saveurs.
Pour compléter l’offre, associez le plateau à une tarte de légumes sans pâte ou à une planche de fromages régionaux; ces accords équilibrent la fraîcheur et la gourmandise. Des ressources pratiques proposent des idées d’apéritifs simples et des recettes légères pour accompagner vos crudités, notamment des idées d’apéro et des alternatives peu caloriques sur un guide de recettes légères.
Conseil anti-gaspillage : congelez les épluchures pour un bouillon maison ou transformez les restes en dips; ces gestes économisent et ajoutent une touche maison aux services suivants. Insight final : l’attention portée aux détails réduit le gaspillage tout en augmentant la satisfaction des invités.