Maquette interactive · profils et semaine fictifs · aucune donnée transmise
${body()}'use strict'; const paths={home:'m3 10 9-7 9 7v11h-6v-7H9v7H3z',book:'M12 6v15 M2 3h6a4 4 0 0 1 4 4 4 4 0 0 1 4-4h6v17h-6a4 4 0 0 0-4 2 4 4 0 0 0-4-2H2z',calendar:'M8 2v4 M16 2v4 M3 10h18 M5 4h14a2 2 0 0 1 2 2v14H3V6a2 2 0 0 1 2-2 M7 14h2 M15 14h2',spark:'m12 3 2.7 6.3L21 12l-6.3 2.7L12 21l-2.7-6.3L3 12l6.3-2.7z',arrow:'M5 12h14 M13 6l6 6-6 6',check:'m5 12 4 4L19 6',clock:'M12 8v5l3 2 M22 12A10 10 0 1 1 2 12a10 10 0 0 1 20 0',grid:'M3 3h7v7H3z M14 3h7v7h-7z M3 14h7v7H3z M14 14h7v7h-7z',graph:'M6 6l12 5-9 8 M9 19 6 6 M9 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0 M21 11a3 3 0 1 1-6 0 3 3 0 0 1 6 0 M12 19a3 3 0 1 1-6 0 3 3 0 0 1 6 0',users:'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2 M16 3a4 4 0 0 1 0 8 M22 21v-2a4 4 0 0 0-3-3.87 M13 7a4 4 0 1 1-8 0 4 4 0 0 1 8 0'}; const icon=n=>``; const esc=s=>String(s).replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); const state={role:'student',page:'home',selected:'Emma',tasks:[{id:1,title:'Revoir l’addition de fractions',subject:'Mathématiques',duration:'10 min',day:'Mardi',done:true,symbol:'½',color:''},{id:2,title:'Retenir 8 mots du cours',subject:'Allemand',duration:'8 min',day:'Mercredi',done:false,symbol:'Aa',color:'orange'},{id:3,title:'Revenir aux équations',subject:'Mathématiques',duration:'12 min',day:'Vendredi',done:false,symbol:'𝑥',color:'green'}],quizIndex:0,answers:[],hint:0,coachSaved:false,note:'Reprendre les fractions avec deux représentations visuelles, puis vérifier le transfert vers une équation.',attachment:''}; const students={Emma:{name:'Emma Dubois',initials:'ED',subject:'Mathématiques',issue:'Fractions avant équations',progress:38,description:'Emma additionne parfois les dénominateurs. Revenir au sens des parts avant de reprendre les équations.',lesson:'Jeudi 12 · 16 h 30',goal:'Additionner deux fractions de dénominateurs différents.'},Lucas:{name:'Lucas Bernard',initials:'LB',subject:'Allemand',issue:'Vocabulaire à réactiver',progress:62,description:'Lucas reconnaît les mots à la lecture mais hésite sans les choix de réponse. Prévoir un rappel libre et espacé.',lesson:'Vendredi 13 · 15 h 00',goal:'Retrouver huit mots du cours sans choix de réponse.'},Lea:{name:'Léa Perrin',initials:'LP',subject:'Mathématiques',issue:'Vérifier l’autonomie',progress:78,description:'Léa réussit avec un indice. Proposer une nouvelle équation sans aide pour vérifier sa compréhension.',lesson:'Vendredi 13 · 17 h 00',goal:'Résoudre une équation puis vérifier sa solution seule.'}}; const roles={student:{label:'Élève',name:'Emma Dubois',initials:'ED',sub:'Élève · 10e'},coach:{label:'Coach',name:'Camille Martin',initials:'CM',sub:'Coach · Nash Academy'},parent:{label:'Parents',name:'Famille Dubois',initials:'FD',sub:'Suivi d’Emma'}}; const quizzes=[{q:'Pour additionner ½ et ⅓, quel dénominateur commun peux-tu choisir ?',options:['5','6','8'],answer:1,explanation:'6 est un multiple de 2 et de 3. On peut donc écrire ½ = 3/6 et ⅓ = 2/6.'},{q:'Combien vaut ½ + ⅓ ?',options:['2/5','5/6','1/6'],answer:1,explanation:'On additionne les parts de même taille : 3/6 + 2/6 = 5/6. Le dénominateur reste 6.'},{q:'Dans x + ⅓ = 5/6, quelle est la valeur de x ?',options:['1/2','2/3','1/3'],answer:0,explanation:'On retire ⅓, soit 2/6, des deux côtés. x = 5/6 − 2/6 = 3/6 = ½.'}]; const action=(text,a,cls='')=>``; const link=(text,page)=>`${text} ${icon('arrow')}`; function routes(){return state.role==='coach'?[['home','Ma journée','home'],['students','Mes élèves','users'],['planning','Les séances','calendar'],['progress','Les notions','graph'],['courses','Ressources','book'],['companions','Compagnons','spark']]:state.role==='parent'?[['home','Vue d’ensemble','home'],['planning','Son planning','calendar'],['progress','Ses progrès','graph'],['family','À la maison','book'],['companions','Compagnons','spark']]:[['home','Mon espace','home'],['courses','Mes cours','book'],['planning','Mon planning','calendar'],['progress','Mes progrès','graph'],['challenges','Mes défis','spark'],['companions','Compagnons','users']];} function readRoute(){const [role,page]=location.hash.slice(1).split('/');state.role=roles[role]?role:'student';state.page=page||'home';if(!routes().some(r=>r[0]===state.page))state.page='home';} function shell(){const r=roles[state.role];return `
Maquette interactive · profils et semaine fictifs · aucune donnée transmise
${body()}${sub}
16 h 30 – 17 h 30 · Mathématiques
${caption}
Comprendre les fractions peut débloquer les équations.
':portrait(state.companion,'hero-companion')}Trois questions pour comprendre ce qui bloque, et retrouver le déclic.
${action('Commencer mon défi','quiz','orange')}3 minutes · À partir de ton cours de mathsOn cherche la prochaine étape ensemble.
Une priorité par élève, à valider avec ce que tu observes en séance.
PROCHAINE SÉANCE · ${s.lesson}
${s.goal}
${s.description}
${notion(s.notion||(state.selected==='Lucas'?'Vocabulaire du cours':state.selected==='Lea'?'Équations':'Fractions'),s.progress,'','Repère fictif pour préparer la séance.')}Note de démonstration, conservée uniquement jusqu’au rechargement.
Emma travaille les fractions pour avancer ensuite dans les équations. Camille reprendra ce point avec elle jeudi.
L’accès parents est inclus avec celui de l’élève. Ce suivi présente les progrès et le planning ; les conversations détaillées restent hors de cette vue.
`;} function courses(){return `${heading('LE POINT DE DÉPART','Tes cours. Ton terrain.','George t’accompagne sur les notions que tu travailles vraiment.')}Devoir de mathématiques · chapitre 4
Objectif : additionner des fractions, puis isoler x.
Allemand · vocabulaire du quotidien
Objectif : retrouver 8 mots du cours sans aide.
${state.attachment?esc(state.attachment)+' · aperçu du nom uniquement. Aucun fichier envoyé.':'PDF ou image · cette maquette affiche le nom du fichier, sans le lire ni l’envoyer.'}
Les exemples ci-dessus sont déjà préparés. L’analyse d’un vrai devoir et la génération d’exercices seront raccordées au projet George.
${s.goal}
${coach?'Les séances affichées sont fictives.':'Les changements de la démo restent dans cette visite ; ils ne sont pas envoyés au coach.'}
`;} function progress(){return `${heading('COMPRENDRE LES LIENS','Une base solide. Puis la suite.','Parcours d’Emma · des repères par notion pour choisir le prochain petit pas.')}Le point à travailler : comprendre que des fractions doivent représenter des parts de même taille avant de les additionner.
Ces repères sont illustratifs, pas des notes scolaires. Le défi de cette maquette ne modifie pas ces pourcentages.
${state.role==='student'?action('Vérifier ma compréhension','quiz','purple'):''}${count} réponse${count>1?'s':''} correcte${count>1?'s':''} sur 3
Résultat de cette visite uniquement. Rien n’est envoyé au coach ni enregistré dans un dossier élève.
${q.q}
Accompagnement préparé pour cette maquette. L’assistant réel et l’analyse des devoirs ne sont pas encore connectés.
Séance fictive avec Camille Martin · Mathématiques
Avant la séance : préparer le devoir du chapitre 4 et noter une question.
Pendant : représenter les fractions, puis expliquer sa méthode.
Après : vérifier la compréhension avec un exercice différent.
Lis les mots, cache leur traduction, puis essaie de les retrouver.
${[['das Buch','le livre'],['die Schule','l’école'],['der Tag','le jour'],['das Haus','la maison'],['lernen','apprendre'],['lesen','lire'],['schreiben','écrire'],['verstehen','comprendre']].map(([a,b])=>`${b}
Liste d’illustration, à remplacer par le vrai vocabulaire du cours.
`);break;}}); document.addEventListener('change',e=>{if(e.target.dataset.move&&state.role==='student'){const t=state.tasks.find(t=>t.id===Number(e.target.dataset.move));t.day=e.target.value;render();document.getElementById('day-'+t.id)?.focus();toast('Planning ajusté pour cette visite.');}if(e.target.id==='course-file'){const f=e.target.files[0];state.attachment=f?f.name:'';document.getElementById('file-status').textContent=f?f.name+' · aperçu du nom uniquement. Aucun fichier envoyé.':'Aucun fichier sélectionné.';}}); document.addEventListener('input',e=>{if(e.target.id==='coach-note'){state.note=e.target.value;state.coachSaved=false;const b=document.querySelector('#coach-form button');if(b)b.innerHTML='Valider cet objectif '+icon('check');}}); document.addEventListener('submit',e=>{if(e.target.id==='coach-form'){e.preventDefault();state.note=document.getElementById('coach-note').value;state.coachSaved=true;render();toast('Objectif enregistré dans la démo, pour cette visite.');}}); window.addEventListener('hashchange',()=>{if(dialog.open)dialog.close();readRoute();render();window.scrollTo(0,0);}); Object.assign(state,{companion:'george',subjectFilter:'Tout',activeTopic:'fractions',quizLabel:'Mathématiques · Fractions',quizResults:{}}); Object.assign(students,{ Nora:{name:'Nora Martins',initials:'NM',subject:'Français',notion:'Accords sujet-verbe',issue:'Retrouver le noyau du sujet',progress:55,description:'Nora accorde parfois le verbe avec le nom le plus proche. Travailler sur les groupes sujets qui contiennent un complément.',lesson:'Jeudi 12 · 17 h 30',goal:'Identifier le noyau du sujet dans trois phrases avant de conjuguer le verbe.'}, Sami:{name:'Sami Benali',initials:'SB',subject:'Sciences',notion:'Cycle de l’eau',issue:'Distinguer les changements d’état',progress:46,description:'Sami confond condensation et évaporation. Relier les mots à deux observations concrètes : une flaque et une vitre embuée.',lesson:'Vendredi 13 · 14 h 00',goal:'Expliquer le sens de deux changements d’état à partir d’exemples.'}, Chloe:{name:'Chloé Meyer',initials:'CM',subject:'Anglais',notion:'Présent simple',issue:'Utiliser does sans doubler le -s',progress:68,description:'Chloé réussit les phrases affirmatives mais conserve parfois le -s après does. Comparer affirmation, question et négation.',lesson:'Vendredi 13 · 16 h 00',goal:'Transformer trois phrases au présent simple en questions et négations.'} }); readRoute();render();