Afficher la table des matières Masquer la table des matières
- Salade courgette ultra fraîche : recette vite prête et sans cuisson
- Technique express pour émincer et assaisonner sans cuisson
- Quizz : Salade Courgette Ultra Fraîche
- Résultat
- ${sanitize(q.text)} Choisissez la meilleure réponse puis appuyez sur "${I18N.nextLabel}" `; section.appendChild(qh); // Options container (role radiogroup pour accessibilité) const optionsDiv = document.createElement("div"); optionsDiv.setAttribute("role", "radiogroup"); optionsDiv.className = "grid gap-2 mt-3"; q.options.forEach((opt, idx) => { const btn = document.createElement("button"); btn.type = "button"; btn.className = "option-btn w-full text-left p-3 border rounded bg-white hover:bg-gray-50 focus-ring"; btn.dataset.optId = opt.id; btn.dataset.qId = q.id; btn.setAttribute("role", "radio"); btn.setAttribute("aria-checked", "false"); btn.tabIndex = 0; btn.innerHTML = `${sanitize(opt.text)}Option ${idx + 1}`; // Event click sur option btn.addEventListener("click", () => selectOption(q.id, opt.id, btn)); // Gestion clavier pour accessibilité btn.addEventListener("keydown", (e) => optionKeyHandler(e, q, idx)); optionsDiv.appendChild(btn); }); section.appendChild(optionsDiv); // Zone d'explication (cachée jusqu'à réponse ou si mode apprentissage) const expl = document.createElement("div"); expl.id = `explain-${q.id}`; expl.className = "mt-3 text-sm text-gray-700 hidden"; section.appendChild(expl); questionArea.appendChild(section); // Si réponse déjà donnée pour cette question, la ré-afficher const prevAnswer = state.answers[q.id]; if (prevAnswer) { // Simuler la sélection visuelle const btns = optionsDiv.querySelectorAll("button"); btns.forEach((b) => { if (b.dataset.optId === prevAnswer) { markSelected(b, q); } }); // Si explication visible (mode apprentissage ou réponse), la montrer showExplanationIfNeeded(q); } updateNavigationButtons(); // Focus sur la première option const firstOption = optionsDiv.querySelector("button"); if (firstOption) firstOption.focus(); } /* ------------------------- Sélection d'une option - qId : id de la question - optId : id de l'option choisie - btn : élément bouton cliqué (pour style) ------------------------- */ function selectOption(qId, optId, btn) { // Sauvegarde state.answers[qId] = optId; // Visuel : retirer aria-checked des autres et marquer celui-ci const btns = questionArea.querySelectorAll("button[role='radio']"); btns.forEach((b) => { b.setAttribute("aria-checked", "false"); b.classList.remove("correct", "wrong"); }); markSelected(btn, QUESTIONS[state.currentIndex]); // Calcul score partiel (uniquement si c'est la première fois qu'on répond) // Pour permettre re-changer la réponse avant d'aller à la question suivante, on recalcule le score global quand on affiche le résultat final. nextBtn.disabled = false; hintArea.textContent = "Réponse enregistrée. Vous pouvez passer à la suite."; // Si mode apprentissage : afficher explication immédiatement et indiquer correct/wrong if (modeLearningCheckbox.checked) { showExplanationIfNeeded(QUESTIONS[state.currentIndex]); } } /* Ajoute styles selon si correct ou non */ function markSelected(btn, question) { const optId = btn.dataset.optId; btn.setAttribute("aria-checked", "true"); // Ajoute classes correct/wrong si on affiche la solution if (modeLearningCheckbox.checked || state.answers[question.id]) { if (optId === question.answerId) { btn.classList.add("correct"); } else { btn.classList.add("wrong"); } } } /* Affiche l'explication si le mode apprentissage est actif ou si on a validé */ function showExplanationIfNeeded(question) { const expl = document.getElementById(`explain-${question.id}`); if (!expl) return; expl.classList.remove("hidden"); // Indiquer si la réponse est correcte const selected = state.answers[question.id]; const correct = selected === question.answerId; expl.innerHTML = ` ${correct ? "Bonne réponse" : "Réponse à améliorer"} ${sanitize(question.explanation)} `; // Marquer visuellement la bonne option const btns = questionArea.querySelectorAll("button[role='radio']"); btns.forEach((b) => { if (b.dataset.optId === question.answerId) b.classList.add("correct"); if (b.dataset.optId === selected && selected !== question.answerId) b.classList.add("wrong"); }); } /* ------------------------- Navigation : Précédent / Suivant ------------------------- */ prevBtn.addEventListener("click", () => { if (state.currentIndex === 0) return; state.currentIndex--; renderQuestion(); updateProgress(); }); nextBtn.addEventListener("click", () => { const q = QUESTIONS[state.currentIndex]; // Si aucune réponse choisie, empêcher d'avancer if (!state.answers[q.id]) { hintArea.textContent = "Veuillez choisir une option avant de passer."; return; } // Si en mode apprentissage, l'explication a déjà été montrée ; sinon, montrez-la brièvement if (!modeLearningCheckbox.checked) { showExplanationIfNeeded(q); } // Si dernière question => afficher résultat final if (state.currentIndex === QUESTIONS.length - 1) { computeFinalResult(); return; } state.currentIndex++; renderQuestion(); updateProgress(); }); /* ------------------------- Calcul et affichage du résultat final ------------------------- */ function computeFinalResult() { // Calcul du score let correctCount = 0; QUESTIONS.forEach((q) => { if (state.answers[q.id] === q.answerId) correctCount++; }); state.score = correctCount; // Afficher section résultat resultSection.classList.remove("hidden"); const total = QUESTIONS.length; finalText.textContent = (correctCount / total >= 0.75) ? I18N.resultGood(correctCount, total) : I18N.resultMixed(correctCount, total); // Détail question par question breakdownList.innerHTML = ""; QUESTIONS.forEach((q, idx) => { const li = document.createElement("li"); const chosen = state.answers[q.id] || "Aucune réponse"; const isCorrect = state.answers[q.id] === q.answerId; li.className = "mt-2 text-sm"; li.innerHTML = ` Q${idx + 1} — ${sanitize(q.text)} Votre réponse : ${sanitize(chosen)} — Réponse correcte : ${sanitize(q.answerId)} ${sanitize(q.explanation)} `; breakdownList.appendChild(li); }); // Masquer la zone questionaire pour éviter confusion window.scrollTo({ top: container.offsetTop, behavior: "smooth" }); } /* ------------------------- Mise à jour de la progression et score affiché ------------------------- */ function updateProgress() { const i = state.currentIndex + 1; const total = QUESTIONS.length; progressText.textContent = I18N.questionProgress(i, total); // Barre de progression (basée sur l'indice) const percent = Math.round(((i - 1) / total) * 100); progressBar.style.width = percent + "%"; scoreDisplay.textContent = I18N.scoreLabel(Object.values(state.answers).filter((ans, idx) => QUESTIONS[idx] && ans === QUESTIONS[idx].answerId).length); } /* ------------------------- Utilitaires clavier pour options - Flèches : naviguer entre options - Entrée / Espace : sélectionner ------------------------- */ function optionKeyHandler(e, question, idx) { const options = Array.from(questionArea.querySelectorAll("button[role='radio']")); const current = e.currentTarget; let newIndex = null; if (e.key === "ArrowDown" || e.key === "ArrowRight") { newIndex = Math.min(idx + 1, options.length - 1); options[newIndex].focus(); e.preventDefault(); } else if (e.key === "ArrowUp" || e.key === "ArrowLeft") { newIndex = Math.max(0, idx - 1); options[newIndex].focus(); e.preventDefault(); } else if (e.key === "Enter" || e.key === " ") { // Valider/cliquer current.click(); e.preventDefault(); } } /* ------------------------- Mise à jour de l'état des boutons navigation ------------------------- */ function updateNavigationButtons() { prevBtn.disabled = state.currentIndex === 0; // Next est activé seulement si une réponse a été sélectionnée pour la question courante const q = QUESTIONS[state.currentIndex]; nextBtn.disabled = !state.answers[q.id]; } /* ------------------------- Restart / Retry handlers ------------------------- */ restartBtn.addEventListener("click", () => { init(); }); retryBtn.addEventListener("click", () => { init(); }); /* ------------------------- Copier résumé ------------------------- */ copyBtn.addEventListener("click", async () => { const total = QUESTIONS.length; const text = `Quizz Salade Courgette — Score ${state.score || 0} / ${total}nnDétail :n` + QUESTIONS.map((q) => `Q: ${q.text}nVotre réponse: ${state.answers[q.id] || "Aucune"}nRéponse: ${q.answerId}n`).join("n"); try { await navigator.clipboard.writeText(text); hintArea.textContent = I18N.copySuccess; } catch (e) { hintArea.textContent = I18N.copyFail; } }); /* ------------------------- Petites améliorations d'UX - Met à jour le bouton next si user sélectionne une réponse - Observateur pour rendre la navigation à jour ------------------------- */ questionArea.addEventListener("click", (e) => { if (e.target && e.target.closest("button[role='radio']")) { updateProgress(); updateNavigationButtons(); } }); /* ------------------------- Sanitize minimal (protéger contre injection si on remplace le texte dynamiquement) ------------------------- */ function sanitize(raw) { const s = String(raw); return s.replaceAll("&", "&").replaceAll("", ">"); } /* ------------------------- Remarques finales (commentaires pour l'éditeur) : - Pas d'APIs externes utilisées pour ce quizz (100% local). - Si vous souhaitez intégrer des données externes (ex. liste d'herbes depuis API), utilisez uniquement des APIs publiques sans clé. Exemple d'API gratuite (externe, non utilisée ici) : URL : https://api.sampleapis.com/coffee/hot Exemple de réponse JSON : [ { "title":"Black", "description":"Black coffee description", "ingredients":["Coffee"], "id":1 } ] - Le HTML/JS est autonome et accessible : testez à la fois au clavier et à la souris. */ La soirée pizza maison démarre avec cette pâte ultra simple à réaliser La soirée pizza maison démarre avec cette pâte ultra simple à réaliser : en moins d’1h20, préparez une base moelleuse et dorée qui permet de garnir deux pizzas, congeler une portion et improviser un repas convivial en un clin d’œil.… Le secret du mijoteur pour une cuisson de steak parfaitement tendre Le secret pour obtenir un steak parfaitement tendre au mijoteur : maîtriser le slow cooking avec des étapes simples et un temps de repos adapté. Claire, prof de yoga et adepte d’une cuisine saine, a transformé des steaks abordables en… Une Soupe Taco Réconfortante pour les Soirées Pressées Une soupe taco réconfortante, prête en moins de 45 minutes, pour transformer une soirée pressée en un repas chaud savoureux et rassasiant. 🔥 Ce bol unique combine viande assaisonnée, haricots, maïs et tomates épicées pour offrir une expérience inspirée du… Variantes gourmandes pour écouler la récolte de légumes Conclusion immédiate : quelques ingrédients supplémentaires changent la salade en plat principal ou en accompagnement festif, permettant d’écouler une grosse récolte de légumes. Par exemple, remplacer le parmesan par du chèvre frais, ajouter des tomates cerises et des olives noires crée une version méditerranéenne très appréciée. Exemples concrets : pour une option sucrée-salée, mélanger courgettes crues avec pêches grillées à la poêle (ou rôties au barbecue) et basilic ; pour une option plus rustique, consulter recette courgettes gourmandes pour des idées originales et faciles à adapter. Ces variantes montrent qu’une même base salade se prête à une multitude d’approches, toutes rafraîchissantes et sans four 🥒🍑. Astuce stockage et service pour une cuisine estivale pratique
- Petites astuces finales pour écouler la récolte sans allumer le four
Cette salade courgette ultra fraîche transforme instantanément une trop-pleine de jardin en assiette sans allumer le four, idéale pour la cuisine estivale et les jours où il fait trop chaud pour cuisiner. Ce plat est vite prêt et rafraîchissant, parfait pour écouler la récolte de légumes en quelques minutes 🥒✨.
Résultat immédiat : une recette sans cuisson qui met en valeur la fraîcheur des courgettes et la texture croquante des herbes. Suivre les étapes ci-dessous permet de servir une salade équilibrée, savoureuse et prête en moins de 15 minutes.
Salade courgette ultra fraîche : recette vite prête et sans cuisson
Préparez une salade courgette qui ne demande aucune cuisson : 4 courgettes moyennes tranchées en rubans, le jus d’un citron, 3 cuillères à soupe d’huile d’olive, 30 g de parmesan râpé ou copeaux et une poignée de menthe fraîche pour une note herbacée. Mélanger immédiatement pour que les rubans s’imprègnent du citron et de l’huile garantit un résultat rafraîchissant et uniforme.
Technique actionnable : utiliser un économe pour faire des rubans réguliers et assaisonner avec 1 cuillère à café de sel puis laisser reposer 5 minutes pour attendrir légèrement la courgette. Cette méthode est la base d’une recette adaptable, et pour d’autres idées rapides voir recette courgette rapide qui inspire des variantes gourmandes 🥗.
Technique express pour émincer et assaisonner sans cuisson
Action : émincer en rubans avec un économe pour obtenir une texture tendre sans cuire, puis masser brièvement avec sel et citron pour extraire l’eau et intensifier la fraîcheur. Cette technique rend la salade vite prêt tout en évitant l’amertume naturelle de certaines courgettes.
Anecdote fil conducteur : Lola, jardinière urbaine, récoltait souvent des courgettes trop grandes et a transformé ce surplus en recettes simples chaque été, prouvant que écouler la récolte peut être créatif et rapide. Astuce pratique : pour supprimer l’amertume, frotter légèrement la chair avec du sel puis rincer rapidement, méthode détaillée ici salade courgettes supprimer amertume 🍋🌿.
À lire Salade Fraîche et Légère de Pâtes Orzo
Variante express : ajouter des pignons toastés et une cuillère de miel pour un contraste sucré-salé qui reste sans cuisson et parfait pour un apéritif en terrasse. Cette adaptation simple illustre comment transformer la base en plat plus riche sans allumer le four.
Quizz : Salade Courgette Ultra Fraîche
Testez vos connaissances pour écouler votre récolte sans allumer le four. Mode accessible et réactif.
La soirée pizza maison démarre avec cette pâte ultra simple à réaliser
La soirée pizza maison démarre avec cette pâte ultra simple à réaliser : en moins d’1h20, préparez une base moelleuse et dorée qui permet de garnir deux pizzas, congeler une portion et improviser un repas convivial en un clin d’œil.…
Le secret du mijoteur pour une cuisson de steak parfaitement tendre
Le secret pour obtenir un steak parfaitement tendre au mijoteur : maîtriser le slow cooking avec des étapes simples et un temps de repos adapté. Claire, prof de yoga et adepte d’une cuisine saine, a transformé des steaks abordables en…
À lire La salade estivale idéale : légumes croquants, sauce acidulée et pâtes fondantes
Une Soupe Taco Réconfortante pour les Soirées Pressées
Une soupe taco réconfortante, prête en moins de 45 minutes, pour transformer une soirée pressée en un repas chaud savoureux et rassasiant. 🔥 Ce bol unique combine viande assaisonnée, haricots, maïs et tomates épicées pour offrir une expérience inspirée du…
Variantes gourmandes pour écouler la récolte de légumes
Conclusion immédiate : quelques ingrédients supplémentaires changent la salade en plat principal ou en accompagnement festif, permettant d’écouler une grosse récolte de légumes. Par exemple, remplacer le parmesan par du chèvre frais, ajouter des tomates cerises et des olives noires crée une version méditerranéenne très appréciée.
Exemples concrets : pour une option sucrée-salée, mélanger courgettes crues avec pêches grillées à la poêle (ou rôties au barbecue) et basilic ; pour une option plus rustique, consulter recette courgettes gourmandes pour des idées originales et faciles à adapter. Ces variantes montrent qu’une même base salade se prête à une multitude d’approches, toutes rafraîchissantes et sans four 🥒🍑.
Astuce stockage et service pour une cuisine estivale pratique
Rappel pratique : préparer la salade une à deux heures à l’avance renforce les saveurs tout en conservant la texture si elle est stockée au frais dans un récipient hermétique. Garder une partie de l’assaisonnement à part évite que les rubans deviennent trop mous, préservant ainsi la fraîcheur au moment de servir.
Conseil de présentation : disposer les rubans en nid sur une grande assiette, parsemer d’herbes et de zestes de citron pour un visuel attractif qui met en valeur la cuisine estivale sans effort. Pour d’autres inspirations de salades crues et dressage, la page salade courgettes crues propose variantes visuelles et techniques utiles ✨.
Plan de Repas Hebdomadaire du 7 Septembre 2026
À lire Salade de macaronis : une recette fraîche et savoureuse
Plan de repas hebdomadaire prêt à suivre pour la semaine du 7 septembre 2026 : gagnez du temps, maîtrisez votre budget et adoptez une alimentation équilibrée sans stress. Commencez la semaine avec un menu clair, des étapes de préparation des…
Un Dîner Convivial au Biscuits Dorés, Préparé en Une Seule Poêle
Obtenez un dîner convivial en moins de 30 minutes : un plat unique qui combine une garniture crémeuse et des biscuits dorés cuits dans une seule poêle, pour une préparation rapide et un nettoyage minimal. Ce format transforme la cuisine…
Compote de pommes ultra simple avec seulement quatre ingrédients, dont… de l’eau !
Compote de pommes ultra simple, prête en moins d’une heure : voici une recette simple à quatre ingrédients (oui, de l’eau est l’un d’eux) pour une gourmandise saine à partager. 🍏 Cette préparation allie rapidité et saveur pour un dessert…
Petites astuces finales pour écouler la récolte sans allumer le four
Point clé : privilégier ingrédients frais et un assaisonnement simple permet de multiplier les salades et d’éviter le gaspillage, transformant chaque courgette en opportunité culinaire. Intégrer une ou deux variantes par semaine facilite l’écoulement régulier de la récolte et maintient l’enthousiasme pour la table d’été.
Dernier insight : associer cette salade à une boisson fraîche et un pain croustillant fait d’un repas sans cuisson une expérience complète et satisfaisante, fidèle à l’esprit de la cuisine estivale et du partage. Tester ces recettes aujourd’hui permet de vider le panier de légumes tout en apportant une touche originale à chaque repas 🥒🍋.
À lire La salade d’été fraîche et savoureuse : la recette incontournable
Coupes fajitas au bœuf haché : un délice coloré et savoureux
Coupes fajitas au bœuf haché : le plat convivial et ultra rapide à adopter 🍽️ Point principal : Les coupes fajitas préparées avec du bœuf haché offrent un délice coloré et savoureux qui se prépare en moins de 35 minutes,…
Améliorez vos soirées pâtes grâce à cette sauce compatible congélation
Transformez vos soirées pâtes en repas rapides et réconfortants grâce à une sauce maison compatible congélation : une recette facile, une préparation rapide (10 min de préparation, 30 min de cuisson) et des portions prêtes à sortir du congélateur pour…