[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-calculateur-chaleur-ressentie-fr":83,"footer-cities-fr":123},[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":7,"json_ld":89,"faq":104,"tool_html":117,"source":118,"category":119,"audience":99,"publish_mode":120,"hero_image":121,"hero_image_alt":122},"calculateur-chaleur-ressentie","Calculateur de chaleur ressentie et risque canicule","Calculateur chaleur ressentie : température ressentie et risque canicule — Expert Zoom","Calculez la température ressentie (indice de chaleur) à partir de la température et de l'humidité. Évaluez le risque de coup de chaleur et obtenez des conseils de prévention personnalisés.","Basé sur l'équation de Rothfusz du National Weather Service américain, cet outil calcule la chaleur réellement ressentie par le corps humain en combinant température et humidité relative. Il évalue le niveau d'alerte canicule et propose des recommandations adaptées aux profils vulnérables : seniors, enfants, personnes cardiaques et travailleurs en extérieur.",[90],{"name":85,"@type":91,"offers":92,"@context":96,"audience":97,"inLanguage":100,"description":101,"operatingSystem":102,"applicationCategory":103},"WebApplication",{"@type":93,"price":94,"priceCurrency":95},"Offer","0","EUR","https:\u002F\u002Fschema.org",{"@type":98,"audienceType":99},"Audience","consumer","fr","Calculez la température ressentie (indice de chaleur Rothfusz) à partir de la température et de l'humidité. Évaluez le risque de coup de chaleur et obtenez des recommandations personnalisées.","Any","WeatherApplication",[105,108,111,114],{"a":106,"q":107},"L'outil applique l'équation de Rothfusz du National Weather Service américain (1990), qui croise température réelle et humidité relative. Cette formule est valide au-dessus de 27 °C et prend en compte l'effet de l'humidité sur l'évaporation de la sueur.","Comment est calculée la température ressentie ?",{"a":109,"q":110},"L'évaporation de la sueur est le principal mécanisme de refroidissement du corps. Plus l'air est humide, moins la sueur s'évapore et plus le corps accumule de la chaleur. À 35 °C et 80 % d'humidité, la chaleur ressentie peut dépasser 48 °C.","Pourquoi l'humidité aggrave-t-elle la chaleur ?",{"a":112,"q":113},"Météo France déclenche une vigilance canicule quand les températures dépassent des seuils locaux pendant au moins 3 jours et nuits consécutifs (ex. 34 °C\u002F21 °C pour Paris, 36 °C\u002F23 °C pour Marseille). Ces seuils varient selon les 96 départements.","Quels seuils déclenchent une alerte canicule en France ?",{"a":115,"q":116},"Appelez immédiatement le 15 si une personne présente : confusion mentale, peau chaude et sèche, température corporelle supérieure à 40 °C, ou perte de connaissance. Le coup de chaleur est une urgence médicale pouvant être fatal en moins d'une heure sans traitement.","Quand appeler le 15 (SAMU) ?","\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>Calculateur chaleur ressentie et risque canicule\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    :root {\n      --bg: #fafaf9;\n      --card: #ffffff;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --text: #1c1917;\n      --muted: #78716c;\n      --border: #e7e5e4;\n    }\n    * { box-sizing: border-box; margin: 0; padding: 0; }\n    body { font-family: system-ui, -apple-system, sans-serif; background: var(--bg); color: var(--text); font-size: 15px; line-height: 1.5; }\n    .tool-root { max-width: 620px; margin: 0 auto; padding: 20px 16px 32px; }\n    .tool-header { margin-bottom: 20px; }\n    .tool-title { font-size: 20px; font-weight: 700; display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }\n    .tool-subtitle { font-size: 13px; color: var(--muted); }\n    .tab-bar { display: flex; border-bottom: 2px solid var(--border); margin-bottom: 20px; }\n    .tab-btn { background: none; border: none; cursor: pointer; padding: 10px 18px; font-size: 14px; font-weight: 500; color: var(--muted); border-bottom: 2px solid transparent; margin-bottom: -2px; transition: all 0.15s; }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }\n    .tab-btn:hover:not(.active) { color: var(--text); }\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n    .callout { background: var(--accent-light); border-left: 3px solid var(--accent); border-radius: 8px; padding: 10px 14px; font-size: 12.5px; color: #1e40af; margin-bottom: 20px; display: flex; gap: 8px; align-items: flex-start; }\n    .callout svg { flex-shrink: 0; margin-top: 2px; }\n    .field { margin-bottom: 18px; }\n    .field-label { display: flex; justify-content: space-between; font-size: 13px; font-weight: 600; margin-bottom: 8px; }\n    .field-label span { font-weight: 400; color: var(--muted); font-variant-numeric: tabular-nums; }\n    input[type=range] { width: 100%; accent-color: var(--accent); cursor: pointer; }\n    .check-group { display: flex; flex-direction: column; gap: 8px; }\n    .check-item { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1.5px solid var(--border); border-radius: 8px; cursor: pointer; background: white; }\n    .check-item input[type=checkbox] { accent-color: var(--accent); width: 16px; height: 16px; cursor: pointer; }\n    .check-item label { cursor: pointer; font-size: 13.5px; flex: 1; }\n    .check-item.checked { border-color: var(--accent); background: var(--accent-light); }\n    .result-card { background: var(--card); border: 1.5px solid var(--border); border-radius: 12px; overflow: hidden; margin-top: 20px; }\n    .result-hero { padding: 20px; text-align: center; border-bottom: 1px solid var(--border); }\n    .result-hero-temp { font-size: 52px; font-weight: 800; font-variant-numeric: tabular-nums; line-height: 1; }\n    .result-hero-label { font-size: 13px; color: var(--muted); margin-top: 4px; }\n    .result-row { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; border-bottom: 1px solid var(--border); }\n    .result-row:last-child { border-bottom: none; }\n    .result-label { font-size: 13px; color: var(--muted); }\n    .result-value { font-size: 16px; font-weight: 700; font-variant-numeric: tabular-nums; }\n    .badge { display: inline-flex; align-items: center; gap: 5px; padding: 4px 12px; border-radius: 100px; font-size: 12.5px; font-weight: 600; }\n    .risk-ok     { background: #dcfce7; color: #166534; }\n    .risk-caution{ background: #fef9c3; color: #854d0e; }\n    .risk-danger { background: #fed7aa; color: #9a3412; }\n    .risk-high   { background: #fee2e2; color: #991b1b; }\n    .risk-extreme{ background: #fce7f3; color: #9d174d; }\n    .advice-box  { background: #f8fafc; padding: 14px 16px; font-size: 13px; color: var(--text); line-height: 1.7; border-top: 1px solid var(--border); }\n    .advice-list { margin: 6px 0 0 0; padding-left: 16px; }\n    .advice-list li { margin-bottom: 4px; }\n    .precaution-group { display: flex; flex-direction: column; gap: 10px; }\n    .precaution-card { border: 1.5px solid var(--border); border-radius: 10px; overflow: hidden; }\n    .precaution-header { padding: 10px 14px; font-size: 13px; font-weight: 600; display: flex; align-items: center; gap: 8px; }\n    .precaution-body { padding: 10px 14px; font-size: 13px; color: var(--muted); line-height: 1.6; border-top: 1px solid var(--border); background: #fafaf9; }\n    .source { margin-top: 20px; font-size: 11px; color: var(--muted); line-height: 1.7; }\n    .source a { color: var(--accent); text-decoration: none; }\n    .therm-track { width: 100%; height: 10px; border-radius: 5px; margin-top: 6px; background: linear-gradient(to right, #22c55e 0%, #a3e635 20%, #eab308 40%, #f97316 60%, #ef4444 75%, #a21caf 100%); position: relative; }\n    .therm-marker { position: absolute; top: -3px; width: 16px; height: 16px; border-radius: 50%; background: white; border: 2px solid #1c1917; transform: translateX(-50%); transition: left 0.2s; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Cdiv class=\"tool-title\">\n      \u003Ci data-lucide=\"thermometer-sun\" width=\"22\" height=\"22\" color=\"#ef4444\">\u003C\u002Fi>\n      Chaleur ressentie et risque canicule\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"tool-subtitle\">Calcul de la température ressentie (indice de chaleur NWS\u002FRothfusz) et niveau d'alerte canicule\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"tab-bar\">\n    \u003Cbutton class=\"tab-btn active\" data-tab=\"ressentie\">Chaleur ressentie\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prevention\">Prévention\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB 1 : Chaleur ressentie -->\n  \u003Cdiv id=\"tab-ressentie\" class=\"tab-panel active\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"info\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cdiv>\n        \u003Cstrong>Équation de Rothfusz (NWS, 1990) :\u003C\u002Fstrong> combine température et humidité relative pour estimer le ressenti corporel. Valide au-dessus de 27 °C.\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Cdiv class=\"field-label\">Température extérieure \u003Cspan>\u003Cspan id=\"temp-display\">32\u003C\u002Fspan> °C\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"temp-slider\" min=\"20\" max=\"50\" value=\"32\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Cdiv class=\"field-label\">Humidité relative \u003Cspan>\u003Cspan id=\"rh-display\">60\u003C\u002Fspan> %\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"rh-slider\" min=\"10\" max=\"100\" value=\"60\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\">\n      \u003Cdiv class=\"result-hero\">\n        \u003Cdiv class=\"result-hero-temp\" id=\"hi-value\">—\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-hero-label\">Température ressentie (°C)\u003C\u002Fdiv>\n        \u003Cdiv class=\"therm-track\" style=\"margin-top:10px\">\n          \u003Cdiv class=\"therm-marker\" id=\"therm-marker\" style=\"left:0%\">\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv id=\"result-ressentie-rows\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- TAB 2 : Prévention -->\n  \u003Cdiv id=\"tab-prevention\" class=\"tab-panel\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"shield-alert\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cdiv>Sélectionnez les profils concernés pour afficher des précautions personnalisées.\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Cdiv class=\"field-label\">Température extérieure \u003Cspan>\u003Cspan id=\"temp-display-2\">32\u003C\u002Fspan> °C\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"temp-slider-2\" min=\"20\" max=\"50\" value=\"32\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Cdiv class=\"field-label\">Humidité relative \u003Cspan>\u003Cspan id=\"rh-display-2\">60\u003C\u002Fspan> %\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cinput type=\"range\" id=\"rh-slider-2\" min=\"10\" max=\"100\" value=\"60\">\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"field\">\n      \u003Cdiv class=\"field-label\">Profil(s) concerné(s)\u003C\u002Fdiv>\n      \u003Cdiv class=\"check-group\">\n        \u003Cdiv class=\"check-item\" id=\"ci-senior\">\n          \u003Cinput type=\"checkbox\" id=\"cb-senior\">\n          \u003Clabel for=\"cb-senior\">Personnes âgées (65 ans et plus)\u003C\u002Flabel>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"check-item\" id=\"ci-enfant\">\n          \u003Cinput type=\"checkbox\" id=\"cb-enfant\">\n          \u003Clabel for=\"cb-enfant\">Nourrissons et jeunes enfants\u003C\u002Flabel>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"check-item\" id=\"ci-cardio\">\n          \u003Cinput type=\"checkbox\" id=\"cb-cardio\">\n          \u003Clabel for=\"cb-cardio\">Maladie cardiovasculaire ou traitement\u003C\u002Flabel>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"check-item\" id=\"ci-travail\">\n          \u003Cinput type=\"checkbox\" id=\"cb-travail\">\n          \u003Clabel for=\"cb-travail\">Travailleur en extérieur ou sportif\u003C\u002Flabel>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"result-prevention\">\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"source\">\n    Sources : \u003Ca href=\"https:\u002F\u002Fwww.wpc.ncep.noaa.gov\u002Fhtml\u002Fheatindex_equation.shtml\" target=\"_blank\">NOAA\u002FNWS — Heat Index Equation (Rothfusz, 1990)\u003C\u002Fa> ·\n    \u003Ca href=\"https:\u002F\u002Fwww.weather.gov\u002Fsafety\u002Fheat-index\" target=\"_blank\">NWS Heat Index Risk Levels\u003C\u002Fa> ·\n    Seuils canicule : Météo France \u002F Santé Publique France 2024. Cet outil est indicatif.\n  \u003C\u002Fdiv>\n\u003C\u002Fmain>\n\n\u003Cscript>\nconst state = { temp: 32, rh: 60, senior: false, enfant: false, cardio: false, travail: false };\n\nfunction heatIndexC(tempC, rh) {\n  const T = tempC * 9\u002F5 + 32;\n  \u002F\u002F Simple formula first\n  const simple = 0.5 * (T + 61.0 + (T - 68.0) * 1.2 + rh * 0.094);\n  if ((simple + T) \u002F 2 \u003C 80) {\n    return (simple - 32) * 5\u002F9;\n  }\n  \u002F\u002F Rothfusz regression\n  let HI = -42.379\n    + 2.04901523 * T\n    + 10.14333127 * rh\n    - 0.22475541 * T * rh\n    - 0.00683783 * T * T\n    - 0.05481717 * rh * rh\n    + 0.00122874 * T * T * rh\n    + 0.00085282 * T * rh * rh\n    - 0.00000199 * T * T * rh * rh;\n  \u002F\u002F Adjustments\n  if (rh \u003C 13 && T >= 80 && T \u003C= 112) {\n    HI -= (13 - rh) \u002F 4 * Math.sqrt((17 - Math.abs(T - 95)) \u002F 17);\n  } else if (rh > 85 && T >= 80 && T \u003C= 87) {\n    HI += (rh - 85) \u002F 10 * (87 - T) \u002F 5;\n  }\n  return (HI - 32) * 5\u002F9;\n}\n\nfunction getRisk(hi) {\n  if (hi \u003C 27) return { label:'Confortable',     cls:'risk-ok',      icon:'check-circle',  color:'#166534', bgColor:'#dcfce7' };\n  if (hi \u003C 32) return { label:'Précaution',       cls:'risk-caution', icon:'alert-circle',  color:'#854d0e', bgColor:'#fef9c3' };\n  if (hi \u003C 39) return { label:'Danger',           cls:'risk-danger',  icon:'alert-triangle',color:'#9a3412', bgColor:'#fed7aa' };\n  if (hi \u003C 46) return { label:'Danger extrême',   cls:'risk-high',    icon:'flame',         color:'#991b1b', bgColor:'#fee2e2' };\n  return             { label:'Risque vital',      cls:'risk-extreme', icon:'skull',         color:'#9d174d', bgColor:'#fce7f3' };\n}\n\nfunction markerPos(hi) {\n  const clamped = Math.max(20, Math.min(52, hi));\n  return Math.round((clamped - 20) \u002F 32 * 100);\n}\n\nfunction coreAdvice(hi, temp, rh) {\n  if (hi \u003C 27) return { title: 'Aucun risque particulier.', items: ['Hydratation normale recommandée (1,5 à 2 L\u002Fjour).', 'Profitez des activités extérieures sans contrainte particulière.'] };\n  if (hi \u003C 32) return { title: 'Chaleur modérée — soyez vigilant.', items: ['Buvez régulièrement, sans attendre la soif.', 'Portez des vêtements légers et clairs.', 'Réduisez les efforts intenses entre 12h et 16h.'] };\n  if (hi \u003C 39) return { title: 'Chaleur dangereuse — limitez l\\'exposition.', items: ['Restez à l\\'ombre ou dans un endroit frais.', 'Hydratez-vous toutes les 15-20 minutes (eau fraîche, pas glacée).', 'Mouillez régulièrement votre visage et nuque.', 'Évitez l\\'alcool et les boissons sucrées.', 'Surveillez les signes d\\'épuisement : vertiges, nausées, peau moite.'] };\n  if (hi \u003C 46) return { title: 'Danger extrême — coup de chaleur imminent.', items: ['Ne sortez pas sauf urgence.', 'Réfugié dans un endroit climatisé (mairie, bibliothèque, centre commercial).', 'Douche froide ou bain frais toutes les heures.', 'Appelez le 15 (SAMU) si quelqu\\'un présente confusion, peau sèche chaude, perte de conscience.'] };\n  return { title: '⚠️ Risque vital — urgence médicale.', items: ['Appelez immédiatement le 15 (SAMU).', 'Allongez la personne, refroidissez-la avec des linges humides froids.', 'Ne laissez jamais seule une personne en détresse thermique.', 'N\\'attendez pas : le coup de chaleur peut être mortel en 30 minutes.'] };\n}\n\nfunction profileAdvice(risk, s) {\n  const cards = [];\n  if (s.senior) cards.push({\n    icon: 'user', title: 'Personnes âgées',\n    color: '#7c3aed', bg: '#f5f3ff',\n    body: 'La sensation de soif diminue avec l\\'âge. Proposez à boire toutes les heures même sans demande. Climatisation recommandée à partir de 35 °C. Contactez le 3114 si la personne se sent mal.'\n  });\n  if (s.enfant) cards.push({\n    icon: 'baby', title: 'Nourrissons et jeunes enfants',\n    color: '#0891b2', bg: '#ecfeff',\n    body: 'Ne laissez jamais un enfant dans un véhicule même quelques minutes. Rafraîchissez-le régulièrement avec de l\\'eau tiède. Les enfants de moins de 4 ans sont particulièrement vulnérables.'\n  });\n  if (s.cardio) cards.push({\n    icon: 'heart-pulse', title: 'Maladies cardiovasculaires',\n    color: '#dc2626', bg: '#fff1f2',\n    body: 'Certains médicaments (diurétiques, bêtabloquants) altèrent la thermorégulation. Consultez votre médecin si vous devez sortir par forte chaleur. Gardez vos médicaments au frais.'\n  });\n  if (s.travail) cards.push({\n    icon: 'hard-hat', title: 'Travailleurs et sportifs',\n    color: '#d97706', bg: '#fffbeb',\n    body: 'L\\'employeur est tenu d\\'adapter les horaires et de fournir eau fraîche gratuite. Arrêtez immédiatement l\\'effort en cas de vertiges ou crampes. Compensez 500 mL d\\'eau par heure d\\'effort intense.'\n  });\n  return cards;\n}\n\nfunction render() {\n  const hi = heatIndexC(state.temp, state.rh);\n  const risk = getRisk(hi);\n  const hiRound = Math.round(hi * 10) \u002F 10;\n\n  \u002F\u002F Sync sliders\n  ['temp-slider','temp-slider-2'].forEach(id => { const el=document.getElementById(id); if(el) el.value=state.temp; });\n  ['rh-slider','rh-slider-2'].forEach(id   => { const el=document.getElementById(id); if(el) el.value=state.rh;   });\n  ['temp-display','temp-display-2'].forEach(id => { const el=document.getElementById(id); if(el) el.textContent=state.temp; });\n  ['rh-display','rh-display-2'].forEach(id     => { const el=document.getElementById(id); if(el) el.textContent=state.rh;   });\n\n  \u002F\u002F Tab 1 — chaleur ressentie\n  const hiEl = document.getElementById('hi-value');\n  if (hiEl) {\n    hiEl.textContent = hiRound.toFixed(1);\n    hiEl.style.color = risk.color;\n  }\n  const marker = document.getElementById('therm-marker');\n  if (marker) marker.style.left = markerPos(hi) + '%';\n\n  const adv = coreAdvice(hi, state.temp, state.rh);\n  document.getElementById('result-ressentie-rows').innerHTML = `\n    \u003Cdiv class=\"result-row\">\n      \u003Cspan class=\"result-label\">Température réelle\u003C\u002Fspan>\n      \u003Cspan class=\"result-value\">${state.temp} °C\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-row\">\n      \u003Cspan class=\"result-label\">Humidité relative\u003C\u002Fspan>\n      \u003Cspan class=\"result-value\">${state.rh} %\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-row\">\n      \u003Cspan class=\"result-label\">Niveau d'alerte\u003C\u002Fspan>\n      \u003Cspan class=\"badge ${risk.cls}\">\u003Ci data-lucide=\"${risk.icon}\" width=\"13\" height=\"13\">\u003C\u002Fi>${risk.label}\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"advice-box\">\n      \u003Cstrong>${adv.title}\u003C\u002Fstrong>\n      \u003Cul class=\"advice-list\">${adv.items.map(i=>`\u003Cli>${i}\u003C\u002Fli>`).join('')}\u003C\u002Ful>\n    \u003C\u002Fdiv>\n  `;\n\n  \u002F\u002F Tab 2 — prévention\n  const cards = profileAdvice(risk, state);\n  let prevHTML = `\n    \u003Cdiv class=\"result-card\" style=\"margin-bottom:16px\">\n      \u003Cdiv class=\"result-row\">\n        \u003Cspan class=\"result-label\">Ressenti calculé\u003C\u002Fspan>\n        \u003Cspan class=\"result-value\" style=\"color:${risk.color}\">${hiRound.toFixed(1)} °C\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"result-row\">\n        \u003Cspan class=\"result-label\">Niveau d'alerte\u003C\u002Fspan>\n        \u003Cspan class=\"badge ${risk.cls}\">${risk.label}\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"advice-box\">\n        \u003Cstrong>${adv.title}\u003C\u002Fstrong>\n        \u003Cul class=\"advice-list\">${adv.items.map(i=>`\u003Cli>${i}\u003C\u002Fli>`).join('')}\u003C\u002Ful>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  `;\n  if (cards.length > 0) {\n    prevHTML += '\u003Cdiv class=\"precaution-group\">' + cards.map(c => `\n      \u003Cdiv class=\"precaution-card\">\n        \u003Cdiv class=\"precaution-header\" style=\"background:${c.bg}; color:${c.color}\">\n          \u003Ci data-lucide=\"${c.icon}\" width=\"16\" height=\"16\">\u003C\u002Fi>\n          ${c.title}\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"precaution-body\">${c.body}\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    `).join('') + '\u003C\u002Fdiv>';\n  } else {\n    prevHTML += '\u003Cdiv class=\"advice-box\" style=\"border-radius:10px; border:1.5px solid var(--border)\">Cochez un ou plusieurs profils ci-dessus pour afficher des recommandations spécifiques.\u003C\u002Fdiv>';\n  }\n  document.getElementById('result-prevention').innerHTML = prevHTML;\n\n  lucide.createIcons();\n}\n\n\u002F\u002F Listeners — sliders\ndocument.getElementById('temp-slider').addEventListener('input', e => { state.temp = +e.target.value; render(); });\ndocument.getElementById('rh-slider').addEventListener('input',   e => { state.rh   = +e.target.value; render(); });\ndocument.getElementById('temp-slider-2').addEventListener('input', e => { state.temp = +e.target.value; render(); });\ndocument.getElementById('rh-slider-2').addEventListener('input',   e => { state.rh   = +e.target.value; render(); });\n\n\u002F\u002F Checkboxes\n['senior','enfant','cardio','travail'].forEach(key => {\n  const cb = document.getElementById('cb-' + key);\n  const ci = document.getElementById('ci-' + key);\n  cb.addEventListener('change', () => {\n    state[key] = cb.checked;\n    ci.classList.toggle('checked', cb.checked);\n    render();\n  });\n});\n\n\u002F\u002F Tab switching\ndocument.querySelectorAll('.tab-btn').forEach(btn => {\n  btn.addEventListener('click', () => {\n    document.querySelectorAll('.tab-btn').forEach(b => b.classList.remove('active'));\n    document.querySelectorAll('.tab-panel').forEach(p => p.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('tab-' + btn.dataset.tab).classList.add('active');\n  });\n});\n\nrender();\nlucide.createIcons();\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\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","sante","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fcalculateur-chaleur-ressentie-1326e70a00-1779404179.webp","",[]]