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 Sauce Tomate Italienne Authentique Va Remplacer Toutes Vos Versions Industrielles Cette sauce tomate italienne authentique remplace instantanément toutes les versions industrielles : elle offre une saveur naturelle plus riche, une texture veloutée et des arômes frais grâce aux tomates fraîches et aux ingrédients naturels. 🍅 Adoptez cette recette maison simple… 7 Recette Automne Réconfortantes À Cuisiner Dès Les Premières Feuilles Tombées 7 recettes automne réconfortantes prêtes à cuisiner dès les premières feuilles tombées : instructions claires, temps de cuisson et astuces pour transformer ingrédients de saison en plat chaleureux en moins d’une heure. Suivre chaque étape permet d’obtenir une cuisine réconfortante… Mini Pain de Viande : La Solution Simple et Rapide pour le Dîner Mini Pain de Viande : La Solution Simple et Rapide pour le Dîner — prêt en 1 heure pour un repas familial équilibré et convivial. ✨ Ce plat facile transforme la viande hachée en portions individuelles moelleuses, idéales pour une… 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 Cette Salade De Pomme De Terre Froide Va Sauver Tous Vos Pique-Niques De L’Été
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 Sauce Tomate Italienne Authentique Va Remplacer Toutes Vos Versions Industrielles
Cette sauce tomate italienne authentique remplace instantanément toutes les versions industrielles : elle offre une saveur naturelle plus riche, une texture veloutée et des arômes frais grâce aux tomates fraîches et aux ingrédients naturels. 🍅 Adoptez cette recette maison simple…
7 Recette Automne Réconfortantes À Cuisiner Dès Les Premières Feuilles Tombées
7 recettes automne réconfortantes prêtes à cuisiner dès les premières feuilles tombées : instructions claires, temps de cuisson et astuces pour transformer ingrédients de saison en plat chaleureux en moins d’une heure. Suivre chaque étape permet d’obtenir une cuisine réconfortante…
À lire 7 Recettes Été Ultra Fraîches À Tester D’Urgence Avant La Fin De La Saison
Mini Pain de Viande : La Solution Simple et Rapide pour le Dîner
Mini Pain de Viande : La Solution Simple et Rapide pour le Dîner — prêt en 1 heure pour un repas familial équilibré et convivial. ✨ Ce plat facile transforme la viande hachée en portions individuelles moelleuses, idéales pour une…
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 Recette Halloween Effrayantes Et Délicieuses Qui Vont Terrifier Vos Invités
À lire 7 Plat Été Frais Et Gourmands Pour Régaler Toute La Famille Sans Canicule En Cuisine
Préparez 7 recettes Halloween effrayantes et délicieuses qui vont littéralement terrifier vos invités — chaque idée ici est immédiatement réalisable, avec ingrédients précis, températures et astuces de présentation pour transformer un simple dîner en une fête terrifiante. Ces recettes allient…
5 Recettes Spécial Marron Pour Sublimer Ce Fruit D’Automne Sans Vous Ruiner
5 recettes spécialement pensées pour sublimer le marron, ce fruit d’automne polyvalent, tout en respectant une cuisine économique : des plats réconfortants, des desserts faciles et des astuces pour s’équiper sans se ruiner. Découvrez ici des recettes actionnables avec mesures,…
Cette Salade De Pomme De Terre Froide Va Sauver Tous Vos Pique-Niques De L’Été
Cette salade de pomme de terre froide sauve les pique-niques d’été : elle est facile, rafraîchissante et se transporte sans prise de tête. En préparant cette recette froide en 45 minutes, le panier devient instantanément plus gourmand et convivial 🍋.…
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 Ete Saison : 7 Fruits Et Légumes À Cuisiner Avant Qu’Il Ne Soit Trop Tard
7 Recette Tomate Originales Pour Écouler Votre Récolte Avant Les Premiers Froids
Sauvez votre récolte : transformez votre récolte de tomates en sept préparations simples et originales pour profiter des saveurs de l’été avant les premiers froids 🍅. Ces recettes de saison sont conçues pour être rapides, duplicables et adaptées à tous…
7 Recettes Aux Figues Pour Profiter À Fond De Ce Fruit De Saison Éphémère
7 recettes aux figues pour tirer le meilleur de ce fruit de saison : des idées claires, des étapes précises et des associations gourmandes pour transformer chaque figue en moment de gourmandise — à réaliser en moins d’une heure pour…