.qcmf-wrap { font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif; max-width: 800px; margin: 24px auto; padding: 16px; }
.qcmf-card { background: #fff; border-radius: 16px; box-shadow: 0 10px 30px rgba(0,0,0,.08); padding: 24px; }
.qcmf-header { display:flex; justify-content:space-between; align-items:center; margin-bottom: 12px; gap:12px; flex-wrap: wrap; }
.qcmf-title { font-size: clamp(18px, 2.4vw, 22px); font-weight: 700; margin:0; }
.qcmf-badge { font-size:12px; padding:6px 10px; border-radius:999px; background:#f2f4f7; }
.qcmf-progress { height:10px; background:#eef2f7; border-radius:999px; overflow:hidden; margin:12px 0 20px; }
.qcmf-progress > div { height:100%; width:0; background: linear-gradient(90deg,#4f46e5,#22c55e); transition: width .35s ease; }
.qcmf-question { font-size: clamp(18px, 2.6vw, 22px); line-height: 1.4; margin: 10px 0 14px; }
.qcmf-options { display:grid; gap:12px; grid-template-columns: 1fr; }
.qcmf-btn { border:1px solid #e5e7eb; background:#fff; border-radius: 12px; padding: 12px 14px; text-align:left; cursor:pointer; font-size:16px; transition: transform .06s ease, border-color .2s, background .2s; color:#111; }
.qcmf-btn:hover { transform: translateY(-1px); border-color:#c7d2fe; background:#f8fafc; }
.qcmf-btn[disabled] { opacity:.8; cursor:not-allowed; }
.qcmf-btn.correct { border-color:#22c55e; background:#ecfdf5; }
.qcmf-btn.wrong { border-color:#ef4444; background:#fef2f2; }
.qcmf-feedback { margin-top: 12px; padding: 12px 14px; border-left: 4px solid #e5e7eb; border-radius:10px; background:#f8fafc; font-size:14px; }
.qcmf-feedback.good { border-color:#22c55e; background:#ecfdf5; }
.qcmf-feedback.bad { border-color:#ef4444; background:#fef2f2; }
.qcmf-cta { border:none; border-radius:10px; padding:10px 14px; font-weight:600; cursor:pointer; margin-top:16px; }
.qcmf-cta.primary { background:#4f46e5; color:#fff; }
.qcmf-note { font-size: clamp(20px, 3vw, 28px); font-weight:800; margin-top:12px; }
.qcmf-encourage { font-size:14px; color:#1f2937; margin-top:8px; }
@media (min-width: 640px) { .qcmf-options { grid-template-columns: 1fr 1fr; } }
(function(){
const QUESTIONS = [
{
question: « Transforme à partir de l’imparfait → passé composé : « Je mangeais une pomme. » »,
options: [« J’ai mangé une pomme. », « Je mange une pomme. », « J’avais mangé une pomme. », « Je mangeais une pomme. »],
correctIndex: 0,
explications: [
« Correct : passé composé avec ‘avoir’ → j’ai mangé. »,
« Erreur : c’est le présent. »,
« Erreur : c’est le plus-que-parfait (auxiliaire à l’imparfait). »,
« Erreur : c’est encore l’imparfait, on veut le passé composé. »
]
},
{
question: « « Tu finissais rapidement. » → passé composé : »,
options: [« Tu as fini rapidement. », « Tu as finissais rapidement. », « Tu finis rapidement. », « Tu avais fini rapidement. »],
correctIndex: 0,
explications: [
« Correct : verbe du 2e groupe → participe ‘fini’ avec ‘avoir’. »,
« Erreur : mélange d’auxiliaire et d’imparfait. »,
« Erreur : présent, pas passé composé. »,
« Erreur : plus-que-parfait, pas passé composé. »
]
},
{
question: « « Il prenait le bus. » → passé composé : »,
options: [« Il a pris le bus. », « Il avait pris le bus. », « Il prit le bus. », « Il prend le bus. »],
correctIndex: 0,
explications: [
« Correct : ‘prendre’ → participe ‘pris’ avec ‘avoir’. »,
« Erreur : plus-que-parfait. »,
« Erreur : passé simple. »,
« Erreur : présent. »
]
},
{
question: « « Elle allait à l’école. » → passé composé : »,
options: [« Elle est allée à l’école. », « Elle a allé à l’école. », « Elle allait à l’école. », « Elle sera allée à l’école. »],
correctIndex: 0,
explications: [
« Correct : verbes de mouvement → auxiliaire ‘être’ + accord : elle est allée. »,
« Erreur : ‘aller’ ne prend pas ‘avoir’ au passé composé. »,
« Erreur : c’est l’imparfait. »,
« Erreur : futur antérieur. »
]
},
{
question: « « Nous faisions nos devoirs. » → passé composé : »,
options: [« Nous avons fait nos devoirs. », « Nous avons fais nos devoirs. », « Nous faisons nos devoirs. », « Nous avions fait nos devoirs. »],
correctIndex: 0,
explications: [
« Correct : participe passé ‘fait’ (invariable) avec ‘avoir’. »,
« Erreur : ‘fais’ n’est pas un participe passé correct ici. »,
« Erreur : présent. »,
« Erreur : plus-que-parfait. »
]
},
{
question: « « Vous (pluriel) veniez nous voir. » → passé composé : »,
options: [« Vous êtes venus nous voir. », « Vous avez venu nous voir. », « Vous êtes venu nous voir. », « Vous êtes venues nous voir. »],
correctIndex: 0,
explications: [
« Correct : ‘venir’ se conjugue avec ‘être’ → vous êtes venus (pluriel masc. par défaut). »,
« Erreur : mauvais auxiliaire (‘avoir’). »,
« Erreur : singulier ‘venu’ alors que le sujet est pluriel. »,
« Erreur possible seulement si le groupe est 100% féminin ; ici on attend la forme par défaut. »
]
},
{
question: « « Ils arrivaient en retard. » → passé composé : »,
options: [« Ils sont arrivés en retard. », « Ils ont arrivé en retard. », « Ils arrivaient en retard. », « Ils arrivèrent en retard. »],
correctIndex: 0,
explications: [
« Correct : ‘arriver’ → auxiliaire ‘être’ + accord pluriel. »,
« Erreur : ‘arriver’ ne se conjugue pas avec ‘avoir’ au passé composé. »,
« Erreur : imparfait. »,
« Erreur : passé simple. »
]
},
{
question: « « Elles se levaient tôt. » → passé composé : »,
options: [« Elles se sont levées tôt. », « Elles ont levé tôt. », « Elles se sont levé tôt. », « Elles se levaient tôt. »],
correctIndex: 0,
explications: [
« Correct : verbe pronominal → auxiliaire ‘être’ + accord avec le sujet féminin pluriel. »,
« Erreur : on oublie ‘se’ et l’auxiliaire n’est pas correct. »,
« Erreur : accord manquant (‘levées’). »,
« Erreur : c’est l’imparfait. »
]
},
{
question: « « La classe partait en sortie. » → passé composé : »,
options: [« La classe est partie en sortie. », « La classe a parti en sortie. », « La classe part en sortie. », « La classe était partie en sortie. »],
correctIndex: 0,
explications: [
« Correct : ‘partir’ → auxiliaire ‘être’ ; ‘classe’ est féminin singulier → partie. »,
« Erreur : ‘partir’ ne prend pas ‘avoir’ au passé composé. »,
« Erreur : présent. »,
« Erreur : plus-que-parfait. »
]
},
{
question: « « Je (fille) me souvenais de tout. » → passé composé : »,
options: [« Je me suis souvenue de tout. », « Je me suis souvenu de tout. », « J’ai souvenu de tout. », « Je m’étais souvenue de tout. »],
correctIndex: 0,
explications: [
« Correct : verbe pronominal ‘se souvenir’ → ‘être’ + accord féminin : souvenue. »,
« Erreur : accord masculin. »,
« Erreur : verbe mal construit (il faut le pronom + ‘être’). »,
« Erreur : plus-que-parfait. »
]
},
{
question: « « Tu (garçon) sortais du cinéma. » → passé composé : »,
options: [« Tu es sorti du cinéma. », « Tu as sorti du cinéma. », « Tu es sortie du cinéma. », « Tu sortis du cinéma. »],
correctIndex: 0,
explications: [
« Correct : ‘sortir’ intransitif → auxiliaire ‘être’ ; masculin singulier : sorti. »,
« Erreur : intransitif → ne prend pas ‘avoir’. »,
« Erreur : accord féminin, pas le cas ici. »,
« Erreur : passé simple. »
]
},
{
question: « « Il lisait ce roman. » → passé composé : »,
options: [« Il a lu ce roman. », « Il a lis ce roman. », « Il lisait ce roman. », « Il lut ce roman. »],
correctIndex: 0,
explications: [
« Correct : ‘lire’ → participe ‘lu’ avec ‘avoir’. »,
« Erreur : ‘lis’ n’est pas le participe passé. »,
« Erreur : c’est l’imparfait. »,
« Erreur : passé simple. »
]
},
{
question: « « Elle naissait un 3 mai. » → passé composé : »,
options: [« Elle est née un 3 mai. », « Elle a née un 3 mai. », « Elle est né un 3 mai. », « Elle naquit un 3 mai. »],
correctIndex: 0,
explications: [
« Correct : ‘naître’ → auxiliaire ‘être’ + accord féminin : née. »,
« Erreur : ‘naître’ ne se conjugue pas avec ‘avoir’. »,
« Erreur : accord masculin (‘né’) au lieu de féminin. »,
« Erreur : passé simple. »
]
},
{
question: « « Nous écrivions chaque soir. » → passé composé : »,
options: [« Nous avons écrit chaque soir. », « Nous avons écrits chaque soir. », « Nous écrivons chaque soir. », « Nous avions écrit chaque soir. »],
correctIndex: 0,
explications: [
« Correct : participe passé ‘écrit’ (invariable avec ‘avoir’). »,
« Erreur : pas d’accord du participe ici (COD non placé avant). »,
« Erreur : présent. »,
« Erreur : plus-que-parfait. »
]
},
{
question: « « Ils voyaient la mer. » → passé composé : »,
options: [« Ils ont vu la mer. », « Ils avaient vu la mer. », « Ils voient la mer. », « Ils ont voit la mer. »],
correctIndex: 0,
explications: [
« Correct : ‘voir’ → participe ‘vu’ avec ‘avoir’. »,
« Erreur : plus-que-parfait. »,
« Erreur : présent. »,
« Erreur : auxiliaire mal conjugué + verbe au présent. »
]
}
];
const elRoot = document.getElementById(« qcm-francais-imparfait-pc »);
let index = 0, correct = 0;
const h = (t, a = {}, …c) => {
const e = document.createElement(t);
for (const [k, v] of Object.entries(a || {})) {
if (k === « class ») e.className = v;
else if (k === « html ») e.innerHTML = v;
else e.setAttribute(k, v);
}
c.forEach(x => { if (x != null) e.appendChild(typeof x === « string » ? document.createTextNode(x) : x); });
return e;
};
function render(){
elRoot.innerHTML = « »;
const q = QUESTIONS[index];
const header = h(« div »,{class: »qcmf-header »},
h(« h2″,{class: »qcmf-title »}, »Passage imparfait → passé composé (4ème) »),
h(« span »,{class: »qcmf-badge »},`Question ${index+1}/${QUESTIONS.length}`)
);
const progress = h(« div »,{class: »qcmf-progress »}, h(« div »,{style:`width:${(index/QUESTIONS.length)*100}%`}));
const opts = h(« div »,{class: »qcmf-options »});
q.options.forEach((opt,i)=>{
const btn = h(« button »,{class: »qcmf-btn »},opt);
btn.onclick = ()=>{
[…opts.children].forEach(b=>b.disabled=true);
if(i===q.correctIndex){ correct++; btn.classList.add(« correct »); }
else { btn.classList.add(« wrong »); }
const fb = h(« div »,{class: »qcmf-feedback « +(i===q.correctIndex? »good »: »bad »)},
q.explications[i] + (i===q.correctIndex ? » ✨ » : » Astuce : repère l’auxiliaire et le participe ! 💡 »)
);
opts.appendChild(fb);
const next = h(« button »,{class: »qcmf-cta primary »}, »Suivant »);
next.onclick = ()=>{ if(index=15 ? « Bravo ! Tu gères le passé composé ✅ » :
note>=10 ? « Bien joué ! Encore un petit effort 💪 » :
« Pas grave, revois les auxiliaires et les accords puis réessaie 😉 »
),
(()=>{
const btn = h(« button »,{class: »qcmf-cta primary »}, »Recommencer »);
btn.onclick = ()=>{ index=0; correct=0; render(); };
return btn;
})()
);
elRoot.appendChild(card);
}
render();
})();