#!/usr/bin/env python3
"""Generate T06 and T07 e-learning HTML files."""
import os

OUT = "/root/projects/jg/2026-PM-eLearning/deliverables"

CSS = """
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:Calibri,Arial,sans-serif;background:#e8f4f8;color:#1F2937;line-height:1.7}
.progress-bar{position:sticky;top:0;z-index:100;background:#003366;padding:12px 20px;box-shadow:0 2px 8px rgba(0,0,0,.2)}
.progress-bar .fill{height:6px;background:linear-gradient(90deg,#f39c12,#27ae60);border-radius:3px;transition:width .4s}
.progress-bar .label{color:#fff;font-size:13px;margin-bottom:4px}
.container{max-width:900px;margin:20px auto;padding:0 20px}
.welcome{background:linear-gradient(135deg,#003366,#1a5276);color:#fff;padding:60px 40px;border-radius:12px;text-align:center;margin-bottom:30px;box-shadow:0 4px 15px rgba(0,51,102,.3)}
.welcome h1{font-size:28px;margin-bottom:10px}
.welcome p{font-size:16px;opacity:.9}
.btn{display:inline-block;padding:14px 40px;background:#f39c12;color:#fff;border:none;border-radius:8px;font-size:16px;cursor:pointer;margin-top:20px;transition:all .3s;box-shadow:0 3px 10px rgba(243,156,18,.4)}
.btn:hover{background:#e67e22;transform:translateY(-2px);box-shadow:0 5px 15px rgba(243,156,18,.5)}
.module{background:#fff;border-radius:10px;padding:30px;margin-bottom:20px;box-shadow:0 2px 10px rgba(0,0,0,.08);display:none}
.module.active{display:block}
.module h2{color:#003366;font-size:20px;margin-bottom:15px;padding-bottom:10px;border-bottom:2px solid #e8f4f8}
.module p{margin-bottom:12px;font-size:14px}
.tip-box{background:#fff8e1;border-left:4px solid #f39c12;padding:15px;margin:15px 0;border-radius:0 8px 8px 0}
.tip-box h4{color:#e67e22;margin-bottom:5px}
.pm-box{background:#e8f4f8;border-left:4px solid #003366;padding:15px;margin:15px 0;border-radius:0 8px 8px 0}
.pm-box h4{color:#003366;margin-bottom:5px}
.check-q{background:#f0f4f8;padding:15px;border-radius:8px;margin:15px 0}
.check-q p{font-weight:bold;margin-bottom:8px}
.check-q label{display:block;padding:6px 10px;margin:3px 0;background:#fff;border-radius:5px;cursor:pointer;transition:.2s}
.check-q label:hover{background:#e8f4f8}
.check-q input{margin-right:8px}
.feedback{padding:10px;border-radius:6px;margin-top:8px;display:none;font-size:14px}
.feedback.ok{background:#d4edda;color:#155724;display:block}
.feedback.nok{background:#f8d7da;color:#721c24;display:block}
.quiz-section{display:none;background:#fff;border-radius:10px;padding:30px;margin-bottom:20px;box-shadow:0 2px 10px rgba(0,0,0,.08)}
.quiz-section h2{color:#003366;margin-bottom:20px}
.quiz-q{background:#f8f9fa;padding:15px;border-radius:8px;margin-bottom:15px}
.quiz-q p{font-weight:bold;margin-bottom:8px}
.quiz-q label{display:block;padding:6px 10px;margin:3px 0;background:#fff;border-radius:5px;cursor:pointer}
.quiz-q label:hover{background:#e8f4f8}
.cert-section{display:none;background:#fff;border-radius:10px;padding:40px;margin-bottom:20px;box-shadow:0 2px 10px rgba(0,0,0,.08);text-align:center}
.cert-section input{padding:10px;font-size:16px;border:2px solid #e8f4f8;border-radius:6px;width:250px;margin:10px}
.cert{border:3px solid #003366;padding:40px;margin-top:20px;border-radius:10px;background:linear-gradient(135deg,#fefefe,#f8f9fa)}
.cert h2{color:#003366;font-size:24px}
.cert p{font-size:16px;margin:8px 0}
.nav{display:flex;justify-content:space-between;margin-top:20px}
.nav button{padding:10px 25px;border:none;border-radius:6px;font-size:14px;cursor:pointer;transition:.3s}
.nav .prev{background:#e8f4f8;color:#003366}
.nav .next{background:#003366;color:#fff}
.nav button:hover{opacity:.85;transform:translateY(-1px)}
.score-display{font-size:20px;color:#003366;font-weight:bold;margin:15px 0}
</style>
"""

