{
 "region": "kankakee",
 "region_name": "Kankakee / Bourbonnais",
 "tz": "America/Chicago",
 "run_time": "2026-10-19T21:30-05:00",
 "morning": "2026-10-20",
 "sites": [
  {
   "id": "home",
   "name": "Home (Bourbonnais, 60914)",
   "lat": 41.153,
   "lon": -87.879,
   "features": [
    "corn",
    "tree line"
   ],
   "drone_status": "unknown",
   "elevation_m": 202.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:40",
    "sunrise": "07:09",
    "azimuth": 103.2,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:23",
    "sun_12deg": "08:21"
   },
   "score": {
    "fog_probability": 0.13,
    "raw_blend": 0.63,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.114,
    "confidence": "high",
    "confidence_why": "4 models within 0.11 of each other on the blend score",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0\u20133 m, if any (estimate)",
     "why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.6 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "07:39",
     "est_end": "08:24",
     "model_clear": null,
     "notes": [],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 0.6,
     "label": "filtered sun",
     "why": "mid+high cloud at sunrise \u2248 39 % \u2014 beams possible through gaps"
    },
    "steam_fog": null,
    "photo_score": 0.1,
    "grade": "D",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 1.5999999999999996,
       "dpd_key": 1.7999999999999998,
       "rh_max": 89,
       "wind_mean": 3.575,
       "wind_after": 2.6,
       "gust_max": 5.4,
       "cloud_mh_night": 18.454545454545453,
       "cloud_low_night": 4.818181818181818,
       "cloud_mh_sunrise": 39.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 13900.0,
       "low_sunrise": 16.0,
       "vis_min": 13900.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 17.8,
       "t_key": 5.1,
       "cooling": 12.700000000000001,
       "t_min_night": 5.1,
       "td_afternoon": -1.55,
       "crossover": 6.6499999999999995,
       "td_drop": -4.85,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6999999999999318,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.2,
         "Td": 3.9,
         "RH": 61,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 28500.0
        },
        {
         "t": "22:00",
         "T": 10.6,
         "Td": 3.2,
         "RH": 60,
         "wind": 1.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 29300.0
        },
        {
         "t": "23:00",
         "T": 9.7,
         "Td": 3.2,
         "RH": 64,
         "wind": 1.9,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 26700.0
        },
        {
         "t": "00:00",
         "T": 8.6,
         "Td": 3.7,
         "RH": 71,
         "wind": 4.5,
         "low": 0,
         "mid": 1,
         "high": 0,
         "vis": 22300.0
        },
        {
         "t": "01:00",
         "T": 7.7,
         "Td": 4.1,
         "RH": 78,
         "wind": 4.1,
         "low": 2,
         "mid": 4,
         "high": 0,
         "vis": 18500.0
        },
        {
         "t": "02:00",
         "T": 7.1,
         "Td": 3.7,
         "RH": 79,
         "wind": 3.9,
         "low": 2,
         "mid": 0,
         "high": 0,
         "vis": 18200.0
        },
        {
         "t": "03:00",
         "T": 6.5,
         "Td": 3.7,
         "RH": 82,
         "wind": 4.1,
         "low": 2,
         "mid": 0,
         "high": 0,
         "vis": 16800.0
        },
        {
         "t": "04:00",
         "T": 5.9,
         "Td": 3.6,
         "RH": 85,
         "wind": 3.5,
         "low": 7,
         "mid": 7,
         "high": 0,
         "vis": 15100.0
        },
        {
         "t": "05:00",
         "T": 5.4,
         "Td": 3.4,
         "RH": 87,
         "wind": 4.2,
         "low": 11,
         "mid": 17,
         "high": 0,
         "vis": 14100.0
        },
        {
         "t": "06:00",
         "T": 5.3,
         "Td": 3.7,
         "RH": 89,
         "wind": 2.9,
         "low": 14,
         "mid": 100,
         "high": 1,
         "vis": 14000.0
        },
        {
         "t": "07:00",
         "T": 5.1,
         "Td": 3.3,
         "RH": 88,
         "wind": 3.7,
         "low": 15,
         "mid": 74,
         "high": 0,
         "vis": 13900.0
        },
        {
         "t": "08:00",
         "T": 5.7,
         "Td": 4.3,
         "RH": 91,
         "wind": 3.0,
         "low": 17,
         "mid": 4,
         "high": 0,
         "vis": 13400.0
        },
        {
         "t": "09:00",
         "T": 9.7,
         "Td": 4.3,
         "RH": 69,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 23100.0
        },
        {
         "t": "10:00",
         "T": 13.4,
         "Td": 5.6,
         "RH": 59,
         "wind": 3.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 29000.0
        },
        {
         "t": "11:00",
         "T": 16.5,
         "Td": 6.3,
         "RH": 51,
         "wind": 3.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 35700.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.56,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.6 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.6 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight mid+high levels cloud = 18 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 12.7 \u00b0C"
       },
       "moisture": {
        "score": 0.1,
        "why": "crossover: forecast night minimum 5.1 \u00b0C vs afternoon dewpoint -1.6 \u00b0C \u2192 +6.6 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 13.9 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.643
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 1.5,
       "dpd_key": 1.5,
       "rh_max": 90,
       "wind_mean": 0.0,
       "wind_after": 0.0,
       "gust_max": 2.1,
       "cloud_mh_night": 19.90909090909091,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 2.5,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.3,
       "t_key": 5.0,
       "cooling": 11.3,
       "t_min_night": 5.0,
       "td_afternoon": 3.25,
       "crossover": 1.75,
       "td_drop": -0.25,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.0,
         "Td": 5.1,
         "RH": 67,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 9.9,
         "Td": 5.1,
         "RH": 72,
         "wind": 0.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 8.8,
         "Td": 5.0,
         "RH": 77,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 8.1,
         "Td": 4.8,
         "RH": 80,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 7.4,
         "Td": 4.7,
         "RH": 83,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 6.9,
         "Td": 4.4,
         "RH": 84,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 6.4,
         "Td": 4.0,
         "RH": 85,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 6.0,
         "Td": 4.0,
         "RH": 87,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 5.8,
         "Td": 3.4,
         "RH": 85,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.5,
         "Td": 3.6,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 5.0,
         "Td": 3.5,
         "RH": 90,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.6,
         "Td": 4.6,
         "RH": 87,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 10.0,
         "Td": 6.3,
         "RH": 78,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 13.0,
         "Td": 7.0,
         "RH": 67,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.6,
         "Td": 6.6,
         "RH": 55,
         "wind": 1.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.6,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.5 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.85,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.0 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight total cloud (levels unavailable) cloud = 20 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 11.3 \u00b0C"
       },
       "moisture": {
        "score": 0.47,
        "why": "crossover: forecast night minimum 5.0 \u00b0C vs afternoon dewpoint 3.2 \u00b0C \u2192 +1.8 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.662
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 1.9999999999999996,
       "dpd_key": 2.1,
       "rh_max": 87,
       "wind_mean": 3.35,
       "wind_after": 2.45,
       "gust_max": 5.1,
       "cloud_mh_night": 57.63636363636363,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 20.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 15.2,
       "t_key": 6.0,
       "cooling": 9.2,
       "t_min_night": 5.6,
       "td_afternoon": 3.2,
       "crossover": 2.3999999999999995,
       "td_drop": -0.6999999999999997,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7999999999999545,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.7,
         "Td": 5.0,
         "RH": 68,
         "wind": 3.4,
         "low": 0,
         "mid": 0,
         "high": 29,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 9.7,
         "Td": 4.9,
         "RH": 72,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 2,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 8.9,
         "Td": 4.9,
         "RH": 76,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 16,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 8.2,
         "Td": 4.8,
         "RH": 79,
         "wind": 3.4,
         "low": 0,
         "mid": 0,
         "high": 48,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 7.6,
         "Td": 4.6,
         "RH": 81,
         "wind": 3.4,
         "low": 0,
         "mid": 5,
         "high": 69,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 7.2,
         "Td": 4.3,
         "RH": 82,
         "wind": 3.4,
         "low": 0,
         "mid": 27,
         "high": 66,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 6.9,
         "Td": 4.0,
         "RH": 82,
         "wind": 3.4,
         "low": 0,
         "mid": 55,
         "high": 52,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 6.6,
         "Td": 3.8,
         "RH": 82,
         "wind": 3.5,
         "low": 0,
         "mid": 71,
         "high": 38,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 6.1,
         "Td": 3.6,
         "RH": 84,
         "wind": 3.5,
         "low": 0,
         "mid": 62,
         "high": 27,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 5.6,
         "Td": 3.6,
         "RH": 87,
         "wind": 3.3,
         "low": 0,
         "mid": 39,
         "high": 16,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 6.0,
         "Td": 3.9,
         "RH": 86,
         "wind": 3.1,
         "low": 0,
         "mid": 20,
         "high": 8,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 8.2,
         "Td": 4.8,
         "RH": 79,
         "wind": 2.6,
         "low": 0,
         "mid": 10,
         "high": 3,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 11.3,
         "Td": 5.8,
         "RH": 69,
         "wind": 2.3,
         "low": 0,
         "mid": 4,
         "high": 1,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 14.0,
         "Td": 6.4,
         "RH": 60,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.1,
         "Td": 6.3,
         "RH": 52,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.4,
        "why": "min T\u2212Td in the 3 h before sunrise = 2.0 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.4 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.52,
        "why": "overnight mid+high levels cloud = 58 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 9.2 \u00b0C"
       },
       "moisture": {
        "score": 0.34,
        "why": "crossover: forecast night minimum 5.6 \u00b0C vs afternoon dewpoint 3.2 \u00b0C \u2192 +2.4 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 87 %"
       }
      },
      "gates": [],
      "raw": 0.548
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 2.3,
       "dpd_key": 2.3,
       "rh_max": 85,
       "wind_mean": 1.5,
       "wind_after": 1.65,
       "gust_max": 2.7,
       "cloud_mh_night": 20.09090909090909,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 2.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.0,
       "t_key": 2.0,
       "cooling": 14.0,
       "t_min_night": 2.0,
       "td_afternoon": 3.4,
       "crossover": -1.4,
       "td_drop": 3.6999999999999997,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7000000000000455,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 9.3,
         "Td": 2.8,
         "RH": 64,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 63,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 7.9,
         "Td": 2.6,
         "RH": 69,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 67,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 6.6,
         "Td": 2.1,
         "RH": 73,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 57,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 5.8,
         "Td": 1.9,
         "RH": 76,
         "wind": 1.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 4.5,
         "Td": 1.5,
         "RH": 81,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 3.8,
         "Td": 1.1,
         "RH": 83,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 6,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 3.2,
         "Td": 0.8,
         "RH": 84,
         "wind": 1.9,
         "low": 0,
         "mid": 8,
         "high": 0,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 2.9,
         "Td": 0.3,
         "RH": 83,
         "wind": 1.3,
         "low": 0,
         "mid": 6,
         "high": 5,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 2.8,
         "Td": 0.2,
         "RH": 83,
         "wind": 1.5,
         "low": 0,
         "mid": 0,
         "high": 5,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 2.4,
         "Td": -0.1,
         "RH": 84,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 2.0,
         "Td": -0.3,
         "RH": 85,
         "wind": 1.6,
         "low": 0,
         "mid": 4,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 2.5,
         "Td": 0.4,
         "RH": 86,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 6.9,
         "Td": 3.0,
         "RH": 76,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 12.5,
         "Td": 4.7,
         "RH": 59,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.5,
         "Td": 5.1,
         "RH": 47,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.33,
        "why": "min T\u2212Td in the 3 h before sunrise = 2.3 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.95,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.5 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight mid+high levels cloud = 20 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 14.0 \u00b0C"
       },
       "moisture": {
        "score": 1.0,
        "why": "crossover: forecast night minimum 2.0 \u00b0C vs afternoon dewpoint 3.4 \u00b0C \u2192 -1.4 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 85 %"
       }
      },
      "gates": [],
      "raw": 0.652
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.112,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:27+00:00",
     "elevation_m": 202.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:39+00:00",
     "elevation_m": 202.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:39+00:00",
     "elevation_m": 202.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:39+00:00",
     "elevation_m": 202.0
    }
   },
   "water_temp_c": null,
   "dawn_temp_c": 5.1,
   "dawn_wind_kt": 3.7
  },
  {
   "id": "midewin-iron-bridge-trailhead",
   "name": "Midewin National Tallgrass Prairie - Iron Bridge Trailhead",
   "lat": 41.3789147,
   "lon": -88.1230504,
   "agency": "USDA Forest Service, Midewin National Tallgrass Prairie",
   "agency_url": "https://www.fs.usda.gov/r09/midewin/recreation/iron-bridge-trailhead",
   "dawn_access": "\"Visitors and trail users are welcome to the open areas of Midewin every day of the year from 4 am until 10 pm.\" (hiking page); trailhead page: \"Trails: year-round, Mon - Sun, 4:00 a.m. to 10:00 p.m. (Closed on federal holidays)\"",
   "dawn_access_ok": true,
   "drone_rule": "Midewin links to the national FS page: \"Individuals and organizations may fly UAS for hobby or recreational purposes\"; \"UAS must be flown below 400 feet\"; \"Keep your UAS away from populated and noise-sensitive areas, such as campgrounds, trail heads, and visitor centers.\" Midewin safety page: \"Avoid Drone Use Near Bison\". Forest Orders page: \"Currently there are no active Forest Orders at Midewin National Tallgrass Prairie.\" No Midewin-specific filming/commercial permit rule found.",
   "drone_rule_url": "https://www.fs.usda.gov/visit/know-before-you-go/recreational-drone-tips",
   "drone_status": "allowed",
   "features": [
    "prairie",
    "tree line",
    "farmland"
   ],
   "features_source": "FS trailhead page: \"Adjacent to the Iron Bridge Trailhead is Midewin's second largest restoration prairie\"; OSM Overpass within 1.5 km: 2 tree_row ways, 1 farmland polygon, 21 stream/river ways; USGS 3DEP: site 639 ft, 1.5 km ring 608-643 ft (flat). Coordinates: OSM node 1233563855 (FS trailhead).",
   "drive_minutes_est": 43,
   "airspace_note": "FAA Class_Airspace data: Chicago Class E5 (floor 700 ft AGL) + Illinois Class E5; surface is Class G. No UAS Facility Map grid. KJOT 8.7 nm, Dresden Generating Station 6.6 nm, Braidwood 9.4 nm. Not in any national-security UAS restriction layer.",
   "notes": "Drive time is an OSRM estimate. FS tips page cites Section 336 (outdated wording) and says to fly >=5 miles from an airport (KJOT is 8.7 nm away). Bison are present at Midewin; location of herd vs this trailhead not verified.",
   "look": "deep-bank aerial over prairie + tree rows; lone-tree shots from the trail",
   "evidence": "research/C-locations.md",
   "elevation_m": 195.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:41",
    "sunrise": "07:10",
    "azimuth": 103.3,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:24",
    "sun_12deg": "08:23"
   },
   "score": {
    "fog_probability": 0.14,
    "raw_blend": 0.653,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.148,
    "confidence": "high",
    "confidence_why": "4 models within 0.15 of each other on the blend score",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0\u20133 m, if any (estimate)",
     "why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.7 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "08:10",
     "est_end": "09:10",
     "model_clear": null,
     "notes": [
      "cloud above the fog weakens the sun; add ~30\u201345 min"
     ],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 0.2,
     "label": "overcast above the fog",
     "why": "mid+high cloud at sunrise \u2248 64 % \u2014 flat grey, no beams"
    },
    "steam_fog": null,
    "photo_score": 0.09,
    "grade": "D",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 1.6999999999999993,
       "dpd_key": 1.9000000000000004,
       "rh_max": 89,
       "wind_mean": 4.35,
       "wind_after": 3.0,
       "gust_max": 7.0,
       "cloud_mh_night": 32.90909090909091,
       "cloud_low_night": 2.090909090909091,
       "cloud_mh_sunrise": 63.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 14300.0,
       "low_sunrise": 9.0,
       "vis_min": 14200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 17.1,
       "t_key": 6.5,
       "cooling": 10.600000000000001,
       "t_min_night": 6.5,
       "td_afternoon": 2.0999999999999996,
       "crossover": 4.4,
       "td_drop": -2.5,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6000000000000227,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 12.3,
         "Td": 1.0,
         "RH": 46,
         "wind": 5.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 41700.0
        },
        {
         "t": "22:00",
         "T": 10.9,
         "Td": 0.6,
         "RH": 49,
         "wind": 4.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 38500.0
        },
        {
         "t": "23:00",
         "T": 9.9,
         "Td": 1.5,
         "RH": 56,
         "wind": 4.3,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 32400.0
        },
        {
         "t": "00:00",
         "T": 9.2,
         "Td": 2.7,
         "RH": 64,
         "wind": 4.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 26700.0
        },
        {
         "t": "01:00",
         "T": 8.4,
         "Td": 3.0,
         "RH": 69,
         "wind": 4.9,
         "low": 0,
         "mid": 2,
         "high": 0,
         "vis": 23200.0
        },
        {
         "t": "02:00",
         "T": 7.8,
         "Td": 3.2,
         "RH": 73,
         "wind": 4.7,
         "low": 1,
         "mid": 2,
         "high": 0,
         "vis": 21200.0
        },
        {
         "t": "03:00",
         "T": 7.5,
         "Td": 3.0,
         "RH": 73,
         "wind": 4.6,
         "low": 1,
         "mid": 1,
         "high": 0,
         "vis": 21300.0
        },
        {
         "t": "04:00",
         "T": 6.8,
         "Td": 3.2,
         "RH": 78,
         "wind": 4.4,
         "low": 2,
         "mid": 51,
         "high": 6,
         "vis": 18600.0
        },
        {
         "t": "05:00",
         "T": 6.6,
         "Td": 4.0,
         "RH": 84,
         "wind": 4.6,
         "low": 4,
         "mid": 100,
         "high": 0,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 6.6,
         "Td": 4.9,
         "RH": 89,
         "wind": 3.9,
         "low": 6,
         "mid": 100,
         "high": 0,
         "vis": 14200.0
        },
        {
         "t": "07:00",
         "T": 6.5,
         "Td": 4.6,
         "RH": 88,
         "wind": 4.5,
         "low": 9,
         "mid": 100,
         "high": 0,
         "vis": 14300.0
        },
        {
         "t": "08:00",
         "T": 6.9,
         "Td": 4.9,
         "RH": 87,
         "wind": 4.0,
         "low": 9,
         "mid": 27,
         "high": 0,
         "vis": 14800.0
        },
        {
         "t": "09:00",
         "T": 10.6,
         "Td": 5.3,
         "RH": 70,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 22900.0
        },
        {
         "t": "10:00",
         "T": 14.5,
         "Td": 4.7,
         "RH": 52,
         "wind": 2.5,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 35400.0
        },
        {
         "t": "11:00",
         "T": 17.2,
         "Td": 4.5,
         "RH": 43,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 44600.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.52,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.7 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 4.3 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.83,
        "why": "overnight mid+high levels cloud = 33 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 10.6 \u00b0C"
       },
       "moisture": {
        "score": 0.1,
        "why": "crossover: forecast night minimum 6.5 \u00b0C vs afternoon dewpoint 2.1 \u00b0C \u2192 +4.4 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 14.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.605
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 1.3000000000000007,
       "dpd_key": 1.3000000000000007,
       "rh_max": 91,
       "wind_mean": 0.15,
       "wind_after": 0.8,
       "gust_max": 2.3,
       "cloud_mh_night": 20.90909090909091,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 10.5,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.1,
       "t_key": 5.4,
       "cooling": 10.700000000000001,
       "t_min_night": 5.4,
       "td_afternoon": 5.2,
       "crossover": 0.20000000000000018,
       "td_drop": 1.1000000000000005,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.0,
         "Td": 6.2,
         "RH": 72,
         "wind": 1.4,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 10.0,
         "Td": 6.4,
         "RH": 78,
         "wind": 1.7,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 9.1,
         "Td": 6.2,
         "RH": 82,
         "wind": 1.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 8.6,
         "Td": 6.1,
         "RH": 84,
         "wind": 1.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 8.1,
         "Td": 5.6,
         "RH": 84,
         "wind": 1.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 7.5,
         "Td": 5.2,
         "RH": 85,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 7.0,
         "Td": 4.8,
         "RH": 86,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 6.4,
         "Td": 4.4,
         "RH": 87,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 6.1,
         "Td": 4.3,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.7,
         "Td": 4.2,
         "RH": 90,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 5.4,
         "Td": 4.1,
         "RH": 91,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.6,
         "Td": 4.9,
         "RH": 89,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 10.2,
         "Td": 6.2,
         "RH": 76,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 13.1,
         "Td": 7.1,
         "RH": 67,
         "wind": 0.4,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.4,
         "Td": 7.5,
         "RH": 59,
         "wind": 1.4,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.7,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.3 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.86,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.1 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.99,
        "why": "overnight total cloud (levels unavailable) cloud = 21 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 10.7 \u00b0C"
       },
       "moisture": {
        "score": 0.94,
        "why": "crossover: forecast night minimum 5.4 \u00b0C vs afternoon dewpoint 5.2 \u00b0C \u2192 +0.2 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.739
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 2.0999999999999996,
       "dpd_key": 2.3000000000000007,
       "rh_max": 86,
       "wind_mean": 2.6750000000000003,
       "wind_after": 2.05,
       "gust_max": 4.5,
       "cloud_mh_night": 34.81818181818182,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 0.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 14.9,
       "t_key": 6.4,
       "cooling": 8.5,
       "t_min_night": 6.1,
       "td_afternoon": 4.2,
       "crossover": 1.8999999999999995,
       "td_drop": 0.10000000000000053,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.8000000000000682,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.9,
         "Td": 7.0,
         "RH": 77,
         "wind": 3.1,
         "low": 0,
         "mid": 0,
         "high": 43,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 10.1,
         "Td": 6.6,
         "RH": 79,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 18,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 9.5,
         "Td": 6.2,
         "RH": 80,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 18,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 9.0,
         "Td": 5.9,
         "RH": 81,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 30,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 8.6,
         "Td": 5.5,
         "RH": 81,
         "wind": 3.1,
         "low": 0,
         "mid": 0,
         "high": 40,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 8.2,
         "Td": 5.2,
         "RH": 81,
         "wind": 3.0,
         "low": 0,
         "mid": 5,
         "high": 45,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 7.8,
         "Td": 4.9,
         "RH": 82,
         "wind": 2.8,
         "low": 0,
         "mid": 11,
         "high": 49,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 7.5,
         "Td": 4.6,
         "RH": 82,
         "wind": 2.7,
         "low": 0,
         "mid": 14,
         "high": 47,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 6.8,
         "Td": 4.3,
         "RH": 84,
         "wind": 2.6,
         "low": 0,
         "mid": 11,
         "high": 34,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 6.1,
         "Td": 4.0,
         "RH": 86,
         "wind": 2.7,
         "low": 0,
         "mid": 4,
         "high": 14,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 6.4,
         "Td": 4.1,
         "RH": 85,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 8.5,
         "Td": 5.3,
         "RH": 80,
         "wind": 2.3,
         "low": 0,
         "mid": 1,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 11.6,
         "Td": 6.9,
         "RH": 73,
         "wind": 1.8,
         "low": 0,
         "mid": 3,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 14.3,
         "Td": 8.0,
         "RH": 66,
         "wind": 1.4,
         "low": 0,
         "mid": 5,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.2,
         "Td": 7.9,
         "RH": 58,
         "wind": 1.5,
         "low": 0,
         "mid": 5,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.38,
        "why": "min T\u2212Td in the 3 h before sunrise = 2.1 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 2.7 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.8,
        "why": "overnight mid+high levels cloud = 35 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 8.5 \u00b0C"
       },
       "moisture": {
        "score": 0.43,
        "why": "crossover: forecast night minimum 6.1 \u00b0C vs afternoon dewpoint 4.2 \u00b0C \u2192 +1.9 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 86 %"
       }
      },
      "gates": [],
      "raw": 0.591
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 0.7999999999999998,
       "dpd_key": 0.7999999999999999,
       "rh_max": 95,
       "wind_mean": 1.775,
       "wind_after": 1.75,
       "gust_max": 3.3,
       "cloud_mh_night": 29.636363636363637,
       "cloud_low_night": 8.0,
       "cloud_mh_sunrise": 14.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 31.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 2,
       "first_sat_hour": "06:00",
       "t_evening": 16.2,
       "t_key": 1.4,
       "cooling": 14.799999999999999,
       "t_min_night": 1.4,
       "td_afternoon": 4.65,
       "crossover": -3.2500000000000004,
       "td_drop": 4.050000000000001,
       "airmass_change": true,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7000000000000455,
       "model_clear_hour": "09:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 8.3,
         "Td": 5.4,
         "RH": 82,
         "wind": 2.5,
         "low": 0,
         "mid": 0,
         "high": 34,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 7.0,
         "Td": 4.9,
         "RH": 87,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 23,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 5.9,
         "Td": 4.4,
         "RH": 90,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 21,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 5.0,
         "Td": 3.8,
         "RH": 92,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 4.2,
         "Td": 3.1,
         "RH": 93,
         "wind": 2.4,
         "low": 14,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 3.8,
         "Td": 2.7,
         "RH": 93,
         "wind": 2.4,
         "low": 10,
         "mid": 0,
         "high": 44,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 3.6,
         "Td": 2.5,
         "RH": 93,
         "wind": 2.0,
         "low": 0,
         "mid": 65,
         "high": 19,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 3.2,
         "Td": 2.0,
         "RH": 92,
         "wind": 1.4,
         "low": 0,
         "mid": 20,
         "high": 4,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 2.6,
         "Td": 1.5,
         "RH": 93,
         "wind": 1.8,
         "low": 0,
         "mid": 9,
         "high": 7,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 1.9,
         "Td": 1.1,
         "RH": 95,
         "wind": 2.0,
         "low": 30,
         "mid": 61,
         "high": 0,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 1.4,
         "Td": 0.6,
         "RH": 95,
         "wind": 1.9,
         "low": 34,
         "mid": 19,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 1.8,
         "Td": 0.9,
         "RH": 94,
         "wind": 2.1,
         "low": 28,
         "mid": 9,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 6.2,
         "Td": 3.4,
         "RH": 82,
         "wind": 1.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 11.7,
         "Td": 5.6,
         "RH": 66,
         "wind": 1.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 15.3,
         "Td": 6.8,
         "RH": 57,
         "wind": 1.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.91,
        "why": "min T\u2212Td in the 3 h before sunrise = 0.8 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.98,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.8 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.87,
        "why": "overnight mid+high levels cloud = 30 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 0.4,
        "why": "temperature fall 18:00 \u2192 sunrise = 14.8 \u00b0C; part of this is cold advection, not radiation (discounted)"
       },
       "moisture": {
        "score": 0.2,
        "why": "crossover: forecast night minimum 1.4 \u00b0C vs afternoon dewpoint 4.7 \u00b0C \u2192 -3.3 \u00b0C; rain last 48 h = 0.0 mm; BUT dewpoint falls 4.1 \u00b0C by dawn \u2014 drier air moving in, crossover rule discounted"
       },
       "model_signal": {
        "score": 0.4,
        "why": "model has no visibility field; max RH before sunrise = 95 %"
       }
      },
      "gates": [],
      "raw": 0.719
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.154,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=41.3789147&longitude=-88.1230504&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.3789147&longitude=-88.1230504&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:39+00:00",
     "elevation_m": 195.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.3789147&longitude=-88.1230504&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:42+00:00",
     "elevation_m": 195.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.3789147&longitude=-88.1230504&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:42+00:00",
     "elevation_m": 195.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.3789147&longitude=-88.1230504&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:42+00:00",
     "elevation_m": 195.0
    }
   },
   "water_temp_c": null,
   "dawn_temp_c": 6.5,
   "dawn_wind_kt": 4.5
  },
  {
   "id": "kankakee-river-state-park",
   "name": "Kankakee River State Park",
   "lat": 41.203,
   "lon": -87.979,
   "agency": "Illinois Department of Natural Resources",
   "agency_url": "https://dnr.illinois.gov/parks/park.kankakeeriver.html",
   "dawn_access": "No opening hours on the park page. Activities page: \"Quiet hours are 10 p.m. to 7 a.m. Vehicle traffic is not allowed during quiet hours.\"",
   "dawn_access_ok": false,
   "drone_rule": "17 Ill. Adm. Code 110.160(i): it is unlawful \"Except in cases of emergency, for any person to land or attempt to land any aircraft on Department-owned, -leased or -managed property without prior authorization for each landing or attempted landing from the Department.\" No site-specific drone page found for this site. The wording says 'aircraft', not 'drone/unmanned', and does not name the superintendent; treat as authorization required until the site office says otherwise.",
   "drone_rule_url": "https://www.ilga.gov/commission/jcar/admincode/017/017001100A01600R.html",
   "drone_status": "permit",
   "features": [
    "river",
    "river-valley relief"
   ],
   "features_source": "IDNR park page: \"Enveloping both sides of the Kankakee River for 11 miles... approximately 4,000 acres\"; USGS 3DEP at Warner Bridge Rd river crossing: 546 ft vs 586-623 ft on a 1.5 km ring (river valley 40-77 ft below rim). Coordinates: IDNR page Park Latitude/Longitude 41.203/-87.979 (park office area).",
   "drive_minutes_est": 12,
   "airspace_note": "Illinois Class E5 only (floor 1200 ft AGL); surface is Class G. KIKK 9.9 nm. Private strips nearby: Hawker (12IL) 1.7 nm, Classic Landings (05IL) 3.3 nm (OSM/FAA IDs).",
   "notes": "Vehicle ban until 7:00 am means pre-sunrise access by car is not allowed; sunrise is roughly 7:00-7:10 am CDT now but about 6:20-6:40 am CST after Nov 1. Walk-in before 7 is not addressed on the page. Park office: 815-933-1383, Mon-Fri 8:00-3:30 (metal detecting permit text). Hunting seasons run in the park (archery deer, waterfowl, upland).",
   "look": "river steam fog in the valley; rim gives an elevated view over the fog (drone needs IDNR authorization)",
   "evidence": "research/C-locations.md",
   "elevation_m": 182.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:40",
    "sunrise": "07:09",
    "azimuth": 103.2,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:23",
    "sun_12deg": "08:21"
   },
   "score": {
    "fog_probability": 0.14,
    "raw_blend": 0.645,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.208,
    "confidence": "medium",
    "confidence_why": "models differ by 0.21 on the blend score",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0\u20133 m, if any (estimate)",
     "why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.9 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "07:39",
     "est_end": "08:24",
     "model_clear": null,
     "notes": [],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 0.6,
     "label": "filtered sun",
     "why": "mid+high cloud at sunrise \u2248 40 % \u2014 beams possible through gaps"
    },
    "steam_fog": {
     "delta_c": 9.2,
     "likely": true,
     "why": "river water +9.2 \u00b0C warmer than the forecast dawn air (steam fog over open water needs roughly \u22655 \u00b0C and light wind; forecast wind 4 kt)",
     "gauge": "KANKAKEE RIVER NEAR WILMINGTON, IL"
    },
    "photo_score": 0.11,
    "grade": "D",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 1.9,
       "dpd_key": 2.1999999999999997,
       "rh_max": 88,
       "wind_mean": 4.225,
       "wind_after": 2.95,
       "gust_max": 6.4,
       "cloud_mh_night": 25.545454545454547,
       "cloud_low_night": 4.2727272727272725,
       "cloud_mh_sunrise": 40.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 14600.0,
       "low_sunrise": 15.5,
       "vis_min": 14400.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 17.9,
       "t_key": 5.6,
       "cooling": 12.299999999999999,
       "t_min_night": 5.6,
       "td_afternoon": -1.15,
       "crossover": 6.75,
       "td_drop": -4.55,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6000000000000227,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.6,
         "Td": 3.6,
         "RH": 58,
         "wind": 4.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 31100.0
        },
        {
         "t": "22:00",
         "T": 11.2,
         "Td": 3.2,
         "RH": 58,
         "wind": 4.3,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 31200.0
        },
        {
         "t": "23:00",
         "T": 10.4,
         "Td": 2.9,
         "RH": 60,
         "wind": 4.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 29400.0
        },
        {
         "t": "00:00",
         "T": 9.5,
         "Td": 3.0,
         "RH": 64,
         "wind": 4.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 26200.0
        },
        {
         "t": "01:00",
         "T": 8.2,
         "Td": 4.4,
         "RH": 77,
         "wind": 5.1,
         "low": 2,
         "mid": 0,
         "high": 0,
         "vis": 19300.0
        },
        {
         "t": "02:00",
         "T": 7.6,
         "Td": 4.2,
         "RH": 79,
         "wind": 4.7,
         "low": 4,
         "mid": 0,
         "high": 0,
         "vis": 18400.0
        },
        {
         "t": "03:00",
         "T": 7.0,
         "Td": 3.6,
         "RH": 79,
         "wind": 5.0,
         "low": 3,
         "mid": 0,
         "high": 0,
         "vis": 18200.0
        },
        {
         "t": "04:00",
         "T": 6.4,
         "Td": 3.9,
         "RH": 84,
         "wind": 4.3,
         "low": 5,
         "mid": 8,
         "high": 0,
         "vis": 16100.0
        },
        {
         "t": "05:00",
         "T": 5.8,
         "Td": 3.3,
         "RH": 84,
         "wind": 4.7,
         "low": 7,
         "mid": 93,
         "high": 2,
         "vis": 15400.0
        },
        {
         "t": "06:00",
         "T": 5.8,
         "Td": 3.9,
         "RH": 88,
         "wind": 3.8,
         "low": 13,
         "mid": 100,
         "high": 0,
         "vis": 14400.0
        },
        {
         "t": "07:00",
         "T": 5.6,
         "Td": 3.4,
         "RH": 86,
         "wind": 4.1,
         "low": 13,
         "mid": 78,
         "high": 0,
         "vis": 14600.0
        },
        {
         "t": "08:00",
         "T": 6.0,
         "Td": 4.5,
         "RH": 90,
         "wind": 3.9,
         "low": 18,
         "mid": 3,
         "high": 0,
         "vis": 13800.0
        },
        {
         "t": "09:00",
         "T": 9.9,
         "Td": 4.9,
         "RH": 71,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 22400.0
        },
        {
         "t": "10:00",
         "T": 14.0,
         "Td": 4.6,
         "RH": 53,
         "wind": 2.9,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 34600.0
        },
        {
         "t": "11:00",
         "T": 17.0,
         "Td": 5.9,
         "RH": 48,
         "wind": 3.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 39300.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.44,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.9 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 4.2 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.93,
        "why": "overnight mid+high levels cloud = 26 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 12.3 \u00b0C"
       },
       "moisture": {
        "score": 0.1,
        "why": "crossover: forecast night minimum 5.6 \u00b0C vs afternoon dewpoint -1.1 \u00b0C \u2192 +6.8 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 14.4 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.596
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 1.1999999999999997,
       "dpd_key": 1.1999999999999997,
       "rh_max": 92,
       "wind_mean": 0.15,
       "wind_after": 0.3,
       "gust_max": 2.5,
       "cloud_mh_night": 19.818181818181817,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 3.5,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.2,
       "t_key": 4.8,
       "cooling": 11.399999999999999,
       "t_min_night": 4.8,
       "td_afternoon": 4.6,
       "crossover": 0.20000000000000018,
       "td_drop": 0.9999999999999996,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.7,
         "Td": 5.7,
         "RH": 71,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 9.6,
         "Td": 5.6,
         "RH": 76,
         "wind": 1.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 8.7,
         "Td": 5.4,
         "RH": 80,
         "wind": 1.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 8.0,
         "Td": 5.6,
         "RH": 85,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 7.5,
         "Td": 5.1,
         "RH": 85,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 6.8,
         "Td": 4.6,
         "RH": 86,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 6.3,
         "Td": 4.5,
         "RH": 88,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 5.8,
         "Td": 4.3,
         "RH": 90,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 5.5,
         "Td": 3.8,
         "RH": 89,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.2,
         "Td": 3.9,
         "RH": 91,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 4.8,
         "Td": 3.6,
         "RH": 92,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.2,
         "Td": 4.5,
         "RH": 89,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 10.0,
         "Td": 6.3,
         "RH": 78,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 13.1,
         "Td": 6.9,
         "RH": 66,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.5,
         "Td": 7.3,
         "RH": 58,
         "wind": 1.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.75,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.2 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.86,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.1 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight total cloud (levels unavailable) cloud = 20 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 11.4 \u00b0C"
       },
       "moisture": {
        "score": 0.94,
        "why": "crossover: forecast night minimum 4.8 \u00b0C vs afternoon dewpoint 4.6 \u00b0C \u2192 +0.2 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.756
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 2.0,
       "dpd_key": 2.2,
       "rh_max": 87,
       "wind_mean": 3.35,
       "wind_after": 2.45,
       "gust_max": 5.1,
       "cloud_mh_night": 57.63636363636363,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 20.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 15.4,
       "t_key": 6.2,
       "cooling": 9.2,
       "t_min_night": 5.7,
       "td_afternoon": 3.3,
       "crossover": 2.4000000000000004,
       "td_drop": -0.7000000000000002,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.8999999999999773,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.8,
         "Td": 5.1,
         "RH": 68,
         "wind": 3.4,
         "low": 0,
         "mid": 0,
         "high": 29,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 9.9,
         "Td": 5.1,
         "RH": 72,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 2,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 9.0,
         "Td": 5.0,
         "RH": 76,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 16,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 8.3,
         "Td": 4.9,
         "RH": 79,
         "wind": 3.4,
         "low": 0,
         "mid": 0,
         "high": 48,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 7.8,
         "Td": 4.7,
         "RH": 81,
         "wind": 3.4,
         "low": 0,
         "mid": 5,
         "high": 69,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 7.3,
         "Td": 4.4,
         "RH": 82,
         "wind": 3.4,
         "low": 0,
         "mid": 27,
         "high": 66,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 7.0,
         "Td": 4.2,
         "RH": 82,
         "wind": 3.4,
         "low": 0,
         "mid": 55,
         "high": 52,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 6.8,
         "Td": 3.9,
         "RH": 82,
         "wind": 3.5,
         "low": 0,
         "mid": 71,
         "high": 38,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 6.2,
         "Td": 3.7,
         "RH": 84,
         "wind": 3.5,
         "low": 0,
         "mid": 62,
         "high": 27,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 5.7,
         "Td": 3.7,
         "RH": 87,
         "wind": 3.3,
         "low": 0,
         "mid": 39,
         "high": 16,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 6.2,
         "Td": 4.0,
         "RH": 86,
         "wind": 3.1,
         "low": 0,
         "mid": 20,
         "high": 8,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 8.3,
         "Td": 4.9,
         "RH": 79,
         "wind": 2.6,
         "low": 0,
         "mid": 10,
         "high": 3,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 11.4,
         "Td": 5.9,
         "RH": 69,
         "wind": 2.3,
         "low": 0,
         "mid": 4,
         "high": 1,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 14.2,
         "Td": 6.5,
         "RH": 60,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.3,
         "Td": 6.4,
         "RH": 52,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.4,
        "why": "min T\u2212Td in the 3 h before sunrise = 2.0 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.4 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.52,
        "why": "overnight mid+high levels cloud = 58 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 9.2 \u00b0C"
       },
       "moisture": {
        "score": 0.34,
        "why": "crossover: forecast night minimum 5.7 \u00b0C vs afternoon dewpoint 3.3 \u00b0C \u2192 +2.4 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 87 %"
       }
      },
      "gates": [],
      "raw": 0.548
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 1.6,
       "dpd_key": 1.6,
       "rh_max": 89,
       "wind_mean": 1.9,
       "wind_after": 2.05,
       "gust_max": 3.7,
       "cloud_mh_night": 24.818181818181817,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 7.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.8,
       "t_key": 2.2,
       "cooling": 14.600000000000001,
       "t_min_night": 2.2,
       "td_afternoon": 4.25,
       "crossover": -2.05,
       "td_drop": 3.65,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7000000000000455,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 9.3,
         "Td": 4.5,
         "RH": 72,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 65,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 7.7,
         "Td": 4.1,
         "RH": 78,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 56,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 6.5,
         "Td": 3.5,
         "RH": 81,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 52,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 5.6,
         "Td": 3.1,
         "RH": 84,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 1,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 4.8,
         "Td": 2.6,
         "RH": 86,
         "wind": 2.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 4.4,
         "Td": 2.2,
         "RH": 86,
         "wind": 2.3,
         "low": 0,
         "mid": 0,
         "high": 45,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 4.0,
         "Td": 1.8,
         "RH": 86,
         "wind": 2.5,
         "low": 0,
         "mid": 17,
         "high": 2,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 3.6,
         "Td": 1.5,
         "RH": 86,
         "wind": 1.8,
         "low": 0,
         "mid": 19,
         "high": 7,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 3.1,
         "Td": 1.2,
         "RH": 87,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 2.5,
         "Td": 0.9,
         "RH": 89,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 2.2,
         "Td": 0.6,
         "RH": 89,
         "wind": 2.0,
         "low": 0,
         "mid": 9,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 2.8,
         "Td": 1.1,
         "RH": 89,
         "wind": 2.1,
         "low": 0,
         "mid": 5,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 7.1,
         "Td": 3.5,
         "RH": 78,
         "wind": 2.0,
         "low": 0,
         "mid": 4,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 12.4,
         "Td": 5.3,
         "RH": 62,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 2,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.2,
         "Td": 6.4,
         "RH": 52,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.56,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.6 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.99,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.9 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.94,
        "why": "overnight mid+high levels cloud = 25 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 14.6 \u00b0C"
       },
       "moisture": {
        "score": 1.0,
        "why": "crossover: forecast night minimum 2.2 \u00b0C vs afternoon dewpoint 4.2 \u00b0C \u2192 -2.0 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 89 %"
       }
      },
      "gates": [],
      "raw": 0.721
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.13,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=41.203&longitude=-87.979&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.203&longitude=-87.979&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:42+00:00",
     "elevation_m": 182.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.203&longitude=-87.979&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:52+00:00",
     "elevation_m": 182.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.203&longitude=-87.979&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:52+00:00",
     "elevation_m": 182.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.203&longitude=-87.979&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:52+00:00",
     "elevation_m": 182.0
    }
   },
   "water_temp_c": 14.8,
   "dawn_temp_c": 5.6,
   "dawn_wind_kt": 4.1
  },
  {
   "id": "perry-farm-park",
   "name": "Perry Farm Park",
   "lat": 41.1456745,
   "lon": -87.8849315,
   "agency": "Bourbonnais Township Park District",
   "agency_url": "https://www.btpd.org/perry-farm-park",
   "dawn_access": "\"Hours of Operation: Dawn until Dusk, Year Round\"",
   "dawn_access_ok": true,
   "drone_rule": "no rule found; default is FAA recreational/Part 107 rules (<=400 ft AGL, visual line of sight, Class G needs no authorization) but unverified for this site",
   "drone_rule_url": null,
   "drone_status": "unknown",
   "features": [
    "river",
    "river-valley relief",
    "pond",
    "orchard/farmstead"
   ],
   "features_source": "BTPD page: \"the Indian Caves, a staple to the Kankakee River\", \"Centennial Orchard\", pond events; USGS 3DEP: park 656 ft vs 586 ft low point within 1.5 km (about 70 ft above the river valley). OSM within 1.5 km: 38 mapped tree nodes, 12 river/stream ways, 3 farmland polygons. Coordinates: Nominatim (OSM way 66311888).",
   "drive_minutes_est": 5,
   "airspace_note": "Kankakee Class E5 (floor 700 ft AGL) + Illinois Class E5; surface is Class G. KIKK 4.8 nm (inside the roughly 4-5 nm ring where a Class E surface area would sit, but FAA data shows no surface area). No UAS Facility Map grid.",
   "notes": "btpd.org site search for 'drone' returns no results and the Rules and Regulations page has no aircraft clause. Illinois law (620 ILCS 5/42.1(b-5)) lets a park district adopt reasonable rules for airspace over its parkland, so call 815-933-9905 to confirm. Park coordinates are the OSM centroid, not the overlook.",
   "look": "bluff ~70 ft above the river: ground-level view DOWN onto river fog without a drone; pond and orchard for lone-tree frames",
   "evidence": "research/C-locations.md",
   "elevation_m": 199.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:40",
    "sunrise": "07:09",
    "azimuth": 103.2,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:23",
    "sun_12deg": "08:21"
   },
   "score": {
    "fog_probability": 0.12,
    "raw_blend": 0.616,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.116,
    "confidence": "high",
    "confidence_why": "4 models within 0.12 of each other on the blend score",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0\u20133 m, if any (estimate)",
     "why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.9 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "07:39",
     "est_end": "08:24",
     "model_clear": null,
     "notes": [],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 0.6,
     "label": "filtered sun",
     "why": "mid+high cloud at sunrise \u2248 32 % \u2014 beams possible through gaps"
    },
    "steam_fog": {
     "delta_c": 9.6,
     "likely": true,
     "why": "river water +9.6 \u00b0C warmer than the forecast dawn air (steam fog over open water needs roughly \u22655 \u00b0C and light wind; forecast wind 4 kt)",
     "gauge": "KANKAKEE RIVER NEAR WILMINGTON, IL"
    },
    "photo_score": 0.1,
    "grade": "D",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 1.9,
       "dpd_key": 2.3000000000000003,
       "rh_max": 88,
       "wind_mean": 3.8,
       "wind_after": 2.75,
       "gust_max": 5.1,
       "cloud_mh_night": 16.90909090909091,
       "cloud_low_night": 4.090909090909091,
       "cloud_mh_sunrise": 32.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 15000.0,
       "low_sunrise": 11.5,
       "vis_min": 14200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 17.6,
       "t_key": 5.2,
       "cooling": 12.400000000000002,
       "t_min_night": 5.2,
       "td_afternoon": -1.35,
       "crossover": 6.550000000000001,
       "td_drop": -4.25,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6000000000000227,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.1,
         "Td": 3.6,
         "RH": 60,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 29500.0
        },
        {
         "t": "22:00",
         "T": 10.6,
         "Td": 2.9,
         "RH": 59,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 30000.0
        },
        {
         "t": "23:00",
         "T": 9.7,
         "Td": 3.0,
         "RH": 63,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 27400.0
        },
        {
         "t": "00:00",
         "T": 8.9,
         "Td": 3.3,
         "RH": 68,
         "wind": 3.5,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 24100.0
        },
        {
         "t": "01:00",
         "T": 7.7,
         "Td": 4.4,
         "RH": 80,
         "wind": 4.5,
         "low": 4,
         "mid": 1,
         "high": 0,
         "vis": 17700.0
        },
        {
         "t": "02:00",
         "T": 7.3,
         "Td": 4.1,
         "RH": 80,
         "wind": 4.1,
         "low": 3,
         "mid": 0,
         "high": 0,
         "vis": 17800.0
        },
        {
         "t": "03:00",
         "T": 6.6,
         "Td": 3.8,
         "RH": 82,
         "wind": 4.5,
         "low": 3,
         "mid": 0,
         "high": 0,
         "vis": 17100.0
        },
        {
         "t": "04:00",
         "T": 5.9,
         "Td": 3.6,
         "RH": 85,
         "wind": 3.5,
         "low": 5,
         "mid": 7,
         "high": 0,
         "vis": 15400.0
        },
        {
         "t": "05:00",
         "T": 5.5,
         "Td": 3.1,
         "RH": 85,
         "wind": 4.3,
         "low": 7,
         "mid": 15,
         "high": 0,
         "vis": 15000.0
        },
        {
         "t": "06:00",
         "T": 5.3,
         "Td": 3.4,
         "RH": 88,
         "wind": 3.4,
         "low": 13,
         "mid": 100,
         "high": 0,
         "vis": 14200.0
        },
        {
         "t": "07:00",
         "T": 5.2,
         "Td": 2.9,
         "RH": 85,
         "wind": 4.0,
         "low": 10,
         "mid": 63,
         "high": 0,
         "vis": 15000.0
        },
        {
         "t": "08:00",
         "T": 5.7,
         "Td": 4.1,
         "RH": 90,
         "wind": 3.3,
         "low": 13,
         "mid": 2,
         "high": 0,
         "vis": 13800.0
        },
        {
         "t": "09:00",
         "T": 9.7,
         "Td": 4.5,
         "RH": 70,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 22500.0
        },
        {
         "t": "10:00",
         "T": 13.5,
         "Td": 5.4,
         "RH": 58,
         "wind": 2.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 30100.0
        },
        {
         "t": "11:00",
         "T": 16.5,
         "Td": 6.3,
         "RH": 51,
         "wind": 2.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 36100.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.44,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.9 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.8 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight mid+high levels cloud = 17 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 12.4 \u00b0C"
       },
       "moisture": {
        "score": 0.1,
        "why": "crossover: forecast night minimum 5.2 \u00b0C vs afternoon dewpoint -1.4 \u00b0C \u2192 +6.6 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 14.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.607
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 1.5,
       "dpd_key": 1.5,
       "rh_max": 90,
       "wind_mean": 0.0,
       "wind_after": 0.0,
       "gust_max": 2.1,
       "cloud_mh_night": 19.90909090909091,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 2.5,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.3,
       "t_key": 5.0,
       "cooling": 11.3,
       "t_min_night": 5.0,
       "td_afternoon": 3.3,
       "crossover": 1.7000000000000002,
       "td_drop": -0.20000000000000018,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.0,
         "Td": 5.1,
         "RH": 67,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 9.9,
         "Td": 5.1,
         "RH": 72,
         "wind": 0.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 8.8,
         "Td": 5.0,
         "RH": 77,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 8.1,
         "Td": 4.8,
         "RH": 80,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 7.4,
         "Td": 4.7,
         "RH": 83,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 6.9,
         "Td": 4.4,
         "RH": 84,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 6.4,
         "Td": 4.1,
         "RH": 85,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 6.0,
         "Td": 4.0,
         "RH": 87,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 5.8,
         "Td": 3.5,
         "RH": 85,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.5,
         "Td": 3.7,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 5.0,
         "Td": 3.5,
         "RH": 90,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.6,
         "Td": 4.6,
         "RH": 87,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 10.0,
         "Td": 6.3,
         "RH": 78,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 13.0,
         "Td": 7.0,
         "RH": 67,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.6,
         "Td": 6.6,
         "RH": 55,
         "wind": 1.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.6,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.5 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.85,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.0 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight total cloud (levels unavailable) cloud = 20 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 11.3 \u00b0C"
       },
       "moisture": {
        "score": 0.49,
        "why": "crossover: forecast night minimum 5.0 \u00b0C vs afternoon dewpoint 3.3 \u00b0C \u2192 +1.7 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.664
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 1.9999999999999996,
       "dpd_key": 2.1999999999999997,
       "rh_max": 87,
       "wind_mean": 3.35,
       "wind_after": 2.45,
       "gust_max": 5.1,
       "cloud_mh_night": 57.63636363636363,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 20.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 15.3,
       "t_key": 6.1,
       "cooling": 9.200000000000001,
       "t_min_night": 5.6,
       "td_afternoon": 3.2,
       "crossover": 2.3999999999999995,
       "td_drop": -0.6999999999999997,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.900000000000091,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.7,
         "Td": 5.0,
         "RH": 68,
         "wind": 3.4,
         "low": 0,
         "mid": 0,
         "high": 29,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 9.8,
         "Td": 4.9,
         "RH": 72,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 2,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 8.9,
         "Td": 4.9,
         "RH": 76,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 16,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 8.2,
         "Td": 4.8,
         "RH": 79,
         "wind": 3.4,
         "low": 0,
         "mid": 0,
         "high": 48,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 7.7,
         "Td": 4.6,
         "RH": 81,
         "wind": 3.4,
         "low": 0,
         "mid": 5,
         "high": 69,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 7.2,
         "Td": 4.3,
         "RH": 82,
         "wind": 3.4,
         "low": 0,
         "mid": 27,
         "high": 66,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 6.9,
         "Td": 4.0,
         "RH": 82,
         "wind": 3.4,
         "low": 0,
         "mid": 55,
         "high": 52,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 6.7,
         "Td": 3.8,
         "RH": 82,
         "wind": 3.5,
         "low": 0,
         "mid": 71,
         "high": 38,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 6.1,
         "Td": 3.6,
         "RH": 84,
         "wind": 3.5,
         "low": 0,
         "mid": 62,
         "high": 27,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 5.6,
         "Td": 3.6,
         "RH": 87,
         "wind": 3.3,
         "low": 0,
         "mid": 39,
         "high": 16,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 6.1,
         "Td": 3.9,
         "RH": 86,
         "wind": 3.1,
         "low": 0,
         "mid": 20,
         "high": 8,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 8.2,
         "Td": 4.8,
         "RH": 79,
         "wind": 2.6,
         "low": 0,
         "mid": 10,
         "high": 3,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 11.3,
         "Td": 5.8,
         "RH": 69,
         "wind": 2.3,
         "low": 0,
         "mid": 4,
         "high": 1,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 14.1,
         "Td": 6.4,
         "RH": 60,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.2,
         "Td": 6.3,
         "RH": 52,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.4,
        "why": "min T\u2212Td in the 3 h before sunrise = 2.0 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.4 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.52,
        "why": "overnight mid+high levels cloud = 58 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 9.2 \u00b0C"
       },
       "moisture": {
        "score": 0.34,
        "why": "crossover: forecast night minimum 5.6 \u00b0C vs afternoon dewpoint 3.2 \u00b0C \u2192 +2.4 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 87 %"
       }
      },
      "gates": [],
      "raw": 0.548
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 2.3,
       "dpd_key": 2.3,
       "rh_max": 85,
       "wind_mean": 1.5,
       "wind_after": 1.65,
       "gust_max": 2.7,
       "cloud_mh_night": 20.09090909090909,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 2.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.0,
       "t_key": 2.0,
       "cooling": 14.0,
       "t_min_night": 2.0,
       "td_afternoon": 3.4,
       "crossover": -1.4,
       "td_drop": 3.6999999999999997,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6000000000000227,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 9.3,
         "Td": 2.8,
         "RH": 64,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 63,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 7.9,
         "Td": 2.6,
         "RH": 69,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 67,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 6.6,
         "Td": 2.1,
         "RH": 73,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 57,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 5.8,
         "Td": 1.9,
         "RH": 76,
         "wind": 1.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 4.5,
         "Td": 1.5,
         "RH": 81,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 3.8,
         "Td": 1.2,
         "RH": 83,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 6,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 3.2,
         "Td": 0.8,
         "RH": 84,
         "wind": 1.9,
         "low": 0,
         "mid": 8,
         "high": 0,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 2.9,
         "Td": 0.3,
         "RH": 83,
         "wind": 1.3,
         "low": 0,
         "mid": 6,
         "high": 5,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 2.8,
         "Td": 0.2,
         "RH": 83,
         "wind": 1.5,
         "low": 0,
         "mid": 0,
         "high": 5,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 2.4,
         "Td": -0.1,
         "RH": 84,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 2.0,
         "Td": -0.3,
         "RH": 85,
         "wind": 1.6,
         "low": 0,
         "mid": 4,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 2.5,
         "Td": 0.4,
         "RH": 86,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 6.9,
         "Td": 3.0,
         "RH": 76,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 12.5,
         "Td": 4.7,
         "RH": 59,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.5,
         "Td": 5.1,
         "RH": 47,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.33,
        "why": "min T\u2212Td in the 3 h before sunrise = 2.3 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.95,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.5 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight mid+high levels cloud = 20 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 14.0 \u00b0C"
       },
       "moisture": {
        "score": 1.0,
        "why": "crossover: forecast night minimum 2.0 \u00b0C vs afternoon dewpoint 3.4 \u00b0C \u2192 -1.4 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 85 %"
       }
      },
      "gates": [],
      "raw": 0.652
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.112,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1456745&longitude=-87.8849315&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1456745&longitude=-87.8849315&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:52+00:00",
     "elevation_m": 199.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1456745&longitude=-87.8849315&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:52+00:00",
     "elevation_m": 199.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1456745&longitude=-87.8849315&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:52+00:00",
     "elevation_m": 199.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1456745&longitude=-87.8849315&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:52+00:00",
     "elevation_m": 199.0
    }
   },
   "water_temp_c": 14.8,
   "dawn_temp_c": 5.2,
   "dawn_wind_kt": 4.0
  },
  {
   "id": "bird-park-kankakee",
   "name": "Bird Park",
   "lat": 41.1213415,
   "lon": -87.8791619,
   "agency": "Kankakee Valley Park District",
   "agency_url": "https://www.kvpd.com/parks-facilities/bird-park",
   "dawn_access": "Opening time not stated. Page lists: \"Park Closes At Dusk\"",
   "dawn_access_ok": null,
   "drone_rule": "no rule found; default is FAA recreational/Part 107 rules (<=400 ft AGL, visual line of sight, Class G needs no authorization) but unverified for this site",
   "drone_rule_url": null,
   "drone_status": "unknown",
   "features": [
    "river",
    "open field",
    "trees"
   ],
   "features_source": "KVPD page amenity list includes \"riverfront access\" and \"open field\"; OSM within 1.5 km: 210 mapped tree nodes, 19 wood polygons, 4 river/stream ways; USGS 3DEP: 614 ft, ring 608-646 ft. Coordinates: Nominatim (OSM way 66455326).",
   "drive_minutes_est": 7,
   "airspace_note": "Kankakee Class E5 (floor 700 ft AGL) + Illinois Class E5; surface is Class G. KIKK 3.3 nm. Kankakee Airport (3KK) 2.0 nm. No UAS Facility Map grid.",
   "notes": "In-town park (893 W. Station St., Kankakee). kvpd.com search for 'drone' returned a page with no match. Same Illinois (b-5) local-rule caveat as Perry Farm.",
   "look": "riverfront + open field + mature trees; closest aerial option in Class G",
   "evidence": "research/C-locations.md",
   "elevation_m": 185.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:40",
    "sunrise": "07:09",
    "azimuth": 103.2,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:23",
    "sun_12deg": "08:21"
   },
   "score": {
    "fog_probability": 0.16,
    "raw_blend": 0.671,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.135,
    "confidence": "high",
    "confidence_why": "4 models within 0.14 of each other on the blend score",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0\u20133 m, if any (estimate)",
     "why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.2 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "07:39",
     "est_end": "08:24",
     "model_clear": "09:00",
     "notes": [],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 0.6,
     "label": "filtered sun",
     "why": "mid+high cloud at sunrise \u2248 34 % \u2014 beams possible through gaps"
    },
    "steam_fog": {
     "delta_c": 9.9,
     "likely": true,
     "why": "river water +9.9 \u00b0C warmer than the forecast dawn air (steam fog over open water needs roughly \u22655 \u00b0C and light wind; forecast wind 3 kt)",
     "gauge": "KANKAKEE RIVER NEAR WILMINGTON, IL"
    },
    "photo_score": 0.13,
    "grade": "D",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 1.2000000000000002,
       "dpd_key": 1.2000000000000002,
       "rh_max": 92,
       "wind_mean": 3.475,
       "wind_after": 2.45,
       "gust_max": 4.5,
       "cloud_mh_night": 17.363636363636363,
       "cloud_low_night": 6.545454545454546,
       "cloud_mh_sunrise": 34.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 13100.0,
       "low_sunrise": 24.5,
       "vis_min": 13100.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 17.4,
       "t_key": 4.9,
       "cooling": 12.499999999999998,
       "t_min_night": 4.9,
       "td_afternoon": -0.8500000000000001,
       "crossover": 5.75,
       "td_drop": -4.550000000000001,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.599999999999909,
       "model_clear_hour": "09:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.2,
         "Td": 3.0,
         "RH": 57,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 31400.0
        },
        {
         "t": "22:00",
         "T": 10.4,
         "Td": 2.9,
         "RH": 60,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 29300.0
        },
        {
         "t": "23:00",
         "T": 9.5,
         "Td": 3.2,
         "RH": 65,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 26100.0
        },
        {
         "t": "00:00",
         "T": 8.7,
         "Td": 3.7,
         "RH": 71,
         "wind": 3.5,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 22400.0
        },
        {
         "t": "01:00",
         "T": 7.8,
         "Td": 4.7,
         "RH": 81,
         "wind": 4.2,
         "low": 5,
         "mid": 2,
         "high": 0,
         "vis": 17100.0
        },
        {
         "t": "02:00",
         "T": 7.2,
         "Td": 4.5,
         "RH": 83,
         "wind": 3.9,
         "low": 5,
         "mid": 0,
         "high": 0,
         "vis": 16500.0
        },
        {
         "t": "03:00",
         "T": 6.5,
         "Td": 4.1,
         "RH": 85,
         "wind": 3.9,
         "low": 7,
         "mid": 0,
         "high": 0,
         "vis": 15600.0
        },
        {
         "t": "04:00",
         "T": 5.8,
         "Td": 3.8,
         "RH": 87,
         "wind": 2.9,
         "low": 7,
         "mid": 11,
         "high": 0,
         "vis": 14700.0
        },
        {
         "t": "05:00",
         "T": 5.4,
         "Td": 3.4,
         "RH": 87,
         "wind": 4.0,
         "low": 8,
         "mid": 11,
         "high": 0,
         "vis": 14400.0
        },
        {
         "t": "06:00",
         "T": 5.1,
         "Td": 3.6,
         "RH": 90,
         "wind": 3.3,
         "low": 17,
         "mid": 100,
         "high": 1,
         "vis": 13600.0
        },
        {
         "t": "07:00",
         "T": 4.9,
         "Td": 3.7,
         "RH": 92,
         "wind": 3.7,
         "low": 23,
         "mid": 67,
         "high": 0,
         "vis": 13100.0
        },
        {
         "t": "08:00",
         "T": 5.3,
         "Td": 4.4,
         "RH": 94,
         "wind": 2.8,
         "low": 26,
         "mid": 1,
         "high": 0,
         "vis": 12600.0
        },
        {
         "t": "09:00",
         "T": 9.3,
         "Td": 4.5,
         "RH": 72,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 21700.0
        },
        {
         "t": "10:00",
         "T": 13.1,
         "Td": 5.7,
         "RH": 61,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 28100.0
        },
        {
         "t": "11:00",
         "T": 16.3,
         "Td": 6.7,
         "RH": 53,
         "wind": 2.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 34400.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.75,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.2 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.5 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight mid+high levels cloud = 17 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 12.5 \u00b0C"
       },
       "moisture": {
        "score": 0.1,
        "why": "crossover: forecast night minimum 4.9 \u00b0C vs afternoon dewpoint -0.9 \u00b0C \u2192 +5.8 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 13.1 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.7
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 1.1999999999999997,
       "dpd_key": 1.1999999999999997,
       "rh_max": 92,
       "wind_mean": 0.0,
       "wind_after": 0.0,
       "gust_max": 1.9,
       "cloud_mh_night": 20.0,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 2.5,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.7,
       "t_key": 5.1,
       "cooling": 11.6,
       "t_min_night": 5.1,
       "td_afternoon": 3.5,
       "crossover": 1.5999999999999996,
       "td_drop": -0.3999999999999999,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.3,
         "Td": 5.6,
         "RH": 68,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 10.1,
         "Td": 5.5,
         "RH": 73,
         "wind": 0.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 9.0,
         "Td": 5.3,
         "RH": 78,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 8.2,
         "Td": 5.1,
         "RH": 81,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 7.6,
         "Td": 4.9,
         "RH": 83,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 7.2,
         "Td": 4.8,
         "RH": 85,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 6.6,
         "Td": 4.4,
         "RH": 86,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 6.0,
         "Td": 4.1,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 5.8,
         "Td": 3.8,
         "RH": 87,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.5,
         "Td": 3.8,
         "RH": 89,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 5.1,
         "Td": 3.9,
         "RH": 92,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.7,
         "Td": 5.0,
         "RH": 89,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 9.9,
         "Td": 6.4,
         "RH": 79,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 13.0,
         "Td": 7.0,
         "RH": 67,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.7,
         "Td": 6.7,
         "RH": 55,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.75,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.2 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.85,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.0 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight total cloud (levels unavailable) cloud = 20 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 11.6 \u00b0C"
       },
       "moisture": {
        "score": 0.52,
        "why": "crossover: forecast night minimum 5.1 \u00b0C vs afternoon dewpoint 3.5 \u00b0C \u2192 +1.6 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.712
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 1.5,
       "dpd_key": 2.0,
       "rh_max": 90,
       "wind_mean": 2.05,
       "wind_after": 1.9,
       "gust_max": 3.3,
       "cloud_mh_night": 68.54545454545455,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 85.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.3,
       "t_key": 5.8,
       "cooling": 10.5,
       "t_min_night": 5.3,
       "td_afternoon": 1.9500000000000002,
       "crossover": 3.3499999999999996,
       "td_drop": -1.8499999999999996,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.599999999999909,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.6,
         "Td": 4.1,
         "RH": 60,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 29,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 10.4,
         "Td": 4.1,
         "RH": 65,
         "wind": 1.9,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 9.5,
         "Td": 4.1,
         "RH": 69,
         "wind": 1.9,
         "low": 0,
         "mid": 6,
         "high": 6,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 8.8,
         "Td": 4.3,
         "RH": 73,
         "wind": 1.8,
         "low": 0,
         "mid": 16,
         "high": 29,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 8.2,
         "Td": 4.4,
         "RH": 77,
         "wind": 1.8,
         "low": 0,
         "mid": 29,
         "high": 45,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 7.5,
         "Td": 4.5,
         "RH": 81,
         "wind": 2.0,
         "low": 0,
         "mid": 49,
         "high": 45,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 6.9,
         "Td": 4.4,
         "RH": 84,
         "wind": 2.1,
         "low": 0,
         "mid": 73,
         "high": 38,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 6.5,
         "Td": 4.3,
         "RH": 86,
         "wind": 2.3,
         "low": 0,
         "mid": 88,
         "high": 33,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 5.8,
         "Td": 4.0,
         "RH": 88,
         "wind": 2.1,
         "low": 0,
         "mid": 90,
         "high": 32,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 5.3,
         "Td": 3.8,
         "RH": 90,
         "wind": 2.0,
         "low": 0,
         "mid": 84,
         "high": 33,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 5.8,
         "Td": 3.8,
         "RH": 87,
         "wind": 1.8,
         "low": 0,
         "mid": 72,
         "high": 30,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 8.2,
         "Td": 4.6,
         "RH": 78,
         "wind": 1.8,
         "low": 0,
         "mid": 49,
         "high": 21,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 11.6,
         "Td": 5.3,
         "RH": 65,
         "wind": 2.0,
         "low": 0,
         "mid": 21,
         "high": 9,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 14.7,
         "Td": 5.2,
         "RH": 53,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.9,
         "Td": 4.9,
         "RH": 45,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.6,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.5 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 2.0 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.41,
        "why": "overnight mid+high levels cloud = 69 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 10.5 \u00b0C"
       },
       "moisture": {
        "score": 0.2,
        "why": "crossover: forecast night minimum 5.3 \u00b0C vs afternoon dewpoint 2.0 \u00b0C \u2192 +3.3 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 90 %"
       }
      },
      "gates": [],
      "raw": 0.577
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 2.3000000000000003,
       "dpd_key": 2.3000000000000003,
       "rh_max": 85,
       "wind_mean": 1.5,
       "wind_after": 1.65,
       "gust_max": 2.7,
       "cloud_mh_night": 20.09090909090909,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 2.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.1,
       "t_key": 2.1,
       "cooling": 14.000000000000002,
       "t_min_night": 2.1,
       "td_afternoon": 3.5,
       "crossover": -1.4,
       "td_drop": 3.7,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7000000000000455,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 9.4,
         "Td": 2.9,
         "RH": 64,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 63,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 8.0,
         "Td": 2.7,
         "RH": 69,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 67,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 6.7,
         "Td": 2.2,
         "RH": 73,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 57,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 5.9,
         "Td": 2.0,
         "RH": 76,
         "wind": 1.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 4.6,
         "Td": 1.6,
         "RH": 81,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 3.9,
         "Td": 1.2,
         "RH": 83,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 6,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 3.3,
         "Td": 0.9,
         "RH": 84,
         "wind": 1.9,
         "low": 0,
         "mid": 8,
         "high": 0,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 3.0,
         "Td": 0.4,
         "RH": 83,
         "wind": 1.3,
         "low": 0,
         "mid": 6,
         "high": 5,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 2.9,
         "Td": 0.3,
         "RH": 83,
         "wind": 1.5,
         "low": 0,
         "mid": 0,
         "high": 5,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 2.5,
         "Td": 0.0,
         "RH": 84,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 2.1,
         "Td": -0.2,
         "RH": 85,
         "wind": 1.6,
         "low": 0,
         "mid": 4,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 2.6,
         "Td": 0.5,
         "RH": 86,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 7.0,
         "Td": 3.1,
         "RH": 76,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 12.6,
         "Td": 4.8,
         "RH": 59,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.6,
         "Td": 5.2,
         "RH": 47,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.32,
        "why": "min T\u2212Td in the 3 h before sunrise = 2.3 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.95,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.5 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight mid+high levels cloud = 20 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 14.0 \u00b0C"
       },
       "moisture": {
        "score": 1.0,
        "why": "crossover: forecast night minimum 2.1 \u00b0C vs afternoon dewpoint 3.5 \u00b0C \u2192 -1.4 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 85 %"
       }
      },
      "gates": [],
      "raw": 0.652
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.112,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1213415&longitude=-87.8791619&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1213415&longitude=-87.8791619&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:33:52+00:00",
     "elevation_m": 185.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1213415&longitude=-87.8791619&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:20+00:00",
     "elevation_m": 185.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1213415&longitude=-87.8791619&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:20+00:00",
     "elevation_m": 185.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1213415&longitude=-87.8791619&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:20+00:00",
     "elevation_m": 185.0
    }
   },
   "water_temp_c": 14.8,
   "dawn_temp_c": 4.9,
   "dawn_wind_kt": 3.7
  },
  {
   "id": "kankakee-sands-illinois",
   "name": "Kankakee Sands - Illinois (The Nature Conservancy)",
   "lat": 41.07935,
   "lon": -87.65675,
   "agency": "The Nature Conservancy",
   "agency_url": "https://www.nature.org/en-us/get-involved/how-to-help/places-we-protect/kankakee-sands-illinois/",
   "dawn_access": "\"Open sunrise to sunset, 365 days a year\"",
   "dawn_access_ok": true,
   "drone_rule": "\"Drones\u2014aka personal aircraft, unmanned aircraft systems (UAS) and unmanned aerial vehicles (UAV): Self-propelled or other aircraft are prohibited from taking off, landing or being operated on any TNC preserve except for official TNC purposes, approved research or in an emergency landing situation.\"",
   "drone_rule_url": "https://www.nature.org/en-us/get-involved/how-to-help/places-we-protect/kankakee-sands-illinois/",
   "drone_status": "prohibited",
   "features": [
    "oak savanna",
    "prairie",
    "lone trees",
    "sand dunes"
   ],
   "features_source": "TNC page: \"a birdsong-filled, tree-dotted grassland known as a savanna\"; \"rare black oak savannas\"; image caption \"Sunrises over the rare black oaks at Kankakee Sands-Illinois\"; 1,800 acres. USGS 3DEP: 660 ft, ring 638-673 ft. Coordinates: TNC page map marker 41.079350,-87.656750.",
   "drive_minutes_est": 37,
   "airspace_note": "Illinois Class E5 only (floor 1200 ft AGL); surface is Class G. KIKK 8.6 nm. No UAS Facility Map grid.",
   "notes": "Best-fit terrain for the lone-tree-in-fog look from the ground, but drones are prohibited. TNC page: deer hunting allowed on many preserves from October through first week of January (blaze orange suggested). Not the same as Kankakee Sands-Indiana (Morocco) or the Will County FPD Kankakee Sands Preserve.",
   "look": "best lone-tree savanna terrain for the ground frame; NO drone",
   "evidence": "research/C-locations.md",
   "elevation_m": 207.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:39",
    "sunrise": "07:08",
    "azimuth": 103.2,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:22",
    "sun_12deg": "08:20"
   },
   "score": {
    "fog_probability": 0.13,
    "raw_blend": 0.633,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.193,
    "confidence": "medium",
    "confidence_why": "models differ by 0.19 on the blend score",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0\u20133 m, if any (estimate)",
     "why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 2.3 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "07:38",
     "est_end": "08:23",
     "model_clear": null,
     "notes": [],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 1.0,
     "label": "sun will reach the fog top",
     "why": "mid+high cloud at sunrise \u2248 24 %"
    },
    "steam_fog": null,
    "photo_score": 0.13,
    "grade": "D",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 2.3,
       "dpd_key": 2.3,
       "rh_max": 85,
       "wind_mean": 3.725,
       "wind_after": 2.6,
       "gust_max": 5.2,
       "cloud_mh_night": 15.272727272727273,
       "cloud_low_night": 3.727272727272727,
       "cloud_mh_sunrise": 24.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 15500.0,
       "low_sunrise": 12.5,
       "vis_min": 15500.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.5,
       "t_key": 4.8,
       "cooling": 11.7,
       "t_min_night": 4.8,
       "td_afternoon": -0.15000000000000002,
       "crossover": 4.95,
       "td_drop": -2.65,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7000000000000455,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.9,
         "Td": 4.2,
         "RH": 63,
         "wind": 3.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 28400.0
        },
        {
         "t": "22:00",
         "T": 10.3,
         "Td": 3.8,
         "RH": 64,
         "wind": 3.3,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 27700.0
        },
        {
         "t": "23:00",
         "T": 9.5,
         "Td": 3.4,
         "RH": 66,
         "wind": 3.5,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 26300.0
        },
        {
         "t": "00:00",
         "T": 7.9,
         "Td": 4.2,
         "RH": 77,
         "wind": 3.9,
         "low": 3,
         "mid": 0,
         "high": 0,
         "vis": 19900.0
        },
        {
         "t": "01:00",
         "T": 7.6,
         "Td": 3.4,
         "RH": 75,
         "wind": 4.3,
         "low": 3,
         "mid": 1,
         "high": 0,
         "vis": 20600.0
        },
        {
         "t": "02:00",
         "T": 7.0,
         "Td": 3.3,
         "RH": 77,
         "wind": 4.9,
         "low": 4,
         "mid": 0,
         "high": 0,
         "vis": 19600.0
        },
        {
         "t": "03:00",
         "T": 6.5,
         "Td": 3.0,
         "RH": 78,
         "wind": 4.5,
         "low": 3,
         "mid": 0,
         "high": 0,
         "vis": 18900.0
        },
        {
         "t": "04:00",
         "T": 5.8,
         "Td": 2.8,
         "RH": 81,
         "wind": 3.0,
         "low": 3,
         "mid": 14,
         "high": 0,
         "vis": 17500.0
        },
        {
         "t": "05:00",
         "T": 5.4,
         "Td": 2.4,
         "RH": 81,
         "wind": 3.5,
         "low": 4,
         "mid": 9,
         "high": 0,
         "vis": 17000.0
        },
        {
         "t": "06:00",
         "T": 5.1,
         "Td": 2.3,
         "RH": 82,
         "wind": 4.0,
         "low": 8,
         "mid": 100,
         "high": 0,
         "vis": 16500.0
        },
        {
         "t": "07:00",
         "T": 4.8,
         "Td": 2.5,
         "RH": 85,
         "wind": 4.4,
         "low": 13,
         "mid": 41,
         "high": 3,
         "vis": 15500.0
        },
        {
         "t": "08:00",
         "T": 5.2,
         "Td": 3.6,
         "RH": 89,
         "wind": 3.6,
         "low": 12,
         "mid": 4,
         "high": 0,
         "vis": 14700.0
        },
        {
         "t": "09:00",
         "T": 8.5,
         "Td": 6.2,
         "RH": 85,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 16100.0
        },
        {
         "t": "10:00",
         "T": 12.1,
         "Td": 8.2,
         "RH": 77,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 19400.0
        },
        {
         "t": "11:00",
         "T": 15.4,
         "Td": 9.1,
         "RH": 66,
         "wind": 2.3,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 26300.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.33,
        "why": "min T\u2212Td in the 3 h before sunrise = 2.3 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.7 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight mid+high levels cloud = 15 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 11.7 \u00b0C"
       },
       "moisture": {
        "score": 0.1,
        "why": "crossover: forecast night minimum 4.8 \u00b0C vs afternoon dewpoint -0.2 \u00b0C \u2192 +5.0 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 15.5 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.573
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 0.9000000000000004,
       "dpd_key": 0.9000000000000004,
       "rh_max": 94,
       "wind_mean": 0.3,
       "wind_after": 0.7,
       "gust_max": 2.1,
       "cloud_mh_night": 20.0,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 10.0,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 1,
       "first_sat_hour": "07:00",
       "t_evening": 15.8,
       "t_key": 5.2,
       "cooling": 10.600000000000001,
       "t_min_night": 5.2,
       "td_afternoon": 3.05,
       "crossover": 2.1500000000000004,
       "td_drop": -1.25,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.4,
         "Td": 5.2,
         "RH": 70,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 9.3,
         "Td": 5.3,
         "RH": 76,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 8.2,
         "Td": 5.1,
         "RH": 81,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 7.5,
         "Td": 4.8,
         "RH": 83,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 6.8,
         "Td": 4.5,
         "RH": 85,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 6.3,
         "Td": 4.1,
         "RH": 86,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 5.7,
         "Td": 3.9,
         "RH": 88,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 5.4,
         "Td": 3.9,
         "RH": 90,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 5.3,
         "Td": 4.0,
         "RH": 91,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.2,
         "Td": 3.9,
         "RH": 91,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 5.2,
         "Td": 4.3,
         "RH": 94,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.6,
         "Td": 4.9,
         "RH": 89,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 9.7,
         "Td": 5.9,
         "RH": 77,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 12.8,
         "Td": 6.4,
         "RH": 65,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.3,
         "Td": 6.1,
         "RH": 54,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.88,
        "why": "min T\u2212Td in the 3 h before sunrise = 0.9 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.87,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.3 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight total cloud (levels unavailable) cloud = 20 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 10.6 \u00b0C"
       },
       "moisture": {
        "score": 0.38,
        "why": "crossover: forecast night minimum 5.2 \u00b0C vs afternoon dewpoint 3.0 \u00b0C \u2192 +2.2 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.741
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 1.7000000000000002,
       "dpd_key": 1.8999999999999995,
       "rh_max": 89,
       "wind_mean": 2.3,
       "wind_after": 1.7000000000000002,
       "gust_max": 3.5,
       "cloud_mh_night": 65.0909090909091,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 87.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.0,
       "t_key": 5.6,
       "cooling": 10.4,
       "t_min_night": 5.0,
       "td_afternoon": 0.8999999999999999,
       "crossover": 4.1,
       "td_drop": -2.8000000000000003,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.8000000000000682,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.8,
         "Td": 4.9,
         "RH": 67,
         "wind": 2.3,
         "low": 0,
         "mid": 0,
         "high": 30,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 9.6,
         "Td": 5.0,
         "RH": 73,
         "wind": 2.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 8.8,
         "Td": 4.8,
         "RH": 76,
         "wind": 2.4,
         "low": 0,
         "mid": 3,
         "high": 4,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 8.2,
         "Td": 4.6,
         "RH": 78,
         "wind": 1.8,
         "low": 0,
         "mid": 7,
         "high": 24,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 7.7,
         "Td": 4.3,
         "RH": 79,
         "wind": 1.4,
         "low": 0,
         "mid": 19,
         "high": 40,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 7.0,
         "Td": 4.0,
         "RH": 81,
         "wind": 1.6,
         "low": 0,
         "mid": 45,
         "high": 44,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 6.3,
         "Td": 3.8,
         "RH": 84,
         "wind": 2.1,
         "low": 0,
         "mid": 79,
         "high": 45,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 5.8,
         "Td": 3.7,
         "RH": 86,
         "wind": 2.5,
         "low": 0,
         "mid": 100,
         "high": 44,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 5.3,
         "Td": 3.5,
         "RH": 88,
         "wind": 2.5,
         "low": 0,
         "mid": 100,
         "high": 44,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 5.0,
         "Td": 3.3,
         "RH": 89,
         "wind": 2.2,
         "low": 0,
         "mid": 89,
         "high": 42,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 5.6,
         "Td": 3.7,
         "RH": 87,
         "wind": 2.0,
         "low": 0,
         "mid": 72,
         "high": 37,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 8.0,
         "Td": 4.4,
         "RH": 78,
         "wind": 1.8,
         "low": 0,
         "mid": 49,
         "high": 26,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 11.4,
         "Td": 5.3,
         "RH": 66,
         "wind": 1.6,
         "low": 0,
         "mid": 20,
         "high": 11,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 14.4,
         "Td": 5.5,
         "RH": 55,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.6,
         "Td": 5.0,
         "RH": 46,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.52,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.7 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 2.3 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.45,
        "why": "overnight mid+high levels cloud = 65 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 10.4 \u00b0C"
       },
       "moisture": {
        "score": 0.1,
        "why": "crossover: forecast night minimum 5.0 \u00b0C vs afternoon dewpoint 0.9 \u00b0C \u2192 +4.1 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 89 %"
       }
      },
      "gates": [],
      "raw": 0.548
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 1.6,
       "dpd_key": 1.6,
       "rh_max": 89,
       "wind_mean": 1.925,
       "wind_after": 2.0,
       "gust_max": 3.5,
       "cloud_mh_night": 24.0,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 4.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.4,
       "t_key": 2.5,
       "cooling": 13.899999999999999,
       "t_min_night": 2.5,
       "td_afternoon": 2.6,
       "crossover": -0.10000000000000009,
       "td_drop": 1.7000000000000002,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.8000000000000682,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 9.4,
         "Td": 4.0,
         "RH": 69,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 58,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 8.2,
         "Td": 3.4,
         "RH": 72,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 39,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 7.2,
         "Td": 2.9,
         "RH": 74,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 62,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 6.3,
         "Td": 2.6,
         "RH": 77,
         "wind": 1.3,
         "low": 0,
         "mid": 0,
         "high": 30,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 5.4,
         "Td": 2.2,
         "RH": 80,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 4.2,
         "Td": 1.9,
         "RH": 85,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 3.9,
         "Td": 1.7,
         "RH": 85,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 3.6,
         "Td": 1.5,
         "RH": 86,
         "wind": 1.9,
         "low": 0,
         "mid": 17,
         "high": 1,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 3.4,
         "Td": 1.4,
         "RH": 87,
         "wind": 1.8,
         "low": 0,
         "mid": 25,
         "high": 8,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 2.9,
         "Td": 1.1,
         "RH": 88,
         "wind": 2.0,
         "low": 0,
         "mid": 17,
         "high": 7,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 2.5,
         "Td": 0.9,
         "RH": 89,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 3.2,
         "Td": 1.5,
         "RH": 88,
         "wind": 2.0,
         "low": 0,
         "mid": 8,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 7.7,
         "Td": 3.4,
         "RH": 74,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 13.0,
         "Td": 4.2,
         "RH": 55,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.8,
         "Td": 4.8,
         "RH": 45,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.56,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.6 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.99,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.9 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.95,
        "why": "overnight mid+high levels cloud = 24 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 13.9 \u00b0C"
       },
       "moisture": {
        "score": 1.0,
        "why": "crossover: forecast night minimum 2.5 \u00b0C vs afternoon dewpoint 2.6 \u00b0C \u2192 -0.1 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 89 %"
       }
      },
      "gates": [],
      "raw": 0.724
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.051,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=41.07935&longitude=-87.65675&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.07935&longitude=-87.65675&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:20+00:00",
     "elevation_m": 207.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.07935&longitude=-87.65675&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:29+00:00",
     "elevation_m": 207.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.07935&longitude=-87.65675&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:29+00:00",
     "elevation_m": 207.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.07935&longitude=-87.65675&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:29+00:00",
     "elevation_m": 207.0
    }
   },
   "water_temp_c": null,
   "dawn_temp_c": 4.8,
   "dawn_wind_kt": 4.4
  },
  {
   "id": "island-park-momence",
   "name": "Island Park (Momence)",
   "lat": 41.1630009,
   "lon": -87.654792,
   "agency": "Momence Park District",
   "agency_url": "https://www.momenceparkdistrict.org/",
   "dawn_access": null,
   "dawn_access_ok": null,
   "drone_rule": "no rule found; default is FAA recreational/Part 107 rules (<=400 ft AGL, visual line of sight, Class G needs no authorization) but unverified for this site",
   "drone_rule_url": null,
   "drone_status": "unknown",
   "features": [
    "river",
    "island",
    "flat terrain"
   ],
   "features_source": "City of Momence page: \"The thirty-acre Island Park located on Mill Street, maintained by Momence Park District\"; park district page: \"Discover the natural beauty of our rivers at Momence Island Park\"; USGS gauge 05520500 Kankakee River at Momence (41.15994, -87.66875) about 0.8 mi west; USGS 3DEP: 623 ft, ring 622-638 ft (flat). Coordinates: Nominatim (OSM way 66134648).",
   "drive_minutes_est": 29,
   "airspace_note": "No Class E polygon from the FAA data at this point; surface is Class G. KIKK 10.3 nm, Bult Field (C56) 12.9 nm. No UAS Facility Map grid.",
   "notes": "Town-center park; no verified corn or tree-line view. No hours or drone rule on momence.org or momenceparkdistrict.org. visitkankakeecounty.com pages returned HTTP 403.",
   "look": "river island, flat; steam fog over water",
   "evidence": "research/C-locations.md",
   "elevation_m": 192.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:39",
    "sunrise": "07:08",
    "azimuth": 103.2,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:22",
    "sun_12deg": "08:20"
   },
   "score": {
    "fog_probability": 0.17,
    "raw_blend": 0.688,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.166,
    "confidence": "medium",
    "confidence_why": "models differ by 0.17 on the blend score",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0\u20133 m, if any (estimate)",
     "why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.3 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "08:08",
     "est_end": "09:08",
     "model_clear": "09:00",
     "notes": [
      "cloud above the fog weakens the sun; add ~30\u201345 min"
     ],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 0.2,
     "label": "overcast above the fog",
     "why": "mid+high cloud at sunrise \u2248 80 % \u2014 flat grey, no beams"
    },
    "steam_fog": {
     "delta_c": 10.2,
     "likely": true,
     "why": "river water +10.2 \u00b0C warmer than the forecast dawn air (steam fog over open water needs roughly \u22655 \u00b0C and light wind; forecast wind 4 kt)",
     "gauge": "KANKAKEE RIVER NEAR WILMINGTON, IL"
    },
    "photo_score": 0.1,
    "grade": "D",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 1.2999999999999998,
       "dpd_key": 1.2999999999999998,
       "rh_max": 91,
       "wind_mean": 3.6,
       "wind_after": 2.5,
       "gust_max": 5.6,
       "cloud_mh_night": 20.818181818181817,
       "cloud_low_night": 8.727272727272727,
       "cloud_mh_sunrise": 80.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 12700.0,
       "low_sunrise": 21.0,
       "vis_min": 12600.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.5,
       "t_key": 4.6,
       "cooling": 11.9,
       "t_min_night": 4.6,
       "td_afternoon": 0.44999999999999996,
       "crossover": 4.1499999999999995,
       "td_drop": -2.8499999999999996,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7000000000000455,
       "model_clear_hour": "09:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.6,
         "Td": 4.3,
         "RH": 65,
         "wind": 1.3,
         "low": 0,
         "mid": 0,
         "high": 3,
         "vis": 26200.0
        },
        {
         "t": "22:00",
         "T": 9.8,
         "Td": 3.8,
         "RH": 66,
         "wind": 1.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 25200.0
        },
        {
         "t": "23:00",
         "T": 8.8,
         "Td": 4.0,
         "RH": 72,
         "wind": 5.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 21800.0
        },
        {
         "t": "00:00",
         "T": 7.7,
         "Td": 3.6,
         "RH": 75,
         "wind": 4.2,
         "low": 1,
         "mid": 0,
         "high": 0,
         "vis": 20000.0
        },
        {
         "t": "01:00",
         "T": 6.9,
         "Td": 3.7,
         "RH": 80,
         "wind": 3.6,
         "low": 2,
         "mid": 1,
         "high": 0,
         "vis": 17600.0
        },
        {
         "t": "02:00",
         "T": 6.5,
         "Td": 4.0,
         "RH": 84,
         "wind": 4.5,
         "low": 7,
         "mid": 0,
         "high": 0,
         "vis": 15100.0
        },
        {
         "t": "03:00",
         "T": 5.8,
         "Td": 3.7,
         "RH": 86,
         "wind": 3.6,
         "low": 8,
         "mid": 0,
         "high": 0,
         "vis": 13900.0
        },
        {
         "t": "04:00",
         "T": 5.3,
         "Td": 3.4,
         "RH": 88,
         "wind": 4.1,
         "low": 12,
         "mid": 2,
         "high": 0,
         "vis": 13200.0
        },
        {
         "t": "05:00",
         "T": 4.7,
         "Td": 2.9,
         "RH": 88,
         "wind": 3.1,
         "low": 17,
         "mid": 23,
         "high": 0,
         "vis": 12800.0
        },
        {
         "t": "06:00",
         "T": 4.8,
         "Td": 3.3,
         "RH": 90,
         "wind": 3.7,
         "low": 25,
         "mid": 100,
         "high": 0,
         "vis": 12600.0
        },
        {
         "t": "07:00",
         "T": 4.6,
         "Td": 3.3,
         "RH": 91,
         "wind": 3.5,
         "low": 24,
         "mid": 100,
         "high": 0,
         "vis": 12700.0
        },
        {
         "t": "08:00",
         "T": 5.3,
         "Td": 4.1,
         "RH": 92,
         "wind": 2.6,
         "low": 18,
         "mid": 61,
         "high": 0,
         "vis": 13400.0
        },
        {
         "t": "09:00",
         "T": 9.0,
         "Td": 5.3,
         "RH": 78,
         "wind": 2.4,
         "low": 1,
         "mid": 0,
         "high": 0,
         "vis": 18400.0
        },
        {
         "t": "10:00",
         "T": 12.6,
         "Td": 6.4,
         "RH": 66,
         "wind": 2.5,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 25100.0
        },
        {
         "t": "11:00",
         "T": 15.9,
         "Td": 7.7,
         "RH": 58,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 31000.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.7,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.3 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.6 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.99,
        "why": "overnight mid+high levels cloud = 21 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 11.9 \u00b0C"
       },
       "moisture": {
        "score": 0.1,
        "why": "crossover: forecast night minimum 4.6 \u00b0C vs afternoon dewpoint 0.4 \u00b0C \u2192 +4.1 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 12.6 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.683
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 0.8999999999999995,
       "dpd_key": 0.8999999999999995,
       "rh_max": 94,
       "wind_mean": 0.0,
       "wind_after": 0.4,
       "gust_max": 1.9,
       "cloud_mh_night": 20.09090909090909,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 10.0,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 1,
       "first_sat_hour": "07:00",
       "t_evening": 16.2,
       "t_key": 5.1,
       "cooling": 11.1,
       "t_min_night": 5.1,
       "td_afternoon": 3.5999999999999996,
       "crossover": 1.5,
       "td_drop": -0.6000000000000005,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.7,
         "Td": 5.0,
         "RH": 68,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 9.5,
         "Td": 5.2,
         "RH": 75,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 8.4,
         "Td": 4.9,
         "RH": 79,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 7.7,
         "Td": 4.6,
         "RH": 81,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 7.1,
         "Td": 4.5,
         "RH": 84,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 6.7,
         "Td": 4.1,
         "RH": 84,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 6.0,
         "Td": 3.8,
         "RH": 86,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 5.5,
         "Td": 3.6,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 5.2,
         "Td": 3.6,
         "RH": 90,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.3,
         "Td": 3.4,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 5.1,
         "Td": 4.2,
         "RH": 94,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.6,
         "Td": 5.0,
         "RH": 90,
         "wind": 0.4,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 10.0,
         "Td": 6.1,
         "RH": 77,
         "wind": 0.4,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 13.2,
         "Td": 6.7,
         "RH": 65,
         "wind": 0.4,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.6,
         "Td": 6.0,
         "RH": 53,
         "wind": 1.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.88,
        "why": "min T\u2212Td in the 3 h before sunrise = 0.9 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.85,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.0 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight total cloud (levels unavailable) cloud = 20 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 11.1 \u00b0C"
       },
       "moisture": {
        "score": 0.55,
        "why": "crossover: forecast night minimum 5.1 \u00b0C vs afternoon dewpoint 3.6 \u00b0C \u2192 +1.5 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.754
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 1.7000000000000002,
       "dpd_key": 1.7999999999999998,
       "rh_max": 89,
       "wind_mean": 3.0,
       "wind_after": 2.35,
       "gust_max": 4.5,
       "cloud_mh_night": 55.81818181818182,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 43.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 15.4,
       "t_key": 5.6,
       "cooling": 9.8,
       "t_min_night": 5.2,
       "td_afternoon": 2.9,
       "crossover": 2.3000000000000003,
       "td_drop": -0.8999999999999999,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7000000000000455,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.8,
         "Td": 5.1,
         "RH": 68,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 32,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 9.8,
         "Td": 5.2,
         "RH": 73,
         "wind": 2.5,
         "low": 0,
         "mid": 0,
         "high": 5,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 8.9,
         "Td": 4.9,
         "RH": 76,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 16,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 8.1,
         "Td": 4.5,
         "RH": 78,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 44,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 7.5,
         "Td": 4.3,
         "RH": 80,
         "wind": 2.9,
         "low": 0,
         "mid": 0,
         "high": 64,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 7.0,
         "Td": 4.2,
         "RH": 82,
         "wind": 3.1,
         "low": 0,
         "mid": 13,
         "high": 64,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 6.7,
         "Td": 4.0,
         "RH": 83,
         "wind": 3.1,
         "low": 0,
         "mid": 30,
         "high": 56,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 6.4,
         "Td": 3.9,
         "RH": 84,
         "wind": 3.2,
         "low": 0,
         "mid": 42,
         "high": 47,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 5.8,
         "Td": 3.8,
         "RH": 87,
         "wind": 3.2,
         "low": 0,
         "mid": 43,
         "high": 39,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 5.2,
         "Td": 3.5,
         "RH": 89,
         "wind": 2.9,
         "low": 0,
         "mid": 37,
         "high": 30,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 5.6,
         "Td": 3.8,
         "RH": 88,
         "wind": 2.7,
         "low": 0,
         "mid": 30,
         "high": 22,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 7.9,
         "Td": 4.8,
         "RH": 81,
         "wind": 2.5,
         "low": 0,
         "mid": 20,
         "high": 14,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 11.1,
         "Td": 5.9,
         "RH": 70,
         "wind": 2.2,
         "low": 0,
         "mid": 8,
         "high": 6,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 14.0,
         "Td": 6.4,
         "RH": 60,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.2,
         "Td": 6.0,
         "RH": 51,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.52,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.7 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.0 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.54,
        "why": "overnight mid+high levels cloud = 56 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 9.8 \u00b0C"
       },
       "moisture": {
        "score": 0.35,
        "why": "crossover: forecast night minimum 5.2 \u00b0C vs afternoon dewpoint 2.9 \u00b0C \u2192 +2.3 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 89 %"
       }
      },
      "gates": [],
      "raw": 0.588
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 1.6,
       "dpd_key": 1.6,
       "rh_max": 89,
       "wind_mean": 1.925,
       "wind_after": 2.0,
       "gust_max": 3.5,
       "cloud_mh_night": 24.0,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 4.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.5,
       "t_key": 2.6,
       "cooling": 13.9,
       "t_min_night": 2.6,
       "td_afternoon": 2.6500000000000004,
       "crossover": -0.050000000000000266,
       "td_drop": 1.6500000000000004,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7999999999999545,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 9.5,
         "Td": 4.1,
         "RH": 69,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 58,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 8.3,
         "Td": 3.5,
         "RH": 72,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 39,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 7.3,
         "Td": 3.0,
         "RH": 74,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 62,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 6.4,
         "Td": 2.7,
         "RH": 77,
         "wind": 1.3,
         "low": 0,
         "mid": 0,
         "high": 30,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 5.5,
         "Td": 2.3,
         "RH": 80,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 4.3,
         "Td": 2.0,
         "RH": 85,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 4.0,
         "Td": 1.8,
         "RH": 85,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 3.7,
         "Td": 1.6,
         "RH": 86,
         "wind": 1.9,
         "low": 0,
         "mid": 17,
         "high": 1,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 3.5,
         "Td": 1.5,
         "RH": 87,
         "wind": 1.8,
         "low": 0,
         "mid": 25,
         "high": 8,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 3.0,
         "Td": 1.2,
         "RH": 88,
         "wind": 2.0,
         "low": 0,
         "mid": 17,
         "high": 7,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 2.6,
         "Td": 1.0,
         "RH": 89,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 3.3,
         "Td": 1.5,
         "RH": 88,
         "wind": 2.0,
         "low": 0,
         "mid": 8,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 7.8,
         "Td": 3.5,
         "RH": 74,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 13.1,
         "Td": 4.3,
         "RH": 55,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.9,
         "Td": 4.9,
         "RH": 45,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.56,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.6 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.99,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.9 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.95,
        "why": "overnight mid+high levels cloud = 24 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 13.9 \u00b0C"
       },
       "moisture": {
        "score": 1.0,
        "why": "crossover: forecast night minimum 2.6 \u00b0C vs afternoon dewpoint 2.7 \u00b0C \u2192 -0.1 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 89 %"
       }
      },
      "gates": [],
      "raw": 0.724
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.051,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1630009&longitude=-87.654792&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1630009&longitude=-87.654792&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:29+00:00",
     "elevation_m": 192.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1630009&longitude=-87.654792&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:34+00:00",
     "elevation_m": 192.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1630009&longitude=-87.654792&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:34+00:00",
     "elevation_m": 192.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1630009&longitude=-87.654792&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:35+00:00",
     "elevation_m": 192.0
    }
   },
   "water_temp_c": 14.8,
   "dawn_temp_c": 4.6,
   "dawn_wind_kt": 3.5
  },
  {
   "id": "momence-wetlands-nature-preserve",
   "name": "Momence Wetlands Nature Preserve",
   "lat": 41.1643173,
   "lon": -87.5542197,
   "agency": "Illinois Department of Natural Resources (Illinois Nature Preserves Commission listing)",
   "agency_url": "https://dnr.illinois.gov/inpc/area.area3kankakeemomencewetlands.html",
   "dawn_access": null,
   "dawn_access_ok": null,
   "drone_rule": "17 Ill. Adm. Code 110.160(i): it is unlawful \"Except in cases of emergency, for any person to land or attempt to land any aircraft on Department-owned, -leased or -managed property without prior authorization for each landing or attempted landing from the Department.\" No site-specific drone page found for this site. The wording says 'aircraft', not 'drone/unmanned', and does not name the superintendent; treat as authorization required until the site office says otherwise.",
   "drone_rule_url": "https://www.ilga.gov/commission/jcar/admincode/017/017001100A01600R.html",
   "drone_status": "permit",
   "features": [
    "river",
    "bottomland",
    "floodplain forest"
   ],
   "features_source": "INPC page: \"These wetlands along the Kankakee River contain trees commonly associated with floodplains. These include green ash, sycamore, silver maple and eastern cottonwood.\" 72 acres, dedicated September 1988; Ownership: Illinois Department of Natural Resources. USGS 3DEP: 624 ft, ring 621-633 ft (flat). Coordinates: Nominatim (OSM node 354252332).",
   "drive_minutes_est": 38,
   "airspace_note": "No Class E polygon from the FAA data at this point; surface is Class G. KIKK 14.3 nm, Bult Field (C56) 14.1 nm. No UAS Facility Map grid.",
   "notes": "Page gives only directions: \"From Momence, take Highway 114 east 6 miles to a county road. Turn north on this road and go 0.75 mile. The preserve is on the west side of the road.\" No parking, trail or hours stated. 17 Ill. Adm. Code 110.120(b) bars entry to a dedicated nature preserve where posted rules prohibit it. Contact listed: Site Superintendent, Iroquois County Conservation Area, 815-435-2218.",
   "look": "floodplain forest: treetops-in-fog aerial if authorized",
   "evidence": "research/C-locations.md",
   "elevation_m": 205.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:39",
    "sunrise": "07:07",
    "azimuth": 103.2,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:21",
    "sun_12deg": "08:19"
   },
   "score": {
    "fog_probability": 0.19,
    "raw_blend": 0.719,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.121,
    "confidence": "high",
    "confidence_why": "4 models within 0.12 of each other on the blend score",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0.5\u20135 m (estimate)",
     "why": "saturation only in the last 2 h before sunrise \u2014 fog pools over the lowest ground, rivers and wet fields, trees stand clear of it",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "08:07",
     "est_end": "09:07",
     "model_clear": "09:00",
     "notes": [
      "cloud above the fog weakens the sun; add ~30\u201345 min"
     ],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 0.2,
     "label": "overcast above the fog",
     "why": "mid+high cloud at sunrise \u2248 76 %, plus a low deck \u2248 45 % with visibility 12 km (stratus, not fog) \u2014 flat grey, no beams"
    },
    "steam_fog": {
     "delta_c": 10.4,
     "likely": true,
     "why": "river water +10.4 \u00b0C warmer than the forecast dawn air (steam fog over open water needs roughly \u22655 \u00b0C and light wind; forecast wind 3 kt)",
     "gauge": "KANKAKEE RIVER NEAR WILMINGTON, IL"
    },
    "photo_score": 0.12,
    "grade": "D",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 0.8000000000000003,
       "dpd_key": 0.8000000000000003,
       "rh_max": 94,
       "wind_mean": 3.425,
       "wind_after": 1.9,
       "gust_max": 5.4,
       "cloud_mh_night": 22.0,
       "cloud_low_night": 12.454545454545455,
       "cloud_mh_sunrise": 76.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 12200.0,
       "low_sunrise": 45.0,
       "vis_min": 12200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 2,
       "first_sat_hour": "06:00",
       "t_evening": 16.4,
       "t_key": 4.4,
       "cooling": 11.999999999999998,
       "t_min_night": 4.4,
       "td_afternoon": 1.1,
       "crossover": 3.3000000000000003,
       "td_drop": -2.5,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6999999999999318,
       "model_clear_hour": "09:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.5,
         "Td": 4.2,
         "RH": 65,
         "wind": 2.9,
         "low": 0,
         "mid": 0,
         "high": 15,
         "vis": 26200.0
        },
        {
         "t": "22:00",
         "T": 9.5,
         "Td": 3.9,
         "RH": 68,
         "wind": 0.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 23800.0
        },
        {
         "t": "23:00",
         "T": 8.4,
         "Td": 4.3,
         "RH": 75,
         "wind": 4.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 20000.0
        },
        {
         "t": "00:00",
         "T": 7.6,
         "Td": 3.7,
         "RH": 76,
         "wind": 4.3,
         "low": 1,
         "mid": 0,
         "high": 0,
         "vis": 19800.0
        },
        {
         "t": "01:00",
         "T": 6.9,
         "Td": 3.9,
         "RH": 81,
         "wind": 3.5,
         "low": 4,
         "mid": 0,
         "high": 0,
         "vis": 17100.0
        },
        {
         "t": "02:00",
         "T": 6.3,
         "Td": 4.3,
         "RH": 87,
         "wind": 4.3,
         "low": 11,
         "mid": 0,
         "high": 0,
         "vis": 14400.0
        },
        {
         "t": "03:00",
         "T": 5.7,
         "Td": 3.7,
         "RH": 87,
         "wind": 2.9,
         "low": 10,
         "mid": 0,
         "high": 0,
         "vis": 13700.0
        },
        {
         "t": "04:00",
         "T": 5.2,
         "Td": 3.5,
         "RH": 89,
         "wind": 4.3,
         "low": 15,
         "mid": 1,
         "high": 0,
         "vis": 13000.0
        },
        {
         "t": "05:00",
         "T": 4.7,
         "Td": 3.1,
         "RH": 89,
         "wind": 2.9,
         "low": 22,
         "mid": 26,
         "high": 0,
         "vis": 12700.0
        },
        {
         "t": "06:00",
         "T": 4.6,
         "Td": 3.6,
         "RH": 93,
         "wind": 3.6,
         "low": 36,
         "mid": 100,
         "high": 0,
         "vis": 12200.0
        },
        {
         "t": "07:00",
         "T": 4.4,
         "Td": 3.6,
         "RH": 94,
         "wind": 2.9,
         "low": 38,
         "mid": 100,
         "high": 0,
         "vis": 12200.0
        },
        {
         "t": "08:00",
         "T": 4.6,
         "Td": 4.2,
         "RH": 97,
         "wind": 1.7,
         "low": 52,
         "mid": 52,
         "high": 0,
         "vis": 12200.0
        },
        {
         "t": "09:00",
         "T": 8.6,
         "Td": 5.3,
         "RH": 80,
         "wind": 2.1,
         "low": 2,
         "mid": 0,
         "high": 0,
         "vis": 17700.0
        },
        {
         "t": "10:00",
         "T": 12.3,
         "Td": 6.6,
         "RH": 68,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 23700.0
        },
        {
         "t": "11:00",
         "T": 15.8,
         "Td": 7.5,
         "RH": 58,
         "wind": 2.3,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 31200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.91,
        "why": "min T\u2212Td in the 3 h before sunrise = 0.8 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.4 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.97,
        "why": "overnight mid+high levels cloud = 22 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 12.0 \u00b0C"
       },
       "moisture": {
        "score": 0.2,
        "why": "crossover: forecast night minimum 4.4 \u00b0C vs afternoon dewpoint 1.1 \u00b0C \u2192 +3.3 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 12.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.754
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 1.0,
       "dpd_key": 1.0,
       "rh_max": 93,
       "wind_mean": 0.0,
       "wind_after": 0.0,
       "gust_max": 1.9,
       "cloud_mh_night": 19.454545454545453,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 12.0,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 1,
       "first_sat_hour": "07:00",
       "t_evening": 15.9,
       "t_key": 5.1,
       "cooling": 10.8,
       "t_min_night": 5.1,
       "td_afternoon": 3.5,
       "crossover": 1.5999999999999996,
       "td_drop": -0.5999999999999996,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.4,
         "Td": 5.2,
         "RH": 70,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 9.2,
         "Td": 5.4,
         "RH": 77,
         "wind": 0.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 8.3,
         "Td": 5.4,
         "RH": 82,
         "wind": 0.4,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 7.4,
         "Td": 5.0,
         "RH": 85,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 6.9,
         "Td": 4.6,
         "RH": 85,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 6.2,
         "Td": 4.2,
         "RH": 87,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 5.6,
         "Td": 3.8,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 5.2,
         "Td": 4.0,
         "RH": 92,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 5.2,
         "Td": 3.9,
         "RH": 91,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.3,
         "Td": 3.8,
         "RH": 90,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 5.1,
         "Td": 4.1,
         "RH": 93,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.6,
         "Td": 4.6,
         "RH": 87,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 9.9,
         "Td": 5.7,
         "RH": 75,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 13.0,
         "Td": 6.6,
         "RH": 65,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.5,
         "Td": 6.0,
         "RH": 53,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.85,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.0 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.85,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.0 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 1.0,
        "why": "overnight total cloud (levels unavailable) cloud = 19 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 10.8 \u00b0C"
       },
       "moisture": {
        "score": 0.52,
        "why": "crossover: forecast night minimum 5.1 \u00b0C vs afternoon dewpoint 3.5 \u00b0C \u2192 +1.6 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.742
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 1.4999999999999996,
       "dpd_key": 1.6,
       "rh_max": 90,
       "wind_mean": 2.85,
       "wind_after": 2.0999999999999996,
       "gust_max": 4.5,
       "cloud_mh_night": 51.45454545454545,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 60.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 14.9,
       "t_key": 5.0,
       "cooling": 9.9,
       "t_min_night": 4.6,
       "td_afternoon": 2.95,
       "crossover": 1.6499999999999995,
       "td_drop": -0.44999999999999973,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.7999999999999545,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.3,
         "Td": 4.6,
         "RH": 68,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 40,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 9.3,
         "Td": 4.3,
         "RH": 71,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 14,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 8.4,
         "Td": 4.3,
         "RH": 75,
         "wind": 2.6,
         "low": 0,
         "mid": 0,
         "high": 18,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 7.7,
         "Td": 4.3,
         "RH": 79,
         "wind": 2.8,
         "low": 0,
         "mid": 0,
         "high": 35,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 7.0,
         "Td": 4.2,
         "RH": 82,
         "wind": 3.0,
         "low": 0,
         "mid": 0,
         "high": 49,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 6.5,
         "Td": 4.0,
         "RH": 84,
         "wind": 2.9,
         "low": 0,
         "mid": 5,
         "high": 53,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 6.2,
         "Td": 3.8,
         "RH": 85,
         "wind": 2.9,
         "low": 0,
         "mid": 12,
         "high": 52,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 5.9,
         "Td": 3.7,
         "RH": 86,
         "wind": 2.9,
         "low": 0,
         "mid": 19,
         "high": 50,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 5.2,
         "Td": 3.4,
         "RH": 88,
         "wind": 2.9,
         "low": 0,
         "mid": 27,
         "high": 46,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 4.6,
         "Td": 3.1,
         "RH": 90,
         "wind": 2.9,
         "low": 0,
         "mid": 36,
         "high": 40,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 5.0,
         "Td": 3.4,
         "RH": 89,
         "wind": 2.7,
         "low": 0,
         "mid": 38,
         "high": 32,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 7.3,
         "Td": 4.5,
         "RH": 82,
         "wind": 2.3,
         "low": 0,
         "mid": 29,
         "high": 21,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 10.6,
         "Td": 6.0,
         "RH": 73,
         "wind": 1.9,
         "low": 0,
         "mid": 14,
         "high": 9,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 13.6,
         "Td": 6.7,
         "RH": 63,
         "wind": 1.6,
         "low": 0,
         "mid": 3,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 15.9,
         "Td": 6.6,
         "RH": 54,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.6,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.5 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 2.9 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.59,
        "why": "overnight mid+high levels cloud = 51 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 9.9 \u00b0C"
       },
       "moisture": {
        "score": 0.51,
        "why": "crossover: forecast night minimum 4.6 \u00b0C vs afternoon dewpoint 3.0 \u00b0C \u2192 +1.6 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 90 %"
       }
      },
      "gates": [],
      "raw": 0.633
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 1.7000000000000002,
       "dpd_key": 1.7000000000000002,
       "rh_max": 89,
       "wind_mean": 1.925,
       "wind_after": 1.9,
       "gust_max": 3.5,
       "cloud_mh_night": 22.09090909090909,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 0.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.2,
       "t_key": 2.7,
       "cooling": 13.5,
       "t_min_night": 2.7,
       "td_afternoon": 2.35,
       "crossover": 0.3500000000000001,
       "td_drop": 1.35,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6999999999999318,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 9.8,
         "Td": 3.6,
         "RH": 65,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 47,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 8.5,
         "Td": 3.1,
         "RH": 69,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 29,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 7.2,
         "Td": 2.9,
         "RH": 74,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 53,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 6.0,
         "Td": 2.7,
         "RH": 79,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 43,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 5.0,
         "Td": 2.3,
         "RH": 83,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 4.3,
         "Td": 2.0,
         "RH": 85,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 4.1,
         "Td": 2.0,
         "RH": 86,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 3.7,
         "Td": 1.8,
         "RH": 87,
         "wind": 2.1,
         "low": 0,
         "mid": 14,
         "high": 0,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 3.5,
         "Td": 1.5,
         "RH": 87,
         "wind": 1.6,
         "low": 0,
         "mid": 31,
         "high": 7,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 3.2,
         "Td": 1.2,
         "RH": 87,
         "wind": 1.8,
         "low": 0,
         "mid": 12,
         "high": 7,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 2.7,
         "Td": 1.0,
         "RH": 89,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 3.4,
         "Td": 1.6,
         "RH": 88,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 7.9,
         "Td": 4.0,
         "RH": 76,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 13.0,
         "Td": 4.2,
         "RH": 55,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.8,
         "Td": 4.8,
         "RH": 45,
         "wind": 2.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.52,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.7 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.99,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.9 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.97,
        "why": "overnight mid+high levels cloud = 22 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 13.5 \u00b0C"
       },
       "moisture": {
        "score": 0.9,
        "why": "crossover: forecast night minimum 2.7 \u00b0C vs afternoon dewpoint 2.4 \u00b0C \u2192 +0.4 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 89 %"
       }
      },
      "gates": [],
      "raw": 0.705
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.052,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1643173&longitude=-87.5542197&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1643173&longitude=-87.5542197&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:35+00:00",
     "elevation_m": 205.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1643173&longitude=-87.5542197&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:45+00:00",
     "elevation_m": 205.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1643173&longitude=-87.5542197&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:45+00:00",
     "elevation_m": 205.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.1643173&longitude=-87.5542197&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:45+00:00",
     "elevation_m": 205.0
    }
   },
   "water_temp_c": 14.8,
   "dawn_temp_c": 4.4,
   "dawn_wind_kt": 2.9
  },
  {
   "id": "des-plaines-sfwa",
   "name": "Des Plaines State Fish and Wildlife Area",
   "lat": 41.372,
   "lon": -88.207,
   "agency": "Illinois Department of Natural Resources",
   "agency_url": "https://dnr.illinois.gov/parks/park.desplaines.html",
   "dawn_access": null,
   "dawn_access_ok": null,
   "drone_rule": "17 Ill. Adm. Code 110.160(i): it is unlawful \"Except in cases of emergency, for any person to land or attempt to land any aircraft on Department-owned, -leased or -managed property without prior authorization for each landing or attempted landing from the Department.\" No site-specific drone page found for this site. The wording says 'aircraft', not 'drone/unmanned', and does not name the superintendent; treat as authorization required until the site office says otherwise.",
   "drone_rule_url": "https://www.ilga.gov/commission/jcar/admincode/017/017001100A01600R.html",
   "drone_status": "permit",
   "features": [
    "river",
    "bottomland",
    "prairie",
    "ponds",
    "open fields"
   ],
   "features_source": "IDNR activities page: \"The Kankakee River borders the site on the south with 3 miles of shoreline\"; \"plentiful open areas, swampy backwater areas and woodlands\"; \"Eighty acres of the Des Plaines SFWA are dedicated as a nature preserve which contains many remnants of the Illinois' natural prairie.\" USGS gauge 05527500 Kankakee River near Wilmington (41.3463, -88.1867) about 2 mi away. 3DEP: 515 ft, ring 504-532 ft. Coordinates: IDNR page Park Latitude/Longitude.",
   "drive_minutes_est": 48,
   "airspace_note": "No Class E polygon from the FAA data at this point; surface is Class G. Dresden Generating Station (nuclear) 3.0 nm, Braidwood 7.8 nm, KJOT 8.9 nm. FAA FDC 6/8818 advises avoiding airspace in close proximity to nuclear plants; no mapped hard restriction found.",
   "notes": "Drive estimate is just over the 45-minute target. Hunting is a main use (IDNR activities page has a hunting section; hunting-season dates not checked). IDNR: \"Boat ramps are closed seasonally from the end of October for pheasant hunting season thru mid-April\"; hand trap and archery ranges are \"Closed during pheasant season.\" General daily hours not found; equestrian trail \"6 a.m. to 10 p.m. daily\" is trail-specific.",
   "look": "bottomland + prairie + backwaters; over the 45-min line; Dresden station 3 nm",
   "evidence": "research/C-locations.md",
   "elevation_m": 158.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:42",
    "sunrise": "07:10",
    "azimuth": 103.3,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:24",
    "sun_12deg": "08:23"
   },
   "score": {
    "fog_probability": 0.2,
    "raw_blend": 0.728,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.318,
    "confidence": "low",
    "confidence_why": "models disagree (spread 0.32); treat the number as a coin-flip and check the 04:45 refresh",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0\u20133 m, if any (estimate)",
     "why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.3 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "08:10",
     "est_end": "09:10",
     "model_clear": "09:00",
     "notes": [
      "cloud above the fog weakens the sun; add ~30\u201345 min"
     ],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 0.2,
     "label": "overcast above the fog",
     "why": "mid+high cloud at sunrise \u2248 62 % \u2014 flat grey, no beams"
    },
    "steam_fog": {
     "delta_c": 8.6,
     "likely": true,
     "why": "river water +8.6 \u00b0C warmer than the forecast dawn air (steam fog over open water needs roughly \u22655 \u00b0C and light wind; forecast wind 3 kt)",
     "gauge": "KANKAKEE RIVER NEAR WILMINGTON, IL"
    },
    "photo_score": 0.12,
    "grade": "D",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 1.2999999999999998,
       "dpd_key": 1.2999999999999998,
       "rh_max": 91,
       "wind_mean": 2.675,
       "wind_after": 1.1,
       "gust_max": 5.8,
       "cloud_mh_night": 33.18181818181818,
       "cloud_low_night": 1.7272727272727273,
       "cloud_mh_sunrise": 61.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 13400.0,
       "low_sunrise": 12.5,
       "vis_min": 13400.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 17.0,
       "t_key": 6.2,
       "cooling": 10.8,
       "t_min_night": 6.2,
       "td_afternoon": 4.0,
       "crossover": 2.2,
       "td_drop": -0.9000000000000004,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6000000000000227,
       "model_clear_hour": "09:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 12.1,
         "Td": 2.0,
         "RH": 50,
         "wind": 3.9,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 40000.0
        },
        {
         "t": "22:00",
         "T": 10.5,
         "Td": 2.8,
         "RH": 59,
         "wind": 3.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 32300.0
        },
        {
         "t": "23:00",
         "T": 9.6,
         "Td": 2.2,
         "RH": 60,
         "wind": 2.5,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 31300.0
        },
        {
         "t": "00:00",
         "T": 9.0,
         "Td": 2.8,
         "RH": 65,
         "wind": 3.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 27800.0
        },
        {
         "t": "01:00",
         "T": 8.6,
         "Td": 3.6,
         "RH": 71,
         "wind": 4.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 23300.0
        },
        {
         "t": "02:00",
         "T": 7.6,
         "Td": 4.2,
         "RH": 79,
         "wind": 3.5,
         "low": 2,
         "mid": 2,
         "high": 0,
         "vis": 18700.0
        },
        {
         "t": "03:00",
         "T": 6.8,
         "Td": 4.3,
         "RH": 84,
         "wind": 2.8,
         "low": 3,
         "mid": 3,
         "high": 0,
         "vis": 16500.0
        },
        {
         "t": "04:00",
         "T": 6.4,
         "Td": 4.1,
         "RH": 85,
         "wind": 2.9,
         "low": 3,
         "mid": 54,
         "high": 6,
         "vis": 15800.0
        },
        {
         "t": "05:00",
         "T": 6.4,
         "Td": 4.4,
         "RH": 87,
         "wind": 2.6,
         "low": 2,
         "mid": 100,
         "high": 0,
         "vis": 15300.0
        },
        {
         "t": "06:00",
         "T": 6.4,
         "Td": 4.9,
         "RH": 90,
         "wind": 2.7,
         "low": 2,
         "mid": 100,
         "high": 0,
         "vis": 14200.0
        },
        {
         "t": "07:00",
         "T": 6.2,
         "Td": 4.9,
         "RH": 91,
         "wind": 2.5,
         "low": 7,
         "mid": 100,
         "high": 0,
         "vis": 13400.0
        },
        {
         "t": "08:00",
         "T": 6.4,
         "Td": 5.5,
         "RH": 94,
         "wind": 1.6,
         "low": 18,
         "mid": 23,
         "high": 0,
         "vis": 12700.0
        },
        {
         "t": "09:00",
         "T": 9.6,
         "Td": 6.8,
         "RH": 83,
         "wind": 0.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 16800.0
        },
        {
         "t": "10:00",
         "T": 13.2,
         "Td": 7.2,
         "RH": 67,
         "wind": 1.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 25900.0
        },
        {
         "t": "11:00",
         "T": 15.9,
         "Td": 7.4,
         "RH": 57,
         "wind": 1.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 33700.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.7,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.3 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 2.7 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.82,
        "why": "overnight mid+high levels cloud = 33 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 10.8 \u00b0C"
       },
       "moisture": {
        "score": 0.37,
        "why": "crossover: forecast night minimum 6.2 \u00b0C vs afternoon dewpoint 4.0 \u00b0C \u2192 +2.2 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 13.4 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.686
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 0.8999999999999995,
       "dpd_key": 0.8999999999999995,
       "rh_max": 94,
       "wind_mean": 0.0,
       "wind_after": 0.0,
       "gust_max": 1.7,
       "cloud_mh_night": 20.636363636363637,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 9.5,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 1,
       "first_sat_hour": "07:00",
       "t_evening": 16.2,
       "t_key": 5.3,
       "cooling": 10.899999999999999,
       "t_min_night": 5.3,
       "td_afternoon": 6.05,
       "crossover": -0.75,
       "td_drop": 1.6499999999999995,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "09:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.1,
         "Td": 6.8,
         "RH": 75,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 10.0,
         "Td": 6.7,
         "RH": 80,
         "wind": 1.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 9.1,
         "Td": 6.7,
         "RH": 85,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 8.6,
         "Td": 6.4,
         "RH": 86,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 8.0,
         "Td": 5.9,
         "RH": 87,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 7.4,
         "Td": 5.4,
         "RH": 87,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 6.9,
         "Td": 5.0,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 6.4,
         "Td": 5.0,
         "RH": 91,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 6.0,
         "Td": 4.8,
         "RH": 92,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.6,
         "Td": 4.5,
         "RH": 93,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 5.3,
         "Td": 4.4,
         "RH": 94,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.5,
         "Td": 5.3,
         "RH": 92,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 10.0,
         "Td": 6.9,
         "RH": 81,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 13.0,
         "Td": 8.0,
         "RH": 72,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.4,
         "Td": 8.1,
         "RH": 62,
         "wind": 1.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.88,
        "why": "min T\u2212Td in the 3 h before sunrise = 0.9 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.85,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.0 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.99,
        "why": "overnight total cloud (levels unavailable) cloud = 21 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 10.9 \u00b0C"
       },
       "moisture": {
        "score": 1.0,
        "why": "crossover: forecast night minimum 5.3 \u00b0C vs afternoon dewpoint 6.0 \u00b0C \u2192 -0.8 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.798
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 1.5,
       "dpd_key": 1.7000000000000002,
       "rh_max": 90,
       "wind_mean": 2.3,
       "wind_after": 1.65,
       "gust_max": 3.9,
       "cloud_mh_night": 63.09090909090909,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 4.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 15.4,
       "t_key": 6.8,
       "cooling": 8.600000000000001,
       "t_min_night": 6.4,
       "td_afternoon": 3.35,
       "crossover": 3.0500000000000003,
       "td_drop": -1.7499999999999996,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 1.0,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 11.0,
         "Td": 6.6,
         "RH": 74,
         "wind": 3.2,
         "low": 0,
         "mid": 0,
         "high": 34,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 10.2,
         "Td": 6.2,
         "RH": 76,
         "wind": 3.2,
         "low": 0,
         "mid": 0,
         "high": 25,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 9.5,
         "Td": 6.1,
         "RH": 79,
         "wind": 2.9,
         "low": 0,
         "mid": 2,
         "high": 35,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 8.9,
         "Td": 6.0,
         "RH": 82,
         "wind": 2.6,
         "low": 0,
         "mid": 7,
         "high": 54,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 8.4,
         "Td": 5.9,
         "RH": 84,
         "wind": 2.5,
         "low": 0,
         "mid": 18,
         "high": 64,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 8.0,
         "Td": 5.6,
         "RH": 85,
         "wind": 2.5,
         "low": 0,
         "mid": 47,
         "high": 58,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 7.6,
         "Td": 5.4,
         "RH": 86,
         "wind": 2.4,
         "low": 0,
         "mid": 83,
         "high": 44,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 7.3,
         "Td": 5.3,
         "RH": 87,
         "wind": 2.5,
         "low": 0,
         "mid": 100,
         "high": 30,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 6.8,
         "Td": 5.1,
         "RH": 89,
         "wind": 2.4,
         "low": 0,
         "mid": 79,
         "high": 19,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 6.4,
         "Td": 4.9,
         "RH": 90,
         "wind": 2.3,
         "low": 0,
         "mid": 40,
         "high": 8,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 6.8,
         "Td": 5.1,
         "RH": 89,
         "wind": 2.0,
         "low": 0,
         "mid": 9,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 8.6,
         "Td": 6.0,
         "RH": 84,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 11.2,
         "Td": 7.2,
         "RH": 76,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 13.7,
         "Td": 7.7,
         "RH": 67,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 15.9,
         "Td": 7.4,
         "RH": 57,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.6,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.5 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 2.3 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.47,
        "why": "overnight mid+high levels cloud = 63 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 8.6 \u00b0C"
       },
       "moisture": {
        "score": 0.24,
        "why": "crossover: forecast night minimum 6.4 \u00b0C vs afternoon dewpoint 3.4 \u00b0C \u2192 +3.1 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 90 %"
       }
      },
      "gates": [],
      "raw": 0.59
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 0.5,
       "dpd_key": 0.5,
       "rh_max": 96,
       "wind_mean": 1.35,
       "wind_after": 1.4,
       "gust_max": 2.1,
       "cloud_mh_night": 22.727272727272727,
       "cloud_low_night": 3.727272727272727,
       "cloud_mh_sunrise": 14.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 40.5,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 2,
       "first_sat_hour": "06:00",
       "t_evening": 16.9,
       "t_key": 3.4,
       "cooling": 13.499999999999998,
       "t_min_night": 3.4,
       "td_afternoon": 4.550000000000001,
       "crossover": -1.1500000000000008,
       "td_drop": 1.6500000000000008,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.8999999999999773,
       "model_clear_hour": "09:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.3,
         "Td": 6.4,
         "RH": 77,
         "wind": 2.3,
         "low": 0,
         "mid": 0,
         "high": 29,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 9.1,
         "Td": 6.0,
         "RH": 81,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 9,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 8.1,
         "Td": 5.4,
         "RH": 83,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 3,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 7.2,
         "Td": 5.0,
         "RH": 86,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 6.2,
         "Td": 4.6,
         "RH": 89,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 5,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 5.8,
         "Td": 4.2,
         "RH": 89,
         "wind": 2.1,
         "low": 0,
         "mid": 13,
         "high": 38,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 5.6,
         "Td": 4.0,
         "RH": 89,
         "wind": 1.4,
         "low": 0,
         "mid": 32,
         "high": 10,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 5.6,
         "Td": 3.8,
         "RH": 88,
         "wind": 0.7,
         "low": 0,
         "mid": 0,
         "high": 25,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 5.0,
         "Td": 3.5,
         "RH": 90,
         "wind": 1.5,
         "low": 0,
         "mid": 10,
         "high": 27,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 4.1,
         "Td": 3.3,
         "RH": 94,
         "wind": 1.7,
         "low": 4,
         "mid": 27,
         "high": 0,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 3.4,
         "Td": 2.9,
         "RH": 96,
         "wind": 1.5,
         "low": 37,
         "mid": 22,
         "high": 0,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 3.5,
         "Td": 3.1,
         "RH": 97,
         "wind": 1.6,
         "low": 44,
         "mid": 6,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 7.3,
         "Td": 5.0,
         "RH": 85,
         "wind": 1.2,
         "low": 0,
         "mid": 0,
         "high": 8,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 12.0,
         "Td": 5.4,
         "RH": 64,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 15.4,
         "Td": 6.4,
         "RH": 55,
         "wind": 1.3,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 1.0,
        "why": "min T\u2212Td in the 3 h before sunrise = 0.5 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.94,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.4 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.96,
        "why": "overnight mid+high levels cloud = 23 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 13.5 \u00b0C"
       },
       "moisture": {
        "score": 1.0,
        "why": "crossover: forecast night minimum 3.4 \u00b0C vs afternoon dewpoint 4.6 \u00b0C \u2192 -1.2 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.5,
        "why": "model has no visibility field; max RH before sunrise = 96 %"
       }
      },
      "gates": [],
      "raw": 0.908
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.086,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=41.372&longitude=-88.207&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.372&longitude=-88.207&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:45+00:00",
     "elevation_m": 158.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.372&longitude=-88.207&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:45+00:00",
     "elevation_m": 158.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.372&longitude=-88.207&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:45+00:00",
     "elevation_m": 158.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=41.372&longitude=-88.207&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:45+00:00",
     "elevation_m": 158.0
    }
   },
   "water_temp_c": 14.8,
   "dawn_temp_c": 6.2,
   "dawn_wind_kt": 2.5
  },
  {
   "id": "iroquois-county-swa",
   "name": "Iroquois County State Wildlife Area",
   "lat": 40.994,
   "lon": -87.599,
   "agency": "Illinois Department of Natural Resources",
   "agency_url": "https://dnr.illinois.gov/parks/park.iroquoiscounty.html",
   "dawn_access": null,
   "dawn_access_ok": null,
   "drone_rule": "17 Ill. Adm. Code 110.160(i): it is unlawful \"Except in cases of emergency, for any person to land or attempt to land any aircraft on Department-owned, -leased or -managed property without prior authorization for each landing or attempted landing from the Department.\" No site-specific drone page found for this site. The wording says 'aircraft', not 'drone/unmanned', and does not name the superintendent; treat as authorization required until the site office says otherwise.",
   "drone_rule_url": "https://www.ilga.gov/commission/jcar/admincode/017/017001100A01600R.html",
   "drone_status": "permit",
   "features": [
    "marsh",
    "sand ridges",
    "savanna",
    "prairie remnant"
   ],
   "features_source": "IDNR page: \"situated in a low glacial outwash plain associated with the Kankakee River Valley that consists of marshland, sand ridges and dunes\"; \"Hooper Branch Savanna, 480 acres of this parcel is considered the largest single tract of rare native savanna remaining in Illinois\". USGS 3DEP: 644 ft, ring 627-653 ft. Coordinates: IDNR page Park Latitude/Longitude 40.994/-87.599.",
   "drive_minutes_est": 55,
   "airspace_note": "No Class E polygon from the FAA data at this point; surface is Class G. KIKK 12.1 nm. No UAS Facility Map grid.",
   "notes": "OUTSIDE the 45-minute target (OSRM estimate 55 min) and kept because the terrain matches the lone-tree look. IDNR page: \"The majority of the area, 2,000 acres, is managed as a public hunting area... Nonconsumptive recreation, in the form of hiking and nature study, is available when the facility is closed to hunting.\" Hunting seasons overlap Oct-Nov. IDNR: drones for any aspect of hunting are unlawful. Site office 815-435-2218.",
   "look": "lone trees on sand ridges, marsh fog; over the 45-min line; hunting-season access limits",
   "evidence": "research/C-locations.md",
   "elevation_m": 197.0,
   "elevation_source": "Open-Meteo model grid elevation (not surveyed)",
   "sun": {
    "civil_dawn": "06:39",
    "sunrise": "07:07",
    "azimuth": 103.2,
    "compass": "ESE",
    "night_length_h": 13.1,
    "sun_2deg": "07:21",
    "sun_12deg": "08:19"
   },
   "score": {
    "fog_probability": 0.13,
    "raw_blend": 0.636,
    "calibration": "Platt-calibrated on 329 station-mornings (2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL)",
    "models_scored": [
     "ecmwf_ifs025",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "models_failed": {},
    "model_spread": 0.126,
    "confidence": "high",
    "confidence_why": "4 models within 0.13 of each other on the blend score",
    "fog_type": {
     "type": "shallow ground fog",
     "depth_est": "0\u20133 m, if any (estimate)",
     "why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.9 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
     "heuristic_type": "shallow ground fog",
     "profile_note": "HRRR profile at KIKK 07:00 (run 2026-10-19 13:00): no level saturated (T\u2212Td \u2264 1 \u00b0C), temperature change 10 m \u2192 80 m: +7.5 \u00b0C (inversion) \u2014 profile shows no saturated layer at the airport; any fog will be local to low ground and water"
    },
    "burnoff": {
     "est_start": "08:07",
     "est_end": "09:07",
     "model_clear": null,
     "notes": [
      "cloud above the fog weakens the sun; add ~30\u201345 min"
     ],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "light": {
     "score": 0.2,
     "label": "overcast above the fog",
     "why": "mid+high cloud at sunrise \u2248 68 % \u2014 flat grey, no beams"
    },
    "steam_fog": null,
    "photo_score": 0.08,
    "grade": "F",
    "per_model": {
     "gfs_hrrr": {
      "features": {
       "dpd_min": 1.9,
       "dpd_key": 1.9,
       "rh_max": 87,
       "wind_mean": 3.375,
       "wind_after": 2.5,
       "gust_max": 5.6,
       "cloud_mh_night": 26.0,
       "cloud_low_night": 5.363636363636363,
       "cloud_mh_sunrise": 67.5,
       "cloud_source": "mid+high levels",
       "vis_sunrise": 14800.0,
       "low_sunrise": 12.0,
       "vis_min": 14800.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.9,
       "t_key": 4.3,
       "cooling": 12.599999999999998,
       "t_min_night": 4.3,
       "td_afternoon": 1.6,
       "crossover": 2.6999999999999997,
       "td_drop": -0.7999999999999998,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6999999999999318,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.8,
         "Td": 4.5,
         "RH": 65,
         "wind": 4.2,
         "low": 0,
         "mid": 0,
         "high": 9,
         "vis": 25800.0
        },
        {
         "t": "22:00",
         "T": 9.9,
         "Td": 3.9,
         "RH": 66,
         "wind": 3.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 25300.0
        },
        {
         "t": "23:00",
         "T": 9.1,
         "Td": 3.5,
         "RH": 68,
         "wind": 3.7,
         "low": 1,
         "mid": 0,
         "high": 0,
         "vis": 24100.0
        },
        {
         "t": "00:00",
         "T": 8.0,
         "Td": 3.8,
         "RH": 75,
         "wind": 4.5,
         "low": 3,
         "mid": 0,
         "high": 0,
         "vis": 20000.0
        },
        {
         "t": "01:00",
         "T": 7.0,
         "Td": 3.6,
         "RH": 79,
         "wind": 3.6,
         "low": 5,
         "mid": 1,
         "high": 0,
         "vis": 18200.0
        },
        {
         "t": "02:00",
         "T": 6.4,
         "Td": 3.4,
         "RH": 81,
         "wind": 3.9,
         "low": 6,
         "mid": 0,
         "high": 0,
         "vis": 17100.0
        },
        {
         "t": "03:00",
         "T": 5.7,
         "Td": 3.2,
         "RH": 84,
         "wind": 3.0,
         "low": 7,
         "mid": 0,
         "high": 0,
         "vis": 16100.0
        },
        {
         "t": "04:00",
         "T": 5.2,
         "Td": 2.9,
         "RH": 85,
         "wind": 2.7,
         "low": 8,
         "mid": 90,
         "high": 0,
         "vis": 15300.0
        },
        {
         "t": "05:00",
         "T": 5.1,
         "Td": 2.8,
         "RH": 85,
         "wind": 2.8,
         "low": 8,
         "mid": 67,
         "high": 0,
         "vis": 15800.0
        },
        {
         "t": "06:00",
         "T": 4.6,
         "Td": 2.2,
         "RH": 84,
         "wind": 4.0,
         "low": 8,
         "mid": 19,
         "high": 0,
         "vis": 15700.0
        },
        {
         "t": "07:00",
         "T": 4.3,
         "Td": 2.4,
         "RH": 87,
         "wind": 4.0,
         "low": 13,
         "mid": 100,
         "high": 1,
         "vis": 14800.0
        },
        {
         "t": "08:00",
         "T": 5.0,
         "Td": 3.5,
         "RH": 90,
         "wind": 3.0,
         "low": 11,
         "mid": 35,
         "high": 0,
         "vis": 13700.0
        },
        {
         "t": "09:00",
         "T": 9.0,
         "Td": 4.8,
         "RH": 75,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 20000.0
        },
        {
         "t": "10:00",
         "T": 13.6,
         "Td": 6.0,
         "RH": 60,
         "wind": 3.2,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 29500.0
        },
        {
         "t": "11:00",
         "T": 16.7,
         "Td": 5.7,
         "RH": 48,
         "wind": 2.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": 39300.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.44,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.9 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 3.4 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.92,
        "why": "overnight mid+high levels cloud = 26 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 12.6 \u00b0C"
       },
       "moisture": {
        "score": 0.3,
        "why": "crossover: forecast night minimum 4.3 \u00b0C vs afternoon dewpoint 1.6 \u00b0C \u2192 +2.7 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 14.8 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.615
     },
     "ncep_nbm_conus": {
      "features": {
       "dpd_min": 1.2000000000000002,
       "dpd_key": 1.2000000000000002,
       "rh_max": 92,
       "wind_mean": 0.0,
       "wind_after": 0.0,
       "gust_max": 1.9,
       "cloud_mh_night": 20.545454545454547,
       "cloud_low_night": null,
       "cloud_mh_sunrise": 7.0,
       "cloud_source": "total cloud (levels unavailable)",
       "vis_sunrise": 16200.0,
       "low_sunrise": null,
       "vis_min": 16200.0,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.3,
       "t_key": 5.5,
       "cooling": 10.8,
       "t_min_night": 5.3,
       "td_afternoon": 2.6500000000000004,
       "crossover": 2.6499999999999995,
       "td_drop": -1.6499999999999995,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": null,
       "model_clear_hour": "08:00",
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.9,
         "Td": 4.5,
         "RH": 65,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "22:00",
         "T": 9.6,
         "Td": 4.8,
         "RH": 72,
         "wind": 0.2,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "23:00",
         "T": 8.6,
         "Td": 4.9,
         "RH": 78,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "00:00",
         "T": 7.6,
         "Td": 4.5,
         "RH": 81,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "01:00",
         "T": 7.0,
         "Td": 4.1,
         "RH": 82,
         "wind": 0.6,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "02:00",
         "T": 6.5,
         "Td": 4.1,
         "RH": 85,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16280.0
        },
        {
         "t": "03:00",
         "T": 5.9,
         "Td": 3.7,
         "RH": 86,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "04:00",
         "T": 5.6,
         "Td": 3.7,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "05:00",
         "T": 5.6,
         "Td": 4.0,
         "RH": 90,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "06:00",
         "T": 5.3,
         "Td": 4.1,
         "RH": 92,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "07:00",
         "T": 5.5,
         "Td": 4.3,
         "RH": 92,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "08:00",
         "T": 6.8,
         "Td": 4.9,
         "RH": 88,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "09:00",
         "T": 10.1,
         "Td": 6.0,
         "RH": 76,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "10:00",
         "T": 13.1,
         "Td": 6.2,
         "RH": 63,
         "wind": 0.0,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        },
        {
         "t": "11:00",
         "T": 15.7,
         "Td": 6.1,
         "RH": 53,
         "wind": 0.8,
         "low": null,
         "mid": null,
         "high": null,
         "vis": 16200.0
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.75,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.2 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.85,
        "why": "mean 10 m wind in the 3 h before sunrise = 0.0 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.99,
        "why": "overnight total cloud (levels unavailable) cloud = 21 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 10.8 \u00b0C"
       },
       "moisture": {
        "score": 0.3,
        "why": "crossover: forecast night minimum 5.3 \u00b0C vs afternoon dewpoint 2.7 \u00b0C \u2192 +2.6 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model's own visibility minimum before sunrise = 16.2 km (0 h \u2264 1 km overnight)"
       }
      },
      "gates": [],
      "raw": 0.689
     },
     "ecmwf_ifs025": {
      "features": {
       "dpd_min": 1.6999999999999997,
       "dpd_key": 2.0,
       "rh_max": 89,
       "wind_mean": 2.6500000000000004,
       "wind_after": 1.9500000000000002,
       "gust_max": 4.7,
       "cloud_mh_night": 61.36363636363637,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 92.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 15.0,
       "t_key": 5.8,
       "cooling": 9.2,
       "t_min_night": 5.1,
       "td_afternoon": 2.0,
       "crossover": 3.0999999999999996,
       "td_drop": -1.7999999999999998,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6999999999999318,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 10.6,
         "Td": 4.8,
         "RH": 67,
         "wind": 2.3,
         "low": 0,
         "mid": 0,
         "high": 31,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 9.7,
         "Td": 4.5,
         "RH": 70,
         "wind": 2.6,
         "low": 0,
         "mid": 0,
         "high": 1,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 8.8,
         "Td": 4.3,
         "RH": 73,
         "wind": 2.5,
         "low": 0,
         "mid": 0,
         "high": 2,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 8.0,
         "Td": 4.0,
         "RH": 76,
         "wind": 2.4,
         "low": 0,
         "mid": 1,
         "high": 18,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 7.2,
         "Td": 3.8,
         "RH": 79,
         "wind": 2.2,
         "low": 0,
         "mid": 11,
         "high": 32,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 6.6,
         "Td": 3.6,
         "RH": 81,
         "wind": 2.4,
         "low": 0,
         "mid": 39,
         "high": 40,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 6.0,
         "Td": 3.4,
         "RH": 83,
         "wind": 2.5,
         "low": 0,
         "mid": 75,
         "high": 47,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 5.7,
         "Td": 3.4,
         "RH": 85,
         "wind": 2.7,
         "low": 0,
         "mid": 100,
         "high": 50,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 5.3,
         "Td": 3.3,
         "RH": 87,
         "wind": 2.7,
         "low": 0,
         "mid": 100,
         "high": 50,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 5.1,
         "Td": 3.4,
         "RH": 89,
         "wind": 2.7,
         "low": 0,
         "mid": 97,
         "high": 46,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 5.8,
         "Td": 3.8,
         "RH": 87,
         "wind": 2.5,
         "low": 0,
         "mid": 83,
         "high": 39,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 8.2,
         "Td": 4.9,
         "RH": 80,
         "wind": 2.1,
         "low": 0,
         "mid": 57,
         "high": 27,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 11.5,
         "Td": 6.0,
         "RH": 69,
         "wind": 1.8,
         "low": 0,
         "mid": 24,
         "high": 11,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 14.4,
         "Td": 6.5,
         "RH": 59,
         "wind": 1.6,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 16.5,
         "Td": 6.4,
         "RH": 51,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.52,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.7 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 1.0,
        "why": "mean 10 m wind in the 3 h before sunrise = 2.7 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.49,
        "why": "overnight mid+high levels cloud = 61 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 9.2 \u00b0C"
       },
       "moisture": {
        "score": 0.24,
        "why": "crossover: forecast night minimum 5.1 \u00b0C vs afternoon dewpoint 2.0 \u00b0C \u2192 +3.1 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 89 %"
       }
      },
      "gates": [],
      "raw": 0.567
     },
     "icon_seamless": {
      "features": {
       "dpd_min": 1.9,
       "dpd_key": 1.9,
       "rh_max": 87,
       "wind_mean": 1.95,
       "wind_after": 2.05,
       "gust_max": 3.5,
       "cloud_mh_night": 21.636363636363637,
       "cloud_low_night": 0.0,
       "cloud_mh_sunrise": 1.0,
       "cloud_source": "mid+high levels",
       "vis_sunrise": null,
       "low_sunrise": 0.0,
       "vis_min": null,
       "vis_fog_hours": 0,
       "hours_saturated": 0,
       "first_sat_hour": null,
       "t_evening": 16.1,
       "t_key": 1.5,
       "cooling": 14.600000000000001,
       "t_min_night": 1.5,
       "td_afternoon": 2.8,
       "crossover": -1.2999999999999998,
       "td_drop": 3.1999999999999997,
       "airmass_change": false,
       "precip_night_mm": 0,
       "precip_dawn_mm": 0,
       "pressure_trend": 0.6000000000000227,
       "model_clear_hour": null,
       "dawn_rows": [
        {
         "t": "21:00",
         "T": 8.7,
         "Td": 3.5,
         "RH": 70,
         "wind": 1.9,
         "low": 0,
         "mid": 0,
         "high": 64,
         "vis": null
        },
        {
         "t": "22:00",
         "T": 7.5,
         "Td": 2.9,
         "RH": 73,
         "wind": 1.7,
         "low": 0,
         "mid": 0,
         "high": 46,
         "vis": null
        },
        {
         "t": "23:00",
         "T": 6.6,
         "Td": 2.3,
         "RH": 74,
         "wind": 1.3,
         "low": 0,
         "mid": 0,
         "high": 66,
         "vis": null
        },
        {
         "t": "00:00",
         "T": 6.2,
         "Td": 1.9,
         "RH": 74,
         "wind": 0.6,
         "low": 0,
         "mid": 0,
         "high": 17,
         "vis": null
        },
        {
         "t": "01:00",
         "T": 5.4,
         "Td": 1.5,
         "RH": 76,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "02:00",
         "T": 4.1,
         "Td": 1.3,
         "RH": 82,
         "wind": 2.2,
         "low": 0,
         "mid": 0,
         "high": 18,
         "vis": null
        },
        {
         "t": "03:00",
         "T": 3.5,
         "Td": 1.1,
         "RH": 84,
         "wind": 2.4,
         "low": 0,
         "mid": 0,
         "high": 8,
         "vis": null
        },
        {
         "t": "04:00",
         "T": 2.9,
         "Td": 0.6,
         "RH": 85,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "05:00",
         "T": 2.5,
         "Td": 0.2,
         "RH": 85,
         "wind": 1.8,
         "low": 0,
         "mid": 0,
         "high": 5,
         "vis": null
        },
        {
         "t": "06:00",
         "T": 2.0,
         "Td": -0.1,
         "RH": 86,
         "wind": 2.0,
         "low": 0,
         "mid": 4,
         "high": 8,
         "vis": null
        },
        {
         "t": "07:00",
         "T": 1.5,
         "Td": -0.4,
         "RH": 87,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 2,
         "vis": null
        },
        {
         "t": "08:00",
         "T": 2.5,
         "Td": 0.5,
         "RH": 87,
         "wind": 2.0,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "09:00",
         "T": 7.8,
         "Td": 3.1,
         "RH": 72,
         "wind": 2.1,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "10:00",
         "T": 13.4,
         "Td": 3.8,
         "RH": 52,
         "wind": 2.9,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        },
        {
         "t": "11:00",
         "T": 17.2,
         "Td": 4.5,
         "RH": 43,
         "wind": 2.9,
         "low": 0,
         "mid": 0,
         "high": 0,
         "vis": null
        }
       ]
      },
      "factors": {
       "dewpoint_depression": {
        "score": 0.44,
        "why": "min T\u2212Td in the 3 h before sunrise = 1.9 \u00b0C (\u22641 \u00b0C strongly favours fog, >3 \u00b0C rarely fogs)"
       },
       "wind": {
        "score": 0.99,
        "why": "mean 10 m wind in the 3 h before sunrise = 1.9 kt (2\u20135 kt ideal; calm gives only shallow fog; >8 kt mixes it out)"
       },
       "sky": {
        "score": 0.98,
        "why": "overnight mid+high levels cloud = 22 % (clear sky lets the ground radiate and cool)"
       },
       "cooling": {
        "score": 1.0,
        "why": "temperature fall 18:00 \u2192 sunrise = 14.6 \u00b0C"
       },
       "moisture": {
        "score": 1.0,
        "why": "crossover: forecast night minimum 1.5 \u00b0C vs afternoon dewpoint 2.8 \u00b0C \u2192 -1.3 \u00b0C; rain last 48 h = 0.0 mm"
       },
       "model_signal": {
        "score": 0.1,
        "why": "model has no visibility field; max RH before sunrise = 87 %"
       }
      },
      "gates": [],
      "raw": 0.693
     }
    },
    "primary_model": "gfs_hrrr",
    "primary_label": "HRRR"
   },
   "precip": {
    "mm_48h": 0.0,
    "soil_moisture_top": 0.047,
    "url": "https://api.open-meteo.com/v1/forecast?latitude=40.994&longitude=-87.599&hourly=precipitation%2Csoil_moisture_0_to_1cm%2Csoil_moisture_1_to_3cm&models=icon_seamless&timezone=GMT&past_days=3&forecast_days=1",
    "source": "Open-Meteo ICON assimilated past days (model analysis, not a gauge)"
   },
   "sources": {
    "gfs_hrrr": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=40.994&longitude=-87.599&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:45+00:00",
     "elevation_m": 197.0
    },
    "ncep_nbm_conus": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=40.994&longitude=-87.599&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:54+00:00",
     "elevation_m": 197.0
    },
    "ecmwf_ifs025": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=40.994&longitude=-87.599&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:54+00:00",
     "elevation_m": 197.0
    },
    "icon_seamless": {
     "url": "https://api.open-meteo.com/v1/forecast?latitude=40.994&longitude=-87.599&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-20T16%3A00",
     "fetched_utc": "2026-10-20T02:34:54+00:00",
     "elevation_m": 197.0
    }
   },
   "water_temp_c": null,
   "dawn_temp_c": 4.3,
   "dawn_wind_kt": 4.0
  }
 ],
 "log": [],
 "calibration": {
  "a": 5.511394479940868,
  "b": -5.384646836851622,
  "n": 329,
  "events": 34,
  "period": "2026-08-21..2026-10-15 at GYY, IKK, JOT, LOT, PNT, RZL",
  "fitted_utc": "2026-10-16T04:17:08+00:00"
 },
 "models": [
  "gfs_hrrr",
  "ncep_nbm_conus",
  "ecmwf_ifs025",
  "icon_seamless"
 ],
 "version": "0.2.0",
 "afd": {
  "url": "https://api.weather.gov/products/022371e7-b621-451f-8d1f-6327372ed430",
  "issued": "2026-10-19T23:15:00+00:00",
  "fog_paragraphs": [
   "- Shallow fog may develop in northeastern Illinois early Tuesday morning. Any fog would dissipate a few hours after sunrise.",
   "The only item of note is a threat for shallow fog overnight into tomorrow morning near Lake Michigan where a modestly more moist environment will advect inland. Otherwise, no significant weather is expected the next 7 days with above to much above average temperatures each day. Generally light winds should allow weak lake breezes to form each of the next several afternoons, but probably only result in slightly cooler conditions right near the lake. Other than a bit of mid-high level cloudiness this afternoon, much of the week looks to be mostly sunny.",
   "Light and variable winds (at times prevailing out of the east) will prevail through the TAF period. Shallow ground fog may develop in the vicinity of ORD/MDW early tomorrow morning (08-13Z timeframe). We have maintained the targeted TEMPO group for 1 1/2SM BR introduced in the 18z tafs. Otherwise, there are no aviation concerns through the TAF period."
  ]
 },
 "metar": {
  "url": "https://aviationweather.gov/api/data/metar?ids=KIKK%2CKJOT%2CKC75%2CKLOT%2CKGYY&format=json",
  "obs": [
   {
    "id": "KC75",
    "time": "2026-10-20T02:15:00.000Z",
    "temp_c": 8.2,
    "dewp_c": 5.5,
    "wind_kt": 0,
    "wind_dir": 0,
    "vis_mi": "10+",
    "clouds": [],
    "wx": null,
    "raw": "METAR KC75 200215Z AUTO 00000KT 10SM CLR 08/06 A3035 RMK AO2 T00820055"
   },
   {
    "id": "KGYY",
    "time": "2026-10-20T01:00:00.000Z",
    "temp_c": 11,
    "dewp_c": 11,
    "wind_kt": 0,
    "wind_dir": 0,
    "vis_mi": "10+",
    "clouds": [],
    "wx": null,
    "raw": "METAR KGYY 200050Z 00000KT 10SM CLR 11/11 A3035"
   },
   {
    "id": "KIKK",
    "time": "2026-10-20T02:15:00.000Z",
    "temp_c": 7.5,
    "dewp_c": 5,
    "wind_kt": 0,
    "wind_dir": 0,
    "vis_mi": 5,
    "clouds": [],
    "wx": "HZ",
    "raw": "METAR KIKK 200215Z AUTO 00000KT 5SM HZ CLR 08/05 A3037 RMK AO2 T00750050"
   },
   {
    "id": "KJOT",
    "time": "2026-10-20T02:15:00.000Z",
    "temp_c": 7.7,
    "dewp_c": 7.1,
    "wind_kt": 0,
    "wind_dir": 0,
    "vis_mi": "10+",
    "clouds": [],
    "wx": null,
    "raw": "METAR KJOT 200215Z AUTO 00000KT 10SM CLR 08/07 A3036 RMK AO2 T00770071"
   },
   {
    "id": "KLOT",
    "time": "2026-10-20T02:15:00.000Z",
    "temp_c": 11,
    "dewp_c": 7,
    "wind_kt": 4,
    "wind_dir": 90,
    "vis_mi": "10+",
    "clouds": [],
    "wx": null,
    "raw": "METAR KLOT 200215Z AUTO 09004KT 10SM CLR 11/07 A3037 RMK AO2"
   }
  ]
 },
 "gauges": {
  "url": "https://waterservices.usgs.gov/nwis/iv/?sites=05520500%2C05526000%2C05527500&parameterCd=00065%2C00010&format=json&period=P1D",
  "gauges": {
   "05520500": {
    "name": "KANKAKEE RIVER AT MOMENCE, IL",
    "stage_ft": 2.02,
    "stage_ft_time": "2026-10-19T19:45:00.000-06:00"
   },
   "05526000": {
    "name": "IROQUOIS RIVER NEAR CHEBANSE, IL",
    "stage_ft": 2.87,
    "stage_ft_time": "2026-10-19T19:45:00.000-06:00"
   },
   "05527500": {
    "name": "KANKAKEE RIVER NEAR WILMINGTON, IL",
    "water_temp_c": 14.8,
    "water_temp_c_time": "2026-10-19T19:45:00.000-06:00",
    "stage_ft": 1.5,
    "stage_ft_time": "2026-10-19T19:45:00.000-06:00"
   }
  }
 },
 "nbm_text": {
  "url": "https://nomads.ncep.noaa.gov/pub/data/nccf/com/blend/prod/blend.20261020/01/text/blend_nbhtx.t01z",
  "cycle_utc": "2026-10-20T01:00:00+00:00",
  "station": "KIKK",
  "rows": [
   {
    "local": "2026-10-19 21:00",
    "TMP": 52,
    "DPT": 38,
    "WSP": 0,
    "SKY": 22,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 0,
    "CIG": -88
   },
   {
    "local": "2026-10-19 22:00",
    "TMP": 49,
    "DPT": 38,
    "WSP": 0,
    "SKY": 22,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 0,
    "CIG": -88
   },
   {
    "local": "2026-10-19 23:00",
    "TMP": 47,
    "DPT": 38,
    "WSP": 0,
    "SKY": 7,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 1,
    "CIG": -88
   },
   {
    "local": "2026-10-20 00:00",
    "TMP": 46,
    "DPT": 37,
    "WSP": 0,
    "SKY": 4,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 1,
    "MVV": 2,
    "CIG": -88
   },
   {
    "local": "2026-10-20 01:00",
    "TMP": 45,
    "DPT": 38,
    "WSP": 0,
    "SKY": 5,
    "VIS": 10.0,
    "LIV": 1,
    "IFV": 2,
    "MVV": 5,
    "CIG": -88
   },
   {
    "local": "2026-10-20 02:00",
    "TMP": 44,
    "DPT": 37,
    "WSP": 0,
    "SKY": 15,
    "VIS": 10.0,
    "LIV": 2,
    "IFV": 3,
    "MVV": 6,
    "CIG": -88
   },
   {
    "local": "2026-10-20 03:00",
    "TMP": 43,
    "DPT": 36,
    "WSP": 0,
    "SKY": 35,
    "VIS": 10.0,
    "LIV": 3,
    "IFV": 4,
    "MVV": 8,
    "CIG": -88
   },
   {
    "local": "2026-10-20 04:00",
    "TMP": 42,
    "DPT": 36,
    "WSP": 0,
    "SKY": 38,
    "VIS": 10.0,
    "LIV": 3,
    "IFV": 5,
    "MVV": 9,
    "CIG": -88
   },
   {
    "local": "2026-10-20 05:00",
    "TMP": 41,
    "DPT": 37,
    "WSP": 0,
    "SKY": 28,
    "VIS": 10.0,
    "LIV": 4,
    "IFV": 6,
    "MVV": 10,
    "CIG": -88
   },
   {
    "local": "2026-10-20 06:00",
    "TMP": 41,
    "DPT": 37,
    "WSP": 0,
    "SKY": 17,
    "VIS": 10.0,
    "LIV": 4,
    "IFV": 7,
    "MVV": 12,
    "CIG": -88
   },
   {
    "local": "2026-10-20 07:00",
    "TMP": 40,
    "DPT": 37,
    "WSP": 0,
    "SKY": 4,
    "VIS": 10.0,
    "LIV": 5,
    "IFV": 8,
    "MVV": 13,
    "CIG": -88
   },
   {
    "local": "2026-10-20 08:00",
    "TMP": 43,
    "DPT": 39,
    "WSP": 0,
    "SKY": 1,
    "VIS": 10.0,
    "LIV": 5,
    "IFV": 8,
    "MVV": 14,
    "CIG": -88
   },
   {
    "local": "2026-10-20 09:00",
    "TMP": 50,
    "DPT": 40,
    "WSP": 0,
    "SKY": 1,
    "VIS": 10.0,
    "LIV": 3,
    "IFV": 5,
    "MVV": 9,
    "CIG": -88
   },
   {
    "local": "2026-10-20 10:00",
    "TMP": 56,
    "DPT": 39,
    "WSP": 0,
    "SKY": 1,
    "VIS": 10.0,
    "LIV": 2,
    "IFV": 3,
    "MVV": 6,
    "CIG": -88
   },
   {
    "local": "2026-10-20 11:00",
    "TMP": 60,
    "DPT": 39,
    "WSP": 0,
    "SKY": 0,
    "VIS": 10.0,
    "LIV": 1,
    "IFV": 2,
    "MVV": 3,
    "CIG": -88
   },
   {
    "local": "2026-10-20 12:00",
    "TMP": 64,
    "DPT": 37,
    "WSP": 0,
    "SKY": 0,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 0,
    "CIG": -88
   },
   {
    "local": "2026-10-20 13:00",
    "TMP": 67,
    "DPT": 36,
    "WSP": 0,
    "SKY": 1,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 0,
    "CIG": -88
   },
   {
    "local": "2026-10-20 14:00",
    "TMP": 69,
    "DPT": 36,
    "WSP": 0,
    "SKY": 0,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 0,
    "CIG": -88
   },
   {
    "local": "2026-10-20 15:00",
    "TMP": 70,
    "DPT": 35,
    "WSP": 0,
    "SKY": 0,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 0,
    "CIG": -88
   },
   {
    "local": "2026-10-20 16:00",
    "TMP": 70,
    "DPT": 35,
    "WSP": 0,
    "SKY": 1,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 0,
    "CIG": -88
   },
   {
    "local": "2026-10-20 17:00",
    "TMP": 68,
    "DPT": 36,
    "WSP": 0,
    "SKY": 0,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 0,
    "CIG": -88
   },
   {
    "local": "2026-10-20 18:00",
    "TMP": 63,
    "DPT": 36,
    "WSP": 0,
    "SKY": 0,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 0,
    "CIG": -88
   },
   {
    "local": "2026-10-20 19:00",
    "TMP": 58,
    "DPT": 40,
    "WSP": 2,
    "SKY": 2,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 1,
    "CIG": -88
   },
   {
    "local": "2026-10-20 20:00",
    "TMP": 55,
    "DPT": 41,
    "WSP": 0,
    "SKY": 3,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 2,
    "CIG": -88
   },
   {
    "local": "2026-10-20 21:00",
    "TMP": 53,
    "DPT": 41,
    "WSP": 0,
    "SKY": 2,
    "VIS": 10.0,
    "LIV": 0,
    "IFV": 0,
    "MVV": 3,
    "CIG": -88
   }
  ]
 },
 "profile": {
  "url": "https://www.meteo.psu.edu/bufkit/data/HRRR/18/hrrr_kikk.buf",
  "cycle": "18",
  "init_local": "2026-10-19 13:00",
  "dawn_hours": [
   {
    "saturated_depth_m": 0.0,
    "inversion_dT_c": 6.5,
    "lowest_levels": [
     [
      8.2,
      7.54,
      3.57
     ],
     [
      33.0,
      10.74,
      2.61
     ],
     [
      79.1,
      14.04,
      0.66
     ],
     [
      159.3,
      15.84,
      0.0
     ],
     [
      279.5,
      15.64,
      -0.55
     ]
    ],
    "valid_local": "03:00"
   },
   {
    "saturated_depth_m": 0.0,
    "inversion_dT_c": 6.3,
    "lowest_levels": [
     [
      8.2,
      7.34,
      3.62
     ],
     [
      33.0,
      11.34,
      2.3
     ],
     [
      79.2,
      13.64,
      1.49
     ],
     [
      159.2,
      15.04,
      0.11
     ],
     [
      279.2,
      15.34,
      -0.52
     ]
    ],
    "valid_local": "04:00"
   },
   {
    "saturated_depth_m": 0.0,
    "inversion_dT_c": 7.5,
    "lowest_levels": [
     [
      9.0,
      7.04,
      3.53
     ],
     [
      33.0,
      11.44,
      2.42
     ],
     [
      79.2,
      14.54,
      1.58
     ],
     [
      159.4,
      15.04,
      0.99
     ],
     [
      280.3,
      15.24,
      -0.45
     ]
    ],
    "valid_local": "05:00"
   },
   {
    "saturated_depth_m": 0.0,
    "inversion_dT_c": 7.6,
    "lowest_levels": [
     [
      9.0,
      6.54,
      3.56
     ],
     [
      32.9,
      10.74,
      2.27
     ],
     [
      79.0,
      14.14,
      1.33
     ],
     [
      159.1,
      15.24,
      1.16
     ],
     [
      279.2,
      15.14,
      0.16
     ]
    ],
    "valid_local": "06:00"
   },
   {
    "saturated_depth_m": 0.0,
    "inversion_dT_c": 7.5,
    "lowest_levels": [
     [
      8.1,
      5.54,
      3.49
     ],
     [
      32.7,
      8.74,
      2.89
     ],
     [
      78.6,
      13.04,
      1.34
     ],
     [
      158.4,
      14.94,
      0.95
     ],
     [
      279.1,
      15.04,
      0.55
     ]
    ],
    "valid_local": "07:00"
   },
   {
    "saturated_depth_m": 0.0,
    "inversion_dT_c": 7.3,
    "lowest_levels": [
     [
      8.1,
      5.34,
      3.39
     ],
     [
      32.7,
      8.14,
      3.08
     ],
     [
      78.4,
      12.64,
      1.32
     ],
     [
      158.1,
      14.74,
      0.96
     ],
     [
      278.6,
      14.64,
      1.22
     ]
    ],
    "valid_local": "08:00"
   },
   {
    "saturated_depth_m": 0.0,
    "inversion_dT_c": 3.0,
    "lowest_levels": [
     [
      9.0,
      8.44,
      4.04
     ],
     [
      33.7,
      8.04,
      3.66
     ],
     [
      78.5,
      11.44,
      1.67
     ],
     [
      158.9,
      14.34,
      0.95
     ],
     [
      278.4,
      14.44,
      1.79
     ]
    ],
    "valid_local": "09:00"
   }
  ],
  "station": "KIKK"
 },
 "obs_context": {
  "available": true,
  "metar": {
   "id": "KIKK",
   "time": "2026-10-20T02:15:00.000Z",
   "temp_c": 7.5,
   "dewp_c": 5,
   "wind_kt": 0,
   "wind_dir": 0,
   "vis_mi": 5,
   "clouds": [],
   "wx": "HZ",
   "raw": "METAR KIKK 200215Z AUTO 00000KT 5SM HZ CLR 08/05 A3037 RMK AO2 T00750050"
  },
  "station": "KIKK",
  "hrrr_now": {
   "T": 11.2,
   "Td": 3.9,
   "wind": 2.2,
   "low": 0
  },
  "dpd_obs": 2.5,
  "dpd_model": 7.3
 },
 "outlook": {
  "rows": [
   {
    "day": 1,
    "date": "2026-10-20",
    "weekday": "Tue 20 Oct",
    "setup_score": 0.564,
    "band": "marginal",
    "spread": 0.538,
    "models": [
     "ecmwf_ifs025",
     "gfs_global",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "primary": "HRRR",
    "type": "shallow ground fog",
    "light": "filtered sun",
    "sunrise": "07:09",
    "azimuth": 103.2,
    "compass": "ESE",
    "drivers": {
     "dpd_min": 1.5999999999999996,
     "wind_mean": 3.575,
     "cloud_mh_night": 18.454545454545453,
     "hours_saturated": 0
    },
    "confidence": "see the main report (calibrated, HRRR included)",
    "per_model": {
     "gfs_hrrr": 0.643,
     "ecmwf_ifs025": 0.548,
     "gfs_global": 0.124,
     "icon_seamless": 0.652,
     "ncep_nbm_conus": 0.662
    },
    "civil_dawn": "06:40",
    "sun_2deg": "07:23",
    "sun_12deg": "08:21",
    "burnoff": {
     "est_start": "07:39",
     "est_end": "08:24",
     "model_clear": null,
     "notes": [],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "depth_est": "0\u20133 m, if any (estimate)",
    "type_why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.6 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
    "light_why": "mid+high cloud at sunrise \u2248 39 % \u2014 beams possible through gaps",
    "agreement": "low",
    "agreement_why": "models disagree (spread 0.54); treat the number as a coin-flip and check the 04:45 refresh",
    "dawn_temp_c": 5.1,
    "dawn_wind_kt": 3.7
   },
   {
    "day": 2,
    "date": "2026-10-21",
    "weekday": "Wed 21 Oct",
    "setup_score": 0.62,
    "band": "decent set-up",
    "spread": 0.665,
    "models": [
     "ecmwf_ifs025",
     "gfs_global",
     "gfs_hrrr",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "primary": "HRRR",
    "type": "shallow ground fog",
    "light": "sun will reach the fog top",
    "sunrise": "07:10",
    "azimuth": 103.7,
    "compass": "ESE",
    "drivers": {
     "dpd_min": 2.3999999999999995,
     "wind_mean": 4.125,
     "cloud_mh_night": 0.0,
     "hours_saturated": 0
    },
    "confidence": "HRRR reaches this morning; models usually agree on the airmass; backtest AUC at this lead 0.726 (measured at 2 days)",
    "per_model": {
     "gfs_hrrr": 0.576,
     "ecmwf_ifs025": 0.752,
     "gfs_global": 0.135,
     "icon_seamless": 0.8,
     "ncep_nbm_conus": 0.769
    },
    "civil_dawn": "06:41",
    "sun_2deg": "07:24",
    "sun_12deg": "08:22",
    "burnoff": {
     "est_start": "07:40",
     "est_end": "08:25",
     "model_clear": null,
     "notes": [],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "depth_est": "0\u20133 m, if any (estimate)",
    "type_why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 2.4 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
    "light_why": "mid+high cloud at sunrise \u2248 0 %",
    "agreement": "low",
    "agreement_why": "models disagree (spread 0.67); treat the number as a coin-flip and check the 04:45 refresh",
    "dawn_temp_c": 4.6,
    "dawn_wind_kt": 3.9
   },
   {
    "day": 3,
    "date": "2026-10-22",
    "weekday": "Thu 22 Oct",
    "setup_score": 0.622,
    "band": "decent set-up",
    "spread": 0.658,
    "models": [
     "ecmwf_ifs025",
     "gfs_global",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "primary": "ECMWF",
    "type": "shallow ground fog",
    "light": "sun will reach the fog top",
    "sunrise": "07:11",
    "azimuth": 104.2,
    "compass": "ESE",
    "drivers": {
     "dpd_min": 1.0000000000000009,
     "wind_mean": 2.9,
     "cloud_mh_night": 0.0,
     "hours_saturated": 0
    },
    "confidence": "set-up only: dewpoint, wind and sky from the global models; backtest AUC at this lead 0.738 (measured at 3 days)",
    "per_model": {
     "gfs_hrrr": null,
     "ecmwf_ifs025": 0.78,
     "gfs_global": 0.125,
     "icon_seamless": 0.783,
     "ncep_nbm_conus": 0.697
    },
    "civil_dawn": "06:42",
    "sun_2deg": "07:25",
    "sun_12deg": "08:24",
    "burnoff": {
     "est_start": "07:41",
     "est_end": "08:26",
     "model_clear": "08:00",
     "notes": [],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "depth_est": "0\u20133 m, if any (estimate)",
    "type_why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.0 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
    "light_why": "mid+high cloud at sunrise \u2248 0 %",
    "agreement": "low",
    "agreement_why": "models disagree (spread 0.66); treat the number as a coin-flip and check the 04:45 refresh",
    "dawn_temp_c": 8.3,
    "dawn_wind_kt": 3.0
   },
   {
    "day": 4,
    "date": "2026-10-23",
    "weekday": "Fri 23 Oct",
    "setup_score": 0.701,
    "band": "decent set-up",
    "spread": 0.734,
    "models": [
     "ecmwf_ifs025",
     "gfs_global",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "primary": "ECMWF",
    "type": "deep fog bank",
    "light": "sun will reach the fog top",
    "sunrise": "07:12",
    "azimuth": 104.7,
    "compass": "ESE",
    "drivers": {
     "dpd_min": 0.2999999999999998,
     "wind_mean": 4.7,
     "cloud_mh_night": 0.0,
     "hours_saturated": 10
    },
    "confidence": "set-up only: dewpoint, wind and sky from the global models; backtest AUC at this lead 0.738 (measured at 3 days)",
    "per_model": {
     "gfs_hrrr": null,
     "ecmwf_ifs025": 0.823,
     "gfs_global": 0.136,
     "icon_seamless": 0.823,
     "ncep_nbm_conus": 0.87
    },
    "civil_dawn": "06:43",
    "sun_2deg": "07:26",
    "sun_12deg": "08:25",
    "burnoff": {
     "est_start": "09:12",
     "est_end": "10:42",
     "model_clear": "09:00",
     "notes": [],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "depth_est": "20\u201380 m (estimate)",
    "type_why": "saturated for 10 h before sunrise with 4.7 kt of wind to stir the layer upward \u2014 enough time and mixing to bury tree lines; only the tallest crowns will poke out",
    "light_why": "mid+high cloud at sunrise \u2248 0 %",
    "agreement": "low",
    "agreement_why": "models disagree (spread 0.73); treat the number as a coin-flip and check the 04:45 refresh",
    "dawn_temp_c": 7.1,
    "dawn_wind_kt": 5.2
   },
   {
    "day": 5,
    "date": "2026-10-24",
    "weekday": "Sat 24 Oct",
    "setup_score": 0.572,
    "band": "marginal",
    "spread": 0.602,
    "models": [
     "ecmwf_ifs025",
     "gfs_global",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "primary": "ECMWF",
    "type": "shallow ground fog",
    "light": "overcast above the fog",
    "sunrise": "07:13",
    "azimuth": 105.1,
    "compass": "ESE",
    "drivers": {
     "dpd_min": 1.3000000000000007,
     "wind_mean": 5.4,
     "cloud_mh_night": 60.18181818181818,
     "hours_saturated": 0
    },
    "confidence": "pattern only; expect the number to move; backtest AUC at this lead 0.627 (measured at 5 days)",
    "per_model": {
     "gfs_hrrr": null,
     "ecmwf_ifs025": 0.691,
     "gfs_global": 0.117,
     "icon_seamless": 0.719,
     "ncep_nbm_conus": 0.662
    },
    "civil_dawn": "06:44",
    "sun_2deg": "07:27",
    "sun_12deg": "08:26",
    "burnoff": {
     "est_start": "08:13",
     "est_end": "09:13",
     "model_clear": "08:00",
     "notes": [
      "cloud above the fog weakens the sun; add ~30\u201345 min"
     ],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "depth_est": "0\u20133 m, if any (estimate)",
    "type_why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 1.3 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
    "light_why": "mid+high cloud at sunrise \u2248 100 % \u2014 flat grey, no beams",
    "agreement": "low",
    "agreement_why": "models disagree (spread 0.60); treat the number as a coin-flip and check the 04:45 refresh",
    "dawn_temp_c": 6.4,
    "dawn_wind_kt": 5.2
   },
   {
    "day": 6,
    "date": "2026-10-25",
    "weekday": "Sun 25 Oct",
    "setup_score": 0.213,
    "band": "poor",
    "spread": 0.56,
    "models": [
     "ecmwf_ifs025",
     "gfs_global",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "primary": "ECMWF",
    "type": "shallow ground fog",
    "light": "overcast above the fog",
    "sunrise": "07:14",
    "azimuth": 105.6,
    "compass": "ESE",
    "drivers": {
     "dpd_min": 4.5,
     "wind_mean": 4.65,
     "cloud_mh_night": 86.0,
     "hours_saturated": 0
    },
    "confidence": "pattern only; expect the number to move; backtest AUC at this lead 0.627 (measured at 5 days)",
    "per_model": {
     "gfs_hrrr": null,
     "ecmwf_ifs025": 0.111,
     "gfs_global": 0.069,
     "icon_seamless": 0.629,
     "ncep_nbm_conus": 0.13
    },
    "civil_dawn": "06:45",
    "sun_2deg": "07:28",
    "sun_12deg": "08:27",
    "burnoff": {
     "est_start": "08:14",
     "est_end": "09:14",
     "model_clear": null,
     "notes": [
      "cloud above the fog weakens the sun; add ~30\u201345 min"
     ],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "depth_est": "0\u20133 m, if any (estimate)",
    "type_why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 4.5 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
    "light_why": "mid+high cloud at sunrise \u2248 100 % \u2014 flat grey, no beams",
    "agreement": "low",
    "agreement_why": "models disagree (spread 0.56); treat the number as a coin-flip and check the 04:45 refresh",
    "dawn_temp_c": 7.3,
    "dawn_wind_kt": 4.5
   },
   {
    "day": 7,
    "date": "2026-10-26",
    "weekday": "Mon 26 Oct",
    "setup_score": 0.275,
    "band": "poor",
    "spread": 0.359,
    "models": [
     "ecmwf_ifs025",
     "gfs_global",
     "icon_seamless",
     "ncep_nbm_conus"
    ],
    "primary": "ECMWF",
    "type": "shallow ground fog",
    "light": "overcast above the fog",
    "sunrise": "07:15",
    "azimuth": 106.0,
    "compass": "ESE",
    "drivers": {
     "dpd_min": 3.1000000000000014,
     "wind_mean": 5.575,
     "cloud_mh_night": 100.0,
     "hours_saturated": 0
    },
    "confidence": "pattern only; expect the number to move; backtest AUC at this lead 0.627 (measured at 5 days)",
    "per_model": {
     "gfs_hrrr": null,
     "ecmwf_ifs025": 0.312,
     "gfs_global": 0.087,
     "icon_seamless": 0.127,
     "ncep_nbm_conus": 0.446
    },
    "civil_dawn": "06:47",
    "sun_2deg": "07:29",
    "sun_12deg": "08:29",
    "burnoff": {
     "est_start": "08:15",
     "est_end": "09:15",
     "model_clear": null,
     "notes": [
      "cloud above the fog weakens the sun; add ~30\u201345 min"
     ],
     "basis": "rule-of-thumb window by fog depth (estimate), plus the HRRR hour where its own visibility and dewpoint spread recover (model output)"
    },
    "depth_est": "0\u20133 m, if any (estimate)",
    "type_why": "the primary model never brings T\u2212Td under 1 \u00b0C (minimum 3.1 \u00b0C); anything that forms will be thin patches over water and the wettest low ground",
    "light_why": "mid+high cloud at sunrise \u2248 100 % \u2014 flat grey, no beams",
    "agreement": "low",
    "agreement_why": "models disagree (spread 0.36); treat the number as a coin-flip and check the 04:45 refresh",
    "dawn_temp_c": 12.3,
    "dawn_wind_kt": 5.4
   }
  ],
  "best_days": [
   "2026-10-23",
   "2026-10-22",
   "2026-10-21"
  ],
  "sources": {
   "gfs_hrrr": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_hrrr&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-26T16%3A00",
   "ecmwf_ifs025": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ecmwf_ifs025&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-26T16%3A00",
   "gfs_global": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=gfs_global&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-26T16%3A00",
   "icon_seamless": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=icon_seamless&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-26T16%3A00",
   "ncep_nbm_conus": "https://api.open-meteo.com/v1/forecast?latitude=41.153&longitude=-87.879&hourly=temperature_2m%2Cdew_point_2m%2Crelative_humidity_2m%2Cwind_speed_10m%2Cwind_gusts_10m%2Cwind_direction_10m%2Ccloud_cover%2Ccloud_cover_low%2Ccloud_cover_mid%2Ccloud_cover_high%2Cvisibility%2Cprecipitation%2Csurface_pressure%2Cboundary_layer_height%2Csoil_moisture_0_to_1cm%2Cshortwave_radiation&models=ncep_nbm_conus&timezone=GMT&wind_speed_unit=kn&start_hour=2026-10-19T20%3A00&end_hour=2026-10-26T16%3A00"
  },
  "band_rates": [
   {
    "band": "strong set-up",
    "lo": 0.75,
    "n": 44,
    "fog_rate": 0.25
   },
   {
    "band": "decent set-up",
    "lo": 0.6,
    "n": 82,
    "fog_rate": 0.17
   },
   {
    "band": "marginal",
    "lo": 0.45,
    "n": 154,
    "fog_rate": 0.12
   },
   {
    "band": "poor",
    "lo": 0.0,
    "n": 285,
    "fog_rate": 0.08
   }
  ],
  "lead_skill": {
   "1": 0.746,
   "2": 0.726,
   "3": 0.738,
   "5": 0.627
  },
  "note": "Set-up score = the same factor blend the day-1 report uses, before calibration. It ranks mornings; it is not a probability. Day 1 is calibrated in the main report."
 },
 "lake": null,
 "history": [
  {
   "morning": "2026-10-16",
   "run_time": "2026-10-15T23:47-05:00",
   "kind": "evening",
   "fog_probability": 0.01,
   "grade": "F",
   "type": "shallow ground fog",
   "confidence": "high",
   "observed_min_vis_mi": 10.0,
   "observed_fog": false,
   "cams": [
    "2026-10-16-GOES19-umv-geocolor.jpg",
    "2026-10-16-IL-IDOTD4-3011-N.jpg",
    "2026-10-16-IL-IDOTD4-3033-N.jpg",
    "2026-10-16-IL-IDOTD4-3077-E.jpg"
   ],
   "field_report": {
    "kind": "none",
    "site": "home",
    "note": "",
    "server_time_utc": "2026-10-16T14:18:15+00:00"
   },
   "verification_source": "IEM ASOS IKK 04:00\u201309:00 local"
  },
  {
   "morning": "2026-10-16",
   "run_time": "2026-10-16T11:09-05:00",
   "kind": "predawn",
   "fog_probability": 0.01,
   "raw_blend": 0.046,
   "grade": "F",
   "type": "shallow ground fog",
   "confidence": "high",
   "observed_min_vis_mi": 10.0,
   "observed_fog": false,
   "field_report": {
    "kind": "none",
    "site": "home",
    "note": "",
    "server_time_utc": "2026-10-16T14:18:15+00:00"
   },
   "cams": [
    "2026-10-16-GOES19-umv-geocolor.jpg",
    "2026-10-16-IL-IDOTD4-3011-N.jpg",
    "2026-10-16-IL-IDOTD4-3033-N.jpg",
    "2026-10-16-IL-IDOTD4-3077-E.jpg"
   ],
   "verification_source": "IEM ASOS IKK 04:00\u201309:00 local"
  },
  {
   "morning": "2026-10-17",
   "run_time": "2026-10-16T21:30-05:00",
   "kind": "evening",
   "fog_probability": 0.03,
   "raw_blend": 0.354,
   "grade": "F",
   "type": "shallow ground fog",
   "confidence": "low",
   "observed_min_vis_mi": 10.0,
   "observed_fog": false,
   "cams": [
    "2026-10-17-GOES19-umv-geocolor.jpg",
    "2026-10-17-IL-IDOTD4-3011-N.jpg",
    "2026-10-17-IL-IDOTD4-3033-N.jpg",
    "2026-10-17-IL-IDOTD4-3077-E.jpg"
   ],
   "verification_source": "IEM ASOS IKK 04:00\u201309:00 local"
  },
  {
   "morning": "2026-10-17",
   "run_time": "2026-10-17T04:45-05:00",
   "kind": "predawn",
   "fog_probability": 0.06,
   "raw_blend": 0.476,
   "grade": "F",
   "type": "shallow ground fog",
   "confidence": "medium",
   "observed_min_vis_mi": 10.0,
   "observed_fog": false,
   "cams": [
    "2026-10-17-GOES19-umv-geocolor.jpg",
    "2026-10-17-IL-IDOTD4-3011-N.jpg",
    "2026-10-17-IL-IDOTD4-3033-N.jpg",
    "2026-10-17-IL-IDOTD4-3077-E.jpg"
   ],
   "verification_source": "IEM ASOS IKK 04:00\u201309:00 local"
  },
  {
   "morning": "2026-10-18",
   "run_time": "2026-10-17T21:30-05:00",
   "kind": "evening",
   "fog_probability": 0.03,
   "raw_blend": 0.354,
   "grade": "F",
   "type": "shallow ground fog",
   "confidence": "low",
   "observed_min_vis_mi": 10.0,
   "observed_fog": false,
   "cams": [
    "2026-10-18-GOES19-umv-geocolor.jpg",
    "2026-10-18-IL-IDOTD4-3011-N.jpg",
    "2026-10-18-IL-IDOTD4-3033-N.jpg",
    "2026-10-18-IL-IDOTD4-3077-E.jpg"
   ],
   "verification_source": "IEM ASOS IKK 04:00\u201309:00 local"
  },
  {
   "morning": "2026-10-18",
   "run_time": "2026-10-18T04:45-05:00",
   "kind": "predawn",
   "fog_probability": 0.01,
   "raw_blend": 0.193,
   "grade": "F",
   "type": "shallow ground fog",
   "confidence": "medium",
   "observed_min_vis_mi": 10.0,
   "observed_fog": false,
   "cams": [
    "2026-10-18-GOES19-umv-geocolor.jpg",
    "2026-10-18-IL-IDOTD4-3011-N.jpg",
    "2026-10-18-IL-IDOTD4-3033-N.jpg",
    "2026-10-18-IL-IDOTD4-3077-E.jpg"
   ],
   "verification_source": "IEM ASOS IKK 04:00\u201309:00 local"
  },
  {
   "morning": "2026-10-19",
   "run_time": "2026-10-18T21:30-05:00",
   "kind": "evening",
   "fog_probability": 0.12,
   "raw_blend": 0.624,
   "grade": "D",
   "type": "shallow ground fog",
   "confidence": "medium",
   "observed_min_vis_mi": null,
   "observed_fog": null,
   "cams": [
    "2026-10-19-GOES19-umv-geocolor.jpg",
    "2026-10-19-IL-IDOTD4-3011-N.jpg",
    "2026-10-19-IL-IDOTD4-3033-N.jpg",
    "2026-10-19-IL-IDOTD4-3077-E.jpg"
   ]
  },
  {
   "morning": "2026-10-19",
   "run_time": "2026-10-19T04:45-05:00",
   "kind": "predawn",
   "fog_probability": 0.18,
   "raw_blend": 0.697,
   "grade": "C",
   "type": "shallow ground fog",
   "confidence": "medium",
   "observed_min_vis_mi": null,
   "observed_fog": null,
   "cams": [
    "2026-10-19-GOES19-umv-geocolor.jpg",
    "2026-10-19-IL-IDOTD4-3011-N.jpg",
    "2026-10-19-IL-IDOTD4-3033-N.jpg",
    "2026-10-19-IL-IDOTD4-3077-E.jpg"
   ]
  },
  {
   "morning": "2026-10-20",
   "run_time": "2026-10-19T21:30-05:00",
   "kind": "evening",
   "fog_probability": 0.13,
   "raw_blend": 0.63,
   "grade": "D",
   "type": "shallow ground fog",
   "confidence": "high",
   "observed_min_vis_mi": null,
   "observed_fog": null
  }
 ]
}