diff --git a/exercices/Exo_BioCID.html b/exercices/Exo_BioCID.html
index 99d8dd2..bf4fba8 100644
--- a/exercices/Exo_BioCID.html
+++ b/exercices/Exo_BioCID.html
@@ -350,6 +350,40 @@
.scroll-area::-webkit-scrollbar { width: 4px; }
.scroll-area::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
+/* IDENTITY CARD */
+.identity-card {
+ background: white;
+ border: 0.5px solid var(--border);
+ border-radius: 14px;
+ padding: 16px 18px;
+ max-width: 560px;
+ width: 100%;
+ margin: 0.5rem 0;
+}
+.identity-card .identity-title {
+ font-family: 'Syne', sans-serif;
+ font-size: 12px;
+ font-weight: 700;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+ color: var(--amber-dark);
+ margin-bottom: 10px;
+ display: flex; align-items: center; gap: 6px;
+}
+.identity-fields { display: flex; flex-direction: column; gap: 8px; }
+.identity-fields input {
+ font-family: 'DM Sans', sans-serif;
+ font-size: 13.5px;
+ color: var(--text);
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: 10px;
+ padding: 9px 13px;
+ width: 100%;
+ box-sizing: border-box;
+}
+.identity-fields input:focus { outline: none; border-color: var(--amber); background: white; }
+
/* DECO */
.deco-circle { position: fixed; border-radius: 50%; pointer-events: none; z-index: 0; }
.slide > * { position: relative; z-index: 1; }
@@ -426,6 +460,14 @@
🎯
4 exercices vous attendent : recherche par nom, par type, par substance active, puis un cas de synthèse. Durée totale ≈ 30 min.
+
@@ -550,9 +592,10 @@
@@ -664,7 +707,16 @@ function escapeHtml(str) {
return str.replace(/&/g, '&').replace(//g, '>');
}
+function idVal(id) {
+ const el = document.getElementById(id);
+ return el ? el.value.trim() : '';
+}
+
function exporterPDF() {
+ const groupe = idVal('idGroupe');
+ const date = idVal('idDate') || new Date().toISOString().slice(0, 10);
+ const formateur = idVal('idFormateur');
+
const reponses = [];
document.querySelectorAll('.answer-field').forEach(el => {
reponses.push({ question: el.dataset.question || '', reponse: el.value.trim() });
@@ -674,12 +726,21 @@ function exporterPDF() {
`${escapeHtml(r.question)}${escapeHtml(r.reponse) || '(sans réponse)'}
`
).join('');
w.document.write(`
- Exercices BioCID — Réponses
+ Exercices BioCID — Réponses (${escapeHtml(groupe) || 'sans nom'})
- Exercices Pratiques BioCID
${lignes}`);
+
+ Exercices Pratiques BioCID
+ Groupe / Stagiaire : ${escapeHtml(groupe) || '—'}
+ Date de session : ${escapeHtml(date)}
+ Formateur : ${escapeHtml(formateur) || '—'}
+ Réponses aux exercices
+ ${lignes}
+ `);
w.document.close();
setTimeout(() => w.print(), 300);
}
diff --git a/exercices/Exo_FDS.html b/exercices/Exo_FDS.html
index fbb851d..3ab178d 100644
--- a/exercices/Exo_FDS.html
+++ b/exercices/Exo_FDS.html
@@ -336,6 +336,40 @@ select:focus { outline: none; border-color: var(--amber); box-shadow: 0 0 0 3px
.scroll-area::-webkit-scrollbar { width: 4px; }
.scroll-area::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
+/* IDENTITY CARD */
+.identity-card {
+ background: white;
+ border: 0.5px solid var(--border);
+ border-radius: 14px;
+ padding: 16px 18px;
+ max-width: 560px;
+ width: 100%;
+ margin: 0.5rem 0;
+}
+.identity-card .identity-title {
+ font-family: 'Syne', sans-serif;
+ font-size: 12px;
+ font-weight: 700;
+ letter-spacing: 0.05em;
+ text-transform: uppercase;
+ color: var(--amber-dark);
+ margin-bottom: 10px;
+ display: flex; align-items: center; gap: 6px;
+}
+.identity-fields { display: flex; flex-direction: column; gap: 8px; }
+.identity-fields input {
+ font-family: 'DM Sans', sans-serif;
+ font-size: 13.5px;
+ color: var(--text);
+ background: var(--bg);
+ border: 1px solid var(--border);
+ border-radius: 10px;
+ padding: 9px 13px;
+ width: 100%;
+ box-sizing: border-box;
+}
+.identity-fields input:focus { outline: none; border-color: var(--amber); background: white; }
+
/* DECO */
.deco-circle { position: fixed; border-radius: 50%; pointer-events: none; z-index: 0; }
.slide > * { position: relative; z-index: 1; }
@@ -413,6 +447,14 @@ select:focus { outline: none; border-color: var(--amber); box-shadow: 0 0 0 3px
⏱️
Durée ≈ 30 min. Pour chaque question, sélectionnez la zone du document où trouver l'information, puis vérifiez votre score.
+
@@ -523,7 +565,11 @@ select:focus { outline: none; border-color: var(--amber); box-shadow: 0 0 0 3px
Les trois documents sont complémentaires, jamais redondants — chacun cible un besoin et un public différents.
+
@@ -700,6 +746,82 @@ function verifyEtiquette() {
showScore(document.getElementById('etiquette-result'), correct, etiquetteQuestions.length);
}
+/* ======================== EXPORT PDF ======================== */
+function escapeHtml(str) {
+ if (!str) return '';
+ return String(str).replace(/&/g, '&').replace(//g, '>');
+}
+function idVal(id) {
+ const el = document.getElementById(id);
+ return el ? el.value.trim() : '';
+}
+
+// Libellé lisible d'une réponse FDS (numéro de rubrique) et de l'attendu
+function fdsAnswerLabel(v) {
+ if (!v) return '(non répondu)';
+ if (v === 'absent') return 'Absent';
+ return 'Rubrique ' + v;
+}
+function fdsExpectedLabel(answer) {
+ const parts = answer.split(',');
+ if (parts.length > 1) return 'Rubrique ' + parts.join(' ou ');
+ return parts[0] === 'absent' ? 'Absent' : 'Rubrique ' + parts[0];
+}
+function textAnswerLabel(v) {
+ if (!v) return '(non répondu)';
+ return v === 'absent' ? 'Absent' : v;
+}
+
+function isFdsCorrect(q, v) { return v !== '' && q.answer.split(',').includes(v); }
+function isTextCorrect(q, v) { return v !== '' && v === q.answer; }
+
+function exporterPDF() {
+ const groupe = idVal('idGroupe');
+ const date = idVal('idDate') || new Date().toISOString().slice(0, 10);
+ const formateur = idVal('idFormateur');
+
+ let scoreTotal = 0, nbTotal = 0;
+
+ function partHtml(prefix, title, questions, selPrefix, answerLabelFn, expectedLabelFn, correctFn) {
+ const rows = questions.map((q, i) => {
+ const sel = document.getElementById(selPrefix + q.id);
+ const v = sel ? sel.value : '';
+ const ok = correctFn(q, v);
+ nbTotal++; if (ok) scoreTotal++;
+ const mark = v === '' ? '❓' : (ok ? '✓' : '✗');
+ return `
+
[${prefix}-Q${i + 1}] ${escapeHtml(q.text)}
+
Réponse du groupe : ${escapeHtml(answerLabelFn(v))} — Attendu : ${escapeHtml(expectedLabelFn(q.answer))} — ${mark}
+
`;
+ }).join('');
+ return `${title}
${rows}`;
+ }
+
+ const p1 = partHtml('P1', 'Partie 1 — FDS (Fiche de Données de Sécurité)', fdsQuestions, 'fds', fdsAnswerLabel, fdsExpectedLabel, isFdsCorrect);
+ const p2 = partHtml('P2', 'Partie 2 — FT (Fiche Technique)', ftQuestions, 'ft', textAnswerLabel, a => a, isTextCorrect);
+ const p3 = partHtml('P3', 'Partie 3 — Étiquette', etiquetteQuestions, 'eti', textAnswerLabel, a => a, isTextCorrect);
+
+ const w = window.open('', '_blank');
+ w.document.write(`
+ FDS, FT & Étiquettes — Réponses (${escapeHtml(groupe) || 'sans nom'})
+
+
+ TD — FDS, FT & Étiquettes
+ Groupe / Stagiaire : ${escapeHtml(groupe) || '—'}
+ Date de session : ${escapeHtml(date)}
+ Formateur : ${escapeHtml(formateur) || '—'}
+ Score global : ${scoreTotal} / ${nbTotal}
+ ${p1}${p2}${p3}
+ `);
+ w.document.close();
+ setTimeout(() => w.print(), 300);
+}
+
/* ======================== NAVIGATION ======================== */
function goTo(n) {
const cur = document.getElementById('slide-' + currentSlide);
diff --git a/exercices/correction-biocid.html b/exercices/correction-biocid.html
new file mode 100644
index 0000000..a7784af
--- /dev/null
+++ b/exercices/correction-biocid.html
@@ -0,0 +1,507 @@
+
+
+
+
+
+Correction BioCID — Certibiocide
+
+
+
+
+
+
+
+
+
+
Certibiocide — Correction d'exercice
+
Plateforme BioCID — Lecture du rendu
+
+
+
📄
+
Déposez le PDF du groupe ici
+
ou cliquez pour sélectionner le fichier exporté depuis l'exercice BioCID
+
+
+
+
+
+
+
+
+
+
+
+
+
questions renseignées
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/exercices/correction-fds.html b/exercices/correction-fds.html
new file mode 100644
index 0000000..6003004
--- /dev/null
+++ b/exercices/correction-fds.html
@@ -0,0 +1,604 @@
+
+
+
+
+
+Correction FDS, FT & Étiquettes — Certibiocide
+
+
+
+
+
+
+
+
+
+
Certibiocide — Correction de TD
+
FDS, FT & Étiquettes — Correction du rendu
+
+
+
📄
+
Déposez le PDF du groupe ici
+
ou cliquez pour sélectionner le fichier exporté depuis le TD FDS, FT & Étiquettes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+