Afficher la table des matières Masquer la table des matières
- Batch cooking juin : préparer un menu juin complet en 2 heures pour l’organisation semaine
- Pourquoi ce format fonctionne pour la cuisine rapide et la cuisine saine
- Ingrédients essentiels pour 4 portions : rapidité et flexibilité
- Substitutions pratiques pour toutes les preferences
- Équipement minimal pour un maximum d’efficacité
- Organisation du temps : minute par minute
- Quiz : Batch Cooking (Juin) — Prêt en 2 heures
- ${TEXTS.title} ${TEXTS.intro} Question ${state.currentIndex + 1} / ${QUESTIONS.length} `; root.appendChild(header); // Progress bar const progress = document.createElement('div'); progress.className = 'mt-3 w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2 overflow-hidden'; const progressFill = document.createElement('div'); const pct = Math.round(((state.currentIndex) / QUESTIONS.length) * 100); progressFill.style.width = `${pct}%`; progressFill.className = 'h-2 bg-gradient-to-r from-green-400 to-green-600'; progress.appendChild(progressFill); root.appendChild(progress); // Current question const q = QUESTIONS[state.currentIndex]; const fieldset = document.createElement('fieldset'); fieldset.className = 'mt-6'; fieldset.setAttribute('role', 'group'); fieldset.setAttribute('aria-labelledby', `legend-${q.id}`); const legend = document.createElement('legend'); legend.id = `legend-${q.id}`; legend.className = 'text-base font-semibold mb-2'; legend.textContent = q.q; fieldset.appendChild(legend); // Options list const list = document.createElement('div'); list.className = 'space-y-3'; q.options.forEach(opt => { const optId = `${q.id}-${opt.id}`; const wrapper = document.createElement('label'); wrapper.className = 'flex items-center gap-3 p-3 rounded-md hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer ring-1 ring-transparent focus-within:ring-yellow-200'; wrapper.tabIndex = 0; wrapper.setAttribute('role', 'option'); const radio = document.createElement('input'); radio.type = 'radio'; radio.name = q.id; radio.id = optId; radio.value = opt.id; radio.className = 'focus-ring'; radio.checked = (state.answers[q.id] === opt.id); radio.addEventListener('change', (e) => { state.answers[q.id] = e.target.value; saveProgress(); updateStatus(); }); // Keyboard support: Enter or Space on label toggles radio wrapper.addEventListener('keydown', (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); radio.checked = true; radio.dispatchEvent(new Event('change', { bubbles: true })); } // Optionally allow ArrowDown/ArrowUp to move between options if (e.key === 'ArrowDown' || e.key === 'ArrowRight') { e.preventDefault(); const next = wrapper.nextElementSibling; if (next) next.focus(); } if (e.key === 'ArrowUp' || e.key === 'ArrowLeft') { e.preventDefault(); const prev = wrapper.previousElementSibling; if (prev) prev.focus(); } }); const fakeRadio = document.createElement('span'); fakeRadio.className = 'w-4 h-4 rounded-full border-2 border-gray-300 flex-shrink-0 flex items-center justify-center'; // small dot when checked (CSS-less approach) const dot = document.createElement('span'); dot.className = 'w-2 h-2 rounded-full bg-transparent'; dot.style.transition = 'background-color 120ms'; if (state.answers[q.id] === opt.id) dot.style.backgroundColor = '#111827'; radio.addEventListener('change', () => { // update dots for this question Array.from(list.querySelectorAll('input')).forEach(i => { const d = i.parentElement.querySelector('span > span'); if (d) d.style.backgroundColor = i.checked ? '#111827' : 'transparent'; }); }); fakeRadio.appendChild(dot); const labelText = document.createElement('span'); labelText.className = 'text-sm'; labelText.textContent = opt.text; wrapper.appendChild(radio); wrapper.appendChild(fakeRadio); wrapper.appendChild(labelText); list.appendChild(wrapper); }); fieldset.appendChild(list); root.appendChild(fieldset); // Controls const controls = document.createElement('div'); controls.className = 'mt-6 flex items-center justify-between gap-3'; const navLeft = document.createElement('div'); const btnPrev = document.createElement('button'); btnPrev.className = 'px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded-md text-sm focus-ring'; btnPrev.textContent = TEXTS.prev; btnPrev.disabled = state.currentIndex === 0; btnPrev.addEventListener('click', () => { state.currentIndex = Math.max(0, state.currentIndex - 1); renderQuiz(); focusFirstOption(); }); navLeft.appendChild(btnPrev); const navRight = document.createElement('div'); const btnNext = document.createElement('button'); btnNext.className = 'px-3 py-2 bg-blue-600 hover:bg-blue-500 text-white rounded-md text-sm focus-ring'; btnNext.textContent = (state.currentIndex < QUESTIONS.length - 1) ? TEXTS.next : TEXTS.submit; btnNext.addEventListener('click', () => { if (state.currentIndex < QUESTIONS.length - 1) { state.currentIndex++; renderQuiz(); focusFirstOption(); } else { // Submit submitQuiz(); } }); // Also allow Enter key on the question area to go next root.addEventListener('keydown', (e) => { if ((e.key === 'Enter') && (document.activeElement && root.contains(document.activeElement))) { // If an input is focused, ignore to not double-trigger const activeTag = document.activeElement.tagName.toLowerCase(); if (['input', 'button', 'textarea'].includes(activeTag)) return; e.preventDefault(); btnNext.click(); } }); navRight.appendChild(btnNext); controls.appendChild(navLeft); controls.appendChild(navRight); root.appendChild(controls); // If submitted, show review for current question if (state.submitted) { const review = document.createElement('div'); review.className = 'mt-6 p-4 bg-gray-50 dark:bg-gray-700 rounded-md text-sm fade-in'; const correctId = QUESTIONS[state.currentIndex].correct; const userChoice = state.answers[QUESTIONS[state.currentIndex].id]; const isCorrect = userChoice === correctId; review.innerHTML = ` ${isCorrect ? 'Bonne réponse' : 'Réponse correcte'} ${QUESTIONS[state.currentIndex].explain} `; root.appendChild(review); } updateStatus(); } // Focus the first option of the current question for keyboard users function focusFirstOption() { const root = $('#quiz-root'); const firstLabel = root.querySelector('label[tabindex="0"]'); if (firstLabel) firstLabel.focus(); } // Update status text and footer buttons function updateStatus() { const status = $('#quiz-status'); const answeredCount = Object.keys(state.answers).length; status.textContent = `${answeredCount} / ${QUESTIONS.length} réponses renseignées. ${state.submitted ? TEXTS.saved : ''}`; // Footer buttons const btnRestart = $('#btn-restart'); const btnCopy = $('#btn-copy'); if (state.submitted) { btnRestart.classList.remove('hidden'); btnCopy.classList.remove('hidden'); btnRestart.setAttribute('aria-hidden', 'false'); btnCopy.setAttribute('aria-hidden', 'false'); } else { btnRestart.classList.add('hidden'); btnCopy.classList.add('hidden'); btnRestart.setAttribute('aria-hidden', 'true'); btnCopy.setAttribute('aria-hidden', 'true'); } } // Submit and score function submitQuiz() { // Validate that all questions have an answer const unanswered = QUESTIONS.filter(q => !(q.id in state.answers)); if (unanswered.length > 0) { // move to first unanswered state.currentIndex = QUESTIONS.findIndex(q => !(q.id in state.answers)); renderQuiz(); // Show a brief accessible alert const root = $('#quiz-root'); const alert = document.createElement('div'); alert.className = 'mt-4 p-3 bg-yellow-100 text-yellow-800 rounded-md text-sm'; alert.setAttribute('role', 'alert'); alert.textContent = `Vous devez répondre à toutes les questions. Question ${state.currentIndex + 1} sélectionnée.`; root.prepend(alert); setTimeout(() => alert.remove(), 4000); return; } // Score calculation let correct = 0; QUESTIONS.forEach(q => { if (state.answers[q.id] === q.correct) correct++; }); state.submitted = true; saveProgress(true); renderResult(correct, QUESTIONS.length); renderQuiz(); // rerender to show per-question review sections } // Render final result area below quiz function renderResult(correct, total) { const root = $('#quiz-root'); // Remove existing final area if any const prev = root.querySelector('.final-result'); if (prev) prev.remove(); const container = document.createElement('div'); container.className = 'final-result mt-6 p-4 bg-gradient-to-r from-indigo-50 to-white dark:from-indigo-900 dark:to-gray-800 rounded-md shadow-sm'; container.setAttribute('role', 'status'); const percent = Math.round((correct / total) * 100); let message = TEXTS.low; if (percent === 100) message = TEXTS.perfect; else if (percent >= 75) message = TEXTS.good; else if (percent >= 50) message = TEXTS.ok; container.innerHTML = ` ${TEXTS.scoreText(correct, total)} ${message} ${percent}% Conseils rapides : portionnez avant congélation, privilégiez la cuisson en lots, et réchauffez au four/poêle pour meilleure texture. `; root.appendChild(container); // Enable footer buttons const btnRestart = $('#btn-restart'); const btnCopy = $('#btn-copy'); btnRestart.classList.remove('hidden'); btnRestart.setAttribute('aria-hidden', 'false'); btnRestart.addEventListener('click', () => { resetQuiz(); }, { once: true }); btnCopy.classList.remove('hidden'); btnCopy.setAttribute('aria-hidden', 'false'); btnCopy.addEventListener('click', () => { const summary = `${TEXTS.title}n${TEXTS.scoreText(correct, total)} (${percent}%)n${message}`; navigator.clipboard && navigator.clipboard.writeText(summary) .then(() => { const prevNote = document.createElement('div'); prevNote.className = 'mt-2 text-sm text-green-600'; prevNote.textContent = 'Résultat copié dans le presse-papier.'; container.appendChild(prevNote); setTimeout(() => prevNote.remove(), 3000); }) .catch(() => alert('Impossible de copier automatiquement. Sélectionnez et copiez manuellement.')); }, { once: true }); // Save score to localStorage try { localStorage.setItem('batch_quiz_last_result', JSON.stringify({ correct, total, percent, timestamp: Date.now() })); } catch (e) { // ignore storage errors } } // Save progress to localStorage (auto) function saveProgress(final = false) { try { const payload = { answers: state.answers, currentIndex: state.currentIndex, submitted: state.submitted, savedAt: Date.now() }; localStorage.setItem('batch_quiz_progress', JSON.stringify(payload)); if (final) { // also flag saved const status = $('#quiz-status'); if (status) status.textContent = `${status.textContent} ${TEXTS.saved}`; } } catch (e) { // ignore } } // Load progress if available function loadProgress() { try { const raw = localStorage.getItem('batch_quiz_progress'); if (!raw) return; const payload = JSON.parse(raw); if (payload && payload.answers) { state.answers = payload.answers; state.currentIndex = Math.min(payload.currentIndex || 0, QUESTIONS.length - 1); state.submitted = payload.submitted || false; } } catch (e) { // ignore corrupt data } } // Reset quiz function resetQuiz() { state = { currentIndex: 0, answers: {}, submitted: false }; try { localStorage.removeItem('batch_quiz_progress'); } catch (e) {} renderQuiz(); focusFirstOption(); } // Initialisation (function init() { // Load any saved progress loadProgress(); // Render quiz renderQuiz(); // Focus first option for accessibility setTimeout(() => focusFirstOption(), 200); })(); 7 Recette Plancha Faciles Pour Impressionner Vos Invités Sans Stress Cet Été Recevez sans stress : 7 recettes plancha faciles pour un été gourmand où chaque plat se prépare vite, en live devant vos invités. Préparez une plancha chaude, suivez les étapes claires ci‑dessous et transformez un simple repas en moment convivial… 7 Asperges Vertes Recette Originales Pour Sublimer Ce Légume De Saison Éphémère Asperges vertes : 7 recettes originales, concrètes et faciles pour transformer ce légume de saison en plats légers et gourmands — techniques précises, temps de cuisson, associations et astuces pour une cuisine de printemps qui fonctionne à tous les coups.… Étapes pas‑à‑pas pour un batch cooking express (2 heures) Action immédiate : suivre cet enchaînement précis pour tenir les 2 heures. Étape 1 : mettre l’eau à bouillir et lancer le riz. Étape 2 : couper les protéines en dés, les assaisonner et les cuire. Étape 3 : préparer légumes et cuire à la vapeur en réutilisant la casserole du riz. Étape 4 : répartir dans 4 contenants en verre, laisser tiédir 20–30 minutes puis mettre au réfrigérateur. Insight : respecter cet ordre transforme une session chaotique en une routine fluide. Comment éviter la monotonie et garder du plaisir
- Conservation, réchauffage et astuces pour prolonger la fraîcheur
- Variantes rapides pour différents jours de la semaine
- Valeurs nutritionnelles et équilibre
En 2 heures de cuisine, transformez votre week‑end en une réserve de repas faits maison pour toute la semaine : plus de stress, plus de soirées filantes, juste du gain de temps et des repas équilibrés prêts à réchauffer. ✅
Batch cooking juin : préparer un menu juin complet en 2 heures pour l’organisation semaine
Point clé : consacrer une session de 2 heures suffit pour couvrir 4 repas principaux équilibrés. En commençant par ce qui demande le plus de temps (féculent ou protéine), l’ensemble se coordonne naturellement et l’organisation semaine devient facile à tenir. Claire, une jeune designer pressée, a testé ce rythme : chaque dimanche elle alloue exactement 2 heures et récupère 5 heures de temps libre en semaine. Insight : structurez la session autour d’un ingrédient lent à cuire et tout s’enchaîne.
Pourquoi ce format fonctionne pour la cuisine rapide et la cuisine saine
Conclusion immédiate : la répétition intelligente des ingrédients réduit le temps sans sacrifier la variété. En utilisant une même base (riz, quinoa ou patate douce) et en variant les assaisonnements, on obtient plusieurs plats distincts. Exemple concret : une base riz + brocoli + protéine devient bol méditerranéen, curry ou salade tiède en changeant simplement la sauce. Insight : une sauce différente suffit à renouveler trois repas.
Ces Ongles Jaunes Pastel Ultra Tendance Vont Dominer Tout Votre Feed Ce Printemps
Adoptez tout de suite le look ongles jaunes pastel : il offre un style printemps lumineux et facile à porter, capable de rafraîchir instantanément une tenue. Ce choix combine simplicité et impact visuel ; il fonctionne sur toutes les longueurs…
Cuisse de Poulet Fondante Farcie et Enveloppée de Bacon Croustillant
À lire 7 Recette Asperge Ultra Simples Pour Sublimer Ce Légume De Saison Éphémère
Cuisiner une cuisse de poulet fondante, farcie et enveloppée de bacon croustillant devient simple et rapide : 55 minutes, quelques gestes précis et un résultat gourmet qui fait d’un dîner un vrai plat principal convivial. 🍽️ La méthode suivante convertit…
Ingrédients essentiels pour 4 portions : rapidité et flexibilité
Règle d’or : 8 ingrédients polyvalents couvrent 4 repas équilibrés. Pour 4 portions, prévoir 500 g de poulet (ou tofu), 300 g de riz basmati, 200 g de brocolis, 2 carottes, 1 oignon, 2 cuillères à soupe d’huile d’olive, cumin et paprika. Ces ingrédients permettent d’assembler des plats variés sans alourdir la liste de courses. Insight : choisir des ingrédients interchangeables simplifie la planification repas et évite le gaspillage.
Substitutions pratiques pour toutes les preferences
Conclusion rapide : adaptez sans complexité. Le poulet peut être remplacé par du tofu ferme, le riz par du quinoa, et les brocolis par des courgettes ou des poivrons selon la saison. Une astuce : couper tous les légumes en morceaux de taille similaire pour une cuisson homogène et gagner du temps. Insight : garder une règle simple — protéine / légumes / féculent — facilite la composition de menus.
7 Plat Du Soir Rapide Leger Prêts En 15 Minutes Pour Dîner Sans Culpabiliser
7 plats du soir rapides, légers et prêts en 15 minutes pour un dîner léger sans culpabilité : des recettes faciles, une préparation rapide et un repas équilibré garanti. Ces propositions sont immédiatement actionnables et pensées pour rentrer du travail,…
5 Recette Asperge Verte Qui Vont Sublimer Ce Légume De Saison Éphémère
5 recettes express et créatives pour sublimer l’asperge verte dès maintenant : des idées concrètes, une préparation simple et des pas-à-pas pour profiter de ce légume de saison avant qu’il ne disparaisse. Ce guide va transformer des bottes d’asperges fraîches…
À lire Cette salade Big Mac comble toutes vos envies gourmandes
Équipement minimal pour un maximum d’efficacité
Décision pragmatique : pas besoin d’appareils sophistiqués. Une grande casserole pour le riz, une poêle antiadhésive, un panier vapeur, une planche et un bon couteau suffisent pour réussir un batch cooking. Utiliser des contenants en verre hermétiques permet de conserver les saveurs et de réchauffer facilement. Insight : investir dans 4 boîtes en verre adaptées au micro‑ondes rembourse son coût en confort dès la première semaine.
Organisation du temps : minute par minute
Action immédiate : démarrer par ce qui prend le plus long. Lancer la cuisson du riz en premier, pendant que le poulet mariné cuit 8‑10 minutes à la poêle, et que les légumes passent 5‑7 minutes au panier vapeur. Pendant les temps de cuisson, découper et assaisonner la prochaine fournée pour éviter les temps morts. Insight : chronométrer en segments (15–20 minutes) permet de respecter la barre des 2 heures.
Quiz : Batch Cooking (Juin) — Prêt en 2 heures
Teste vos connaissances et repartez avec des conseils pratiques pour gagner du temps cette semaine.
7 Recette Plancha Faciles Pour Impressionner Vos Invités Sans Stress Cet Été
Recevez sans stress : 7 recettes plancha faciles pour un été gourmand où chaque plat se prépare vite, en live devant vos invités. Préparez une plancha chaude, suivez les étapes claires ci‑dessous et transformez un simple repas en moment convivial…
7 Asperges Vertes Recette Originales Pour Sublimer Ce Légume De Saison Éphémère
Asperges vertes : 7 recettes originales, concrètes et faciles pour transformer ce légume de saison en plats légers et gourmands — techniques précises, temps de cuisson, associations et astuces pour une cuisine de printemps qui fonctionne à tous les coups.…
À lire Un Plat Unique : Saveurs Intenses de Bœuf et Brocoli avec un Nettoyage Simplifié
Étapes pas‑à‑pas pour un batch cooking express (2 heures)
Action immédiate : suivre cet enchaînement précis pour tenir les 2 heures. Étape 1 : mettre l’eau à bouillir et lancer le riz. Étape 2 : couper les protéines en dés, les assaisonner et les cuire. Étape 3 : préparer légumes et cuire à la vapeur en réutilisant la casserole du riz. Étape 4 : répartir dans 4 contenants en verre, laisser tiédir 20–30 minutes puis mettre au réfrigérateur. Insight : respecter cet ordre transforme une session chaotique en une routine fluide.
Comment éviter la monotonie et garder du plaisir
Astuce pratique : garder des sauces séparées et ne pas trop saler d’avance. Préparer une sauce yaourt à l’ail, une vinaigrette soja‑miel et un filet d’huile citronnée permet de varier les assemblages. Bonus : un ajout final de fromage râpé ou de graines change instantanément la texture et le goût. Insight : les petites finitions réinventent le plat sans refaire toute la préparation.
7 Recette Asperge Ultra Simples Pour Sublimer Ce Légume De Saison Éphémère
Offrez au printemps une palette de saveurs avec 7 recettes d’asperge ultra simples qui subliment ce légume de saison éphémère en plats rapides et gourmet. Ces idées sont immédiatement actionnables : ingrédients clairs, préparation facile et cuisine simple pour transformer…
7 Idées De Repas Printemps Ultra Frais Pour Célébrer Le Retour Des Beaux Jours
Des idées immédiates et faciles pour des repas printemps ultra frais : 7 menus conçus pour profiter des beaux jours avec des plats légers, rapides et centrés sur les produits frais. Passez à l’action : choisissez une idée, faites la…
Conservation, réchauffage et astuces pour prolonger la fraîcheur
Règle simple : consommer 4 jours au frigo ou congeler les portions supplémentaires. Les plats se conservent bien jusqu’à 4 jours dans des boîtes hermétiques ; pour congeler jusqu’à 3 mois, privilégier le sous‑vide ou des sachets bien fermés. Pour redonner du moelleux après congélation, ajouter un filet d’huile avant le réchauffage. Insight : planifier la consommation (qui mange quoi quel jour) évite le gaspillage.
À lire 7 Recette Automne Réconfortantes À Cuisiner Dès Les Premières Feuilles Tombées
Variantes rapides pour différents jours de la semaine
Exemple concret : transformer une base en 3 menus différents en changeant l’assaisonnement. Base riz/poulet/brocoli devient bol méditerranéen (huile d’olive, herbes), bol curry (curry, lait de coco) ou salade froide (vinaigrette citron). Cette méthode permet d’avoir l’impression de plats nouveaux sans retomber dans la cuisine quotidienne. Insight : prévoir 2 sauces différentes suffit pour 5 jours de variété.
Ressources utiles et inspirations : pour approfondir les idées et trouver d’autres recettes rapides, consulter un guide pratique sur le batch cooking en 2 heures, explorer des recettes saines sur batch cooking healthy, ou découvrir des entraîneurs de menus express sur guides batch cooking 2h. Insight : s’inspirer d’autres approches accélère la personnalisation du menu.
Valeurs nutritionnelles et équilibre
Rappel important : viser l’équilibre protéines/féculents/légumes à chaque portion. Une estimation moyenne pour ce menu donne environ 450 calories, ~30 g de protéines et 6 g de fibres par portion — des chiffres qui garantissent un repas complet pour la soirée. Adapter les quantités permet d’ajuster l’apport énergétique selon les besoins. Insight : garder ces repères nutritionnels aide à planifier des repas sains sans y penser au quotidien.
Motivation finale : lancez votre première session ce dimanche, mettez une playlist, préparez votre café et transformez 2 heures en liberté pour toute la semaine — la routine se peaufine au fil des sessions et devient un vrai levier de sérénité. ✨