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. */ Cette Brochette Poulet Mariné Ultra Fondante Va Sauver Toutes Vos Soirées Barbecue Cette brochette poulet mariné ultra fondante transforme instantanément une soirée estivale banale en moment de convivialité : marinade simple, cuisson maîtrisée, résultat viande tendre et juteuse à chaque fois 🔥🍗. Pourquoi ça marche ? Parce qu’une marinade maison bien équilibrée… Cuisses de Poulet Grillées : Une Explosion de Saveurs Marinade parfaite pour des cuisses de poulet juteuses et pleines de saveurs Commencez par préparer une marinade équilibrée : huile d’olive, jus de citron frais, un vinaigre aromatique, moutarde de Dijon, une touche de miel, ail écrasé, sel et poivre.… 7 Confitures Originales Qui Vont Transformer Vos Petits Déjeuners En Moment Gourmand Transformez vos matins en moment gourmand : ces confitures originales donnent immédiatement du caractère aux tartines et aux yaourts, avec des recettes claires, des quantités précises et des astuces pour réussir la douceur matinale à coup sûr. Lancez-vous avec des… 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 7 Recettes Avec L’Abricot Pour Profiter À Fond De Ce Fruit D’Été Éphémère
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.
Cette Brochette Poulet Mariné Ultra Fondante Va Sauver Toutes Vos Soirées Barbecue
Cette brochette poulet mariné ultra fondante transforme instantanément une soirée estivale banale en moment de convivialité : marinade simple, cuisson maîtrisée, résultat viande tendre et juteuse à chaque fois 🔥🍗. Pourquoi ça marche ? Parce qu’une marinade maison bien équilibrée…
Cuisses de Poulet Grillées : Une Explosion de Saveurs
Marinade parfaite pour des cuisses de poulet juteuses et pleines de saveurs Commencez par préparer une marinade équilibrée : huile d’olive, jus de citron frais, un vinaigre aromatique, moutarde de Dijon, une touche de miel, ail écrasé, sel et poivre.…
À lire 7 Asperges Vertes Recette Originales Pour Sublimer Ce Légume De Saison Éphémère
7 Confitures Originales Qui Vont Transformer Vos Petits Déjeuners En Moment Gourmand
Transformez vos matins en moment gourmand : ces confitures originales donnent immédiatement du caractère aux tartines et aux yaourts, avec des recettes claires, des quantités précises et des astuces pour réussir la douceur matinale à coup sûr. Lancez-vous avec des…
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 ✨.
7 Idées D’Apéro Pâte Feuilletée Qui Vont Disparaître En Premier À Votre Soirée
À lire 7 Idées De Repas Plancha Qui Vont Transformer Toutes Vos Soirées D’Été En Fête
Ces 7 idées d’apéro à base de pâte feuilletée sont conçues pour disparaître en premier à la soirée : faciles, visuelles et prêtes en 20 minutes de préparation. Appliquer chaque recette en suivant les temps et les astuces garantit des…
Poulet Shawarma Maison Irrésistible : Découvrez Notre Méthode Secrète !
Poulet Shawarma Maison Irrésistible : adoptez la méthode secrète du moule à cake pour obtenir des tranches ultra-fines, juteuses et chargées en épices. Cette recette transforme un dîner simple en expérience de cuisine conviviale et répétable en moins de 1h30.…
7 Recette Pique Nique Faciles À Emporter Sans Jamais Perdre En Saveur Ni Goût
7 Recette Pique Nique Faciles À Emporter Sans Jamais Perdre En Saveur Ni Goût — Résultat immédiat : des plats pensés pour voyager sans effort, garder toute la saveur et éviter la perte de goût. Ces idées transforment chaque repas…
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 Ce Velouté De Courgettes Onctueux Va Écouler Toute Votre Récolte En Une Soirée
7 Recettes Avec L’Abricot Pour Profiter À Fond De Ce Fruit D’Été Éphémère
Profitez pleinement de l’abricot cet été : 7 recettes faciles et créatives pour transformer ce fruit éphémère en desserts et en douceurs de pâtisserie à la fois simples et gourmandes. Ces recettes donnent des indications précises (températures, temps de cuisson,…
Spaghetti au Four Facile et Savoureux pour les Soirées de Semaine Chargées
Préparez un spaghetti au four facile et savoureux en 30–40 minutes pour sauver les soirées de semaine avec un repas rapide et réconfortant 🍝✨. Choisir une recette simple transforme la cuisine maison en solution pratique: quelques ingrédients, une cuisson au…