def gen_html(title, code, modules_data, quiz_data):
    """Generate complete HTML from data."""
    # Modules HTML
    modules_html = ""
    for i, (icon, heading, paragraphs, tip, pm, cq_question, cq_options, cq_correct, cq_explain) in enumerate(modules_data):
        paras_html = "".join(f"<p>{p}</p>" for p in paragraphs)
        opts_html = "".join(f'<label><input type="radio" name="cq{i}" value="{j}" onclick="checkCq({i},{j},{cq_correct},this)">{o}</label>' for j, o in enumerate(cq_options))
        modules_html += f"""
        <div class="module" id="mod{i}">
            <h2>{icon} {heading}</h2>
            {paras_html}
            <div class="tip-box"><h4>📖 Wist je dat?</h4><p>{tip}</p></div>
            <div class="pm-box"><h4>🏭 Phoenix Metals Praktijk</h4><p>{pm}</p></div>
            <div class="check-q"><p>{cq_question}</p>{opts_html}<div class="feedback" id="fb{i}"></div></div>
            <div class="nav">
                <button class="prev" onclick="showMod({i-1})">⬅ Vorige</button>
                <button class="next" onclick="showMod({i+1})">Volgende ➡</button>
            </div>
        </div>"""
    
    # Quiz HTML
    quiz_html = ""
    for i, (q, opts, correct) in enumerate(quiz_data):
        opts_h = "".join(f'<label><input type="radio" name="q{i}" value="{j}">{o}</label>' for j, o in enumerate(opts))
        quiz_html += f'<div class="quiz-q"><p>{i+1}. {q}</p>{opts_h}</div>'
    
    total = len(modules_data)
    
    return f"""<!DOCTYPE html><html lang="nl"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>{title} — Phoenix Metals e-Learning</title>{CSS}</head><body>
<div class="progress-bar"><div class="label" id="pLabel">Welkom</div><div class="fill" id="pFill" style="width:0%"></div></div>
<div class="container">
<div class="module active" id="welcome"><div class="welcome"><h1>{title}</h1><p>Phoenix Metals B.V. — Code: {code}</p><p>Interactieve e-learning met theoriemodules, praktijkvoorbeelden en quiz</p><button class="btn" onclick="showMod(0)">Start Training ➡</button></div></div>
{modules_html}
<div class="quiz-section" id="quiz"><h2>📝 Kennistoets</h2><p>Beantwoord alle vragen. Je hebt minimaal 80% correct nodig om te slagen.</p>{quiz_html}
<button class="btn" onclick="calcQuiz()" style="margin-top:15px">Bereken Score</button>
<div class="score-display" id="scoreDisp"></div>
<div id="quizResult"></div></div>
<div class="cert-section" id="cert"><h2>🎓 Certificaat</h2><p>Je bent geslaagd! Vul je naam in om je certificaat te genereren.</p>
<input type="text" id="certName" placeholder="Je volledige naam">
<button class="btn" onclick="genCert()">Genereer Certificaat</button>
<div class="cert" id="certDoc" style="display:none"><h2>CERTIFICAAT</h2><p>Dit certificaat wordt verleend aan</p><h3 id="certN"></h3><p>voor het succesvol afronden van de training</p><h3>{title}</h3><p>Score: <span id="certS"></span> — Datum: <span id="certD"></span></p><p>Phoenix Metals B.V. | JvG Consultancy</p></div></div>
</div>
<script>
let cur=-1,total={total},qTotal={qtotal};
function showMod(n){{
if(n<0){{document.querySelectorAll('.module').forEach(m=>m.style.display='none');document.getElementById('welcome').style.display='block';document.getElementById('pFill').style.width='0%';document.getElementById('pLabel').textContent='Welkom';cur=-1;return}}
if(n>={total}){{document.querySelectorAll('.module').forEach(m=>m.style.display='none');document.getElementById('quiz').style.display='block';document.getElementById('pFill').style.width='90%';document.getElementById('pLabel').textContent='Kennistoets';cur={total};return}}
document.querySelectorAll('.module').forEach(m=>m.style.display='none');document.getElementById('quiz').style.display='none';
let el=document.getElementById('mod'+n);if(el){{el.style.display='block';cur=n;let pct=Math.round((n+1)/{total}*85)+5;document.getElementById('pFill').style.width=pct+'%';document.getElementById('pLabel').textContent='Module '+(n+1)+' van {total}'}}}}
function checkCq(m,n,ok,el){{
let fb=document.getElementById('fb'+m);fb.className='feedback '+(n===ok?'ok':'nok');fb.textContent=n===ok?'✅ Correct!':'❌ '+el.parentNode.querySelector('label:nth-child('+(n+1)+')')?.textContent?.trim()?.substring(0,5)+'. '+ok}}
function calcQuiz(){{
let s=0;for(let i=0;i<qTotal;i++){{let r=document.querySelector('input[name=q'+i+']:checked');if(r&&parseInt(r.value)==quizAns[i])s++}}
let pct=Math.round(s/qTotal*100);document.getElementById('scoreDisp').textContent=s+'/'+qTotal+' ('+pct+'%)'+(pct>=80?' ✅ GESLAAGD':' ❌ NIET GESLAAGD');
if(pct>=80){{document.getElementById('cert').style.display='block';document.getElementById('quiz').style.display='none';document.getElementById('pFill').style.width='100%';document.getElementById('pLabel').textContent='Certificaat';window.scorePct=pct}}}}
function genCert(){{let n=document.getElementById('certName').value;if(!n){{alert('Vul je naam in');return}}document.getElementById('certN').textContent=n;document.getElementById('certS').textContent=window.scorePct+'%';document.getElementById('certD').textContent=new Date().toLocaleDateString('nl-NL');document.getElementById('certDoc').style.display='block'}}
let quizAns=[{quiz_answers}];
</script></body></html>"""

