[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-eval-risque-hantavirus-fr":83,"footer-cities-fr":128},[4,14,22,30,38,45,53,60,67,75],{"seo_content":5,"id":8,"name":9,"slug":10,"parentId":7,"lang":11,"_count":12},[6],{"page_slug":7},null,"cmkzhl7xm00dbulbc93h4qog5","Juridique","avocats","fr-FR",{"experts":13},8,{"seo_content":15,"id":17,"name":18,"slug":19,"parentId":7,"lang":11,"_count":20},[16],{"page_slug":7},"cmkzhl84700djulbcbv6pzu9e","Informatique","informaticiens",{"experts":21},3,{"seo_content":23,"id":25,"name":26,"slug":27,"parentId":7,"lang":11,"_count":28},[24],{"page_slug":7},"cmkzhlaos00gnulbc07i9jrco","Amélioration de la Maison","artisans",{"experts":29},4,{"seo_content":31,"id":33,"name":34,"slug":35,"parentId":7,"lang":11,"_count":36},[32],{"page_slug":7},"cmkzhlaqg00gpulbcx38bwoc2","Général","divers-generalistes",{"experts":37},0,{"seo_content":39,"id":41,"name":42,"slug":43,"parentId":7,"lang":11,"_count":44},[40],{"page_slug":7},"cmkzhlbvq00i3ulbcutdbcz50","Électronique Grand Public","techniciens-electronique",{"experts":21},{"seo_content":46,"id":48,"name":49,"slug":50,"parentId":7,"lang":11,"_count":51},[47],{"page_slug":7},"cmkzhlcaw00ilulbc38pxoogr","Santé","medecins",{"experts":52},5,{"seo_content":54,"id":56,"name":57,"slug":58,"parentId":7,"lang":11,"_count":59},[55],{"page_slug":7},"cmkzhlcmi00izulbcxva1m47f","Gestion de Patrimoine","conseillers-patrimoniaux",{"experts":21},{"seo_content":61,"id":63,"name":64,"slug":65,"parentId":7,"lang":11,"_count":66},[62],{"page_slug":7},"cmkzhldcv00jvulbcmcd5a7mk","Animaux et Vétérinaires","veterinaires",{"experts":21},{"seo_content":68,"id":70,"name":71,"slug":72,"parentId":7,"lang":11,"_count":73},[69],{"page_slug":7},"cmkzhldrr00kdulbchxfo67eg","Mécanique et Réparation","mecaniciens",{"experts":74},1,{"seo_content":76,"id":78,"name":79,"slug":80,"parentId":7,"lang":11,"_count":81},[77],{"page_slug":7},"cmkzhl9l300fbulbcv3i8q8p3","Aide aux Devoirs","professeurs-particuliers",{"experts":82},6,{"slug":84,"title":85,"page_title":86,"description":87,"content_md":88,"local_slug":84,"json_ld":89,"faq":105,"tool_html":121,"source":122,"category":123,"audience":124,"publish_mode":125,"hero_image":126,"hero_image_alt":127},"eval-risque-hantavirus","Évaluateur de risque d'exposition au hantavirus","Évaluateur de risque hantavirus : quel est votre niveau d'exposition ?","Évaluez en 5 questions votre risque d'exposition au hantavirus selon votre région, vos activités et vos contacts avec des rongeurs.","Cet évaluateur interactif analyse votre profil de risque face au hantavirus en France. En répondant à 5 questions sur votre région, vos activités récentes et vos contacts avec des rongeurs, obtenez une estimation personnalisée de votre niveau d'exposition et des recommandations adaptées. Conçu pour le grand public, les travailleurs en zone rurale et toute personne souhaitant comprendre son risque face au virus Puumala ou au virus des Andes.",[90],{"name":85,"@type":91,"offers":92,"@context":96,"audience":97,"inLanguage":100,"description":101,"operatingSystem":102,"applicationCategory":103,"browserRequirements":104},"WebApplication",{"@type":93,"price":94,"priceCurrency":95},"Offer","0","EUR","https:\u002F\u002Fschema.org",{"@type":98,"audienceType":99},"Audience","Public général, professionnels de santé","fr","Questionnaire interactif pour évaluer votre niveau de risque d'exposition au hantavirus selon votre région, vos activités et vos contacts avec des rongeurs.","Any","HealthApplication","Requires JavaScript",[106,109,112,115,118],{"a":107,"q":108},"L'exposition survient principalement par inhalation d'aérosols contenant des fèces ou urines de rongeurs infectés. Les activités à risque incluent le nettoyage de caves, greniers ou bâtiments longtemps fermés, les travaux forestiers et agricoles dans les zones endémiques du Nord-Est de la France.","Comment savoir si j'ai été exposé au hantavirus ?",{"a":110,"q":111},"Les zones endémiques sont concentrées dans le Nord-Est : Ardennes, Hauts-de-France (Avesnois), Lorraine, Champagne-Ardenne et Franche-Comté, où le campagnol roussâtre, réservoir du virus Puumala, est abondant en forêt.","Quels sont les départements français les plus à risque pour le hantavirus Puumala ?",{"a":113,"q":114},"Non pour le virus Puumala, endémique en France : aucune transmission interhumaine n'a été documentée. En revanche, le virus des Andes (impliqué dans l'épidémie du MV Hondius en 2026) est le seul hantavirus connu pour se transmettre entre humains via contact étroit et prolongé.","Le hantavirus se transmet-il d'une personne à l'autre en France ?",{"a":116,"q":117},"Consultez un médecin rapidement en cas de fièvre, maux de tête intenses, douleurs musculaires ou lombaires, troubles visuels ou signes de difficultés respiratoires survenant dans les 1 à 8 semaines suivant une exposition à risque. Appelez le 15 en cas de détresse respiratoire.","Quels symptômes doivent m'alerter après une exposition potentielle ?",{"a":119,"q":120},"Oui, pour le virus des Andes uniquement : une surveillance médicale et un isolement préventif sont recommandés pour les contacts étroits de cas confirmés. Pour le Puumala en France, aucun isolement n'est requis car ce virus ne se transmet pas entre humains.","Faut-il s'isoler si l'on a été en contact avec un cas de hantavirus Andes ?","\u003C!DOCTYPE html>\n\u003Chtml lang=\"fr\">\n\u003Chead>\n  \u003Cmeta charset=\"utf-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  \u003Ctitle>Évaluateur de risque d'exposition au hantavirus\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    body { font-family: system-ui, -apple-system, sans-serif; background: #fafaf9; color: #1c1917; font-size: 15px; line-height: 1.5; }\n    .tool-root { max-width: 680px; margin: 0 auto; padding: 24px 16px 40px; }\n    h1 { font-size: 1.3rem; font-weight: 700; color: #1c1917; margin-bottom: 4px; }\n    .subtitle { font-size: 0.9rem; color: #57534e; margin-bottom: 24px; }\n    .callout { background: #eff6ff; border-left: 4px solid #2563eb; border-radius: 0 8px 8px 0; padding: 12px 16px; margin-bottom: 24px; font-size: 0.85rem; color: #1e40af; display: flex; gap: 10px; align-items: flex-start; }\n    .callout svg { flex-shrink: 0; margin-top: 1px; }\n    .question-block { background: #fff; border: 1px solid #e7e5e4; border-radius: 12px; padding: 20px; margin-bottom: 16px; }\n    .question-label { font-weight: 600; font-size: 0.92rem; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; color: #1c1917; }\n    .question-label svg { color: #2563eb; flex-shrink: 0; }\n    .options { display: flex; flex-direction: column; gap: 8px; }\n    .option { display: flex; align-items: center; gap: 10px; cursor: pointer; padding: 9px 12px; border-radius: 8px; border: 1px solid #e7e5e4; background: #fafaf9; transition: border-color 0.15s, background 0.15s; user-select: none; }\n    .option:hover { border-color: #93c5fd; background: #f0f9ff; }\n    .option input[type=\"radio\"] { accent-color: #2563eb; width: 16px; height: 16px; flex-shrink: 0; }\n    .option.selected { border-color: #2563eb; background: #eff6ff; }\n    .option-label { font-size: 0.9rem; flex: 1; }\n    .option-badge { font-size: 0.75rem; font-weight: 700; color: #fff; padding: 2px 7px; border-radius: 99px; background: #94a3b8; }\n    .option-badge.high { background: #dc2626; }\n    .option-badge.med { background: #f59e0b; }\n    .option-badge.low { background: #16a34a; }\n    .result-card { border-radius: 14px; padding: 24px; margin-top: 24px; border: 2px solid; }\n    .result-card.low    { background: #f0fdf4; border-color: #16a34a; }\n    .result-card.medium { background: #fffbeb; border-color: #f59e0b; }\n    .result-card.high   { background: #fef2f2; border-color: #dc2626; }\n    .result-label { font-size: 0.8rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; margin-bottom: 6px; }\n    .result-label.low    { color: #15803d; }\n    .result-label.medium { color: #b45309; }\n    .result-label.high   { color: #b91c1c; }\n    .result-title { font-size: 1.4rem; font-weight: 800; margin-bottom: 8px; display: flex; align-items: center; gap: 10px; }\n    .result-title.low    { color: #15803d; }\n    .result-title.medium { color: #b45309; }\n    .result-title.high   { color: #b91c1c; }\n    .result-desc { font-size: 0.88rem; color: #57534e; line-height: 1.6; margin-bottom: 16px; }\n    .advice-list { list-style: none; display: flex; flex-direction: column; gap: 8px; }\n    .advice-list li { display: flex; align-items: flex-start; gap: 8px; font-size: 0.88rem; }\n    .advice-list li svg { flex-shrink: 0; margin-top: 2px; }\n    .advice-list li.low    svg { color: #16a34a; }\n    .advice-list li.medium svg { color: #f59e0b; }\n    .advice-list li.high   svg { color: #dc2626; }\n    .score-bar { height: 8px; border-radius: 99px; background: #e7e5e4; margin: 14px 0 4px; overflow: hidden; }\n    .score-fill { height: 100%; border-radius: 99px; transition: width 0.4s ease, background 0.4s; }\n    .score-text { font-size: 0.8rem; color: #78716c; display: flex; justify-content: space-between; }\n    .disclaimer { font-size: 0.75rem; color: #a8a29e; margin-top: 28px; text-align: center; line-height: 1.5; }\n    .disclaimer a { color: #2563eb; }\n    .reset-btn { margin-top: 16px; width: 100%; background: none; border: 1px solid #e7e5e4; border-radius: 8px; padding: 10px; font-size: 0.88rem; cursor: pointer; color: #57534e; display: flex; align-items: center; justify-content: center; gap: 6px; }\n    .reset-btn:hover { background: #f5f5f4; }\n    .progress-row { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }\n    .progress-text { font-size: 0.8rem; color: #78716c; }\n    .progress-dots { display: flex; gap: 5px; }\n    .dot { width: 8px; height: 8px; border-radius: 50%; background: #e7e5e4; transition: background 0.2s; }\n    .dot.done { background: #2563eb; }\n    .dot.active { background: #93c5fd; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Cmain class=\"tool-root\">\n  \u003Ch1>Évaluateur de risque d'exposition au hantavirus\u003C\u002Fh1>\n  \u003Cp class=\"subtitle\">Estimez votre niveau de risque en répondant à 5 questions sur vos activités et votre environnement.\u003C\u002Fp>\n\n  \u003Cdiv class=\"callout\">\n    \u003Ci data-lucide=\"info\" width=\"16\" height=\"16\">\u003C\u002Fi>\n    \u003Cspan>Le risque principal en France métropolitaine provient du virus Puumala (transmis par le campagnol roussâtre), concentré dans le Nord-Est. Le virus des Andes (croisière MV Hondius, mai 2026) est distinct et beaucoup plus rare.\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"progress-row\">\n    \u003Cspan class=\"progress-text\" id=\"progressText\">Question 1 \u002F 5\u003C\u002Fspan>\n    \u003Cdiv class=\"progress-dots\" id=\"progressDots\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv id=\"questionsContainer\">\u003C\u002Fdiv>\n  \u003Cdiv id=\"resultContainer\" style=\"display:none\">\u003C\u002Fdiv>\n\n  \u003Cbutton class=\"reset-btn\" id=\"resetBtn\" style=\"display:none\" onclick=\"resetAll()\">\n    \u003Ci data-lucide=\"rotate-ccw\" width=\"14\" height=\"14\">\u003C\u002Fi>\n    Recommencer l'évaluation\n  \u003C\u002Fbutton>\n\n  \u003Cp class=\"disclaimer\">\n    Cet outil est fourni à titre informatif uniquement et ne remplace pas un avis médical.\u003Cbr>\n    Sources : \u003Ca href=\"https:\u002F\u002Fwww.pasteur.fr\u002Ffr\u002Fsante-publique\u002FCNR\u002Fles-cnr\u002Fhantavirus\u002Fla-maladie-recommandations\" target=\"_blank\">Institut Pasteur CNR Hantavirus\u003C\u002Fa> ·\n    \u003Ca href=\"https:\u002F\u002Fwww.santepubliquefrance.fr\u002Fen\u002Fhantavirus\u002Fdisease\" target=\"_blank\">Santé publique France\u003C\u002Fa> · 2026\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\nconst QUESTIONS = [\n  {\n    id: 'region',\n    icon: 'map-pin',\n    label: 'Dans quelle région habitez-vous ou vous trouvez-vous principalement ?',\n    options: [\n      { label: 'Nord-Est (Ardennes, Lorraine, Franche-Comté, Champagne, Hauts-de-France)', score: 30, badge: 'high', badgeLabel: '+élevé' },\n      { label: 'Autres régions rurales\u002Fforestières de France métropolitaine', score: 10, badge: 'med', badgeLabel: 'modéré' },\n      { label: 'Zone urbaine dense (Paris, Lyon, Marseille…)', score: 0, badge: 'low', badgeLabel: 'faible' },\n      { label: 'DOM-TOM ou autre pays', score: 5, badge: 'low', badgeLabel: 'variable' },\n    ]\n  },\n  {\n    id: 'activities',\n    icon: 'tree-pine',\n    label: 'Avez-vous réalisé l\\'une de ces activités au cours des 8 dernières semaines ?',\n    options: [\n      { label: 'Nettoyage de cave, grenier, grange ou bâtiment longtemps inoccupé', score: 35, badge: 'high', badgeLabel: '+élevé' },\n      { label: 'Travaux en forêt, coupe de bois, jardinage en zone boisée', score: 20, badge: 'med', badgeLabel: 'modéré' },\n      { label: 'Séjour en chalet\u002Fgîte rural ou camping', score: 15, badge: 'med', badgeLabel: 'modéré' },\n      { label: 'Aucune activité à risque particulière', score: 0, badge: 'low', badgeLabel: 'faible' },\n    ]\n  },\n  {\n    id: 'profession',\n    icon: 'hard-hat',\n    label: 'Quelle est votre profession ou activité principale ?',\n    options: [\n      { label: 'Agriculteur, forestier, garde-chasse ou ouvrier agricole', score: 25, badge: 'high', badgeLabel: '+élevé' },\n      { label: 'Militaire, pompier, personnel de terrain ou BTP en zone rurale', score: 15, badge: 'med', badgeLabel: 'modéré' },\n      { label: 'Profession médicale ou laboratoire', score: 5, badge: 'low', badgeLabel: 'faible' },\n      { label: 'Autre (bureau, commerce, industrie…)', score: 0, badge: 'low', badgeLabel: 'faible' },\n    ]\n  },\n  {\n    id: 'rodent',\n    icon: 'alert-triangle',\n    label: 'Avez-vous eu un contact avec des rongeurs ou leurs traces ?',\n    options: [\n      { label: 'Contact direct avec un rongeur sauvage (vivant ou mort)', score: 35, badge: 'high', badgeLabel: '+élevé' },\n      { label: 'Présence constatée de fèces ou urine de rongeur dans mon espace de vie', score: 25, badge: 'high', badgeLabel: '+élevé' },\n      { label: 'Présence probable mais non confirmée de rongeurs', score: 10, badge: 'med', badgeLabel: 'possible' },\n      { label: 'Aucun contact ou signe de rongeurs', score: 0, badge: 'low', badgeLabel: 'faible' },\n    ]\n  },\n  {\n    id: 'hondius',\n    icon: 'ship',\n    label: 'Avez-vous été passager du navire MV Hondius (départ Ushuaia le 1er avril 2026) ?',\n    options: [\n      { label: 'Oui, j\\'étais à bord du MV Hondius', score: 50, badge: 'high', badgeLabel: 'exposition directe' },\n      { label: 'J\\'ai été en contact étroit avec un passager du MV Hondius', score: 30, badge: 'high', badgeLabel: '+élevé' },\n      { label: 'Non, aucun lien avec le MV Hondius', score: 0, badge: 'low', badgeLabel: 'non concerné' },\n    ]\n  },\n];\n\nconst RESULTS = {\n  low: {\n    cls: 'low',\n    label: 'Risque faible',\n    icon: 'shield-check',\n    title: 'Risque faible',\n    desc: 'Votre profil ne présente pas de facteur de risque majeur d\\'exposition au hantavirus dans les conditions actuelles. Restez vigilant aux symptômes si votre situation évolue.',\n    advices: [\n      'Aérez et arrosez d\\'eau avant de nettoyer un espace potentiellement infesté de rongeurs.',\n      'Portez des gants lors de la manipulation de bois stocké à l\\'extérieur.',\n      'Consultez un médecin si de la fièvre, des douleurs musculaires ou des troubles rénaux apparaissent.',\n    ]\n  },\n  medium: {\n    cls: 'medium',\n    label: 'Risque modéré',\n    icon: 'shield-alert',\n    title: 'Risque modéré',\n    desc: 'Votre profil comporte plusieurs facteurs pouvant augmenter le risque d\\'exposition. Des précautions renforcées sont recommandées.',\n    advices: [\n      'Portez un masque FFP2 lors du nettoyage de zones susceptibles d\\'héberger des rongeurs.',\n      'Aérez 30 minutes et humidifiez avant tout ménage d\\'un local longtemps fermé.',\n      'Signalez vos activités à risque à votre médecin en cas de symptômes (fièvre, myalgies, œdème des yeux).',\n      'Consultez rapidement si des signes de néphropathie apparaissent (douleurs lombaires, diminution urinaire).',\n    ]\n  },\n  high: {\n    cls: 'high',\n    label: 'Risque élevé',\n    icon: 'shield-x',\n    title: 'Risque élevé',\n    desc: 'Votre profil présente des facteurs de risque significatifs. Une vigilance médicale active est nécessaire. N\\'attendez pas l\\'apparition de symptômes graves pour consulter.',\n    advices: [\n      'Consultez un médecin dès que possible et mentionnez vos expositions spécifiques.',\n      'En cas de fièvre, malaise, difficultés respiratoires : appelez le 15 (SAMU) immédiatement.',\n      'Si lié au MV Hondius, contactez les autorités sanitaires — le suivi est organisé par Santé publique France.',\n      'Ne vous automédica­mentez pas — aucun traitement antiviral spécifique n\\'est disponible à domicile.',\n      'Informez les personnes de votre entourage proche de votre exposition potentielle.',\n    ]\n  }\n};\n\nlet state = { answers: {}, currentQ: 0, done: false };\n\nfunction getScore() {\n  return Object.values(state.answers).reduce((s, v) => s + v.score, 0);\n}\n\nfunction getLevel(score) {\n  if (score >= 50) return 'high';\n  if (score >= 20) return 'medium';\n  return 'low';\n}\n\nfunction renderProgressDots() {\n  const dots = document.getElementById('progressDots');\n  dots.innerHTML = QUESTIONS.map((_, i) => {\n    let cls = 'dot';\n    if (state.answers[QUESTIONS[i].id] !== undefined) cls += ' done';\n    else if (i === state.currentQ && !state.done) cls += ' active';\n    return `\u003Cdiv class=\"${cls}\">\u003C\u002Fdiv>`;\n  }).join('');\n}\n\nfunction renderQuestion(q) {\n  const answered = state.answers[q.id];\n  return `\n    \u003Cdiv class=\"question-block\" id=\"q-${q.id}\">\n      \u003Cdiv class=\"question-label\">\n        \u003Ci data-lucide=\"${q.icon}\" width=\"18\" height=\"18\">\u003C\u002Fi>\n        ${q.label}\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"options\">\n        ${q.options.map((opt, i) => {\n          const sel = answered && answered.idx === i ? ' selected' : '';\n          return `\u003Clabel class=\"option${sel}\" onclick=\"selectAnswer('${q.id}', ${i}, ${opt.score})\">\n            \u003Cinput type=\"radio\" name=\"${q.id}\" value=\"${i}\" ${answered && answered.idx === i ? 'checked' : ''}>\n            \u003Cspan class=\"option-label\">${opt.label}\u003C\u002Fspan>\n            \u003Cspan class=\"option-badge ${opt.badge}\">${opt.badgeLabel}\u003C\u002Fspan>\n          \u003C\u002Flabel>`;\n        }).join('')}\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>`;\n}\n\nfunction renderQuestions() {\n  const container = document.getElementById('questionsContainer');\n  if (state.done) {\n    container.innerHTML = '';\n    document.getElementById('progressText').textContent = 'Évaluation complète';\n    return;\n  }\n  const q = QUESTIONS[state.currentQ];\n  document.getElementById('progressText').textContent = `Question ${state.currentQ + 1} \u002F ${QUESTIONS.length}`;\n  container.innerHTML = renderQuestion(q);\n  lucide.createIcons();\n}\n\nfunction renderResult() {\n  const score = getScore();\n  const level = getLevel(score);\n  const r = RESULTS[level];\n  const pct = Math.min(100, Math.round(score \u002F 120 * 100));\n  const fillColor = level === 'high' ? '#dc2626' : level === 'medium' ? '#f59e0b' : '#16a34a';\n  const adviceColor = r.cls;\n\n  const container = document.getElementById('resultContainer');\n  container.style.display = 'block';\n  container.innerHTML = `\n    \u003Cdiv class=\"result-card ${r.cls}\">\n      \u003Cdiv class=\"result-label ${r.cls}\">${r.label}\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-title ${r.cls}\">\n        \u003Ci data-lucide=\"${r.icon}\" width=\"28\" height=\"28\">\u003C\u002Fi>\n        ${r.title}\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"score-bar\">\n        \u003Cdiv class=\"score-fill\" style=\"width:${pct}%;background:${fillColor}\">\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"score-text\">\n        \u003Cspan>Score d'exposition : ${score} pts\u003C\u002Fspan>\n        \u003Cspan>Max estimé : 120 pts\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cp class=\"result-desc\" style=\"margin-top:14px\">${r.desc}\u003C\u002Fp>\n      \u003Cul class=\"advice-list\">\n        ${r.advices.map(a => `\u003Cli class=\"${adviceColor}\">\u003Ci data-lucide=\"check-circle\" width=\"15\" height=\"15\">\u003C\u002Fi>\u003Cspan>${a}\u003C\u002Fspan>\u003C\u002Fli>`).join('')}\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>`;\n  document.getElementById('resetBtn').style.display = 'flex';\n  lucide.createIcons();\n}\n\nfunction selectAnswer(qId, idx, score) {\n  state.answers[qId] = { idx, score };\n  const nextQ = QUESTIONS.findIndex((q, i) => i > QUESTIONS.findIndex(q => q.id === qId) && state.answers[q.id] === undefined);\n\n  \u002F\u002F Find next unanswered\n  let nextIdx = -1;\n  for (let i = 0; i \u003C QUESTIONS.length; i++) {\n    if (state.answers[QUESTIONS[i].id] === undefined) { nextIdx = i; break; }\n  }\n\n  if (nextIdx === -1) {\n    state.done = true;\n    renderProgressDots();\n    renderQuestions();\n    renderResult();\n  } else {\n    state.currentQ = nextIdx;\n    renderProgressDots();\n    renderQuestions();\n  }\n  triggerResize();\n}\n\nfunction resetAll() {\n  state = { answers: {}, currentQ: 0, done: false };\n  document.getElementById('resultContainer').style.display = 'none';\n  document.getElementById('resetBtn').style.display = 'none';\n  renderProgressDots();\n  renderQuestions();\n  triggerResize();\n}\n\nfunction triggerResize() {\n  setTimeout(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  }, 50);\n}\n\nconst ro = new ResizeObserver(() => {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n});\nro.observe(document.documentElement);\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  renderProgressDots();\n  renderQuestions();\n  lucide.createIcons();\n});\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","sante","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Feval-risque-hantavirus-df0cc6752b-1779409533.webp","",[]]