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); })(); Biscuits faits maison : la recette facile pour une pâte feuilletée parfaite Biscuits faits maison : la recette facile pour une pâte feuilletée parfaite — obtenez des biscuits dorés, feuilletés et prêts en moins de 40 minutes pour un goûter maison qui séduit tout de suite. 🔥 Cette recette combine ingrédients simples… Comment Organiser La BBQ Party Parfaite Sans Rien Oublier Ni Rien Stresser Organiser la BBQ party parfaite commence par une liste de contrôle compacte : invitations fixées, menus définis, matériel vérifié — puis place à la détente. Cette phrase résume l’objectif : ne rien oublier ni stresser pendant la préparation et la… É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.
La salade d’été fraîche et savoureuse : la recette incontournable
Faites de cette salade d’été votre alliée fraîcheur : rapide, healthy et incroyablement savoureuse, elle se prépare en 15 minutes pour 4 personnes et transforme les légumes frais d’été en un plat délicieux. Cette recette met l’accent sur la qualité…
7 Idées De Brochette Apero Qui Vont Voler La Vedette À Tous Vos Cocktails
À lire 7 Recette Asperge Ultra Simples Pour Sublimer Ce Légume De Saison Éphémère
Ces 7 idées de brochette apéro transforment instantanément un verre en expérience : préparez certaines étapes la veille, variez textures et couleurs, et servez sans stress pour que vos cocktails brillent. 🍸✨ 7 idées de brochette apéro pour voler la…
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.
Ces bols de poulet à la grecque : un dîner de semaine simple et savoureux
Ces bols de poulet à la grecque offrent un dîner de semaine rapide, frais et savoureux : préparez du poulet mariné, du riz parfumé et un tzatziki crémeux pour un repas simple qui fait plaisir à toute la famille. ✅…
La Pissaladiere Recette Niçoise Authentique Qui Va Vous Transporter Direct En Provence
Faites une pissaladière authentique en 1 heure : pâte croustillante, oignons confits fondants, anchois délicats et olive noire — la vraie recette niçoise qui transporte direct en Provence. Cette phrase résume l’objectif : suivre des étapes claires pour reproduire la…
À 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.
Biscuits faits maison : la recette facile pour une pâte feuilletée parfaite
Biscuits faits maison : la recette facile pour une pâte feuilletée parfaite — obtenez des biscuits dorés, feuilletés et prêts en moins de 40 minutes pour un goûter maison qui séduit tout de suite. 🔥 Cette recette combine ingrédients simples…
Comment Organiser La BBQ Party Parfaite Sans Rien Oublier Ni Rien Stresser
Organiser la BBQ party parfaite commence par une liste de contrôle compacte : invitations fixées, menus définis, matériel vérifié — puis place à la détente. Cette phrase résume l’objectif : ne rien oublier ni stresser pendant la préparation et la…
À 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.
Frites croustillantes et fondantes au fromage : L’en-cas parfait
Frites croustillantes et fondantes au fromage : voici comment obtenir un en-cas ultra-gourmand et appétissant en moins de 40 minutes, prêt à partager. ✅ Cette méthode priorise une base bien sèche et chaude pour que la pomme de terre reste…
Le Crinkle Cake Courgette-Feta : Le Faux Feuilleté qui Épate le Buffet Sans Effort
Le secret d’un Crinkle Cake courgette-feta croustillant : maîtriser l’humidité pour un faux feuilleté parfait La clé pour obtenir un faux feuilleté qui croustille est simple : contrôler l’humidité dès la préparation. 🎯 Cette règle prévaut avant même de préchauffer…
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é. ✨