# ===== T06 DATA =====
t06_modules = [
    ("🔧", "Module 1 — Waarom Nooduitrusting Essentieel Is",
     ["Nooduitrusting is de eerste verdedigingslinie bij chemische incidenten op de werkvloer. Bij Phoenix Metals werken we met stoffen die ernstige brandwonden (H₂SO₄, NaOH), giftige blootstelling (V₂O₅) en brandgevaar kunnen veroorzaken. De juiste uitrusting op de juiste plaats kan het verschil betekenen tussen een klein incident en een blijvend letsel.",
      "De Arbowet (artikel 3) verplicht de werkgever om adequate nooduitrusting beschikbaar te stellen en medewerkers te trainen in het gebruik ervan. De NEN-EN 15154 norm specificeert de eisen voor nooddouches en oogdouches in industriële omgevingen. Non-compliance kan leiden tot boetes, aansprakelijkheid en — belangrijker — onnodig leed.",
      "Statistieken tonen aan dat bij chemische brandwonden de eerste 10 seconden cruciaal zijn. Elke seconde wachttijd verdubbelt de ernst van de brandwond ongeveer. Dit betekent dat de afstand tot de dichtstbijzijnde oogdouche of nooddouch maximaal 10 seconden loopafstand (ongeveer 15 meter) mag bedragen.",
      "De kosten van inadequate nooduitrusting gaan verder dan het letsel zelf: productiestilstand, medische kosten, Arbeidsinspectie-onderzoek, mogelijke boetes, en niet te vergeten het verlies van vertrouwen bij medewerkers. Een goed onderhouden nooduitrustingspakket is een investering die zich direct terugverdient.",
      "Bij Phoenix Metals bevinden zich specifieke risico's die directe toegang tot nooduitrusting vereisen: de H₂SO₄-opslag (bijtende vloeistof), de NaOH-doseereenheid (bijtende base), het vanadiumverwerkingsgedeelte (toxisch stof V₂O₅) en de algemene procesruimte waar meerdere risico's samenkomen."],
     "De eerste nooddouche werd in 1939 gepatenteerd in de VS na een serie chemische brandwonden in een rubberfabriek. Sindsdien is de technologie nauwelijks veranderd — het principe blijft: direct en overvloedig spoelen met water.",
     "Bij Phoenix Metals PlantOne IJmuiden staan oogdouches bij elke chemische werkplek: H₂SO₄-opslag (gebouw A, noordzijde), NaOH-doseerstation (gebouw B, oost), en het V₂O₅ verwerkingsgebied (gebouw C, zuid). De maximale loopafstand is 12 meter vanaf elke werkplek.",
     "Wat is de maximale loopafstand tot een oogdouche volgens NEN-EN 15154?",
     ["15 meter", "25 meter", "50 meter", "100 meter"], 0,
     "15 meter — dit komt overeen met ongeveer 10 seconden looptijd."),
    
    ("👁️", "Module 2 — Oogdouches: Locatie, Bediening en Spoeltijd",
     ["Oogdouches zijn ontworpen om beide ogen tegelijkertijd te spoelen met een zachte, gelijkmatige waterstraal. Bij Phoenix Metals gebruiken we zowel wandmodellen (vast aangesloten op waterleiding) als draagbare oogdoucheflessen (voor veldwerk en locaties zonder leidingaansluiting).",
      "De spoeltijd bij blootstelling aan zuren (H₂SO₄) of basen (NaOH) is minimaal 15 minuten continue spoeling. Dit lijkt lang, maar is noodzakelijk om de pH-waarde van het oogoppervlak weer naar een veilig niveau (pH 6.5-7.5) te brengen. Bij twijfel altijd langer spoelen — nooit korter.",
      "De watertemperatuur moet tussen 15°C en 25°C zijn. Te koud water kan leiden tot onderkoeling bij langdurig spoelen. Te warm water verergert de brandwond. De tepid-water eis uit NEN-EN 15154 vereist eventueel een temperatuurregelaar op de wateraansluiting.",
      "Bediening: (1) активируer de oogdouche door de hendel naar beneden te drukken of het pedaal in te trappen, (2) houd de ogen open met de vingers als de medewerker dit niet zelf kan, (3) laat het water minimaal 15 minuten stromen, (4) verwijder contactlenzen zo snel mogelijk, (5) bel altijd 112 of de interne BHV'er bij chemische blootstelling.",
      "Wekelijkse spoelbeurt: elke oogdouche moet wekelijks worden geactiveerd gedurende 3 minuten om stagnatie en bacteriegroei in de leidingen te voorkomen. De HSE Supervisor noteert dit in het oogdouche-logboek met datum en bevindingen (water helder? voldoende druk? geen lekkages?)."],
     "Contactlenzen kunnen chemicaliën vasthouden tegen het oog. Verwijder ze ALWAYS zo snel mogelijk bij blootstelling. Draag daarom bij voorkeur geen contactlenzen bij werk met gevaarlijke stoffen.",
     "Bij de H₂SO₄-opslag in PlantOne IJmuiden (gebouw A) hangt de oogdouche direct naast de deur, op ooghoogte (1.45m). Het is de eerste handeling bij elke H₂SO₄-expositie: oogdouche → nooddouche → alarmering → arts.",
     "Wat is de MINIMUM spoeltijd bij blootstelling aan H₂SO₄ in de ogen?",
     ["5 minuten", "10 minuten", "15 minuten", "30 minuten"], 2,
     "15 minuten minimaal. Bij twijfel langer spoelen. Altijd medische hulp inschakelen."),

    ("🚿", "Module 3 — Nooddouches: Snelheid Reddt Ledematen",
     ["Nooddouches spoelen het hele lichaam bij grootschalige chemische blootstelling. Bij Phoenix Metals staan nooddouches op elke werkplek waar met H₂SO₄, NaOH of andere bijtende stoffen wordt gewerkt. Ze zijn altijd gecombineerd met een oogdouche in één unit.",
      "De bediening is simpel maar moet instinctief zijn: trek de hendel naar beneden of druk het pedaal in. Het water moet onmiddellijk stromen met voldoende volume (minimaal 75 liter per minuut). Trek kleding UIT terwijl je onder de douche staat — kleding kan chemicaliën vasthouden tegen de huid.",
      "Spoeltijd: minimaal 15 minuten bij zuren en basen. Bij twijfel: langer spoelen. Het water spoelt niet alleen de chemische stof weg, maar koelt ook de huid en verdunt restanten. Stop NIET met spoelen voordat medische hulp arriveert, tenzij de medewerker in gevaar is.",
      "De waterkwaliteit moet drinkbaar zijn (potable water). Stagnant water in leidingen kan Legionella bevatten. Daarom is de wekelijkse spoelbeurt niet alleen een functionele test maar ook een preventieve maatregel tegen bacteriële besmetting.",
      "Na gebruik van een nooddouche bij chemisch incident: (1) minimaliseer afvalwater — vang op in het opvangbak als beschikbaar, (2) rapporteer het incident in Ultimo, (3) laat de nooddouche inspecteren en indien nodig reinigen door de HSE Supervisor, (4) vervang verbruikte materialen (handdoeken, dekens)."],
     "Nooddouches leveren minimaal 75 liter per minuut — dat is 1.125 liter bij 15 minuten spoelen. Zorg dat de afvoer dit volume aankan. Bij Phoenix Metals is de afvoer aangesloten op het chemisch afwater systeem, NIET op het regenwater.",
     "De nooddouche bij het NaOH-doseerstation (Rotterdam) is uitgerust met een oogdouche-combinatie en een automatisch alarm: bij activatie gaat een lokaal signaal af dat de HSE Supervisor en de centrale melding bereikt.",
     "Wat moet je ALS EERST doen bij chemische blootstelling aan het hele lichaam?",
     ["Een arts bellen", "Onder de nooddouche springen en kleding uittrekken", "Een incidentrapport schrijven", "Collega's waarschuwen"], 1,
     "Onder de nooddouche en kleding uittrekken. Elke seconde telt — spoelen heeft prioriteit boven alarmering."),

    ("🏥", "Module 4 — EHBO-kits: Inhoud en Locaties",
     ["Elke werkplek bij Phoenix Metals beschikt over minimaal één EHBO-kit conform NEN 4003. De kit bevat: steriele verbanddozen (diverse formaten), snelverband, drukverband, ontsmettingsmiddel (alcohol 70% of chloorhexidine), hechtpleisters, schaar (metaal, rond punt), pincet, wegwerphandschoenen (nitril), pijnstiller (paracetamol), brandwondengel, een EHBO-handleiding en een oogbadje.",
      "Locaties bij Phoenix Metals: (1) receptie/ingang gebouw A, (2) H₂SO₄-opslaggebied, (3) NaOH-doseerstation, (4) V₂O₅ verwerkingshal, (5) kantoorpand, (6) werkplaats onderhoud. Elke kit is gemarkeerd met een wit kruis op een groene achtergrond en hangt op ooghoogte aan de muur.",
      "Aanvulling: de HSE Supervisor controleert en vult elke EHBO-kit trimestrieel (elke 3 maanden) aan. Verbruikte materialen worden direct vervangen na elk incident. De checklist staat op de binnenzijde van de kit-deksel: vink aan wat gebruikt is, datum, en naam.",
      "Belangrijk: EHBO-kits zijn voor EERSTE hulp. Bij ernstig letsel (brandwonden >10% lichaamsoppervlak, chemische blootstelling ogen, bewusteloosheid, vermoeden van inwendige blootstelling): altijd 112 bellen. De kit is een brug naar professionele hulp, geen vervanging.",
      "Specifieke toevoegingen Phoenix Metals: naast de standaard NEN 4003 inhoud bevat elke kit bij de chemische werkplekken ook pH-neutrale oogspoelvloeistof (500ml) voor snelle eerste spoeling vóór de oogdouche bereikt kan worden."],
     "Een verbanddoos heeft een houdbaarheidsdatum! Steriele verbanden zijn meestal 5 jaar houdbaar in ongeopende verpakking. Controleer dit bij elke trimestriële inspectie.",
     "Na het incident van 12 maart 2024 (kleine H₂SO₄ spettering op onderarm) is besloten om bij elke H₂SO₄/NaOH werkplek een extra fles pH-neutrale oogspoelvloeistof (500ml) toe te voegen aan de EHBO-kit. Dit geeft directe eerste verlichting binnen 2 seconden bereik.",
     "Hoe vaak worden EHBO-kits bij Phoenix Metals gecontroleerd en aangevuld?",
     ["Wekelijks", "Maandelijks", "Trimestrieel (elke 3 maanden)", "Jaarlijks"], 2,
     "Trimestrieel door de HSE Supervisor, plus direct na elk incident."),

    ("📡", "Module 5 — Gasdetectieapparatuur: De Neus van de Veiligheid",
     ["Gasdetectieapparatuur is onmisbaar in een omgeving waar giftige, brandbare of verstikkende gassen kunnen vrijkomen. Bij Phoenix Metals gebruiken we 4-gas detectoren die continu O₂ (zuurstof), LEL (Lower Explosive Limit), H₂S (waterstofsulfide) en CO (koolmonoxide) meten.",
      "Alarmdrempels: O₂ alarm bij <19.5% (zuurstoftekort) of >23.5% (verhoogd brandgevaar); LEL alarm bij >10% (potentiële explosieve atmosfeer); H₂S alarm bij >10 ppm (giftig, rotte-eiengeur); CO alarm bij >25 ppm (giftig, reukloos!). Deze drempels conformeren aan de Europese normen EN 45544 en EN 60079.",
      "Bediening: (1) zet de detector aan (power knop 3 seconden indrukken), (2) wacht op de opwarmtijd (~30 seconden), (3) voer een nulstelling uit in schone lucht (fresh air calibration), (4) lees de waarden af op het display, (5) bij alarm: FLUITsignaal + trilfunctie + rood knipperlicht — direct actie ondernemen!",
      "Bump-test vs kalibratie: een bump-test (functionele test met bekend gas) moet DAGELIJK voor gebruik worden uitgevoerd. Een volledige kalibratie (2-punts met null en span gas) is MAANDELIJKS verplicht. De HSE Supervisor beheert het kalibratielogboek en dekalibratiegassen.",
      "Toepassing bij Phoenix Metals: (1) vóór entry in besloten ruimten (silos, tanks) — verplicht 4-gas meting, (2) bij werkzaamheden nabij H₂SO₄ opslag (mogelijke SO₂ emissie), (3) bij verdachte geur of onverklaarbare klachten (hoofdpijn, duizeligheid = mogelijke CO/H₂S blootstelling), (4) tijdens LOTO-werkzaamheden in afgesloten ruimtes."],
     "Waterstofsulfide (H₂S) verdooft het reukzenuwstelsel bij concentraties boven 100 ppm. Je ruikt het NIET meer terwijl het dodelijk wordt. Vertrouw dus NOOIT op je neus — altijd de gasdetector gebruiken!",
     "Bij de V₂O₅ verwerkingslijn in PlantOne IJmuiden hangen 2 vaste gasdetectoren (O₂ + stofconcentratie). Daarnaast zijn er 4 draagbare 4-gas detectoren beschikbaar bij de HSE Supervisor voor werkplekinspecties en entry in besloten ruimten.",
     "Wat is het verschil tussen een bump-test en een kalibratie?",
     ["Bump-test = volledige kalibratie, beide zijn hetzelfde", "Bump-test = dagelijkse functionele test; kalibratie = maandelijkse 2-punts ijking", "Bump-test = maandelijks; kalibratie = jaarlijks", "Bump-test = alleen bij twijfel; kalibratie = altijd voor gebruik"], 1,
     "Bump-test dagelijks (functioneel), kalibratie maandelijks (2-punts). Beide verplicht!"),

    ("😤", "Module 6 — Ademluchttoestellen: Bescherming bij Toxiciteit",
     ["Ademluchttoestellen (persluchtmaskers) bieden bescherming tegen inademing van giftige stoffen waarvoor geen filtermasker (FFP3) toereikend is. Bij Phoenix Metals zijn persluchttoestellen beschikbaar voor noodsituaties met hoge V₂O₅-concentraties of H₂SO₄-damp.",
      "Gebruiksduur: een standaard perslucht fles (6 liter, 300 bar) levert ongeveer 30 minuten ademlucht bij normaal ademhalingsritme. Bij zware inspanning (nood evacuatie, reddingswerk) kan dit dalen tot 15-20 minuten. Plan altijd een veiligheidsmarge van minimaal 10 minuten voor terugtocht.",
      "Inspectie checklist (VOOR elk gebruik): (1) flesdruk controleren (moet ≥200 bar zijn), (2) masker visueel inspecteren (geen scheuren, goed elastiek), (3) regulator testen (ademhaling moet soepel gaan), (4) alarm-test (fluit bij lage druk ≈50 bar), (5) aansluitingen controleren (geen lekkage).",
      "Wanneer gebruiken bij Phoenix Metals: (1) bij V₂O₅ stofwolk (concentratie > IAD waarde 0.25 mg/m³ — FFP3 is dan onvoldoende), (2) bij H₂SO₄ damp in afgesloten ruimte, (3) bij reddingsactie in besloten ruimte (silos, tanks), (4) ALTIJD bij gasalarm als je niet direct kunt evacueren.",
      "Beperkingen: (1) beperkte werktijd (30 min), (2) beperkte bewegingsvrijheid (fles op rug), (3) training vereist — niet zomaar aantrekken zonder oefening, (4) niet gebruiken onder water of in zuurstofverrijkte atmosfeer (>23.5% O₂ = brandgevaar). Jaarlijkse training met praktijkoefening is verplicht."],
     "De eerste persluchttoestellen werden gebruikt door brandweermannen in de late 19e eeuw. Ze wogen meer dan 30 kg en hadden een werktijd van slechts 10 minuten. Moderne apparatuur weegt ~15 kg en biedt 30+ minuten.",
     "Phoenix Metals beschikt over 2 persluchttoestellen, opgeslagen in de HSE-kast bij gebouw C (V₂O₅ verwerking) en bij de receptie (noodinval). Beide worden maandelijks geïnspecteerd door de HSE Supervisor. Jaarlijkse keuring door een erkend bedrijf is gedocumenteerd.",
     "Wat is de MINIMUMdruk van een persluchtfles voordat deze als bruikbaar wordt beschouwd?",
     ["100 bar", "150 bar", "200 bar", "300 bar"], 2,
     "200 bar. Bij <200 bar: fles vervangen. Bij 50 bar gaat het reserve-alarm af."),

    ("🧹", "Module 7 — Sorptiemateriaal: Niet Alle Absorbers zijn Gelijk",
     ["Sorptiemateriaal (absorber) is ontworpen om chemische vloeistoffen veilig op te nemen en te binden. Bij Phoenix Metals is het CRUCIAAL om het juiste type te gebruiken: zuur-absorbent voor H₂SO₄ en base-absorbent voor NaOH. Universele absorbers zijn NIET geschikt voor geconcentreerde zuren en basen!",
      "Typen sorptiemateriaal: (1) Zuursorb — specifiek voor zuren (H₂SO₄), neemt het zuur op en neutraliseert deels, (2) Base-sorb — specifiek voor basen (NaOH), (3) Universele polypropyleen rolls/kussens — ALLEEN voor olie en niet-agressieve vloeistoffen, NIET voor H₂SO₄/NaOH!",
      "Formats: rolls (voor grote oppervlakken), kussens (voor gerichte absorptie onder lekken), booms/socks (voor het afdammen van vloeistoffen), pads (voor kleinere morsingen). Bij Phoenix Metals liggen zuursorb-kussens bij de H₂SO₄-opslag en base-sorb-kussens bij het NaOH-doseerstation.",
      "Procedure bij een H₂SO₄ lekkage: (1) alarmeer HSE Supervisor, (2) draag PBM (zuurbestendige handschoenen EN 374, gezichtsbeschermer, zuurbestendig schort), (3) dam de vloeistof in met booms, (4) strooi zuursorb over het lek, (5) laat absorberen (wacht 5-10 min), (6) veeg op met plastic schep in gelabelde chemisch-afval container, (7) neutraliseer resterend oppervlak met natriumbicarbonaat oplossing, (8) spoel met water.",
      "Verwijdering: al het met H₂SO₄ of NaOH verzadigde sorptiemateriaal wordt afgevoerd als chemisch afval (gevaarlijk afval, Eural-code 15 02 02). NOOIT in de gewone afvalcontainer! De chemisch afval container staat bij de H₂SO₄-opslag en wordt maandelijks afgevoerd door een erkend afvalverwerkingsbedrijf."],
     "1 liter H₂SO₄ (98%) heeft 1.5-2 kg zuursorb nodig voor volledige absorptie. Houd altijd minimaal 5 kg zuursorb per H₂SO₄-opslaglocatie op voorraad.",
     "Na het incident van februari 2024 (H₂SO₄ lekkage uit ventiel, ~2 liter) bleek dat de universele absorber onvoldoende werkte — het zuur doorboorde het materiaal. Sindsdien is specifiek zuursorb (gele verpakking) standaard bij elke H₂SO₄-locatie op voorraad.",
     "Welk sorptiemateriaal gebruik je bij een H₂SO₄ lekkage?",
     ["Universele polypropyleen roll", "Zuur-absorbent (Zuursorb)", "Base-absorbent", "Zand"], 1,
     "Zuur-absorbent (Zuursorb). Universeel is NIET geschikt voor geconcentreerde zuren!"),

    ("🧯", "Module 8 — Blusdekens en Brandblussers: Snelheid en Keuze",
     ["Blusdekens zijn gemaakt van brandwerend materiaal (glasvezel of geweven silica) en worden gebruikt om kleine branden te smoren door zuurstof af te sluiten. Ze zijn ideaal voor: kledingbrand, kleine branden op een werkplek, en als eerste maatregel bij een brand tot de brandblusser wordt aangebracht.",
      "Brandblussers bij Phoenix Metals: (1) Poederblusser 6 kg ABC (geel) — multi-inzetbaar voor brandklassen A (vast), B (vloeistof), C (gas) en beginnende elektrische branden. Staat bij elke uitgang en op elke werkplek. (2) CO₂-blusser 5 kg (zwart) — specifiek voor elektrische branden en brandklasse B (vloeistoffen). Staat bij de schakelkast en E&I werkplekken.",
      "Locatiekaart Phoenix Metals PlantOne: (A) Ingang gebouw A — poeder 6kg, (B) H₂SO₄-opslag — poeder 6kg + CO₂ 5kg, (C) V₂O₅ verwerking — poeder 6kg, (D) NaOH-doseerstation — poeder 6kg, (E) Werkplaats onderhoud — poeder 6kg + CO₂ 5kg, (F) Kantoor — poeder 6kg. Rotterdam: identieke indeling per zone.",
      "Wanneer de blusdeken gebruiken: (1) kledingbrand (persoon in brand — wikkelen en op de grond rollen), (2) kleine brand in een bak/gereedschap (deken erover = zuurstof weg), (3) brandende vloeistof in een beperkte opvangbak. NIET gebruiken bij: metaalbranden (klasse D), grote branden, of waar evacuatie prioriteit heeft.",
      "POEDERblusser PAS OP: het poeder is zeer fijn stof dat zicht op nul reduceert en ingeademd kan worden. Bij gebruik in gesloten ruimtes: direct evacueren na blussen. Het poeder is schadelijk voor elektronica — gebruik bij servers/gevoelige apparatuur bij voorkeur CO₂."],
     "Controleer brandblussers maandelijks visueel (drukmeter in groene zone?) en laat ze jaarlijks keuren door een erkend bedrijf. De keuringssticker moet zichtbaar zijn op elke blusser. Bij Phoenix Metals is de Maintenance Manager verantwoordelijk voor de blusser-keuring.",
     "Bij de V₂O₅-verwerking staat een SPECIALE metaalbrand-blusser (klasse D, droog zand/kleurloos poeder) naast de standaard poederblusser. NOOIT water of standaard poeder op een vanadium-metaalbrand — dat veroorzaakt een hevige reactie!",
     "Welke blusser gebruik je bij een elektrische brand in de schakelkast?",
     ["Poederblusser ABC", "CO₂-blusser", "Brandslanghaspel", "Blusdeken"], 1,
     "CO₂-blusser — niet-geleidend, geen schade aan elektronica, geen residu."),

    ("📋", "Module 9 — Inspectie en Onderhoud: De Logistiek van Veiligheid",
     ["Nooduitrusting zonder inspectie is een valse veiligheid. Een oogdouche die niet werkt op het moment dat je hem nodig hebt, is gevaarlijker dan geen oogdouche — want je reken