{"id":40956,"date":"2026-02-23T01:36:15","date_gmt":"2026-02-22T17:36:15","guid":{"rendered":"https:\/\/smartairfilters.com\/?page_id=40956"},"modified":"2026-03-31T01:07:43","modified_gmt":"2026-03-30T17:07:43","slug":"posts","status":"publish","type":"page","link":"https:\/\/smartairfilters.com\/en\/articles\/posts\/","title":{"rendered":"Clean Air Articles \u2022 Page 1"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"40956\" class=\"elementor elementor-40956\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-39a024f e-con-full banner-clouds e-flex elementor-invisible e-con e-parent\" data-id=\"39a024f\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeIn&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-feeb447 newh1-banner elementor-widget elementor-widget-heading\" data-id=\"feeb447\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Air Blog<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-06f6637 elementor-widget__width-initial newh2-banner elementor-widget elementor-widget-heading\" data-id=\"06f6637\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">A growing library of science-based articles written to make air quality knowledge open and accessible to all<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0cc6bbb e-flex e-con-boxed e-con e-parent\" data-id=\"0cc6bbb\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-932e1f3 elementor-widget elementor-widget-shortcode\" data-id=\"932e1f3\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <div class=\"articles-header\">\r\n      <div class=\"articles-cats\">\r\n        <div class=\"articles-cats-title\">\r\n          Category Tags \/ <span class=\"articles-cats-current\">All<\/span>\r\n        <\/div>\r\n\r\n        <!-- Filter buttons (no All button, default shows all posts) -->\r\n        <div class=\"articles-cats-buttons\">\r\n          <button class=\"articles-cat-chip\" data-category=\"17\" data-label=\"Air Pollution\">Air Pollution<\/button><button class=\"articles-cat-chip\" data-category=\"190\" data-label=\"Air Purifiers\">Air Purifiers<\/button><button class=\"articles-cat-chip\" data-category=\"169\" data-label=\"Air Monitors\">Air Monitors<\/button><button class=\"articles-cat-chip\" data-category=\"187\" data-label=\"Masks\">Masks<\/button><button class=\"articles-cat-chip\" data-category=\"682\" data-label=\"Wildfires\">Wildfires<\/button><button class=\"articles-cat-chip\" data-category=\"469\" data-label=\"COVID-19\">COVID-19<\/button><button class=\"articles-cat-chip\" data-category=\"829\" data-label=\"Press Release\">Press Release<\/button>        <\/div>\r\n      <\/div>\r\n\r\n      \r\n        <div class=\"articles-sort\">\r\n\t\t \r\n\r\n\t\t  <div class=\"articles-sort-buttons\">\r\n\t\t\t<button class=\"articles-sort-btn is-active\" data-sort=\"comments\">\r\n\t\t\t  Popularity\r\n\t\t\t<\/button>\r\n\r\n\t\t\t<button class=\"articles-sort-btn\" data-sort=\"latest\">\r\n\t\t\t  Latest\r\n\t\t\t<\/button>\r\n\t\t  <\/div>\r\n\t\t<\/div>\r\n      <\/div>\r\n    \r\n\r\n    <div id=\"articles-grid\" class=\"articles-grid\"><\/div>\r\n    <div id=\"articles-pagination\" class=\"articles-pagination\"><\/div>\r\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-06b0bf5 e-con-full scroll-bg e-flex e-con e-parent\" data-id=\"06b0bf5\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-209432b e-flex e-con-boxed e-con e-parent\" data-id=\"209432b\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f95f490 elementor-widget elementor-widget-html\" data-id=\"f95f490\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n .homepage-textgradient {\r\n  background: linear-gradient(\r\n    175deg,\r\n    #8CA6DB 0%,\r\n    #8CA6DB 40%,\r\n    #111111 70%,\r\n    #333333 100%\r\n  );\r\n  -webkit-background-clip: text;\r\n  -webkit-text-fill-color: transparent;\r\n  display: inline-block;\r\n}\r\n\r\n\r\n.scroll-bg {\r\n  \r\n  background-repeat: repeat-x;\r\n  background-position: 0 0;\r\n  background-size: cover; \/* or contain, depending on your image *\/\r\n  animation: scrollBackground 30s linear infinite;\r\n  height: 300px; \/* adjust as needed *\/\r\n  width: 100%;\r\n}\r\n\r\n\/* Animation keyframes *\/\r\n@keyframes scrollBackground {\r\n  0% {\r\n    background-position: 0 0;\r\n  }\r\n  100% {\r\n    background-position: -1000px 0; \r\n  }\r\n}\r\n\r\n#homepage-tab1,\r\n#homepage-tab2,\r\n#homepage-tab3 {\r\n  border: none;\r\n \r\n  padding: 5px 40px;\r\n  border-radius: 30px;\r\n  font-size: 16px;\r\n  cursor: pointer;\r\n  transition: background 0.3s, color 0.3s;\r\n  color: black;\r\n}\r\n\r\n\/* Active tab style *\/\r\n#homepage-tab1[aria-selected=\"true\"],\r\n#homepage-tab2[aria-selected=\"true\"],\r\n#homepage-tab3[aria-selected=\"true\"] {\r\n  background-color: #5dade2; \r\n  color: white;\r\n}\r\n.e-n-tabs-heading {\r\n  display: flex;\r\n  background-color: #e0e0e0; \r\n  padding: 0px;\r\n  border-radius: 30px;\r\n  width: fit-content;\r\n}\r\n.homepage-cards-singlecard{\r\n    height:200px;\r\n}\r\n.homepage-hoverclass {\r\n  position: relative; \/* Needed for ::before to align properly *\/\r\n  background-repeat: no-repeat !important;\r\n  background-position: bottom center !important;\r\n  transition: background-size 1.3s ease !important;\r\n  will-change: background-size;\r\n  overflow: hidden; \/* Optional: hide any overflows *\/\r\n}\r\n\r\n.homepage-hoverclass.zoom-small,.homepage-hoverclass.zoom-small-3{\r\n    justify-self: self-end !important;\r\n}\r\n\/* Zoom on hover *\/\r\n.zoom-small {\r\n  background-size: 100% !important;\r\n  transition: background-size 0.4s ease-in-out;\r\n  background-position: center 10px !important;\r\n  background-repeat: no-repeat;\r\n  \r\n}\r\n\r\n\r\n\r\n.homepage-hoverclass.zoom-small, .homepage-hoverclass.zoom-large,.homepage-hoverclass.zoom-large-4{\r\n    height:413px !important;\r\n}\r\n\r\n@media (min-width: 768px) {.banner-clouds {\r\n  position: relative;\r\n}\r\n.zoom-small:hover {\r\n  background-size: 103% !important;\r\n   background-position: center 10px !important;\r\n}\r\n.zoom-small-3 {\r\n  background-size: 100% auto !important;\r\n}\r\n.zoom-small-3:hover {\r\n  background-size: 105% auto !important;\r\n}\r\n.zoom-large {\r\n  background-size: 110% auto !important;\r\n}\r\n.zoom-large:hover {\r\n  background-size: 115% auto !important;\r\n}\r\n.zoom-large-4{\r\n  background-size: 103% auto !important;\r\n}\r\n.zoom-large-4:hover {\r\n  background-size: 108% auto !important;\r\n}\r\n\r\n.fixed-b-corp {\r\n  transition: opacity 0.4s ease;\r\n  opacity: 1;\r\n}\r\n.fixed-b-corp.fade-out {\r\n  opacity: 0;\r\n  pointer-events: none; \/* optional, disables hover\/click when invisible *\/\r\n}\r\n\r\n.fixed-b-corp {\r\n  position: absolute;\r\n  bottom: 20px;\r\n  right: 20px;\r\n  z-index: 999;\r\n  transition: none;\r\n}\r\n\r\n.fixed-b-corp.sticking {\r\n  position: fixed !important;\r\n  bottom: 20px;\r\n  right: 20px;\r\n}\r\n\r\n.fixed-b-corp.stopped {\r\n  position: absolute !important;\r\n  bottom: unset !important;\r\n  top: auto !important;\r\n}\r\n}\r\n\r\n\r\n@media (max-width: 768px) {\r\n \r\n .elementor-widget-container{\r\n     text-wrap-mode: wrap; \r\n }\r\n\/* .horiz-scrol-homepage-mobile {\r\n  overflow-x: auto;\r\n  -webkit-overflow-scrolling: touch; \/* enables momentum scroll & dots on iOS \r\n  white-space: nowrap;\r\n}*\/\r\n\r\n\r\n\/* Container should behave normally *\/\r\n\/*.elementor-element-7c63c65 {\r\n  display: block !important;\r\n  overflow: hidden;\r\n}\r\n\r\n\r\n.elementor-element-1ad7031 {\r\n  float: right;\r\n}\r\n\r\n\r\n.elementor-element-958df5e {\r\n  float: left;\r\n}\r\n\r\n\r\n.elementor-button {\r\n  width: auto !important;\r\n  padding: 10px 20px;\r\n  white-space: nowrap;\r\n}*\/\r\n\r\n  .homepage-hoverclass{\r\n      box-shadow:none !important;\r\n  }\r\n  .scroll-left.disabled,\r\n.scroll-right.disabled {\r\n  opacity: 0.3;\r\n  pointer-events: none;\r\n}\r\n\r\n  .scroll-arrows {\r\n    display: none;\r\n    justify-content: center;\r\n    gap: 20px;\r\n    margin: 10px 0;\r\n  }\r\n\r\n  .scroll-arrows img {\r\n      \r\n    width: 24px;\r\n    height: 24px;\r\n    cursor: pointer;\r\n    transition: transform 0.2s ease;\r\n  }\r\n\r\n  .scroll-arrows img:hover {\r\n    transform: scale(1.1);\r\n  }\r\n\r\n  .horiz-scrol-homepage-mobile {\r\n    display: flex;\r\n    overflow-x: auto;\r\n    scroll-snap-type: x mandatory;\r\n    -webkit-overflow-scrolling: touch;\r\n    scroll-behavior: smooth;\r\n    gap: 20px;\r\n    width: 100%;\r\n     -ms-overflow-style: none;  \/* IE and Edge *\/\r\n  scrollbar-width: none;     \/* Firefox *\/\r\n  }\r\n.horiz-scrol-homepage-mobile::-webkit-scrollbar {\r\n  display: none;             \/* Chrome, Safari, Opera *\/\r\n}\r\n  .horiz-scrol-homepage-mobile > .e-con {\r\n    flex: 0 0 100%;\r\n    scroll-snap-align: center;\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .scroll-dots {\r\n    display: flex;\r\n    justify-content: center;\r\n    gap: 8px;\r\n    margin-top: 10px;\r\n  }\r\n\r\n  .scroll-dots .dot {\r\n    width: 5px;\r\n    height: 5px;\r\n    background: #ccc;\r\n    border-radius: 50%;\r\n    cursor: pointer;\r\n    transition: background 0.3s;\r\n  }\r\n\r\n  .scroll-dots .dot.active {\r\n    background: #333;\r\n  }\r\n  \/* === Generic Button Container Centering === *\/\r\n.homepage-button-group-mobile {\r\n  display: flex !important;\r\n  justify-content: center !important;\r\n  align-items: center;\r\n  \/\/gap: 16px; \/* spacing between buttons *\/\r\n  row-gap:10px;\r\n  flex-wrap: wrap;\r\n  text-align: center;\r\n}\r\n\r\n\/* === Button Styling for all groups === *\/\r\n\/*.homepage-button-single-mobile {\r\n  width: auto !important;\r\n  min-width: auto !important;\r\n  padding: 10px 20px;\r\n  display: inline-flex;\r\n  justify-content: center;\r\n  align-items: center;\r\n  border-radius: 100px; \/* keeps pill shape *\/\r\n}*\/\r\n\r\n\/* Ensure button wrappers don\u2019t interfere *\/\r\n.elementor-button-wrapper {\r\n  display: inline-flex !important;\r\n}\r\n.site-content{\r\n        overflow-x: hidden;\r\n\r\n}\r\n}\r\n\r\n\r\n<\/style>\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n    if (window.innerWidth >= 768) return;\r\n  const scrollSections = document.querySelectorAll(\".scroll-block-homepage-1, .scroll-block-homepage-2\");\r\n\r\n  scrollSections.forEach(section => {\r\n    const scrollWrapper = section.querySelector(\".horiz-scrol-homepage-mobile\");\r\n    const dotsContainer = section.querySelector(\".scroll-dots\");\r\n    const leftArrow = section.querySelector(\".scroll-left\");\r\n    const rightArrow = section.querySelector(\".scroll-right\");\r\n\r\n    if (!scrollWrapper || !leftArrow || !rightArrow || !dotsContainer) return;\r\n\r\n    const cards = Array.from(scrollWrapper.children).filter(el => el.classList.contains(\"e-con\"));\r\n    const scrollStep = scrollWrapper.offsetWidth;\r\n\r\n    \/\/ Create dots\r\n    dotsContainer.innerHTML = \"\";\r\n    cards.forEach((_, i) => {\r\n      const dot = document.createElement(\"span\");\r\n      dot.classList.add(\"dot\");\r\n      if (i === 0) dot.classList.add(\"active\");\r\n      dot.addEventListener(\"click\", () => {\r\n        scrollWrapper.scrollTo({ left: scrollStep * i, behavior: \"smooth\" });\r\n      });\r\n      dotsContainer.appendChild(dot);\r\n    });\r\n\r\n    \/\/ Sync dot and arrows\r\n    function updateState() {\r\n      const scrollLeft = scrollWrapper.scrollLeft;\r\n      const maxScrollLeft = scrollWrapper.scrollWidth - scrollWrapper.clientWidth;\r\n      const index = Math.round(scrollLeft \/ scrollStep);\r\n\r\n      \/\/ Highlight active dot\r\n      dotsContainer.querySelectorAll(\".dot\").forEach((dot, i) => {\r\n        dot.classList.toggle(\"active\", i === index);\r\n      });\r\n\r\n      \/\/ Enable\/disable arrows\r\n      if (scrollLeft <= 0) {\r\n        leftArrow.classList.add(\"disabled\");\r\n      } else {\r\n        leftArrow.classList.remove(\"disabled\");\r\n      }\r\n\r\n      if (scrollLeft >= maxScrollLeft - 1) {\r\n        rightArrow.classList.add(\"disabled\");\r\n      } else {\r\n        rightArrow.classList.remove(\"disabled\");\r\n      }\r\n    }\r\n\r\n    scrollWrapper.addEventListener(\"scroll\", updateState);\r\n\r\n    leftArrow.addEventListener(\"click\", () => {\r\n      scrollWrapper.scrollBy({ left: -scrollStep, behavior: \"smooth\" });\r\n    });\r\n\r\n    rightArrow.addEventListener(\"click\", () => {\r\n      scrollWrapper.scrollBy({ left: scrollStep, behavior: \"smooth\" });\r\n    });\r\n\r\n    \/\/ Initial state\r\n    updateState();\r\n  });\r\n});\r\n<\/script>\r\n\r\n<script>\/*\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n  const sticky = document.querySelector(\".fixed-b-corp\");\r\n  const banner = document.querySelector(\".banner-clouds\");\r\n  const stopTarget = document.querySelector(\".quick-links-homepage\");\r\n\r\n  if (!sticky || !banner || !stopTarget) return;\r\n\r\n  const bottomOffset = 20; \/\/ px from bottom of viewport\r\n  const rightOffset = 20;\r\n\r\n  function updatePosition() {\r\n    const scrollY = window.scrollY;\r\n    const viewportHeight = window.innerHeight;\r\n    const stickyHeight = sticky.offsetHeight;\r\n\r\n    const bannerTop = banner.offsetTop;\r\n    const bannerBottom = bannerTop + banner.offsetHeight;\r\n\r\n    const stopTop = stopTarget.offsetTop;\r\n    const stopHeight = stopTarget.offsetHeight;\r\n    const stopBottom = stopTop + stopHeight;\r\n\r\n    const stickyBottomIfFixed = scrollY + viewportHeight - bottomOffset;\r\n\r\n    \/\/ Case 1: Still in banner \u2014 start position\r\n    if (scrollY + viewportHeight < bannerBottom + stickyHeight) {\r\n      sticky.style.position = \"absolute\";\r\n      sticky.style.bottom = `${bottomOffset}px`;\r\n      sticky.style.top = \"auto\";\r\n      sticky.style.right = `${rightOffset}px`;\r\n    }\r\n    \/\/ Case 2: Sticky bottom would pass stop section's end \u2014 pin it at the bottom of stop section\r\n    else if (stickyBottomIfFixed >= stopBottom) {\r\n      sticky.style.position = \"absolute\";\r\n      sticky.style.top = `${stopBottom - stickyHeight - bannerTop - bottomOffset}px`;\r\n      sticky.style.bottom = \"auto\";\r\n      sticky.style.right = `${rightOffset}px`;\r\n    }\r\n    \/\/ Case 3: Normal scroll \u2014 fixed to screen\r\n    else {\r\n      sticky.style.position = \"fixed\";\r\n      sticky.style.bottom = `${bottomOffset}px`;\r\n      sticky.style.top = \"auto\";\r\n      sticky.style.right = `${rightOffset}px`;\r\n    }\r\n  }\r\n\r\n  window.addEventListener(\"scroll\", updatePosition);\r\n  window.addEventListener(\"resize\", updatePosition);\r\n  updatePosition();\r\n});\r\n*\/\r\n\r\n\/*document.addEventListener(\"DOMContentLoaded\", function () {\r\n  const sticky = document.querySelector(\".fixed-b-corp\");\r\n  const banner = document.querySelector(\".banner-clouds\");\r\n  const stopTarget = document.querySelector(\".quick-links-homepage\");\r\n\r\n  if (!sticky || !banner || !stopTarget) return;\r\n\r\n  const bottomOffset = 20; \/\/ distance from bottom of screen when fixed\r\n  const rightOffset = 20;  \/\/ distance from right of screen\r\n  const fadeOutDistance = 200; \/\/ fade-out starts this many px before stop section ends\r\n\r\n  function updatePosition() {\r\n    const scrollY = window.scrollY;\r\n    const viewportHeight = window.innerHeight;\r\n    const stickyHeight = sticky.offsetHeight;\r\n\r\n    const bannerTop = banner.offsetTop;\r\n    const bannerBottom = bannerTop + banner.offsetHeight;\r\n\r\n    const stopTop = stopTarget.offsetTop;\r\n    const stopBottom = stopTop + stopTarget.offsetHeight;\r\n\r\n    const stickyBottomIfFixed = scrollY + viewportHeight - bottomOffset;\r\n\r\n    \/\/ 1. If still within banner \u2014 absolute positioning\r\n    if (scrollY + viewportHeight < bannerBottom + stickyHeight) {\r\n      sticky.style.position = \"absolute\";\r\n      sticky.style.bottom = `${bottomOffset}px`;\r\n      sticky.style.top = \"auto\";\r\n      sticky.style.right = `${rightOffset}px`;\r\n    }\r\n    \/\/ 2. Scrolling normally \u2014 fixed position\r\n    else {\r\n      sticky.style.position = \"fixed\";\r\n      sticky.style.bottom = `${bottomOffset}px`;\r\n      sticky.style.top = \"auto\";\r\n      sticky.style.right = `${rightOffset}px`;\r\n    }\r\n\r\n    \/\/ 3. Fade out as we near the bottom of stopTarget\r\n    const fadeOutStart = stopBottom - fadeOutDistance;\r\n    const fadeOutEnd = stopBottom;\r\n\r\n    if (stickyBottomIfFixed >= fadeOutStart) {\r\n      const progress = Math.min(1, (stickyBottomIfFixed - fadeOutStart) \/ (fadeOutEnd - fadeOutStart));\r\n      sticky.style.opacity = `${1 - progress}`;\r\n      sticky.style.pointerEvents = 'none'; \/\/ optional: disables clicks while fading\r\n    } else {\r\n      sticky.style.opacity = \"1\";\r\n      sticky.style.pointerEvents = 'auto';\r\n    }\r\n  }\r\n\r\n  window.addEventListener(\"scroll\", updatePosition);\r\n  window.addEventListener(\"resize\", updatePosition);\r\n  updatePosition(); \/\/ run on load\r\n});*\/\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n  if (window.innerWidth < 768) return; \/\/ <-- prevent running on mobile\r\n\r\n  const sticky = document.querySelector(\".fixed-b-corp\");\r\n  const banner = document.querySelector(\".banner-clouds\");\r\n  const stopTarget = document.querySelector(\".quick-links-homepage\");\r\n\r\n  if (!sticky || !banner || !stopTarget) return;\r\n\r\n  const bottomOffset = 20; \/\/ distance from bottom of screen when fixed\r\n  const rightOffset = 20;\r\n  const fadeOutDistance = 200; \/\/ fade-out starts this many px before stop section ends\r\n\r\n  function updatePosition() {\r\n    const scrollY = window.scrollY;\r\n    const viewportHeight = window.innerHeight;\r\n    const stickyHeight = sticky.offsetHeight;\r\n\r\n    const bannerTop = banner.offsetTop;\r\n    const bannerBottom = bannerTop + banner.offsetHeight;\r\n\r\n    const stopTop = stopTarget.offsetTop;\r\n    const stopBottom = stopTop + stopTarget.offsetHeight;\r\n\r\n    const stickyBottomIfFixed = scrollY + viewportHeight - bottomOffset;\r\n\r\n    \/\/ Case 1: Still within banner\r\n    if (scrollY + viewportHeight < bannerBottom + stickyHeight) {\r\n      sticky.style.position = \"absolute\";\r\n      sticky.style.bottom = `${bottomOffset}px`;\r\n      sticky.style.top = \"auto\";\r\n      sticky.style.right = `${rightOffset}px`;\r\n    }\r\n    \/\/ Case 2: Normal scroll\r\n    else {\r\n      sticky.style.position = \"fixed\";\r\n      sticky.style.bottom = `${bottomOffset}px`;\r\n      sticky.style.top = \"auto\";\r\n      sticky.style.right = `${rightOffset}px`;\r\n    }\r\n\r\n    \/\/ Case 3: Fade out near stop section\r\n    const fadeOutStart = stopBottom - fadeOutDistance;\r\n    const fadeOutEnd = stopBottom;\r\n\r\n    if (stickyBottomIfFixed >= fadeOutStart) {\r\n      const progress = Math.min(1, (stickyBottomIfFixed - fadeOutStart) \/ (fadeOutEnd - fadeOutStart));\r\n      sticky.style.opacity = `${1 - progress}`;\r\n      sticky.style.pointerEvents = 'none';\r\n    } else {\r\n      sticky.style.opacity = \"1\";\r\n      sticky.style.pointerEvents = 'auto';\r\n    }\r\n  }\r\n\r\n  window.addEventListener(\"scroll\", updatePosition);\r\n  window.addEventListener(\"resize\", updatePosition);\r\n  updatePosition(); \/\/ Run on load\r\n});\r\n\r\n\r\n<\/script>\r\n\r\n\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>The Air Blog A growing library of science-based articles written to make air quality knowledge open and accessible to all<\/p>\n","protected":false},"author":11231,"featured_media":0,"parent":40475,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"35241,5685,49,31527,23602,523","_relevanssi_noindex_reason":"","footnotes":""},"class_list":["post-40956","page","type-page","status-publish"],"acf":[],"_links":{"self":[{"href":"https:\/\/smartairfilters.com\/en\/wp-json\/wp\/v2\/pages\/40956","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smartairfilters.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/smartairfilters.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/smartairfilters.com\/en\/wp-json\/wp\/v2\/users\/11231"}],"replies":[{"embeddable":true,"href":"https:\/\/smartairfilters.com\/en\/wp-json\/wp\/v2\/comments?post=40956"}],"version-history":[{"count":59,"href":"https:\/\/smartairfilters.com\/en\/wp-json\/wp\/v2\/pages\/40956\/revisions"}],"predecessor-version":[{"id":41408,"href":"https:\/\/smartairfilters.com\/en\/wp-json\/wp\/v2\/pages\/40956\/revisions\/41408"}],"up":[{"embeddable":true,"href":"https:\/\/smartairfilters.com\/en\/wp-json\/wp\/v2\/pages\/40475"}],"wp:attachment":[{"href":"https:\/\/smartairfilters.com\/en\/wp-json\/wp\/v2\/media?parent=40956"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}