{"id":2162,"date":"2026-01-29T23:36:50","date_gmt":"2026-01-29T21:36:50","guid":{"rendered":"https:\/\/nature-o.net\/?page_id=2162"},"modified":"2026-02-02T17:35:00","modified_gmt":"2026-02-02T15:35:00","slug":"%d0%ba%d0%b0%d1%87%d0%b5%d1%81%d1%82%d0%b2%d0%be-%d0%b2%d0%be%d0%b7%d0%b4%d1%83%d1%85%d0%b0-%d0%b8-%d0%b7%d0%b4%d0%be%d1%80%d0%be%d0%b2%d1%8c%d0%b5","status":"publish","type":"page","link":"https:\/\/nature-o.net\/?page_id=2162","title":{"rendered":"Air Quality &amp; Wildfire Smoke Risk Helper"},"content":{"rendered":"\n<div class=\"eco-tool wp-block-group\" id=\"eco-tool-air-4d8a1\">\n  <div class=\"eco-tool__header\">\n    <h2 class=\"eco-tool__title\">Air Quality &#038; Wildfire Smoke Risk Helper<\/h2>\n    <p class=\"eco-tool__lead\">\n      Enter an AQI value (or PM2.5) to get a quick health-risk category and practical guidance. This is general information\u2014not medical advice.\n    <\/p>\n  <\/div>\n\n  <form class=\"eco-tool__form\" id=\"eco-air-form-4d8a1\" novalidate>\n    <div class=\"eco-tool__grid3\">\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-air-inputtype-4d8a1\">Input type<br>(choose one)<\/label>\n        <select class=\"eco-tool__input\" id=\"eco-air-inputtype-4d8a1\">\n          <option value=\"aqi\" selected>AQI (0\u2013500)<\/option>\n          <option value=\"pm25\">PM2.5 (\u00b5g\/m\u00b3)<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Use values from your weather app or local monitor.<\/div>\n      <\/div>\n\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-air-value-4d8a1\">Value<br>(number)<\/label>\n        <input class=\"eco-tool__input\" id=\"eco-air-value-4d8a1\" type=\"number\" min=\"0\" step=\"1\" value=\"75\" inputmode=\"numeric\" \/>\n        <div class=\"eco-tool__hint\">Example AQI: 50, 120, 180, 250.<\/div>\n      <\/div>\n\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-air-sensitive-4d8a1\">Sensitive group?<br>(optional)<\/label>\n        <select class=\"eco-tool__input\" id=\"eco-air-sensitive-4d8a1\">\n          <option value=\"no\" selected>No<\/option>\n          <option value=\"yes\">Yes (kids, elderly, asthma, heart\/lung conditions)<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Guidance becomes more cautious.<\/div>\n      <\/div>\n\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-air-activity-4d8a1\">Outdoor activity<br>(optional)<\/label>\n        <select class=\"eco-tool__input\" id=\"eco-air-activity-4d8a1\">\n          <option value=\"light\" selected>Light (walking)<\/option>\n          <option value=\"moderate\">Moderate (cycling)<\/option>\n          <option value=\"heavy\">Heavy (running\/work)<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">More exertion = more risk.<\/div>\n      <\/div>\n\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\" for=\"eco-air-smoke-4d8a1\">Wildfire smoke visible?<br>(optional)<\/label>\n        <select class=\"eco-tool__input\" id=\"eco-air-smoke-4d8a1\">\n          <option value=\"no\" selected>No \/ not sure<\/option>\n          <option value=\"yes\">Yes (smell\/haze\/ash)<\/option>\n        <\/select>\n        <div class=\"eco-tool__hint\">Smoke can worsen symptoms quickly.<\/div>\n      <\/div>\n\n      <div class=\"eco-tool__field\">\n        <label class=\"eco-tool__label\">Quick examples<\/label>\n        <div class=\"eco-tool__presets\">\n          <button type=\"button\" class=\"eco-tool__chip\" data-type=\"aqi\" data-val=\"40\">Good<\/button>\n          <button type=\"button\" class=\"eco-tool__chip\" data-type=\"aqi\" data-val=\"120\">Unhealthy (SG)<\/button>\n          <button type=\"button\" class=\"eco-tool__chip\" data-type=\"aqi\" data-val=\"180\">Unhealthy<\/button>\n          <button type=\"button\" class=\"eco-tool__chip\" data-type=\"aqi\" data-val=\"260\">Very unhealthy<\/button>\n        <\/div>\n        <div class=\"eco-tool__hint\">Sets sample values quickly.<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"eco-tool__actions\">\n      <button type=\"button\" class=\"wp-element-button eco-tool__btn\" id=\"eco-air-calc-4d8a1\">Check risk<\/button>\n      <button type=\"button\" class=\"wp-element-button eco-tool__btn eco-tool__btn--ghost\" id=\"eco-air-reset-4d8a1\">Reset<\/button>\n      <div class=\"eco-tool__error\" id=\"eco-air-error-4d8a1\" aria-live=\"polite\"><\/div>\n    <\/div>\n  <\/form>\n\n  <div class=\"eco-tool__result\" id=\"eco-air-result-4d8a1\" hidden>\n    <h3 class=\"eco-tool__subtitle\">Result<\/h3>\n\n    <div class=\"eco-tool__cards\">\n      <div class=\"eco-tool__card\">\n        <div class=\"eco-tool__metric-label\">Category<\/div>\n        <div class=\"eco-tool__metric-value\" id=\"eco-air-cat-4d8a1\">\u2014<\/div>\n        <div class=\"eco-tool__metric-sub\" id=\"eco-air-cat-sub-4d8a1\"><\/div>\n      <\/div>\n\n      <div class=\"eco-tool__card\">\n        <div class=\"eco-tool__metric-label\">What to do<\/div>\n        <div class=\"eco-tool__steps\" id=\"eco-air-steps-4d8a1\"><\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"eco-tool__card eco-tool__card--wide\">\n      <div class=\"eco-tool__metric-label\">Approximate conversion (optional)<\/div>\n      <div class=\"eco-tool__metric-sub\" id=\"eco-air-conv-4d8a1\">\u2014<\/div>\n      <div class=\"eco-tool__metric-sub eco-tool__muted\">\n        PM2.5\u2194AQI conversions are approximations and differ by standard and averaging period.\n      <\/div>\n    <\/div>\n\n    <p class=\"eco-tool__note\">\n      If you feel severe symptoms (difficulty breathing, chest pain, confusion), seek urgent medical care.\n    <\/p>\n  <\/div>\n\n  <details class=\"eco-tool__details\">\n    <summary class=\"eco-tool__summary\">How this works<\/summary>\n    <div class=\"eco-tool__details-body\">\n      <p class=\"eco-tool__text\">\n        Categories follow common AQI breakpoints (0\u201350, 51\u2013100, 101\u2013150, 151\u2013200, 201\u2013300, 301+).\n        Advice is simplified and more cautious for sensitive groups and higher activity levels.\n      <\/p>\n    <\/div>\n  <\/details>\n<\/div>\n\n<style>\n.eco-tool{ border: 1px solid rgba(0,0,0,.12); border-radius: 12px; padding: 16px; }\n.eco-tool__header{ margin-bottom: 12px; }\n.eco-tool__title{ margin: 0 0 8px; }\n.eco-tool__lead{ margin: 0; opacity: .9; }\n.eco-tool__form{ margin-top: 12px; }\n\n.eco-tool__grid3{ display: grid; grid-template-columns: 1fr; gap: 16px; }\n@media (min-width: 860px){ .eco-tool__grid3{ grid-template-columns: 1fr 1fr 1fr; } }\n\n.eco-tool__field{ display: flex; flex-direction: column; gap: 6px; }\n.eco-tool__label{ font-weight: 600; }\n\n.eco-tool__input{\n  width: 100%;\n  height: 44px;\n  padding: 0 12px;\n  border: 1px solid rgba(0,0,0,.20);\n  border-radius: 10px;\n  background: #fff;\n  box-sizing: border-box;\n  font: inherit;\n}\n.eco-tool select.eco-tool__input{\n  appearance: none;\n  -webkit-appearance: none;\n  line-height: 44px;\n  padding-right: 40px;\n  background-image:\n    linear-gradient(45deg, transparent 50%, rgba(0,0,0,.60) 50%),\n    linear-gradient(135deg, rgba(0,0,0,.60) 50%, transparent 50%);\n  background-position:\n    calc(100% - 18px) 50%,\n    calc(100% - 12px) 50%;\n  background-size: 6px 6px;\n  background-repeat: no-repeat;\n}\n.eco-tool__hint{ font-size: .92em; opacity: .78; min-height: 38px; }\n\n.eco-tool__presets{\n  display: flex; flex-wrap: wrap; gap: 8px;\n  padding: 10px 12px;\n  border: 1px solid rgba(0,0,0,.12);\n  border-radius: 10px;\n  background: rgba(0,0,0,.02);\n}\n.eco-tool__chip{\n  border: 1px solid rgba(0,0,0,.18);\n  background: transparent;\n  border-radius: 999px;\n  padding: 6px 10px;\n  cursor: pointer;\n  font: inherit;\n}\n.eco-tool__chip:hover, .eco-tool__chip:focus{\n  background: rgba(0,0,0,.06);\n  border-color: rgba(0,0,0,.30);\n}\n\n.eco-tool__actions{\n  display: flex; flex-wrap: wrap; gap: 10px; align-items: center;\n  margin-top: 16px;\n}\n.eco-tool__btn{ padding: 10px 22px; }\n.eco-tool__btn--ghost{ background: transparent !important; border: 1px solid rgba(0,0,0,.20) !important; }\n.eco-tool__btn--ghost:hover, .eco-tool__btn--ghost:focus{\n  background: rgba(0,0,0,.06) !important; border-color: rgba(0,0,0,.35) !important;\n}\n.eco-tool__error{ min-height: 1.2em; font-weight: 600; flex: 1 1 240px; }\n\n.eco-tool__result{ margin-top: 16px; }\n.eco-tool__subtitle{ margin: 0 0 10px; }\n\n.eco-tool__cards{ display: grid; gap: 10px; grid-template-columns: 1fr; }\n@media (min-width: 860px){ .eco-tool__cards{ grid-template-columns: 1fr 1fr; } }\n\n.eco-tool__card{ border: 1px solid rgba(0,0,0,.12); border-radius: 12px; padding: 12px; }\n.eco-tool__card--wide{ margin-top: 10px; }\n\n.eco-tool__metric-label{ opacity: .85; font-weight: 600; }\n.eco-tool__metric-value{ font-size: 1.6em; font-weight: 800; margin-top: 6px; line-height: 1.1; }\n.eco-tool__metric-sub{ opacity: .85; margin-top: 6px; }\n.eco-tool__muted{ opacity: .8; }\n\n.eco-tool__steps{ display: grid; gap: 8px; margin-top: 6px; }\n.eco-tool__step{ border: 1px solid rgba(0,0,0,.10); border-radius: 10px; padding: 10px; background: rgba(0,0,0,.02); }\n\n.eco-tool__note{ margin: 10px 0 0; opacity: .9; }\n\n.eco-tool__details{ margin-top: 14px; }\n.eco-tool__summary{ cursor: pointer; font-weight: 700; }\n.eco-tool__details-body{ margin-top: 10px; }\n.eco-tool__text{ margin: 0; }\n<\/style>\n\n<script>\n(function(){\n  const S = \"4d8a1\";\n  const el = (id) => document.getElementById(id + \"-\" + S);\n\n  const typeEl = el(\"eco-air-inputtype\");\n  const valEl = el(\"eco-air-value\");\n  const sensEl = el(\"eco-air-sensitive\");\n  const actEl = el(\"eco-air-activity\");\n  const smokeEl = el(\"eco-air-smoke\");\n\n  const calcBtn = el(\"eco-air-calc\");\n  const resetBtn = el(\"eco-air-reset\");\n  const errorEl = el(\"eco-air-error\");\n\n  const resultEl = el(\"eco-air-result\");\n  const catEl = el(\"eco-air-cat\");\n  const catSubEl = el(\"eco-air-cat-sub\");\n  const stepsEl = el(\"eco-air-steps\");\n  const convEl = el(\"eco-air-conv\");\n\n  const chips = document.querySelectorAll('#eco-tool-air-' + S + ' .eco-tool__chip');\n\n  function setError(msg){ errorEl.textContent = msg || \"\"; }\n  function step(t){ return `<div class=\"eco-tool__step\">${t}<\/div>`; }\n\n  \/\/ AQI category breakpoints (US-style)\n  function aqiCategory(aqi){\n    if (aqi <= 50) return { name: \"Good\", sub: \"Air quality is satisfactory.\" };\n    if (aqi <= 100) return { name: \"Moderate\", sub: \"Acceptable; some pollutants may pose a small risk.\" };\n    if (aqi <= 150) return { name: \"Unhealthy for sensitive groups\", sub: \"Sensitive people should reduce prolonged outdoor exertion.\" };\n    if (aqi <= 200) return { name: \"Unhealthy\", sub: \"Everyone may begin to experience health effects.\" };\n    if (aqi <= 300) return { name: \"Very unhealthy\", sub: \"Health alert: increased risk for everyone.\" };\n    return { name: \"Hazardous\", sub: \"Emergency conditions; avoid outdoor exposure.\" };\n  }\n\n  \/\/ Very rough PM2.5 -> AQI approximation (piecewise using common breakpoints)\n  \/\/ This is simplified and intended for UI guidance only.\n  function pm25ToAqi(pm){\n    const bps = [\n      { cLo: 0.0,   cHi: 12.0,  aLo: 0,   aHi: 50 },\n      { cLo: 12.1,  cHi: 35.4,  aLo: 51,  aHi: 100 },\n      { cLo: 35.5,  cHi: 55.4,  aLo: 101, aHi: 150 },\n      { cLo: 55.5,  cHi: 150.4, aLo: 151, aHi: 200 },\n      { cLo: 150.5, cHi: 250.4, aLo: 201, aHi: 300 },\n      { cLo: 250.5, cHi: 500.4, aLo: 301, aHi: 500 }\n    ];\n    const bp = bps.find(x => pm >= x.cLo && pm <= x.cHi) || (pm < 0 ? bps[0] : bps[bps.length-1]);\n    const aqi = ( (bp.aHi - bp.aLo) \/ (bp.cHi - bp.cLo) ) * (pm - bp.cLo) + bp.aLo;\n    return Math.max(0, Math.min(500, Math.round(aqi)));\n  }\n\n  function normalizeToAqi(){\n    const type = typeEl.value;\n    const v = Number(valEl.value);\n    if (!Number.isFinite(v) || v < 0){\n      return { ok: false, msg: \"Please enter a valid non-negative number.\" };\n    }\n\n    if (type === \"aqi\"){\n      const aqi = Math.round(v);\n      if (aqi > 500) return { ok: false, msg: \"AQI is typically between 0 and 500.\" };\n      return { ok: true, aqi };\n    } else {\n      const pm = v;\n      const aqi = pm25ToAqi(pm);\n      return { ok: true, aqi, pm };\n    }\n  }\n\n  function buildAdvice(aqi, sensitive, activity, smoke){\n    const steps = [];\n\n    const highActivity = activity === \"heavy\";\n    const medActivity = activity === \"moderate\";\n    const isSensitive = sensitive === \"yes\";\n    const smokeYes = smoke === \"yes\";\n\n    \/\/ Base guidance by AQI\n    if (aqi <= 50){\n      steps.push(\"Enjoy normal outdoor activities.\");\n      steps.push(\"If smoke is visible, consider closing windows and monitoring updates.\");\n    } else if (aqi <= 100){\n      steps.push(\"Most people can continue normal outdoor activities.\");\n      steps.push(\"Sensitive groups may reduce long or intense outdoor exertion if symptoms occur.\");\n    } else if (aqi <= 150){\n      steps.push(\"Sensitive groups: reduce prolonged or heavy outdoor exertion.\");\n      steps.push(\"Consider moving workouts indoors.\");\n    } else if (aqi <= 200){\n      steps.push(\"Reduce outdoor activity. Avoid heavy exertion outside.\");\n      steps.push(\"Keep indoor air cleaner: close windows, use filtration if available.\");\n    } else if (aqi <= 300){\n      steps.push(\"Avoid outdoor activity. Stay indoors with cleaner air.\");\n      steps.push(\"Use an air purifier (HEPA) if possible; avoid indoor smoke (candles, frying).\");\n    } else {\n      steps.push(\"Stay indoors. Avoid outdoor exposure as much as possible.\");\n      steps.push(\"If you must go out, consider a well-fitting respirator (e.g., N95\/FFP2) if available.\");\n    }\n\n    \/\/ Add modifiers\n    if (smokeYes){\n      steps.push(\"Visible smoke: be extra cautious\u2014symptoms can worsen quickly.\");\n    }\n    if (highActivity){\n      steps.push(\"Heavy outdoor activity increases inhaled dose\u2014avoid it at higher AQI.\");\n    } else if (medActivity){\n      steps.push(\"Moderate activity: shorten duration and take breaks if you go outside.\");\n    }\n    if (isSensitive){\n      steps.push(\"Sensitive groups: prioritize indoor air quality and monitor symptoms closely.\");\n    }\n\n    return steps.slice(0, 5); \/\/ keep it compact\n  }\n\n  function check(){\n    setError(\"\");\n    const norm = normalizeToAqi();\n    if (!norm.ok){\n      resultEl.hidden = true;\n      setError(norm.msg);\n      return;\n    }\n\n    const aqi = norm.aqi;\n    const cat = aqiCategory(aqi);\n\n    catEl.textContent = cat.name;\n    catSubEl.textContent = `AQI \u2248 ${aqi}. ${cat.sub}`;\n\n    const steps = buildAdvice(aqi, sensEl.value, actEl.value, smokeEl.value);\n    stepsEl.innerHTML = steps.map(step).join(\"\");\n\n    \/\/ Conversion display\n    if (typeEl.value === \"pm25\"){\n      convEl.textContent = `PM2.5 \u2248 ${Number(valEl.value).toFixed(1)} \u00b5g\/m\u00b3 \u2192 AQI \u2248 ${aqi} (approx).`;\n    } else {\n      convEl.textContent = `If you only have PM2.5, you can switch input type to estimate an approximate AQI category.`;\n    }\n\n    resultEl.hidden = false;\n  }\n\n  function reset(){\n    setError(\"\");\n    typeEl.value = \"aqi\";\n    valEl.value = \"75\";\n    sensEl.value = \"no\";\n    actEl.value = \"light\";\n    smokeEl.value = \"no\";\n    resultEl.hidden = true;\n  }\n\n  chips.forEach(btn => {\n    btn.addEventListener(\"click\", function(){\n      const t = this.getAttribute(\"data-type\");\n      const v = this.getAttribute(\"data-val\");\n      if (t) typeEl.value = t;\n      if (v) valEl.value = v;\n    });\n  });\n\n  calcBtn.addEventListener(\"click\", check);\n  resetBtn.addEventListener(\"click\", reset);\n})();\n<\/script>\n\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Air Quality &#038; Wildfire Smoke Risk Helper Enter an AQI value (or PM2.5) to get a quick health-risk category and practical guidance. This is general information\u2014not medical advice. Input type(choose&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":2457,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"_links":{"self":[{"href":"https:\/\/nature-o.net\/index.php?rest_route=\/wp\/v2\/pages\/2162"}],"collection":[{"href":"https:\/\/nature-o.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nature-o.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nature-o.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nature-o.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2162"}],"version-history":[{"count":2,"href":"https:\/\/nature-o.net\/index.php?rest_route=\/wp\/v2\/pages\/2162\/revisions"}],"predecessor-version":[{"id":2285,"href":"https:\/\/nature-o.net\/index.php?rest_route=\/wp\/v2\/pages\/2162\/revisions\/2285"}],"up":[{"embeddable":true,"href":"https:\/\/nature-o.net\/index.php?rest_route=\/wp\/v2\/pages\/2457"}],"wp:attachment":[{"href":"https:\/\/nature-o.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}