{"id":62435,"date":"2026-08-07T17:02:16","date_gmt":"2026-08-07T15:02:16","guid":{"rendered":"https:\/\/alertes-meteo.com\/?page_id=62435"},"modified":"2026-08-07T17:02:16","modified_gmt":"2026-08-07T15:02:16","slug":"risque-dincendie-de-foret-a-15-jours-anticiper-pour-mieux-se-proteger","status":"publish","type":"page","link":"https:\/\/alertes-meteo.com\/index.php\/previsions-meteo-france\/risque-dincendie-de-foret-a-15-jours-anticiper-pour-mieux-se-proteger\/","title":{"rendered":"Risque d&rsquo;incendie de for\u00eat \u00e0 15 jours : anticiper pour mieux se prot\u00e9ger"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:1575px;margin-left: calc(-5% \/ 2 );margin-right: calc(-5% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-blend:overlay;--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:2.375%;--awb-margin-bottom-large:0px;--awb-spacing-left-large:2.375%;--awb-width-medium:100%;--awb-spacing-right-medium:2.375%;--awb-spacing-left-medium:2.375%;--awb-width-small:100%;--awb-spacing-right-small:2.375%;--awb-spacing-left-small:2.375%;\"><div class=\"fusion-column-wrapper fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\"><p>Un incendie de for\u00eat ne surgit pas de nulle part. Avant le premier foyer, la m\u00e9t\u00e9o accumule les conditions favorables pendant plusieurs jours : absence de pluie, humidit\u00e9 relative en chute, temp\u00e9ratures nocturnes \u00e9lev\u00e9es, vent sec persistant. \u00c0 15 jours, les mod\u00e8les de pr\u00e9vision commencent \u00e0 d\u00e9tecter ces encha\u00eenements.<\/p>\n<p>Ce n&rsquo;est pas une pr\u00e9vision d&rsquo;incendie. C&rsquo;est une pr\u00e9vision de vuln\u00e9rabilit\u00e9. Un territoire ass\u00e9ch\u00e9 par deux semaines de mistral et de chaleur n&rsquo;est pas le m\u00eame territoire qu&rsquo;apr\u00e8s une semaine de pluie, m\u00eame si la v\u00e9g\u00e9tation est identique.<\/p>\n<p>En France, les massifs m\u00e9diterran\u00e9ens concentrent le risque, mais les Landes, la Gironde ou la Corse l&rsquo;ont rappel\u00e9 ces derni\u00e8res ann\u00e9es : aucune for\u00eat n&rsquo;est \u00e0 l&rsquo;abri quand les conditions s&rsquo;alignent. Surveiller les tendances \u00e0 15 jours, c&rsquo;est gagner du temps pour les gestionnaires, les \u00e9lus et les habitants des zones expos\u00e9es.<\/p>\n<\/div><div class=\"fusion-separator fusion-full-width-sep\" style=\"align-self: center;margin-left: auto;margin-right: auto;width:100%;\"><div class=\"fusion-separator-border sep-double\" style=\"--awb-height:20px;--awb-amount:20px;--awb-sep-color:#ffffff;border-color:#ffffff;border-top-width:1px;border-bottom-width:1px;\"><\/div><\/div><div class=\"meteo-widget-container\">\n  <div class=\"meteo-header\">\n    <input type=\"text\" id=\"cityInput\" placeholder=\"Saisir une ville (ex: Angers, Fitou)\" onkeypress=\"if(event.key === 'Enter') fetchMeteo()\" \/>\n    <button onclick=\"fetchMeteo()\">Pr\u00e9visions 15 jours<\/button>\n  <\/div>\n  <div id=\"meteoResults\" class=\"meteo-results\">\n    <p style=\"text-align:center; color:#1d3557; font-weight:bold;\">Entrez une ville pour afficher les pr\u00e9visions.<\/p>\n  <\/div>\n<\/div>\n\n<style>\n  \/* Base & Conteneur *\/\n  .meteo-widget-container {\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n    width: 100%;\n    margin: 20px auto;\n    background: #ffffff;\n    padding: 20px;\n    border-radius: 12px;\n    box-shadow: 0 4px 15px rgba(0,0,0,0.08);\n    box-sizing: border-box;\n  }\n\n  \/* Formulaire de recherche *\/\n  .meteo-header {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 12px;\n    margin-bottom: 25px;\n  }\n  .meteo-header input, .meteo-header button {\n    padding: 12px 16px;\n    border: 2px solid #ffb703;\n    border-radius: 8px;\n    font-size: 16px;\n    outline: none;\n    box-sizing: border-box;\n  }\n  .meteo-header input { flex: 2; min-width: 200px; background: #fff; color: #1d3557; }\n  .meteo-header button {\n    flex: 1; min-width: 160px; background: #ffb703; color: #023047;\n    font-weight: bold; cursor: pointer; border: none; transition: background 0.3s;\n  }\n  .meteo-header button:hover { background: #fb8500; }\n\n  \/* Conteneur du tableau optimis\u00e9 mobile *\/\n  .meteo-table-wrapper {\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    border-radius: 10px;\n    box-shadow: 0 0 10px rgba(0,0,0,0.05);\n  }\n\n  \/* Structure du Tableau *\/\n  .meteo-table {\n    width: 100%;\n    min-width: 800px;\n    border-collapse: collapse;\n    background: #ffffff;\n  }\n\n  \/* En-t\u00eate color\u00e9e *\/\n  .meteo-table thead {\n    background: linear-gradient(135deg, #0077b6, #023e8a);\n    color: #ffffff;\n  }\n  .meteo-table th {\n    padding: 12px 10px;\n    font-size: 0.95em;\n    font-weight: 700;\n    text-transform: uppercase;\n    letter-spacing: 0.5px;\n    text-align: center;\n  }\n  .meteo-table th:first-child { text-align: left; padding-left: 20px; }\n\n  \/* Lignes et Cellules *\/\n  .meteo-table tbody tr {\n    border-bottom: 1px solid #e2e8f0;\n    transition: background 0.2s;\n  }\n  .meteo-table tbody tr:nth-child(even) { background-color: #f8fbff; }\n  .meteo-table tbody tr:hover { background-color: #e0fbfc; }\n  \n  .meteo-table td {\n    padding: 10px 8px;\n    text-align: center;\n    vertical-align: middle;\n    font-size: 1.05em;\n    font-weight: 600;\n  }\n\n  \/* Fixer la premi\u00e8re colonne + Tailles invers\u00e9es *\/\n  .meteo-table th:first-child,\n  .meteo-table td.col-date {\n    position: sticky;\n    left: 0;\n    background: inherit;\n    z-index: 1;\n    border-right: 2px solid #e2e8f0;\n    text-align: left;\n    padding-left: 20px;\n  }\n  .meteo-table thead th:first-child { background: #0077b6; z-index: 2; border-right: none; }\n\n  .data-jour { color: #6c757d; font-size: 0.9em; display: block; margin-bottom: 2px; font-weight: 600; text-transform: uppercase;}\n  .data-date { color: #023047; font-size: 1.4em; font-weight: 900; letter-spacing: -0.5px; }\n  \n  \/* Ic\u00f4ne M\u00e9t\u00e9o seule et g\u00e9ante *\/\n  .col-meteo { display: flex; align-items: center; justify-content: center; }\n  .icon-meteo { font-size: 2.2em; filter: drop-shadow(1px 1px 2px rgba(0,0,0,0.15)); }\n\n  \/* Temp\u00e9ratures fusionn\u00e9es *\/\n  .col-temp { font-size: 1.1em; font-weight: 800; color: #1d3557; }\n  .col-tmin { color: #0077b6; }\n  .col-tmax { color: #d62828; }\n  \n  .col-vent { color: #5a189a; font-weight: 800; font-size: 0.95em;}\n  .col-precip { color: #028090; font-weight: 800; }\n  .col-hum { color: #00b4d8; font-weight: 700; }\n\n  \/* Fl\u00e8che de vent *\/\n  .wind-arrow-container { display: flex; align-items: center; justify-content: center; gap: 6px; }\n  .wind-arrow { display: inline-block; font-size: 1.3em; transition: transform 0.3s ease; color: #023047; }\n\n  \/* Encart Alertes *\/\n  .alert-container { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 15px; }\n  .alert-badge { display: inline-block; padding: 8px 16px; border-radius: 8px; font-size: 0.95em; font-weight: bold; }\n  \n  .badge-sec-ok { background: #d4edda; color: #155724; border: 1px solid #c3e6cb; }\n  .badge-sec-warn { background: #fff3cd; color: #856404; border: 1px solid #ffeeba; }\n  .badge-sec-danger { background: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; }\n  \n  .badge-soil-wet { background: #cce5ff; color: #004085; border: 1px solid #b8daff; }\n  .badge-soil-ok { background: #d4edda; color: #155724; border: 1px solid #c3e6cb; }\n  .badge-soil-dry { background: #fff3cd; color: #856404; border: 1px solid #ffeeba; }\n  .badge-soil-severe { background: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; }\n\n  \/* Badges Risque Feu *\/\n  .badge-feu {\n    display: inline-block;\n    padding: 5px 12px;\n    border-radius: 12px;\n    font-size: 0.85em;\n    font-weight: 800;\n    text-transform: uppercase;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n  }\n  .feu-inexistant { background: #adb5bd; color: #fff; }\n  .feu-vert { background: #2a9d8f; color: #fff; }\n  .feu-jaune { background: #e9c46a; color: #023047; }\n  .feu-fort { background: #e76f51; color: #fff; }\n  .feu-exceptionnel { background: #370617; color: #fff; }\n\n  \/* Messages d'\u00e9tat *\/\n  .meteo-message { text-align: center; font-size: 1.1em; font-weight: bold; color: #d62828; padding: 20px; }\n  .meteo-title { color: #023047; text-align: center; margin-bottom: 5px; font-size: 1.5em; }\n  .meteo-subtitle { font-size: 0.75em; color: #6c757d; display: block; margin-top: 5px; font-weight: normal; }\n  \n  \/* Scrollbar *\/\n  .meteo-table-wrapper::-webkit-scrollbar { height: 8px; }\n  .meteo-table-wrapper::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 4px; }\n  .meteo-table-wrapper::-webkit-scrollbar-thumb { background: #ffb703; border-radius: 4px; }\n<\/style>\n\n<script>\n  async function fetchMeteo() {\n    const city = document.getElementById('cityInput').value.trim();\n    const resultsDiv = document.getElementById('meteoResults');\n    \n    if (!city) {\n      resultsDiv.innerHTML = '<p class=\"meteo-message\">Veuillez entrer le nom d\\'une ville.<\/p>';\n      return;\n    }\n\n    resultsDiv.innerHTML = '<p class=\"meteo-message\" style=\"color:#023047;;\">Analyse des donn\u00e9es GFS & CEP \u23f3...<\/p>';\n\n    try {\n      const geoUrl = `https:\/\/geocoding-api.open-meteo.com\/v1\/search?name=${encodeURIComponent(city)}&count=5&language=fr`;\n      const geoRes = await fetch(geoUrl);\n      const geoData = await geoRes.json();\n      \n      if (!geoData.results || geoData.results.length === 0) {\n        resultsDiv.innerHTML = '<p class=\"meteo-message\">Ville introuvable. V\u00e9rifiez l\\'orthographe.<\/p>';\n        return;\n      }\n      \n      const bestMatch = geoData.results.find(r => r.country === \"France\") || geoData.results[0];\n      const { latitude, longitude, elevation, name, admin1 } = bestMatch;\n      const regionLabel = admin1 ? `(${admin1})` : '';\n\n      const tz = \"Europe\/Paris\";\n      \n      \/\/ Requ\u00eates de pr\u00e9visions\n      const varsGFS = \"temperature_2m,wind_gusts_10m,wind_speed_10m,wind_direction_10m,relative_humidity_2m,weathercode,precipitation,soil_moisture_10_to_40cm\";\n      const varsCEP = \"temperature_2m,wind_gusts_10m,wind_speed_10m,wind_direction_10m,relative_humidity_2m,weathercode,precipitation\";\n      \n      const urlGFS = `https:\/\/api.open-meteo.com\/v1\/forecast?latitude=${latitude}&longitude=${longitude}&hourly=${varsGFS}&models=gfs_seamless&forecast_days=16&timezone=${encodeURIComponent(tz)}`;\n      const urlCEP = `https:\/\/api.open-meteo.com\/v1\/forecast?latitude=${latitude}&longitude=${longitude}&hourly=${varsCEP}&models=ecmwf_ifs025&forecast_days=16&timezone=${encodeURIComponent(tz)}`;\n      \n      \/\/ Requ\u00eate historique \u00e9tendue \u00e0 90 jours\n      const urlHist = `https:\/\/api.open-meteo.com\/v1\/forecast?latitude=${latitude}&longitude=${longitude}&daily=precipitation_sum&past_days=90&forecast_days=2&timezone=${encodeURIComponent(tz)}`;\n\n      const [resGFS, resCEP, resHist] = await Promise.all([fetch(urlGFS), fetch(urlCEP), fetch(urlHist)]);\n      const dataGFS = await resGFS.json();\n      const dataCEP = await resCEP.json();\n      const dataHist = await resHist.json();\n      \n      \/\/ --- CALCUL DU NOMBRE DE JOURS SANS PLUIE SIGNIFICATIVE (>= 3 mm) ET DATE DE LA DERNI\u00c8RE PLUIE ---\n      const todayStr = new Date().toISOString().split('T')[0];\n      let dryDaysCount = 0;\n      let dernierePluieDateStr = null;\n      let dHist = dataHist.daily;\n      let todayIndex = dHist.time.findIndex(t => t === todayStr);\n\n      if (todayIndex !== -1) {\n        for (let i = todayIndex - 1; i >= 0; i--) {\n          let precipReelle = dHist.precipitation_sum[i];\n          if (precipReelle === null || isNaN(precipReelle)) precipReelle = 0;\n          \n          if (precipReelle >= 3.0) {\n            dernierePluieDateStr = dHist.time[i];\n            break; \/\/ On a trouv\u00e9 la derni\u00e8re pluie significative !\n          }\n        }\n\n        \/\/ Si on a trouv\u00e9 une date de derni\u00e8re pluie, on compte pr\u00e9cis\u00e9ment l'\u00e9cart en jours\n        if (dernierePluieDateStr) {\n          const d1 = new Date(dernierePluieDateStr);\n          const d2 = new Date(todayStr);\n          dryDaysCount = Math.round((d2 - d1) \/ (1000 * 60 * 60 * 24));\n        } else {\n          dryDaysCount = 90; \/\/ Si aucune pluie trouv\u00e9e sur les 90 jours\n        }\n      }\n\n      \/\/ Formatage de la date de la derni\u00e8re pluie en fran\u00e7ais (ex: \"15 juillet\")\n      let dernierePluieFormatee = \"\";\n      if (dernierePluieDateStr) {\n        const dateObj = new Date(dernierePluieDateStr);\n        dernierePluieFormatee = dateObj.toLocaleDateString('fr-FR', { day: 'numeric', month: 'long' });\n      }\n\n      let alertSecClass = 'badge-sec-ok';\n      let alertSecMsg = \"\ud83c\udf27\ufe0f Pluie r\u00e9cente significative\";\n      \n      let displayCount = dryDaysCount > 30 ? \"Plus de 30\" : dryDaysCount;\n      let detailDateText = dernierePluieFormatee ? ` (derni\u00e8re le ${dernierePluieFormatee})` : \"\";\n\n      if (dryDaysCount > 0 && dryDaysCount < 10) { \n        alertSecClass = 'badge-sec-warn'; \n        alertSecMsg = `\u26a0\ufe0f ${displayCount} jours sans pluie significative${detailDateText}`; \n      } else if (dryDaysCount >= 10) { \n        alertSecClass = 'badge-sec-danger'; \n        alertSecMsg = `\ud83d\udea8 S\u00e8cheresse : ${displayCount} jours sans pluie significative${detailDateText}`; \n      }\n\n      \/\/ --- CALCUL DU STRESS HYDRIQUE DES SOLS (Profondeur 10-40 cm) ---\n      let currentSoilMoisture = null;\n      const today15h = todayStr + \"T15:00\";\n      const idx15h = dataGFS.hourly.time.indexOf(today15h);\n      if (idx15h !== -1 && dataGFS.hourly.soil_moisture_10_to_40cm) {\n        currentSoilMoisture = dataGFS.hourly.soil_moisture_10_to_40cm[idx15h];\n      }\n\n      let badgeSoilClass = \"\";\n      let badgeSoilMsg = \"\";\n      if (currentSoilMoisture === null) {\n        badgeSoilClass = \"badge-soil-ok\"; badgeSoilMsg = \"\ud83c\udf31 Humidit\u00e9 sols : N\/A\";\n      } else if (currentSoilMoisture >= 0.30) {\n        badgeSoilClass = \"badge-soil-wet\"; badgeSoilMsg = \"\ud83d\udca7 Sols gorg\u00e9s d'eau\";\n      } else if (currentSoilMoisture >= 0.20) {\n        badgeSoilClass = \"badge-soil-ok\"; badgeSoilMsg = \"\ud83c\udf31 Humidit\u00e9 des sols normale\";\n      } else if (currentSoilMoisture >= 0.12) {\n        badgeSoilClass = \"badge-soil-dry\"; badgeSoilMsg = \"\ud83c\udf42 Sols secs (L\u00e9ger stress hydrique)\";\n      } else {\n        badgeSoilClass = \"badge-soil-severe\"; badgeSoilMsg = \"\u26a0\ufe0f Stress hydrique de fond s\u00e9v\u00e8re\";\n      }\n\n      \/\/ --- TRAITEMENT DES DONN\u00c9ES (Tableau) ---\n      const hGFS = dataGFS.hourly;\n      const hCEP = dataCEP.hourly;\n      const daysData = {};\n      \n      for (let i = 0; i < hGFS.time.length; i++) {\n        const timeStr = hGFS.time[i]; \n        const datePart = timeStr.split('T')[0];\n        const hourPart = timeStr.split('T')[1].substring(0,2);\n        \n        if (datePart < todayStr) continue;\n\n        if (!daysData[datePart]) {\n          daysData[datePart] = { \n            date: datePart, temp7: null, temp15: null, maxGust: 0, maxWindSpeed: 0,\n            weatherIcon: null, totalPrecip: 0, rh15: null, windDir15: null\n          };\n        }\n        \n        const temp = (hGFS.temperature_2m[i] + hCEP.temperature_2m[i]) \/ 2;\n        const precip = ((hGFS.precipitation[i] || 0) + (hCEP.precipitation[i] || 0)) \/ 2;\n        const gust = (hGFS.wind_gusts_10m[i] + hCEP.wind_gusts_10m[i]) \/ 2;\n        const speed = (hGFS.wind_speed_10m[i] + hCEP.wind_speed_10m[i]) \/ 2;\n        const rh = (hGFS.relative_humidity_2m[i] + hCEP.relative_humidity_2m[i]) \/ 2;\n        \n        const radGFS = hGFS.wind_direction_10m[i] * Math.PI \/ 180;\n        const radCEP = hCEP.wind_direction_10m[i] * Math.PI \/ 180;\n        const avgSin = (Math.sin(radGFS) + Math.sin(radCEP)) \/ 2;\n        const avgCos = (Math.cos(radGFS) + Math.cos(radCEP)) \/ 2;\n        let windDir = Math.atan2(avgSin, avgCos) * 180 \/ Math.PI;\n        if (windDir < 0) windDir += 360;\n\n        if (hourPart === \"07\") { daysData[datePart].temp7 = temp; }\n        if (hourPart === \"15\") {\n          daysData[datePart].temp15 = temp;\n          daysData[datePart].weatherIcon = hCEP.weathercode[i]; \n          daysData[datePart].rh15 = rh;\n          daysData[datePart].windDir15 = windDir;\n        }\n        \n        if (gust > daysData[datePart].maxGust) { daysData[datePart].maxGust = gust; }\n        if (speed > daysData[datePart].maxWindSpeed) { daysData[datePart].maxWindSpeed = speed; }\n        daysData[datePart].totalPrecip += precip;\n      }\n\n      let html = `\n        <h3 class=\"meteo-title\">Pr\u00e9visions pour ${name} ${regionLabel}<\/h3>\n        <span class=\"meteo-subtitle\" style=\"text-align:center;\">Alt: ${elevation || 0}m | Moyenne des mod\u00e8les GFS et CEP<\/span>\n        <div class=\"alert-container\">\n          <span class=\"alert-badge ${alertSecClass}\">${alertSecMsg}<\/span>\n          <span class=\"alert-badge ${badgeSoilClass}\">${badgeSoilMsg}<\/span>\n        <\/div>\n        <br>\n        <div class=\"meteo-table-wrapper\">\n          <table class=\"meteo-table\">\n            <thead>\n              <tr>\n                <th>Date<\/th>\n                <th>Temps<\/th>\n                <th>Risque Feu<\/th>\n                <th>T\u00b0 min \/ max<\/th>\n                <th>Humidit\u00e9<\/th>\n                <th>Vent moy\/raf<\/th>\n                <th>Dir. Vent<\/th>\n                <th>Pr\u00e9cip.<\/th>\n              <\/tr>\n            <\/thead>\n            <tbody>\n      `;\n      \n      let count = 0;\n\n      for (const [date, data] of Object.entries(daysData)) {\n        if (count >= 15) break; \n        if (data.temp15 === null) continue; \n        \n        const dateObj = new Date(date);\n        let nomJour = dateObj.toLocaleDateString('fr-FR', { weekday: 'long' });\n        nomJour = nomJour.charAt(0).toUpperCase() + nomJour.slice(1);\n        const dateMois = dateObj.toLocaleDateString('fr-FR', { day: 'numeric', month: 'long' }); \n        \n        let displayJour = nomJour;\n        if (date === todayStr) { displayJour = \"Auj.\"; } \n        else {\n          const tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1);\n          if (date === tomorrow.toISOString().split('T')[0]) { displayJour = \"Demain\"; }\n        }\n\n        const iconOnly = getWmoIcon(data.weatherIcon !== null ? data.weatherIcon : 0);\n        const t7 = data.temp7 !== null ? Math.round(data.temp7) + '\u00b0' : '--';\n        const t15 = Math.round(data.temp15) + '\u00b0';\n        const hum = Math.round(data.rh15) + ' %';\n        const ventMoy = Math.round(data.maxWindSpeed \/ 5) * 5;\n        const rafale = Math.round(data.maxGust \/ 5) * 5;\n        const precip = data.totalPrecip < 0.2 ? '0 mm' : data.totalPrecip.toFixed(1) + ' mm';\n        const ventTexte = `${ventMoy} \/ ${rafale}`;\n        \n        const dirTexte = getWindDirectionText(data.windDir15);\n        const arrowRotation = (data.windDir15 + 180) % 360;\n        const windDirectionHtml = `\n          <div class=\"wind-arrow-container\">\n            <span>${dirTexte}<\/span>\n            <span class=\"wind-arrow\" style=\"transform: rotate(${arrowRotation}deg);\">\u2191<\/span>\n          <\/div>\n        `;\n\n        \/\/ --- CALCUL DU RISQUE INCENDIE ---\n        let pointsFeu = 0;\n        if (data.temp15 >= 35) pointsFeu += 4;\n        else if (data.temp15 >= 30) pointsFeu += 3;\n        else if (data.temp15 >= 25) pointsFeu += 2;\n        else if (data.temp15 >= 20) pointsFeu += 1;\n\n        if (data.maxGust >= 80) pointsFeu += 4;\n        else if (data.maxGust >= 60) pointsFeu += 3;\n        else if (data.maxGust >= 40) pointsFeu += 2;\n        else if (data.maxGust >= 20) pointsFeu += 1; \n\n        if (data.rh15 < 25) pointsFeu += 3;\n        else if (data.rh15 < 40) pointsFeu += 2;\n        else if (data.rh15 < 60) pointsFeu += 1; \n\n        if (latitude < 43) pointsFeu += 2; \n        else if (latitude < 45) pointsFeu += 1; \n\n        if (data.totalPrecip > 5) pointsFeu -= 5;\n        else if (data.totalPrecip > 2) pointsFeu -= 2;\n\n        if (pointsFeu < 0) pointsFeu = 0;\n\n        let classeFeu = \"\";\n        let texteFeu = \"\";\n\n        const estDansLeSud = latitude < 45; \n        const conditionAlerteMax = (estDansLeSud && data.maxGust >= 50 && data.temp15 > 25);\n\n        if (elevation > 1500) {\n          classeFeu = \"feu-inexistant\"; texteFeu = \"Inexistant\";\n        } else if (conditionAlerteMax || pointsFeu >= 10) {\n          classeFeu = \"feu-exceptionnel\"; texteFeu = \"Exceptionnel\";\n        } else if (pointsFeu >= 7) {\n          classeFeu = \"feu-fort\"; texteFeu = \"Fort\";\n        } else if (pointsFeu >= 4) {\n          classeFeu = \"feu-jaune\"; texteFeu = \"Moyen\"; \n        } else {\n          classeFeu = \"feu-vert\"; texteFeu = \"Faible\";\n        }\n\n        html += `\n          <tr>\n            <td class=\"col-date\">\n              <span class=\"data-jour\">${displayJour}<\/span>\n              <span class=\"data-date\">${dateMois}<\/span>\n            <\/td>\n            <td>\n              <div class=\"col-meteo\">\n                <span class=\"icon-meteo\">${iconOnly}<\/span>\n              <\/div>\n            <\/td>\n            <td><span class=\"badge-feu ${classeFeu}\">${texteFeu}<\/span><\/td>\n            <td class=\"col-temp\"><span class=\"col-tmin\">${t7}<\/span> \/ <span class=\"col-tmax\">${t15}<\/span><\/td>\n            <td class=\"col-hum\">${hum}<\/td>\n            <td class=\"col-vent\">${ventTexte} <span style=\"font-size:0.8em; font-weight:normal; color:#6c757d\">km\/h<\/span><\/td>\n            <td><b>${windDirectionHtml}<\/b><\/td>\n            <td class=\"col-precip\">${precip}<\/td>\n          <\/tr>\n        `;\n        count++;\n      }\n      \n      html += `<\/tbody><\/table><\/div>`;\n      resultsDiv.innerHTML = html;\n      \n    } catch(err) {\n      console.error(err);\n      resultsDiv.innerHTML = '<p class=\"meteo-message\">Erreur lors de la r\u00e9cup\u00e9ration des donn\u00e9es.<\/p>';\n    }\n  }\n\n  function getWindDirectionText(deg) {\n    if (deg === null) return '--';\n    const dirs = ['N', 'NE', 'E', 'SE', 'S', 'SO', 'O', 'NO'];\n    const index = Math.round(((deg %= 360) < 0 ? deg + 360 : deg) \/ 45) % 8;\n    return dirs[index];\n  }\n\n  function getWmoIcon(code) {\n    const mapping = {\n      0: '\u2600\ufe0f', 1: '\ud83c\udf24\ufe0f', 2: '\u26c5', 3: '\u2601\ufe0f',\n      45: '\ud83c\udf2b\ufe0f', 48: '\ud83c\udf2b\ufe0f',\n      51: '\ud83c\udf26\ufe0f', 53: '\ud83c\udf26\ufe0f', 55: '\ud83c\udf27\ufe0f',\n      61: '\ud83c\udf27\ufe0f', 63: '\ud83c\udf27\ufe0f', 65: '\ud83c\udf27\ufe0f',\n      71: '\u2744\ufe0f', 73: '\u2744\ufe0f', 75: '\u2744\ufe0f',\n      80: '\ud83c\udf26\ufe0f', 81: '\ud83c\udf27\ufe0f', 82: '\ud83c\udf27\ufe0f',\n      95: '\u26c8\ufe0f', 96: '\u26c8\ufe0f', 99: '\u26c8\ufe0f'\n    };\n    return mapping[code] || '\u2753';\n  }\n<\/script><script async src=\"https:\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js?client=ca-pub-8902396130105212\"\n     crossorigin=\"anonymous\"><\/script>\n<!-- bas de page -->\n<ins class=\"adsbygoogle\"\n     style=\"display:block\"\n     data-ad-client=\"ca-pub-8902396130105212\"\n     data-ad-slot=\"7724440717\"\n     data-ad-format=\"auto\"\n     data-full-width-responsive=\"true\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script><div class=\"fusion-separator fusion-full-width-sep\" style=\"align-self: center;margin-left: auto;margin-right: auto;width:100%;\"><div class=\"fusion-separator-border sep-double\" style=\"--awb-height:20px;--awb-amount:20px;border-color:var(--awb-color3);border-top-width:1px;border-bottom-width:1px;\"><\/div><\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":62469,"parent":60797,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_titles_title":"S\u00e9cheresse, vent, chaleur : comment rep\u00e9rer les conditions propices aux incendies","_seopress_titles_desc":"Le risque d'incendie de for\u00eat se lit dans les pr\u00e9visions m\u00e9t\u00e9o bien avant le d\u00e9part de feu. Apprenez \u00e0 identifier les signaux \u00e0 15 jours \u2014 s\u00e9cheresse, vent, temp\u00e9ratures \u2014 pour anticiper et adapter vos comportements en zones sensibles en France.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"both","_seopress_redirections_param":"","_seopress_redirections_type":301,"_seopress_analysis_target_kw":"temperature mer","footnotes":""},"class_list":["post-62435","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages\/62435","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/comments?post=62435"}],"version-history":[{"count":16,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages\/62435\/revisions"}],"predecessor-version":[{"id":62470,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages\/62435\/revisions\/62470"}],"up":[{"embeddable":true,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/pages\/60797"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/media\/62469"}],"wp:attachment":[{"href":"https:\/\/alertes-meteo.com\/index.php\/wp-json\/wp\/v2\/media?parent=62435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}