<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Smokelyze</title>
    <link>https://smokelyze.org/</link>
    <description>Recent content on Smokelyze</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Fri, 24 Jul 2026 23:41:43 -0700</lastBuildDate>
    <atom:link href="https://smokelyze.org/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>R shiny [05]: Interactive maps using Leaflet</title>
      <link>https://smokelyze.org/2025/r-shiny-05-interactive-maps-using-leaflet/</link>
      <pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/2025/r-shiny-05-interactive-maps-using-leaflet/</guid>
      <description>&lt;style&gt;&#xA;pre code {&#xA;    font-size: 14px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;div id=&#34;leaflet&#34; class=&#34;section level2&#34;&gt;&#xA;&lt;h2&gt;Leaflet&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;strong&gt;Leaflet&lt;/strong&gt; package in R is a powerful tool for creating interactive web maps directly from R code, leveraging the popular open-source &lt;strong&gt;JavaScript library Leaflet.js&lt;/strong&gt;&#xA;(&lt;a href=&#34;https://leafletjs.com/&#34; target=&#34;_blank&#34;&gt;here&lt;/a&gt;).&#xA;It allows users to overlay data points, polygons, raster images, and other geospatial data on customizable basemaps, supporting features like zooming, panning, popups, color scales, and layer controls. Leaflet integrates seamlessly with spatial objects in R (e.g., &lt;code&gt;sf&lt;/code&gt;, &lt;code&gt;sp&lt;/code&gt;, &lt;code&gt;raster&lt;/code&gt;, &lt;code&gt;terra&lt;/code&gt;), making it especially useful for visualizing spatial data in R Shiny apps, reports, and dashboards.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smoke tool tutorial [04]: GAM previous - Layer map</title>
      <link>https://smokelyze.org/2025/smoke-tool-tutorial-04-gam-previous-layer-map/</link>
      <pubDate>Thu, 13 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/2025/smoke-tool-tutorial-04-gam-previous-layer-map/</guid>
      <description>&lt;style&gt;&#xA;pre code {&#xA;    font-size: 14px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;This tutorial is for the “PM2.5 and O3 smoke tool” app, available at (&lt;a href=&#34;https://westar.shinyapps.io/PMO3smokeTool/&#34; target=&#34;_blank&#34;&gt;https://westar.shinyapps.io/PMO3smokeTool/&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;[GAM previous]&lt;/code&gt; tab allows users to explore and understand previously developed GAMs for O3 prediction and related air quality analyses. It includes two main sub-tabs: &lt;code&gt;[Overview]&lt;/code&gt; and &lt;code&gt;[Layer map]&lt;/code&gt;.&#xA;Additionally, users can compare not only our GAM results but also findings from other studies on smoke contributions to O3 and PM2.5, derived using different methods.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smoke tool tutorial [03]: GAM previous - Overview</title>
      <link>https://smokelyze.org/2025/smoke-tool-tutorial-03-gam-previous-overview/</link>
      <pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/2025/smoke-tool-tutorial-03-gam-previous-overview/</guid>
      <description>&lt;style&gt;&#xA;pre code {&#xA;    font-size: 14px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;This tutorial is for the “PM2.5 and O3 smoke tool” app, available at (&lt;a href=&#34;https://westar.shinyapps.io/PMO3smokeTool/&#34; target=&#34;_blank&#34;&gt;https://westar.shinyapps.io/PMO3smokeTool/&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;[GAM previous]&lt;/code&gt; tab allows users to explore and understand previously developed GAMs for O3 prediction and related air quality analyses. It includes two main sub-tabs: &lt;code&gt;[Overview]&lt;/code&gt; and &lt;code&gt;[Layer map]&lt;/code&gt;.&#xA;Additionally, users can compare not only our GAM results but also findings from other studies on smoke contributions to O3 and PM2.5, derived using different methods.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smoke tool tutorial [02]: GAM manual - GAM setup</title>
      <link>https://smokelyze.org/2025/smoke-tool-tutorial-02-gam-manual-gam-setup/</link>
      <pubDate>Tue, 11 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/2025/smoke-tool-tutorial-02-gam-manual-gam-setup/</guid>
      <description>&lt;style&gt;&#xA;pre code {&#xA;    font-size: 14px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;This tutorial is for the “PM2.5 and O3 smoke tool” app, available at (&lt;a href=&#34;https://westar.shinyapps.io/PMO3smokeTool/&#34; target=&#34;_blank&#34;&gt;https://westar.shinyapps.io/PMO3smokeTool/&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;[GAM manual]&lt;/code&gt; tab is designed to provide users with comprehensive tools to manually manage data collection and loading processes for building GAMs.&#xA;It includes two main sub-tabs: &lt;code&gt;[Data collection]&lt;/code&gt;, &lt;code&gt;[Load dataset]&lt;/code&gt;, &lt;code&gt;[GAM setup]&lt;/code&gt;, and &lt;code&gt;[GAM results]&lt;/code&gt;.&#xA;Please note that &lt;code&gt;[GAM setup]&lt;/code&gt; and &lt;code&gt;[GAM results]&lt;/code&gt; are normally hidden unless you run &lt;code&gt;[Load datset]&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smoke tool tutorial [01]: GAM manual - Data collection</title>
      <link>https://smokelyze.org/2025/smoke-tool-tutorial-01-gam-manual-data-collection/</link>
      <pubDate>Mon, 10 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/2025/smoke-tool-tutorial-01-gam-manual-data-collection/</guid>
      <description>&lt;style&gt;&#xA;pre code {&#xA;    font-size: 14px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;This tutorial is for the “PM2.5 and O3 smoke tool” app, available at (&lt;a href=&#34;https://westar.shinyapps.io/PMO3smokeTool/&#34; target=&#34;_blank&#34;&gt;https://westar.shinyapps.io/PMO3smokeTool/&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;[GAM manual]&lt;/code&gt; tab is designed to provide users with comprehensive tools to manually manage data collection and loading processes for building GAMs.&#xA;It includes two main sub-tabs: &lt;code&gt;[Data collection]&lt;/code&gt;, &lt;code&gt;[Load dataset]&lt;/code&gt;, &lt;code&gt;[GAM setup]&lt;/code&gt;, and &lt;code&gt;[GAM results]&lt;/code&gt;.&#xA;Please note that &lt;code&gt;[GAM setup]&lt;/code&gt; and &lt;code&gt;[GAM results]&lt;/code&gt; are normally hidden unless you run &lt;code&gt;[Load datset]&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>R shiny [04]: Hide/Show login page</title>
      <link>https://smokelyze.org/2025/r-shiny-04-hide-show-login-page/</link>
      <pubDate>Mon, 10 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/2025/r-shiny-04-hide-show-login-page/</guid>
      <description>&lt;style&gt;&#xA;pre code {&#xA;    font-size: 14px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;As explained in the previous post, creating a simulated login page in R Shiny is straightforward.&#xA;This post demonstrates how to toggle the visibility of the login page,&#xA;allowing a seamless transition from the login page to the main page.&#xA;This content includes the necessary information for the &lt;code&gt;server&lt;/code&gt; section.&#xA;The main focus of this post is to explain the transition of the login page using &lt;code&gt;actionButton()&lt;/code&gt;. The part where the user enters an email and proceeds will not be covered in this post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>R shiny [03]: Create login page</title>
      <link>https://smokelyze.org/2025/r-shiny-03-create-login-page/</link>
      <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/2025/r-shiny-03-create-login-page/</guid>
      <description>&lt;style&gt;&#xA;pre code {&#xA;    font-size: 14px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;Implementing a typical login page can be quite complex in R shiny.&#xA;Implementing such a typical login page requires handling user information and passwords,&#xA;which presents limitations when building it in R Shiny.&#xA;This post demonstrates how to create a “login page” in an R Shiny app.&#xA;More precisely, it might be more appropriate to call it a simulated login page.&lt;/p&gt;&#xA;&lt;p&gt;For example, you could create a feature that takes guests&#xA;from the login page to the main UI page by simply entering their email address.&#xA;Furthermore, you can even have your visitors receive a notification&#xA;via email as soon as they enter their email address.&lt;/p&gt;</description>
    </item>
    <item>
      <title>R shiny [02]: Dashboard UI</title>
      <link>https://smokelyze.org/2025/r-shiny-02-dashboard-ui/</link>
      <pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/2025/r-shiny-02-dashboard-ui/</guid>
      <description>&lt;style&gt;&#xA;pre code {&#xA;    font-size: 14px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;R shiny is a very useful and versatile tool to build your own app using R.&#xA;This blog section will walk you through the step-by-step process of how the GAM tool app was built.&#xA;Please note that your R environment and package versions may differ from mine.&#xA;Today’s topic will cover how the basic UI was set up.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;div id=&#34;install-and-import-required-pacakges&#34; class=&#34;section level2&#34;&gt;&#xA;&lt;h2&gt;Install and import required pacakges&lt;/h2&gt;&#xA;&lt;p&gt;To begin, let’s set up a simple &lt;code&gt;shiny&lt;/code&gt; application with a basic UI and server structure.&#xA;Before creating the app, ensure you have the necessary libraries installed. If not, you can install them using:&lt;/p&gt;</description>
    </item>
    <item>
      <title>R shiny [01]: Getting started</title>
      <link>https://smokelyze.org/2025/r-shiny-01-getting-started/</link>
      <pubDate>Tue, 04 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/2025/r-shiny-01-getting-started/</guid>
      <description>&lt;style&gt;&#xA;pre code {&#xA;    font-size: 14px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;div id=&#34;r-shiny&#34; class=&#34;section level2&#34;&gt;&#xA;&lt;h2&gt;R Shiny&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;R Shiny&lt;/strong&gt; is an open-source R package that allows users to build interactive web applications directly in R without requiring extensive knowledge of web development (HTML, CSS, or JavaScript). It is widely used for &lt;strong&gt;data visualization, dashboard creation, and interactive analytics&lt;/strong&gt;. Shiny applications run in a web browser and can be hosted &lt;strong&gt;locally&lt;/strong&gt;, on &lt;strong&gt;Shiny Server&lt;/strong&gt;, or deployed to &lt;strong&gt;ShinyApps.io&lt;/strong&gt; or other cloud platforms.&#xA;R Shiny is a game-changer for those who want to create &lt;strong&gt;interactive applications&lt;/strong&gt; and &lt;strong&gt;data-driven dashboards&lt;/strong&gt; without needing deep web development expertise. Whether you’re an analyst, researcher, or developer, Shiny provides a powerful and flexible way to bring your data to life.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/about/about_us/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/about/about_us/</guid>
      <description>&lt;script&gt;document.body.classList.add(&#34;page-about&#34;);&lt;/script&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;h1 style=&#34;color: white; text-align: center; text-shadow: 0 0.2rem 0.5rem var(--color-black);&#34; &gt;&#xA;  Haebum Lee, PhD. &#xA;  &lt;br&gt;&#xA;  (Developer)&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;div class=&#34;reveal-on-scroll&#34; style=&#34;text-align: center;&#34;&gt;&#xA;  &lt;h3 style=&#34;color: white; text-shadow: 0 0.2rem 0.5rem var(--color-black);&#34;&gt;&#xA;    Postdoctoral Scholar&#xA;  &lt;/h3&gt;&#xA;  &#xA;  &lt;p style=&#34;color: white; text-shadow: 0 0.2rem 0.5rem var(--color-black);&#34;&gt;&#xA;    Jaffe Group, &lt;br&gt;&#xA;    School of STEM, &lt;br&gt;&#xA;    University of Washington (UW), &lt;br&gt; &#xA;    Bothell, WA, United States&lt;br&gt;&#xA;  &lt;/p&gt;&#xA;  &#xA;  &lt;div class=&#34;social-links&#34;&gt;&#xA;    &lt;a href=&#34;https://www.linkedin.com/in/haebum-lee-683731305/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;      &lt;img src=&#34;https://smokelyze.org/images/linkedin_logo.png&#34; width=&#34;30&#34; height=&#34;30&#34; alt=&#34;LinkedIn&#34;&gt;&#xA;    &lt;/a&gt;&#xA;    &amp;nbsp;&amp;nbsp;&#xA;    &lt;a href=&#34;https://github.com/haebum1991/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;      &lt;img src=&#34;https://smokelyze.org/images/github_logo.png&#34; width=&#34;30&#34; height=&#34;30&#34; alt=&#34;GitHub&#34;&gt;&#xA;    &lt;/a&gt;&#xA;    &amp;nbsp;&amp;nbsp;&#xA;    &lt;a href=&#34;https://orcid.org/0009-0001-2045-8532&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;      &lt;img src=&#34;https://smokelyze.org/images/ORCID_logo.png&#34; width=&#34;30&#34; height=&#34;30&#34; alt=&#34;ORCID&#34;&gt;&#xA;    &lt;/a&gt;&#xA;    &amp;nbsp;&amp;nbsp;&#xA;    &lt;a href=&#34;https://scholar.google.com/citations?user=98LKhgUAAAAJ&amp;hl&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;      &lt;img src=&#34;https://smokelyze.org/images/ggscholar_logo.png&#34; width=&#34;30&#34; height=&#34;30&#34; alt=&#34;GGS&#34;&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;br&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;card-about reveal-on-scroll&#34;&gt;&#xA;&#xA;  &lt;h2 style=&#34;color: var(--card-shadow);&#34;&gt;Professional Summary&lt;/h2&gt;&#xA;  &lt;p style=&#34;margin-bottom: 1.5rem;&#34;&gt;&#xA;    I am an Atmospheric and Data Scientist (Ph.D.)&#xA;    with 8+ years of experience blending atmospheric air quality modeling,&#xA;    machine/deep learning, and cloud-scale geospatial data analysis.&#xA;    I have a proven track record of bridging the gap between rigorous academic research and production-ready&#xA;    intelligence tools,&#xA;    synthesizing multi-hazard environmental parameters to drive data-informed decisions.&#xA;  &lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/about/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/about/contact/</guid>
      <description>&lt;script&gt;document.body.classList.add(&#34;page-about&#34;);&lt;/script&gt;&#xA;&#xA;&lt;h1 style=&#34;text-align: center;&#34;&gt;&#xA;    Contact Us&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;div class=&#34;card-about reveal-on-scroll&#34;&gt;&#xA;    &lt;p style=&#34;text-align: center; margin-bottom: 2rem;&#34;&gt;&#xA;        Have any questions or feedback? &lt;br&gt;&#xA;        Fill out the form below and we will get back to you as soon as possible.&#xA;    &lt;/p&gt;&#xA;&#xA;    &lt;!-- &#xA;      Netlify Forms:&#xA;      Adding data-netlify=&#34;true&#34; tells Netlify to automatically process this form.&#xA;      You can configure email notifications for new submissions in your Netlify Dashboard.&#xA;    --&gt;&#xA;    &#xA;    &lt;form name=&#34;contact&#34; id=&#34;contactForm&#34; method=&#34;POST&#34; data-netlify=&#34;true&#34;&#xA;        style=&#34;max-width: 100%; margin: 0 auto; display: flex; flex-direction: column; gap: 1.5rem;&#34;&gt;&#xA;&#xA;        &lt;!-- This hidden field is for Netlify&#39;s bot protection (optional but recommended) --&gt;&#xA;        &lt;input type=&#34;hidden&#34; name=&#34;form-name&#34; value=&#34;contact&#34; /&gt;&#xA;&#xA;        &lt;div style=&#34;display: flex; flex-direction: column; gap: 0.5rem;&#34;&gt;&#xA;            &lt;label for=&#34;name&#34; style=&#34;color: var(--card-shadow); font-weight: bold;&#34;&gt;Name&lt;/label&gt;&#xA;            &lt;input type=&#34;text&#34; id=&#34;name&#34; name=&#34;name&#34; required placeholder=&#34;Your Name&#34;&#xA;                style=&#34;padding: 1rem; border-radius: var(--border-radius-0p8rem); border: 0.1rem solid var(--card-shadow); background: var(--color-white); color: var(--color-black); font-size: 1.6rem; outline: none;&#34;&gt;&#xA;        &lt;/div&gt;&#xA;        &#xA;        &lt;div style=&#34;display: flex; flex-direction: column; gap: 0.5rem;&#34;&gt;&#xA;            &lt;label for=&#34;affiliation&#34; style=&#34;color: var(--card-shadow); font-weight: bold;&#34;&gt;Affiliation&#xA;                (Optional)&lt;/label&gt;&#xA;            &lt;input type=&#34;text&#34; id=&#34;affiliation&#34; name=&#34;affiliation&#34; placeholder=&#34;University, Company, etc.&#34;&#xA;                style=&#34;padding: 1rem; border-radius: var(--border-radius-0p8rem); border: 0.1rem solid var(--card-shadow); background: var(--color-white); color: var(--color-black); font-size: 1.6rem; outline: none;&#34;&gt;&#xA;        &lt;/div&gt;&#xA;        &#xA;        &lt;div style=&#34;display: flex; flex-direction: column; gap: 0.5rem;&#34;&gt;&#xA;            &lt;label for=&#34;email&#34; style=&#34;color: var(--card-shadow); font-weight: bold;&#34;&gt;Email Address&lt;/label&gt;&#xA;            &lt;input type=&#34;email&#34; id=&#34;email&#34; name=&#34;email&#34; required placeholder=&#34;your.email@example.com&#34;&#xA;                style=&#34;padding: 1rem; border-radius: var(--border-radius-0p8rem); border: 0.1rem solid var(--card-shadow); background: var(--color-white); color: var(--color-black); font-size: 1.6rem; outline: none;&#34;&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div style=&#34;display: flex; flex-direction: column; gap: 0.5rem;&#34;&gt;&#xA;            &lt;label for=&#34;message&#34; style=&#34;color: var(--card-shadow); font-weight: bold;&#34;&gt;Message&lt;/label&gt;&#xA;            &lt;textarea id=&#34;message&#34; name=&#34;message&#34; rows=&#34;6&#34; required placeholder=&#34;How can we help you?&#34;&#xA;                style=&#34;padding: 1rem; border-radius: var(--border-radius-0p8rem); border: 0.1rem solid var(--card-shadow); background: var(--color-white); color: var(--color-black); font-size: 1.6rem; resize: vertical; outline: none;&#34;&gt;&lt;/textarea&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div style=&#34;text-align: center; margin-top: 1rem;&#34;&gt;&#xA;            &lt;button id=&#34;submitBtn&#34; type=&#34;submit&#34;&#xA;                style=&#34;background-color: var(--card-shadow); color: var(--color-bg); border: none; padding: 1rem 3rem; font-size: 1.6rem; font-weight: bold; border-radius: calc(var(--border-radius-0p8rem) * 2); cursor: pointer; transition: transform 0.3s, background-color 0.3s; box-shadow: 0 0.4rem 1rem rgba(0,0,0,0.2);&#34;&gt;&#xA;                Send Message&#xA;            &lt;/button&gt;&#xA;            &lt;div id=&#34;submitSuccess&#34;&#xA;                style=&#34;display: none; color: #34A853; font-weight: bold; font-size: 1.8rem; margin-top: 1.5rem;&#34;&gt;&#xA;                ✔ Complete! Thank you for your message.&#xA;            &lt;/div&gt;&#xA;            &lt;div id=&#34;submitError&#34;&#xA;                style=&#34;display: none; color: #EA4335; font-weight: bold; font-size: 1.6rem; margin-top: 1.5rem;&#34;&gt;&#xA;                ✖ Something went wrong. Please try again.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/form&gt;&#xA;    &lt;br&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;    const contactForm = document.getElementById(&#34;contactForm&#34;);&#xA;    const submitBtn = document.getElementById(&#34;submitBtn&#34;);&#xA;    const submitSuccess = document.getElementById(&#34;submitSuccess&#34;);&#xA;    const submitError = document.getElementById(&#34;submitError&#34;);&#xA;&#xA;    if (contactForm) {&#xA;        contactForm.addEventListener(&#34;submit&#34;, function (e) {&#xA;            e.preventDefault(); // 기본(화면 넘어감) 방지&#xA;            submitBtn.innerText = &#34;Sending...&#34;;&#xA;            submitBtn.disabled = true;&#xA;&#xA;            const formData = new FormData(contactForm);&#xA;            const searchParams = new URLSearchParams();&#xA;            for (const pair of formData) {&#xA;                searchParams.append(pair[0], pair[1]);&#xA;            }&#xA;&#xA;            // AJAX로 데이터 전송&#xA;            fetch(&#34;/&#34;, {&#xA;                method: &#34;POST&#34;,&#xA;                headers: { &#34;Content-Type&#34;: &#34;application/x-www-form-urlencoded&#34; },&#xA;                body: searchParams.toString()&#xA;            })&#xA;                .then(() =&gt; {&#xA;                    submitBtn.style.display = &#34;none&#34;;&#xA;                    submitSuccess.style.display = &#34;block&#34;;&#xA;                    submitError.style.display = &#34;none&#34;;&#xA;                    contactForm.reset();&#xA;                })&#xA;                .catch((error) =&gt; {&#xA;                    console.error(&#34;Form submission error:&#34;, error);&#xA;                    submitBtn.innerText = &#34;Send Message&#34;;&#xA;                    submitBtn.disabled = false;&#xA;                    submitSuccess.style.display = &#34;none&#34;;&#xA;                    submitError.style.display = &#34;block&#34;;&#xA;                });&#xA;        });&#xA;    }&#xA;&lt;/script&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/about/privacy-policy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/about/privacy-policy/</guid>
      <description>&lt;script&gt;document.body.classList.add(&#34;page-about&#34;);&lt;/script&gt;&#xA;&#xA;&lt;h1 style=&#34;text-align: center;&#34;&gt;&#xA;    Privacy Policy&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p style=&#34;text-align: center;&#34;&gt;&#xA;    &lt;strong&gt;Last Updated:&lt;/strong&gt; February 25, 2026&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;card-about reveal-on-scroll&#34;&gt;&#xA;&#xA;    &lt;p&gt;This Privacy Policy explains how Smokelyze (&#34;we,&#34; &#34;us,&#34; or &#34;our&#34;) collects, uses, and discloses information about&#xA;        you when you access or use our web application. By using Smokelyze, you agree to the collection and use of&#xA;        information in accordance with this policy.&lt;/p&gt;&#xA;&#xA;    &lt;br&gt;&#xA;&#xA;    &lt;h3 style=&#34;color: var(--card-shadow);&#34;&gt;1. Information We Collect&lt;/h3&gt;&#xA;    &lt;p&gt;We only collect information that is necessary to provide and improve our services.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/about/smokelyze/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/about/smokelyze/</guid>
      <description>&lt;h1 style=&#34;text-align: center;&#34;&gt;&#xA;  Smokelyze&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;h3 style=&#34;text-align: center;&#34;&gt;&#xA;  &lt;b style=&#34;color: var(--card-shadow);&#34;&gt;[Smokelyze]&lt;/b&gt;, formerly known as [PMO3smokeTool], &#xA;  &lt;br&gt;&#xA;  is a comprehensive analytical platform for wildfire smoke impact assessment.&#xA;&lt;/h3&gt;&#xA;&#xA;&lt;div style=&#34;text-align: left;&#34;&gt;&#xA;  &lt;p style=&#34;text-align: center;&#34;&gt;&#xA;    &lt;a href=&#34;https://smokelyze.org/map/&#34; rel=&#34;noopener noreferrer&#34; style=&#34;font-size: 1.6rem;&#34;&gt;&#xA;      Smokelyze Map&#xA;    &lt;/a&gt; (JavaScript version) &#xA;    &lt;br&gt;&#xA;    &lt;a href=&#34;https://westar.shinyapps.io/PMO3smokeTool/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;font-size: 1.6rem;&#34;&gt;&#xA;      PMO3smokeTool&#xA;    &lt;/a&gt; (Legacy: R shiny version)&#xA;  &lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;reveal-on-scroll&#34;&gt;&#xA;  &lt;h2&gt;Purpose of tool&lt;/h2&gt;&#xA;  &#xA;  &lt;p&gt;The purpose of this app is to demonstrate the application of a&#xA;  &lt;b style=&#34;color: var(--card-shadow);&#34;&gt;Generalized Additive Model (GAM)&lt;/b&gt; for predicting MDA8 O3 using meteorological data under both smoke and non-smoke conditions.&#xA;  In this app, a GAM is derived using the &#34;&lt;b style=&#34;color: var(--card-shadow);&#34;&gt;mgcv&lt;/b&gt;&#34; package in R. We hope this tool will be useful for state agencies and others &#xA;  in understanding the factors that control O3 production.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/about/terms-of-use/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/about/terms-of-use/</guid>
      <description>&lt;script&gt;document.body.classList.add(&#34;page-about&#34;);&lt;/script&gt;&#xA;&#xA;&lt;h1 style=&#34;text-align: center;&#34;&gt;&#xA;    Terms of Use &amp; Disclaimer&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;p style=&#34;text-align: center;&#34;&gt;&#xA;    &lt;strong&gt;Last Updated:&lt;/strong&gt; March 3, 2026&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;card-about reveal-on-scroll&#34;&gt;&#xA;    &lt;p&gt;Welcome to &lt;strong style=&#34;color: var(--card-shadow);&#34;&gt;Smokelyze&lt;/strong&gt;. By accessing or using this application,&#xA;        you agree to be bound by these Terms of Use. If you&#xA;        do not agree with any part of these terms, please do not use our services.&lt;/p&gt;&#xA;&#xA;    &lt;br&gt;&#xA;&#xA;    &lt;h3 style=&#34;color: var(--card-shadow);&#34;&gt;1. Educational and Informational Purposes Only&lt;/h3&gt;&#xA;    &lt;p&gt;Smokelyze is an educational and research-oriented web application developed to provide advanced spatiotemporal&#xA;        analytics for wildfire smoke and air quality. The data, metrics, predictive models, and informational content&#xA;        (&#34;Content&#34;) provided on this site are for &lt;strong&gt;general informational and research purposes only.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/map/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/map/</guid>
      <description>&lt;script&gt;document.body.classList.add(&#34;page-map&#34;);&lt;/script&gt;&#xA;&#xA;&lt;!-- Content Area --&gt;&#xA;&lt;link rel=&#34;preconnect&#34; href=&#34;https://unpkg.com&#34;&gt;&#xA;&lt;link rel=&#34;preconnect&#34; href=&#34;https://cdn.jsdelivr.net&#34;&gt;&#xA;&lt;link rel=&#34;preconnect&#34; href=&#34;https://cdn.plot.ly&#34;&gt;&#xA;&lt;link rel=&#34;preconnect&#34; href=&#34;https://tiles.openfreemap.org&#34;&gt;&#xA;&#xA;&lt;link href=&#34;https://unpkg.com/@mapbox/mapbox-gl-draw@1.4.3/dist/mapbox-gl-draw.css&#34; rel=&#34;stylesheet&#34;&gt;&#xA;&lt;link href=&#34;https://unpkg.com/maplibre-gl@5.24.0/dist/maplibre-gl.css&#34; rel=&#34;stylesheet&#34;&gt;&#xA;&lt;link href=&#34;https://cdn.jsdelivr.net/npm/driver.js@1.4.0/dist/driver.css&#34; rel=&#34;stylesheet&#34;&gt;&#xA;&lt;link href=&#34;https://smokelyze.org/css/map.css&#34; rel=&#34;stylesheet&#34;&gt;&#xA;&#xA;&lt;script src=&#34;https://unpkg.com/@mapbox/mapbox-gl-draw@1.4.3/dist/mapbox-gl-draw.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;https://unpkg.com/maplibre-gl@5.24.0/dist/maplibre-gl.js&#34; defer&gt;&lt;/script&gt;&#xA;&#xA;&lt;!-- MapLibre old versions&#xA;&lt;link href=&#34;https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.css&#34; rel=&#34;stylesheet&#34;&gt;&#xA;&lt;script src=&#34;https://unpkg.com/maplibre-gl@4.7.1/dist/maplibre-gl.js&#34; defer&gt;&lt;/script&gt;&#xA;--&gt;&#xA;&#xA;&lt;!-- Measure js pacakge&#xA;&lt;link href=&#34;https://cdn.jsdelivr.net/npm/maplibre-gl-measures@latest/dist/maplibre-gl-measures.css&#34; rel=&#34;stylesheet&#34; /&gt;&#xA;&lt;script src=&#34;https://cdn.jsdelivr.net/npm/maplibre-gl-measures@latest/dist/maplibre-gl-measures.min.js&#34;&gt;&lt;/script&gt;&#xA;--&gt;&#xA;&#xA;&lt;div class=&#34;container&#34;&gt;&#xA;&#xA;  &lt;div id=&#34;MapLoadingOverlay&#34;&gt;&#xA;    &lt;div id=&#34;MapLoadingSpinner&#34;&gt;&lt;/div&gt;&#xA;    &lt;div id=&#34;MapLoadingText&#34;&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;!-- map panel wrapper --&gt;&#xA;  &lt;div id=&#34;MapWrapper&#34;&gt;&#xA;    &lt;div id=&#34;map&#34;&gt;&lt;/div&gt;&#xA;    &lt;button class=&#34;FigurePage-toggle&#34; id=&#34;FigurePageToggle&#34; title=&#34;Stats &amp; Charts Panel&#34;&gt;&#xA;      &lt;svg width=&#34;28&#34; height=&#34;28&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-stats&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;svg class=&#34;chevron&#34; width=&#34;24&#34; height=&#34;24&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-chevron-right&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;&#xA;    &lt;button class=&#34;accordion-toggle&#34; id=&#34;WFnewsToggle&#34; title=&#34;Wildfire News&#34;&gt;&#xA;      &lt;canvas class=&#34;ui-pulsing-icon&#34; data-type=&#34;news&#34; width=&#34;36&#34; height=&#34;36&#34; style=&#34;vertical-align:middle;&#34;&gt;&lt;/canvas&gt;&#xA;    &lt;/button&gt;&#xA;&#xA;    &lt;button class=&#34;accordion-toggle&#34; id=&#34;MapPostToggle&#34; title=&#34;MapPost List&#34;&gt;&#xA;      &lt;canvas class=&#34;ui-pulsing-icon&#34; data-type=&#34;alert&#34; width=&#34;36&#34; height=&#34;36&#34; style=&#34;vertical-align:middle;&#34;&gt;&lt;/canvas&gt;&#xA;    &lt;/button&gt;&#xA;    &#xA;    &lt;button class=&#34;accordion-toggle&#34; id=&#34;AerscreenToggle&#34; title=&#34;Dispersion Screening&#34; style=&#34;display: none;&#34;&gt;&#xA;      &lt;svg width=&#34;24&#34; height=&#34;24&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-aerscreen&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;    &#xA;    &lt;button class=&#34;accordion-toggle&#34; id=&#34;HysplitToggle&#34; title=&#34;HYSPLIT Simulation&#34;&gt;&#xA;       &lt;svg width=&#34;24&#34; height=&#34;24&#34;&gt;&#xA;         &lt;use xlink:href=&#34;#icon-hysplit&#34; /&gt;&#xA;       &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;    &#xA;    &lt;button class=&#34;accordion-toggle&#34; id=&#34;LegendToggle&#34; title=&#34;Map Legend&#34;&gt;&#xA;      &lt;svg width=&#34;24&#34; height=&#34;24&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-legend&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;&#xA;    &lt;button class=&#34;Desc-toggle&#34; id=&#34;DescToggle&#34; title=&#34;Layer Descriptions&#34;&gt;&#xA;      &lt;svg class=&#34;chevron&#34; width=&#34;24&#34; height=&#34;24&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-chevron-left&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;      &lt;svg width=&#34;28&#34; height=&#34;28&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-desc&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;&#xA;    &lt;div class=&#34;map-btn-wrapper&#34; id=&#34;MapBtnWrapper&#34;&gt;&#xA;      &#xA;      &lt;button class=&#34;map-btn-control&#34; id=&#34;MapBtnDraw&#34; title=&#34;Draw Area Stats&#34;&gt;&#xA;        &lt;svg width=&#34;28&#34; height=&#34;28&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-draw&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;      &#xA;      &lt;button class=&#34;map-btn-control&#34; id=&#34;MapBtnCapture&#34; title=&#34;Snapshot&#34;&gt;&#xA;        &lt;svg width=&#34;28&#34; height=&#34;28&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-camera&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;      &lt;button class=&#34;map-btn-control&#34; id=&#34;MapBtnAnimate&#34; title=&#34;Create Time-lapse GIF&#34;&gt;&#xA;        &lt;svg width=&#34;28&#34; height=&#34;28&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-video&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;      &lt;button class=&#34;map-btn-control&#34; id=&#34;MapBtnReset&#34; title=&#34;Reset All&#34;&gt;&#xA;        &lt;svg width=&#34;28&#34; height=&#34;28&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-refresh&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;      &lt;button class=&#34;map-btn-control&#34; id=&#34;MapBtnShortcuts&#34; title=&#34;Keyboard Shortcuts&#34;&gt;&#xA;        &lt;svg width=&#34;28&#34; height=&#34;28&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-keyboard&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;&#xA;      &lt;button class=&#34;map-btn-control&#34; id=&#34;MapBtnTutorial&#34; title=&#34;Quick Start&#34;&gt;&#xA;        &lt;svg width=&#34;28&#34; height=&#34;28&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-help&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;      &#xA;      &lt;button class=&#34;map-btn-control&#34; id=&#34;MapBtnAnalytics&#34; title=&#34;Dashboard Analytics&#34;&gt;&#xA;        &lt;svg width=&#34;28&#34; height=&#34;28&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-pie-chart&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;  &lt;/div&gt;&#xA;  &#xA;  &lt;!-- Legend Drawer will be here --&gt;&#xA;&#xA;  &lt;div class=&#34;toolbar-date toolbar-date-page&#34;&gt;&#xA;    &lt;div class=&#34;date-input&#34;&gt;&#xA;&#xA;      &lt;!-- Date picker --&gt;&#xA;      &lt;input id=&#34;datePicker&#34; type=&#34;date&#34;&gt;&#xA;&#xA;      &lt;!-- Time picker --&gt;&#xA;      &lt;select id=&#34;timePicker&#34; style=&#34;display: none;&#34;&gt;&#xA;        &lt;option value=&#34;00&#34;&gt;00:00&lt;/option&gt;&#xA;        &lt;option value=&#34;01&#34;&gt;01:00&lt;/option&gt;&#xA;        &lt;option value=&#34;02&#34;&gt;02:00&lt;/option&gt;&#xA;        &lt;option value=&#34;03&#34;&gt;03:00&lt;/option&gt;&#xA;        &lt;option value=&#34;04&#34;&gt;04:00&lt;/option&gt;&#xA;        &lt;option value=&#34;05&#34;&gt;05:00&lt;/option&gt;&#xA;        &lt;option value=&#34;06&#34;&gt;06:00&lt;/option&gt;&#xA;        &lt;option value=&#34;07&#34;&gt;07:00&lt;/option&gt;&#xA;        &lt;option value=&#34;08&#34;&gt;08:00&lt;/option&gt;&#xA;        &lt;option value=&#34;09&#34;&gt;09:00&lt;/option&gt;&#xA;        &lt;option value=&#34;10&#34;&gt;10:00&lt;/option&gt;&#xA;        &lt;option value=&#34;11&#34;&gt;11:00&lt;/option&gt;&#xA;        &lt;option value=&#34;12&#34;&gt;12:00&lt;/option&gt;&#xA;        &lt;option value=&#34;13&#34;&gt;13:00&lt;/option&gt;&#xA;        &lt;option value=&#34;14&#34;&gt;14:00&lt;/option&gt;&#xA;        &lt;option value=&#34;15&#34;&gt;15:00&lt;/option&gt;&#xA;        &lt;option value=&#34;16&#34;&gt;16:00&lt;/option&gt;&#xA;        &lt;option value=&#34;17&#34;&gt;17:00&lt;/option&gt;&#xA;        &lt;option value=&#34;18&#34;&gt;18:00&lt;/option&gt;&#xA;        &lt;option value=&#34;19&#34;&gt;19:00&lt;/option&gt;&#xA;        &lt;option value=&#34;20&#34;&gt;20:00&lt;/option&gt;&#xA;        &lt;option value=&#34;21&#34;&gt;21:00&lt;/option&gt;&#xA;        &lt;option value=&#34;22&#34;&gt;22:00&lt;/option&gt;&#xA;        &lt;option value=&#34;23&#34;&gt;23:00&lt;/option&gt;&#xA;      &lt;/select&gt;&#xA;      &lt;span id=&#34;timezoneLabel&#34;&#xA;        style=&#34;display: none; font-size: 1.4rem; font-weight: bold; color: var(--text-main);&#34;&gt;&lt;/span&gt;&#xA;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;date-controls&#34;&gt;&#xA;      &lt;button class=&#34;minus1y&#34; id=&#34;onMapMinus1y&#34; title=&#34;-1 Year&#34;&gt;-y&lt;/button&gt;&#xA;      &lt;button class=&#34;minus1m&#34; id=&#34;onMapMinus1m&#34; title=&#34;-1 Month&#34;&gt;-m&lt;/button&gt;&#xA;      &lt;button class=&#34;minus1d&#34; id=&#34;onMapMinus1d&#34; title=&#34;-1 Day&#34;&gt;-d&lt;/button&gt;&#xA;&#xA;      &lt;!-- Hour buttons --&gt;&#xA;      &lt;button class=&#34;minus1h&#34; id=&#34;onMapMinus1h&#34; title=&#34;-1 Hour&#34; style=&#34;display: none;&#34;&gt;-h&lt;/button&gt;&#xA;      &lt;button class=&#34;plus1h&#34; id=&#34;onMapPlus1h&#34; title=&#34;+1 Hour&#34; style=&#34;display: none;&#34;&gt;+h&lt;/button&gt;&#xA;      &lt;!-- Hour buttons --&gt;&#xA;&#xA;      &lt;button class=&#34;plus1d&#34; id=&#34;onMapPlus1d&#34; title=&#34;+1 Day&#34;&gt;+d&lt;/button&gt;&#xA;      &lt;button class=&#34;plus1m&#34; id=&#34;onMapPlus1m&#34; title=&#34;+1 Month&#34;&gt;+m&lt;/button&gt;&#xA;      &lt;button class=&#34;plus1y&#34; id=&#34;onMapPlus1y&#34; title=&#34;+1 Year&#34;&gt;+y&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;!-- Layer Toggle Button (Always on Map) --&gt;&#xA;  &lt;button class=&#34;accordion-toggle&#34; id=&#34;AccordionToggle&#34; title=&#34;Layers&#34;&gt;&#xA;    &lt;svg width=&#34;24&#34; height=&#34;24&#34;&gt;&#xA;      &lt;use xlink:href=&#34;#icon-layers&#34; /&gt;&#xA;    &lt;/svg&gt;&#xA;  &lt;/button&gt;&#xA;&#xA;  &lt;button class=&#34;accordion-toggle&#34; id=&#34;AiChatToggle&#34; title=&#34;Ai Chat&#34;&gt;&#xA;    &lt;svg width=&#34;24&#34; height=&#34;24&#34;&gt;&#xA;      &lt;use xlink:href=&#34;#icon-chat&#34; /&gt;&#xA;    &lt;/svg&gt;&#xA;  &lt;/button&gt;&#xA;&#xA;  &lt;!-- topright: accordion panel --&gt;&#xA;  &lt;div class=&#34;accordion-page collapsed&#34; id=&#34;AccordionPage&#34;&gt;&#xA;    &lt;div class=&#34;accordion&#34;&gt;&#xA;      &lt;div class=&#34;accordion-header&#34;&gt;&#xA;        &lt;span class=&#34;accordion-title&#34;&gt;Layers&lt;/span&gt;&#xA;        &lt;button id=&#34;AccordionClose&#34; class=&#34;ui-btn-close&#34;&gt;&#xA;          &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;            &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;          &lt;/svg&gt;&#xA;        &lt;/button&gt;&#xA;      &lt;/div&gt;&#xA;      &#xA;      &lt;!-- Point Layers Toggle (Injected via JS) --&gt;&#xA;      &lt;div id=&#34;ToggleSwitchPointLayers&#34;&gt;&lt;/div&gt;&#xA;&#xA;      &lt;!-- State Shading Toggle (Injected via JS) --&gt;&#xA;      &lt;div id=&#34;ToggleSwitchStateShading&#34;&gt;&lt;/div&gt;&#xA;&#xA;      &lt;!-- Day/Night Shadow Toggle (Injected via JS) --&gt;&#xA;      &lt;div id=&#34;ToggleSwitchDayNight&#34;&gt;&lt;/div&gt;&#xA;&#xA;      &lt;!-- NA Values Toggle (Injected via JS) --&gt;&#xA;      &lt;div id=&#34;ToggleSwitchNaShading&#34;&gt;&lt;/div&gt;&#xA;&#xA;      &lt;!-- Base Map Selection --&gt;&#xA;      &lt;div id=&#34;BaseMapSelection&#34; style=&#34;margin-top: 1rem; margin-bottom: 1rem;&#34;&gt;&#xA;        &lt;div id=&#34;MapTypeHeader&#34; style=&#34;font-size: 1.4rem; font-weight: bold; margin-bottom: 0.8rem; color: var(--text-main); display: flex; align-items: center; justify-content: space-between;&#34;&gt;&#xA;          &lt;span&gt;Map Type&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;base-map-grid&#34; id=&#34;BaseMapGrid&#34;&gt;&#xA;          &lt;!-- Items injected via JS --&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &#xA;      &lt;!-- Boundary Color/Width Selection --&gt;&#xA;      &lt;div id=&#34;BoundaryColorWidthSelection&#34; style=&#34;margin-top: 1rem; margin-bottom: 1rem;&#34;&gt;&#xA;        &lt;div id=&#34;BoundaryColorWidthHeader&#34;&#xA;          style=&#34;font-size: 1.4rem; font-weight: bold; margin-bottom: 0.8rem; color: var(--text-main); display: flex; align-items: center; justify-content: space-between;&#34;&gt;&#xA;          &lt;span&gt;Boundary Color/Width&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div style=&#34;display: flex; gap: 0.6rem; padding: 0 0.4rem; align-items: center;&#34;&gt;&#xA;          &lt;!-- White --&gt;&#xA;          &lt;button class=&#34;boundary-color-btn&#34; data-color=&#34;#ffffff&#34;&#xA;            style=&#34;width: 3rem; height: 3rem; border-radius: var(--border-radius-0p8rem); border: 0.2rem solid transparent; background: #ffffff; cursor: pointer; box-shadow: 0 0.2rem 0.6rem rgba(0,0,0,0.15); transition: all 0.2s; padding: 0;&#34;&#xA;            title=&#34;White&#34;&gt;&lt;/button&gt;&#xA;&#xA;          &lt;!-- Grey --&gt;&#xA;          &lt;button class=&#34;boundary-color-btn&#34; data-color=&#34;#888888&#34;&#xA;            style=&#34;width: 3rem; height: 3rem; border-radius: var(--border-radius-0p8rem); border: 0.2rem solid transparent; background: #888888; cursor: pointer; box-shadow: 0 0.2rem 0.6rem rgba(0,0,0,0.15); transition: all 0.2s; padding: 0;&#34;&#xA;            title=&#34;Grey&#34;&gt;&lt;/button&gt;&#xA;&#xA;          &lt;!-- Black --&gt;&#xA;          &lt;button class=&#34;boundary-color-btn&#34; data-color=&#34;#000000&#34;&#xA;            style=&#34;width: 3rem; height: 3rem; border-radius: var(--border-radius-0p8rem); border: 0.2rem solid transparent; background: #000000; cursor: pointer; box-shadow: 0 0.2rem 0.6rem rgba(0,0,0,0.15); transition: all 0.2s; padding: 0;&#34;&#xA;            title=&#34;Black&#34;&gt;&lt;/button&gt;&#xA;&#xA;          &lt;!-- Custom Button --&gt;&#xA;          &lt;button class=&#34;boundary-color-btn-custom&#34; id=&#34;boundary-custom-btn&#34;&#xA;            style=&#34;width: 3rem; height: 3rem; border-radius: var(--border-radius-0p8rem); border: 0.2rem solid transparent; background: linear-gradient(135deg, #ff3366, #ff9933, #33ccff, #33ff66); cursor: pointer; box-shadow: 0 0.2rem 0.6rem rgba(0,0,0,0.15); transition: all 0.2s; padding: 0; position: relative;&#34;&#xA;            title=&#34;Custom Color&#34;&gt;&#xA;            &lt;input type=&#34;color&#34; id=&#34;boundary-color-picker&#34;&#xA;              style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;&#34;&gt;&#xA;          &lt;/button&gt;&#xA;&#xA;          &lt;!-- Width Select --&gt;&#xA;          &lt;select id=&#34;boundary-width-select&#34;&#xA;            style=&#34;flex: 1; padding: 0.6rem 0.2rem; border-radius: var(--border-radius-0p8rem); border: 0.1rem solid var(--card-shadow); background: var(--color-bg); color: var(--text-main); font-size: 1.4rem; font-weight: bold; cursor: pointer; text-align: center; box-shadow: 0 0.2rem 0.6rem rgba(0,0,0,0.15); text-align-last: center; height: 3rem; min-width: 6.5rem;&#34;&gt;&#xA;            &lt;option value=&#34;0.0&#34;&gt;0.0px&lt;/option&gt;&#xA;            &lt;option value=&#34;0.5&#34;&gt;0.5px&lt;/option&gt;&#xA;            &lt;option value=&#34;1.0&#34;&gt;1.0px&lt;/option&gt;&#xA;            &lt;option value=&#34;1.5&#34;&gt;1.5px&lt;/option&gt;&#xA;            &lt;option value=&#34;2.0&#34;&gt;2.0px&lt;/option&gt;&#xA;            &lt;option value=&#34;2.5&#34;&gt;2.5px&lt;/option&gt;&#xA;            &lt;option value=&#34;3.0&#34;&gt;3.0px&lt;/option&gt;&#xA;            &lt;option value=&#34;3.5&#34;&gt;3.5px&lt;/option&gt;&#xA;            &lt;option value=&#34;4.0&#34;&gt;4.0px&lt;/option&gt;&#xA;          &lt;/select&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &#xA;      &lt;hr style=&#34;margin-top: 0.5rem; margin-bottom: 0.5rem;&#34;&gt;&#xA;&#xA;      &lt;details open&gt;&#xA;        &lt;summary&gt;NIFC&lt;/summary&gt;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-wildfire-nifc&#34;&gt;&#xA;          WF incident locations&#xA;          &lt;canvas class=&#34;ui-pulsing-icon&#34; data-type=&#34;fire&#34; width=&#34;24&#34; height=&#34;24&#34;&#xA;            style=&#34;vertical-align:middle; margin-right:0.4rem;&#34;&gt;&lt;/canvas&gt;&#xA;          &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;        &lt;/label&gt;&#xA;      &lt;/details&gt;&#xA;      &#xA;      &lt;details&gt;&#xA;        &lt;summary&gt;AirNow&lt;/summary&gt;&#xA;        &lt;div id=&#34;SiteSearchWrapperAirNow&#34;&gt;&lt;/div&gt;&#xA;        &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-airnow-daily-mda8&#34;&gt; Obs MDA8&lt;/label&gt;&#xA;        &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-airnow-daily-pm25&#34;&gt; Obs PM2.5&lt;/label&gt;&#xA;        &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-airnow-hourly-ozone&#34;&gt; Obs O3 (hourly)&lt;/label&gt;&#xA;        &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-airnow-hourly-pm25&#34;&gt; Obs PM2.5 (hourly)&lt;/label&gt;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-airnow-hourly-no2&#34;&gt; Obs NO2 (hourly)&#xA;          &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;        &lt;/label&gt;&#xA;      &lt;/details&gt;&#xA;      &#xA;      &lt;details&gt;&#xA;        &lt;summary&gt;Satellite &amp; Model&lt;/summary&gt;&#xA;        &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-smoke&#34;&gt; HMS-smoke&lt;/label&gt;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-fire&#34;&gt; HMS-fire&#xA;          &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;        &lt;/label&gt;&#xA;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-tempo-no2&#34;&gt; TEMPO-NO2VCD (hourly)&#xA;        &lt;/label&gt;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-tempo-hcho&#34;&gt; TEMPO-HCHOVCD (hourly)&#xA;          &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;        &lt;/label&gt;&#xA;        &#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-tropomi-no2&#34;&gt; TROPOMI-NO2VCD&#xA;        &lt;/label&gt;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-tropomi-hcho&#34;&gt; TROPOMI-HCHOVCD&#xA;          &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;        &lt;/label&gt;&#xA;        &#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-hrrr-colmd&#34;&gt; HRRR-smokeVCD (hourly)&#xA;        &lt;/label&gt;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-hrrr-massden&#34;&gt; HRRR-smoke8m (hourly)&#xA;          &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;        &lt;/label&gt;&#xA;        &#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-goes-aod-east&#34;&gt; GOES-AOD-East (hourly)&#xA;        &lt;/label&gt;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-goes-aod-west&#34;&gt; GOES-AOD-West (hourly)&#xA;        &lt;/label&gt;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-goes-geocolor-east&#34;&gt; GOES-GeoColor-East (hourly)&#xA;          &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;        &lt;/label&gt;&#xA;&#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-viirs-truecolor&#34;&gt; VIIRS-TrueColor&#xA;          &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;        &lt;/label&gt;&#xA;        &#xA;        &lt;label&gt;&#xA;          &lt;input type=&#34;checkbox&#34; id=&#34;layer-burn&#34;&gt; MODIS area burned&#xA;          &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;        &lt;/label&gt;&#xA;      &lt;/details&gt;&#xA;&#xA;      &lt;details&gt;&#xA;        &lt;summary&gt;Published &amp; Latest&lt;/summary&gt;&#xA;&#xA;        &lt;label for=&#34;MapDataSelect&#34; id=&#34;SelectDatasetLabel&#34;&#xA;          style=&#34;display: inline-flex; align-items: center; gap: 0.3rem; margin: 0; position: relative;&#34;&gt;&#xA;          Select dataset:&#xA;          &lt;span id=&#34;DatasetHelpBtn&#34; class=&#34;layer-help-btn drawer-help-btn&#34;&#xA;            style=&#34;display: inline-flex; align-items: center; cursor: pointer; margin: 0; padding: 0.1rem;&#34;&#xA;            title=&#34;? General information&#34;&gt;&#xA;            &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;              &lt;use xlink:href=&#34;#icon-help&#34; /&gt;&#xA;            &lt;/svg&gt;&#xA;          &lt;/span&gt;&#xA;        &lt;/label&gt;&#xA;        &#xA;        &lt;select id=&#34;MapDataSelect&#34; name=&#34;MapDataSelect&#34;&gt;&#xA;          &lt;optgroup label=&#34;Latest Analysis &amp; Prediction&#34;&gt;&#xA;            &lt;option value=&#34;gam-v2-pred&#34;&gt;UW GAM-v2 (2025+)&lt;/option&gt;&#xA;            &lt;option value=&#34;pm-cbsa-pred&#34; selected&gt;UW Smoke PM2.5 (2025+)&lt;/option&gt;&#xA;          &lt;/optgroup&gt;&#xA;          &lt;optgroup label=&#34;Published&#34;&gt;&#xA;            &lt;option value=&#34;gam-v2&#34;&gt;UW GAM-v2 (Lee and Jaffe, 2025)&lt;/option&gt;&#xA;            &lt;option value=&#34;gam-v1&#34;&gt;UW GAM-v1 (Lee and Jaffe, 2024)&lt;/option&gt;&#xA;            &lt;option value=&#34;pm-cbsa&#34;&gt;UW Smoke PM2.5 (Jaffe et al., 2026)&lt;/option&gt;&#xA;            &lt;option value=&#34;epa-ember&#34;&gt;EPA EMBER (Simon, et al., 2024)&lt;/option&gt;&#xA;          &lt;/optgroup&gt;&#xA;        &lt;/select&gt;&#xA;&#xA;        &lt;div id=&#34;MapCheckboxPublished&#34;&gt;&#xA;          &lt;hr style=&#34;margin-top: 1rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;&#xA;          &lt;!-- Data 추가시 로직 추가 필요 부분** --&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-mda8-obs&#34;&gt; Obs MDA8 &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-mda8-pred&#34;&gt; Pred MDA8 &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-smo&#34;&gt; SMO &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-resids&#34;&gt; Residual &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-resids-quant&#34;&gt; Quant residual&#xA;            &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt;&#xA;          &lt;/label&gt;&#xA;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-pm25-obs&#34;&gt; Obs PM2.5 &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-pm25-quant&#34;&gt; Quant PM2.5 &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-pm25-crit&#34;&gt; PM2.5-crit &lt;/label&gt;&#xA;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-pm25-crit-m0p5m&#34;&gt; PM2.5-crit m0p5m &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-pm25-crit-m1p0m&#34;&gt; PM2.5-crit m1p0m &lt;/label&gt;&#xA;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-pm25-smoke-m0p5m&#34;&gt; Smoke PM2.5 m0p5m &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-pm25-smoke-m1p0m&#34;&gt; Smoke PM2.5 m1p0m &lt;/label&gt;&#xA;&#xA;          &lt;label&gt;&#xA;            &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt; &lt;input type=&#34;checkbox&#34; id=&#34;layer-tmax&#34;&gt; TMAX&#xA;          &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-srad&#34;&gt; SRAD &lt;/label&gt;&#xA;&#xA;          &lt;label&gt;&#xA;            &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt; &lt;input type=&#34;checkbox&#34; id=&#34;layer-mda8-pred-edm&#34;&gt;&#xA;            Pred MDA8 (EDM)&#xA;          &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-smo-edm&#34;&gt; SMO (EDM) &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-resids-edm&#34;&gt; Residual (EDM) &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-resids-quant-edm&#34;&gt; Quant residual (EDM) &lt;/label&gt;&#xA;&#xA;          &lt;label&gt;&#xA;            &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt; &lt;input type=&#34;checkbox&#34; id=&#34;layer-smokeday&#34;&gt; Smoke&#xA;            day (SMD)&#xA;          &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-smokeday-975&#34;&gt; SMO &gt; 97.5th &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-smokeday-975-edm&#34;&gt; SMO &gt; 97.5th (EDM) &lt;/label&gt;&#xA;&#xA;          &lt;label&gt;&#xA;            &lt;hr style=&#34;margin-top: 0.2rem; margin-bottom: 0.2rem;&#34;&gt; &lt;input type=&#34;checkbox&#34; id=&#34;layer-smokeday-m0p5m&#34;&gt;&#xA;            Smoke day (SMD) m0p5m&#xA;          &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-smokeday-m1p0m&#34;&gt; Smoke day (SMD) m1p0m &lt;/label&gt;&#xA;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-ExcDays&#34;&gt; ExcDay &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-ExcDays-edm&#34;&gt; ExcDay (EDM) &lt;/label&gt;&#xA;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-ExcDays-m0p5m&#34;&gt; ExcDay m0p5m &lt;/label&gt;&#xA;          &lt;label&gt;&lt;input type=&#34;checkbox&#34; id=&#34;layer-ExcDays-m1p0m&#34;&gt; ExcDay m1p0m &lt;/label&gt;&#xA;&#xA;        &lt;/div&gt;&#xA;      &lt;/details&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;Desc-drawer&#34; id=&#34;DescDrawer&#34;&gt;&#xA;  &lt;div class=&#34;Desc-drawer-header&#34;&gt;&#xA;    &lt;h3&gt;Layer Descriptions&lt;/h3&gt;&#xA;    &lt;button class=&#34;ui-btn-close&#34; id=&#34;DescDrawerClose&#34;&gt;&#xA;      &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div class=&#34;Desc-tab-main&#34;&gt;&#xA;    &lt;button class=&#34;Desc-tab-main-btn active&#34; Desc-group=&#34;LyrGroupNIFC&#34;&gt;NIFC&lt;/button&gt;&#xA;    &lt;button class=&#34;Desc-tab-main-btn&#34; Desc-group=&#34;LyrGroupAirnow&#34;&gt;AirNow&lt;/button&gt;&#xA;    &lt;button class=&#34;Desc-tab-main-btn&#34; Desc-group=&#34;LyrGroupSatellite&#34;&gt;Satellite &amp; Model&lt;/button&gt;&#xA;    &lt;button class=&#34;Desc-tab-main-btn&#34; Desc-group=&#34;LyrGroupPublished&#34;&gt;Published &amp; Latest&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div class=&#34;Desc-tab-sub&#34; id=&#34;DescSubTabs&#34;&gt;&#xA;    &lt;button class=&#34;Desc-tab-sub-btn active&#34; Desc-ds=&#34;desc-published-intro&#34;&gt;Introduction&lt;/button&gt;&#xA;    &lt;button class=&#34;Desc-tab-sub-btn&#34; Desc-ds=&#34;desc-published-gam-v2&#34;&gt;UW GAM-v2&lt;/button&gt;&#xA;    &lt;button class=&#34;Desc-tab-sub-btn&#34; Desc-ds=&#34;desc-published-gam-v1&#34;&gt;UW GAM-v1&lt;/button&gt;&#xA;    &lt;button class=&#34;Desc-tab-sub-btn&#34; Desc-ds=&#34;desc-published-pm-cbsa&#34;&gt;UW Smoke PM2.5&lt;/button&gt;&#xA;    &lt;button class=&#34;Desc-tab-sub-btn&#34; Desc-ds=&#34;desc-published-epa-ember&#34;&gt;EPA EMBER&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div class=&#34;Desc-content&#34; id=&#34;DescContent&#34;&gt;&#xA;    &lt;!-- Content injected via JS --&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;div class=&#34;WFnews-drawer&#34; id=&#34;WFnewsDrawer&#34;&gt;&#xA;  &lt;div class=&#34;WFnews-drawer-header&#34;&gt;&#xA;    &lt;h3 id=&#34;WFnewsDrawerTitle&#34;&gt;Wildfire News&lt;/h3&gt;&#xA;    &lt;button class=&#34;ui-btn-close&#34; id=&#34;WFnewsDrawerClose&#34;&gt;&#xA;      &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div id=&#34;ToggleSwitchWildfire&#34; style=&#34;padding: 1rem 1.5rem 1rem; border-bottom: 0.1rem solid var(--border-main);&#34;&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;WFnews-drawer-list&#34; id=&#34;WFnewsDrawerList&#34;&gt;&#xA;    &lt;!-- Content injected via JS --&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;MapPost-drawer&#34; id=&#34;MapPostDrawer&#34;&gt;&#xA;  &lt;div class=&#34;MapPost-drawer-header&#34;&gt;&#xA;    &lt;h3 id=&#34;MapPostDrawerTitle&#34;&gt;MapPost detail&lt;/h3&gt;&#xA;    &lt;button class=&#34;ui-btn-close&#34; id=&#34;MapPostDrawerClose&#34;&gt;&#xA;      &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div id=&#34;ToggleSwitchMapPost&#34; style=&#34;padding: 1rem 1.5rem 1rem; border-bottom: 0.1rem solid var(--border-main);&#34;&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;MapPost-drawer-list&#34; id=&#34;MapPostDrawerList&#34;&gt;&#xA;    &lt;!-- Content injected via JS --&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;Hysplit-drawer&#34; id=&#34;HysplitDrawer&#34;&gt;&#xA;  &lt;div class=&#34;Hysplit-drawer-header&#34;&gt;&#xA;    &lt;h3 id=&#34;HysplitDrawerTitle&#34;&gt;HYSPLIT Simulation&lt;/h3&gt;&#xA;    &lt;button class=&#34;ui-btn-close&#34; id=&#34;HysplitDrawerClose&#34;&gt;&#xA;      &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &#xA;  &lt;div id=&#34;ToggleSwitchHysplitFlow&#34; style=&#34;padding: 1rem 1.5rem; border-bottom: 0.1rem solid var(--border-main);&#34;&gt;&#xA;  &lt;/div&gt;&#xA;  &#xA;  &lt;div style=&#34;padding: 1rem 1.5rem; border-bottom: 0.1rem solid var(--border-main); display: flex; gap: 1rem; align-items: center;&#34;&gt;&#xA;    &lt;button id=&#34;HysplitBtnNew&#34; class=&#34;MapPost-item-link&#34; style=&#34;flex: 1; margin: 0; display: block; text-align: center;&#34;&gt;&#xA;      +Simulation&#xA;    &lt;/button&gt;&#xA;    &lt;button id=&#34;HysplitBtnClearAll&#34; class=&#34;reply-btn-cancel&#34; style=&#34;padding: 0.5rem 1rem; font-size: 1.4rem;&#34;&gt;&#xA;      Clear All&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &#xA;  &lt;div&#xA;    style=&#34;padding: 0.5rem 1.5rem; font-size: 1.4rem; color: var(--text-main); border-bottom: 0.1rem solid var(--border-main);&#34;&gt;&#xA;    Results are saved in your local browser (max 20 items).&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;Hysplit-drawer-list&#34; id=&#34;HysplitDrawerList&#34; style=&#34;flex: 1; overflow-y: auto;&#34;&gt;&#xA;    &lt;!-- Content injected via JS --&gt;&#xA;    &lt;div style=&#34;padding: 2rem; text-align: center; color: var(--text-main); font-size: 1.4rem;&#34;&gt;&#xA;      No trajectories yet.&lt;br&gt;Click a point on map or use the button above.&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;Aerscreen-drawer&#34; id=&#34;AerscreenDrawer&#34;&gt;&#xA;  &lt;div class=&#34;Aerscreen-drawer-header&#34;&gt;&#xA;    &lt;h3 id=&#34;AerscreenDrawerTitle&#34;&gt;Dispersion Screening&lt;/h3&gt;&#xA;    &lt;button class=&#34;ui-btn-close&#34; id=&#34;AerscreenDrawerClose&#34;&gt;&#xA;      &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div&#xA;    style=&#34;padding: 1rem 1.5rem; border-bottom: 0.1rem solid var(--border-main); display: flex; gap: 1rem; align-items: center;&#34;&gt;&#xA;    &lt;button id=&#34;AerscreenBtnNew&#34; class=&#34;MapPost-item-link&#34;&#xA;      style=&#34;flex: 1; margin: 0; display: block; text-align: center;&#34;&gt;&#xA;      +Simulation&#xA;    &lt;/button&gt;&#xA;    &lt;button id=&#34;AerscreenBtnClearAll&#34; class=&#34;reply-btn-cancel&#34; style=&#34;padding: 0.5rem 1rem; font-size: 1.4rem;&#34;&gt;&#xA;      Clear All&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div&#xA;    style=&#34;padding: 0.5rem 1.5rem; font-size: 1.4rem; color: var(--text-main); border-bottom: 0.1rem solid var(--border-main);&#34;&gt;&#xA;    Results are saved in your local browser (max 10 items).&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;Aerscreen-drawer-list&#34; id=&#34;AerscreenDrawerList&#34; style=&#34;flex: 1; overflow-y: auto;&#34;&gt;&#xA;    &lt;div style=&#34;padding: 2rem; text-align: center; color: var(--text-main); font-size: 1.4rem;&#34;&gt;&#xA;      No simulations yet.&lt;br&gt;Click a point on map or use the button above.&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;Legend-drawer&#34; id=&#34;LegendDrawer&#34;&gt;&#xA;  &lt;div class=&#34;Legend-drawer-header&#34;&gt;&#xA;    &lt;h3 id=&#34;LegendDrawerTitle&#34;&gt;Legend&lt;/h3&gt;&#xA;    &lt;button class=&#34;ui-btn-close&#34; id=&#34;LegendDrawerClose&#34;&gt;&#xA;      &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;Legend-drawer-list&#34; id=&#34;LegendDrawerList&#34;&gt;&#xA;    &lt;!-- Content injected via JS (updateLegend) --&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;AreaStats-drawer&#34; id=&#34;AreaStatsDrawer&#34;&gt;&#xA;  &lt;div class=&#34;AreaStats-drawer-header&#34;&gt;&#xA;    &lt;h3 id=&#34;AreaStatsDrawerTitle&#34;&gt;Area Statistics&lt;/h3&gt;&#xA;    &lt;button class=&#34;ui-btn-close&#34; id=&#34;AreaStatsDrawerClose&#34; title=&#34;Clear Drawing &amp; Drawer&#34;&gt;&#xA;      &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;        &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;AreaStats-drawer-list&#34; id=&#34;AreaStatsDrawerList&#34;&gt;&#xA;    &lt;!-- Content injected via JS --&gt;&#xA;    &lt;div style=&#34;padding: 2rem; text-align: center; color: var(--text-main); font-size: 1.4rem;&#34;&gt;&#xA;      No area drawn yet.&lt;br&gt;Use the toolbar button below to draw.&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;accordion-page collapsed&#34; id=&#34;AiChatDrawer&#34;&gt;&#xA;  &lt;div class=&#34;accordion&#34;&gt;&#xA;    &lt;div class=&#34;accordion-header&#34; id=&#34;AiChatHeaderDraggable&#34;&gt;&#xA;      &lt;span class=&#34;accordion-title&#34;&gt;&#xA;        Ai Chat (Beta)&#xA;      &lt;/span&gt;&#xA;      &lt;div class=&#34;ui-handle-draggable&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-drag-handle&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div id=&#34;AiChatBtnWrapper&#34;&gt;&#xA;        &lt;button id=&#34;AiChatClearBtn&#34; class=&#34;ui-btn-close&#34; title=&#34;Clear Chat&#34;&gt;&#xA;          Clear&#xA;        &lt;/button&gt;&#xA;        &lt;button id=&#34;AiChatDrawerClose&#34; class=&#34;ui-btn-close&#34;&gt;&#xA;          &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;            &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;          &lt;/svg&gt;&#xA;        &lt;/button&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div id=&#34;AiChatList&#34;&gt;&#xA;      &lt;!-- Chat messages injected via JS --&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div id=&#34;AiChatInputContainer&#34;&gt;&#xA;      &lt;textarea id=&#34;AiChatInput&#34; placeholder=&#34;Ask me anything!&#34; rows=&#34;2&#34;&gt;&lt;/textarea&gt;&#xA;      &lt;button id=&#34;AiChatSubmitBtn&#34;&gt;Send&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;FigurePage-drawer&#34; id=&#34;FigurePageDrawer&#34;&gt;&#xA;&#xA;  &lt;button class=&#34;ui-btn-close&#34; id=&#34;FigurePageDrawerClose&#34;&gt;&#xA;    &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;      &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;    &lt;/svg&gt;&#xA;  &lt;/button&gt;&#xA;&#xA;  &lt;div class=&#34;FigurePage-drawer-header&#34;&gt;&#xA;    &lt;h3&gt;Statistical Tools&lt;/h3&gt;&#xA;    &#xA;    &lt;!-- [User UX Disabled part]: Annual Stats 로직 (개발중) --&gt;&#xA;    &lt;!-- &#xA;    &lt;button class=&#34;stats-tab-sub active&#34; stats-tab-sub-data=&#34;date&#34;&gt;Daily&lt;/button&gt;&#xA;    &lt;button class=&#34;stats-tab-sub&#34; stats-tab-sub-data=&#34;year&#34; style=&#34;display: none;&#34;&gt;Annual&lt;/button&gt;&#xA;    --&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div class=&#34;stats-container stats-container-date active&#34; stats-data-panel=&#34;date&#34;&gt;&#xA;    &lt;div id=&#34;StatsPanelDate&#34;&gt;&#xA;&#xA;      &lt;div class=&#34;stats-controls-date&#34;&gt;&#xA;        &lt;button class=&#34;minus1y&#34; id=&#34;StatsInputMinus1y&#34; title=&#34;-1 Year&#34;&gt;-y&lt;/button&gt;&#xA;        &lt;button class=&#34;minus1m&#34; id=&#34;StatsInputMinus1m&#34; title=&#34;-1 Month&#34;&gt;-m&lt;/button&gt;&#xA;        &lt;button class=&#34;minus1d&#34; id=&#34;StatsInputMinus1d&#34; title=&#34;-1 Day&#34;&gt;-d&lt;/button&gt;&#xA;        &lt;button class=&#34;minus1h&#34; id=&#34;StatsInputMinus1h&#34; title=&#34;-1 Hour&#34; style=&#34;display: none;&#34;&gt;-h&lt;/button&gt;&#xA;&#xA;        &lt;div class=&#34;stats-input-date&#34; id=&#34;StatsInputDate&#34;&gt;&lt;/div&gt;&#xA;&#xA;        &lt;button class=&#34;plus1h&#34; id=&#34;StatsInputPlus1h&#34; title=&#34;+1 Hour&#34; style=&#34;display: none;&#34;&gt;+h&lt;/button&gt;&#xA;        &lt;button class=&#34;plus1d&#34; id=&#34;StatsInputPlus1d&#34; title=&#34;+1 Day&#34;&gt;+d&lt;/button&gt;&#xA;        &lt;button class=&#34;plus1m&#34; id=&#34;StatsInputPlus1m&#34; title=&#34;+1 Month&#34;&gt;+m&lt;/button&gt;&#xA;        &lt;button class=&#34;plus1y&#34; id=&#34;StatsInputPlus1y&#34; title=&#34;+1 Year&#34;&gt;+y&lt;/button&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;stats-plot-tab-panel&#34;&gt;&#xA;        &lt;div class=&#34;stats-plot-tab-main&#34;&gt;&#xA;          &lt;button class=&#34;stats-plot-tab-sub active&#34; stats-plot-target=&#34;stats-plot-for-table-date&#34;&gt;Table&lt;/button&gt;&#xA;          &lt;button class=&#34;stats-plot-tab-sub&#34; stats-plot-target=&#34;stats-plot-for-barline-date&#34;&gt;Bar&amp;Line&lt;/button&gt;&#xA;          &lt;button class=&#34;stats-plot-tab-sub&#34; stats-plot-target=&#34;stats-plot-for-parcoords-date&#34;&gt;ParCoords&lt;/button&gt;&#xA;          &lt;button class=&#34;stats-plot-tab-sub&#34; stats-plot-target=&#34;stats-plot-for-scatter-date&#34;&gt;Scatter&lt;/button&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;FigurePage-drawer-content&#34;&gt;&#xA;          &lt;div id=&#34;stats-plot-for-table-date&#34; class=&#34;stats-plot-tab-sub-container active&#34;&gt;&#xA;          &#xA;            &lt;div style=&#34;display: flex; justify-content: flex-end; padding-right: 1.5rem;&#34;&gt;&#xA;              &lt;button class=&#34;export-btn-csv&#34; id=&#34;BtnExportCsvDate&#34; title=&#34;Export as CSV&#34; data-original-label=&#34;⬇ .CSV&#34; style=&#34;display: none;&#34;&gt;⬇ .CSV&lt;/button&gt;&#xA;            &lt;/div&gt;&#xA;            &#xA;            &lt;div class=&#34;stats-table-responsive-date&#34;&gt;&#xA;              &lt;table class=&#34;stats-region-table-date&#34;&gt;&#xA;                &lt;thead&gt;&#xA;                &lt;/thead&gt;&#xA;                &lt;tbody id=&#34;StatsRegionBodyDate&#34;&gt;&#xA;                &lt;/tbody&gt;&#xA;              &lt;/table&gt;&#xA;            &lt;/div&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;stats-plot-tab-sub-container&#34; id=&#34;stats-plot-for-barline-date&#34;&gt;&lt;/div&gt;&#xA;          &lt;div class=&#34;stats-plot-tab-sub-container&#34; id=&#34;stats-plot-for-parcoords-date&#34;&gt;&lt;/div&gt;&#xA;          &lt;div class=&#34;stats-plot-tab-sub-container&#34; id=&#34;stats-plot-for-scatter-date&#34;&gt;&lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;div class=&#34;stats-container stats-container-year&#34; stats-data-panel=&#34;year&#34;&gt;&#xA;    &lt;div id=&#34;StatsPanelYear&#34;&gt;&#xA;&#xA;      &lt;div class=&#34;stats-controls-year&#34;&gt;&#xA;        &lt;button class=&#34;minus1y&#34; id=&#34;AnnStatsInputMinus1y&#34; title=&#34;-1 Year&#34;&gt;-y&lt;/button&gt;&#xA;        &lt;div class=&#34;stats-input-year&#34; id=&#34;StatsInputYear&#34;&gt;&lt;/div&gt;&#xA;        &lt;button class=&#34;plus1y&#34; id=&#34;AnnStatsInputPlus1y&#34; title=&#34;+1 Year&#34;&gt;+y&lt;/button&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;stats-tab-month-main&#34;&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub active&#34; stats-table-month=&#34;all&#34;&gt;All&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;1&#34;&gt;1&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;2&#34;&gt;2&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;3&#34;&gt;3&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;4&#34;&gt;4&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;5&#34;&gt;5&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;6&#34;&gt;6&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;7&#34;&gt;7&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;8&#34;&gt;8&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;9&#34;&gt;9&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;10&#34;&gt;10&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;11&#34;&gt;11&lt;/button&gt;&#xA;        &lt;button class=&#34;stats-tab-month-sub&#34; stats-table-month=&#34;12&#34;&gt;12&lt;/button&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;stats-plot-tab-panel&#34;&gt;&#xA;        &lt;div class=&#34;stats-plot-tab-main&#34;&gt;&#xA;          &lt;button class=&#34;stats-plot-tab-sub active&#34; stats-plot-target=&#34;stats-plot-for-table-year&#34;&gt;Table&lt;/button&gt;&#xA;          &lt;button class=&#34;stats-plot-tab-sub&#34; stats-plot-target=&#34;stats-plot-for-heatmap-year&#34;&gt;Heatmap&lt;/button&gt;&#xA;          &lt;button class=&#34;stats-plot-tab-sub&#34; stats-plot-target=&#34;stats-plot-for-line-year&#34;&#xA;            style=&#34;display:none;&#34;&gt;Line&lt;/button&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;FigurePage-drawer-content&#34;&gt;&#xA;          &lt;div id=&#34;stats-plot-for-table-year&#34; class=&#34;stats-plot-tab-sub-container active&#34;&gt;&#xA;            &lt;div class=&#34;stats-table-responsive-year&#34;&gt;&#xA;              &lt;table class=&#34;stats-region-table-year&#34;&gt;&#xA;                &lt;thead&gt;&#xA;                &lt;/thead&gt;&#xA;                &lt;tbody id=&#34;StatsRegionBodyYear&#34;&gt;&#xA;                &lt;/tbody&gt;&#xA;              &lt;/table&gt;&#xA;            &lt;/div&gt;&#xA;          &lt;/div&gt;&#xA;&#xA;          &lt;div id=&#34;stats-plot-for-heatmap-year&#34; class=&#34;stats-plot-tab-sub-container&#34;&gt;&lt;/div&gt;&#xA;          &lt;div id=&#34;stats-plot-for-line-year&#34; class=&#34;stats-plot-tab-sub-container&#34;&gt;&lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;drawer-resizer&#34; id=&#34;DrawerResizer&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;  const LAYER_CONFIG = {&#xA;    &#34;gam-v2&#34;: [&#xA;      &#34;layer-mda8-obs&#34;, &#34;layer-mda8-pred&#34;, &#34;layer-smo&#34;, &#34;layer-resids&#34;, &#34;layer-resids-quant&#34;,&#xA;      &#34;layer-pm25-obs&#34;, &#34;layer-pm25-quant&#34;, &#34;layer-pm25-crit&#34;,&#xA;      &#34;layer-tmax&#34;, &#34;layer-srad&#34;,&#xA;      &#34;layer-mda8-pred-edm&#34;, &#34;layer-smo-edm&#34;, &#34;layer-resids-edm&#34;, &#34;layer-resids-quant-edm&#34;,&#xA;      &#34;layer-smokeday&#34;, &#34;layer-smokeday-975&#34;, &#34;layer-smokeday-975-edm&#34;,&#xA;      &#34;layer-ExcDays&#34;, &#34;layer-ExcDays-edm&#34;&#xA;    ],&#xA;&#xA;    &#34;gam-v1&#34;: [&#xA;      &#34;layer-mda8-obs&#34;, &#34;layer-mda8-pred&#34;, &#34;layer-smo&#34;, &#34;layer-resids&#34;, &#34;layer-resids-quant&#34;,&#xA;      &#34;layer-pm25-obs&#34;, &#34;layer-pm25-quant&#34;, &#34;layer-pm25-crit&#34;, &#34;layer-tmax&#34;, &#34;layer-srad&#34;,&#xA;      &#34;layer-smokeday&#34;, &#34;layer-smokeday-975&#34;,&#xA;      &#34;layer-ExcDays&#34;&#xA;    ],&#xA;&#xA;    &#34;pm-cbsa&#34;: [&#xA;      &#34;layer-pm25-obs&#34;, &#34;layer-pm25-quant&#34;,&#xA;      &#34;layer-pm25-crit-m0p5m&#34;, &#34;layer-pm25-crit-m1p0m&#34;,&#xA;      &#34;layer-pm25-smoke-m0p5m&#34;, &#34;layer-pm25-smoke-m1p0m&#34;,&#xA;      &#34;layer-smokeday-m0p5m&#34;, &#34;layer-smokeday-m1p0m&#34;,&#xA;      &#34;layer-ExcDays-m0p5m&#34;, &#34;layer-ExcDays-m1p0m&#34;&#xA;    ],&#xA;&#xA;    &#34;epa-ember&#34;: [&#xA;      &#34;layer-mda8-obs&#34;, &#34;layer-mda8-pred&#34;, &#34;layer-smo&#34;, &#34;layer-resids&#34;,&#xA;      &#34;layer-smokeday&#34;, &#34;layer-ExcDays&#34;&#xA;    ],&#xA;&#xA;&#xA;    &#34;gam-v2-pred&#34;: [&#xA;      &#34;layer-mda8-obs&#34;, &#34;layer-mda8-pred&#34;, &#34;layer-smo&#34;, &#34;layer-resids&#34;, &#34;layer-resids-quant&#34;,&#xA;      &#34;layer-pm25-obs&#34;, &#34;layer-pm25-quant&#34;, &#34;layer-pm25-crit&#34;,&#xA;      &#34;layer-tmax&#34;, &#34;layer-srad&#34;,&#xA;      &#34;layer-mda8-pred-edm&#34;, &#34;layer-smo-edm&#34;, &#34;layer-resids-edm&#34;, &#34;layer-resids-quant-edm&#34;,&#xA;      &#34;layer-smokeday&#34;, &#34;layer-smokeday-975&#34;, &#34;layer-smokeday-975-edm&#34;,&#xA;      &#34;layer-ExcDays&#34;, &#34;layer-ExcDays-edm&#34;&#xA;    ],&#xA;&#xA;    &#34;pm-cbsa-pred&#34;: [&#xA;      &#34;layer-pm25-obs&#34;, &#34;layer-pm25-quant&#34;,&#xA;      &#34;layer-pm25-crit-m0p5m&#34;, &#34;layer-pm25-crit-m1p0m&#34;,&#xA;      &#34;layer-pm25-smoke-m0p5m&#34;, &#34;layer-pm25-smoke-m1p0m&#34;,&#xA;      &#34;layer-smokeday-m0p5m&#34;, &#34;layer-smokeday-m1p0m&#34;,&#xA;      &#34;layer-ExcDays-m0p5m&#34;, &#34;layer-ExcDays-m1p0m&#34;&#xA;    ]&#xA;  };&#xA;&#xA;  const datasetSelect = document.getElementById(&#34;MapDataSelect&#34;);&#xA;  const allLayersDiv = document.getElementById(&#34;MapCheckboxPublished&#34;);&#xA;  const allLabels = allLayersDiv.querySelectorAll(&#34;label&#34;);&#xA;&#xA;  function updateLayerVisibility() {&#xA;    const selectedValue = datasetSelect.value;&#xA;    const visibleLayerIds = LAYER_CONFIG[selectedValue] || [];&#xA;&#xA;    allLabels.forEach(label =&gt; {&#xA;      label.style.display = &#34;none&#34;;&#xA;    });&#xA;    &#xA;    const smokedayChk = document.getElementById(&#34;layer-smokeday&#34;);&#xA;    if (smokedayChk &amp;&amp; smokedayChk.nextSibling) {&#xA;      if (selectedValue === &#34;epa-ember&#34;) {&#xA;        smokedayChk.nextSibling.nodeValue = &#34; Day with SMO &gt; 0&#34;;&#xA;      } else {&#xA;        smokedayChk.nextSibling.nodeValue = &#34; Smoke day (SMD)&#34;;&#xA;      }&#xA;    }&#xA;&#xA;    visibleLayerIds.forEach(id =&gt; {&#xA;      const inputEl = document.getElementById(id);&#xA;      if (inputEl) {&#xA;        const labelToShow = inputEl.closest(&#34;label&#34;);&#xA;        if (labelToShow) {&#xA;          labelToShow.style.display = &#34;block&#34;;&#xA;        }&#xA;      }&#xA;    });&#xA;  }&#xA;&#xA;  datasetSelect.addEventListener(&#34;change&#34;, updateLayerVisibility);&#xA;  updateLayerVisibility();&#xA;&lt;/script&gt;&#xA;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/ui-init.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/fb-MapPost.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/aws-hysplit.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/ai-chat.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/stats-daily.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/stats-yearly.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/ui-tutorial.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/map-animate.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/aerscreen.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/map-area-stats.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;https://cdn.plot.ly/plotly-2.35.2.min.js&#34; defer&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;https://cdn.jsdelivr.net/npm/driver.js@1.4.0/dist/driver.js.iife.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/gif.js/0.2.0/gif.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/ui-analytics.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/ui-tsplot.js&#34;&gt;&lt;/script&gt;&#xA;&#xA;&lt;!-- MapPost Context Menu --&gt;&#xA;&lt;div class=&#34;MapPost-context-menu&#34; id=&#34;MapPostContextMenu&#34; style=&#34;display:none;&#34;&gt;&#xA;  &lt;div class=&#34;MapPost-context-menu-header&#34;&gt;Select Action&lt;/div&gt;&#xA;  &lt;div class=&#34;reply-btn-wrapper&#34; style=&#34;justify-content: center; flex-direction: column; gap: 0.5rem; padding: 0.5rem;&#34;&gt;&#xA;    &lt;button class=&#34;reply-btn-submit&#34; id=&#34;MapPostBtnWrite&#34; style=&#34;width: 100%;&#34;&gt;Add MapPost&lt;/button&gt;&#xA;    &lt;button class=&#34;reply-btn-submit&#34; id=&#34;MapPostBtnHysplit&#34; style=&#34;width: 100%;&#34;&gt;Run HYSPLIT&lt;/button&gt;&#xA;    &lt;button class=&#34;reply-btn-submit&#34; id=&#34;MapPostBtnAerscreen&#34;&gt;AERSCREEN&lt;/button&gt;&#xA;    &lt;button class=&#34;reply-btn-submit&#34; id=&#34;MapPostBtnTSplot&#34; style=&#34;width: 100%;&#34;&gt;Time-Series Plot&lt;/button&gt;&#xA;    &lt;button class=&#34;reply-btn-cancel&#34; id=&#34;MapPostBtnClose&#34; style=&#34;width: 100%;&#34;&gt;Close&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;!-- MapPost Modal --&gt;&#xA;&lt;div class=&#34;MapPost-modal-overlay&#34; id=&#34;MapPostModalOverlay&#34; style=&#34;display:none;&#34;&gt;&#xA;  &lt;div class=&#34;MapPost-modal&#34;&gt;&#xA;    &lt;div class=&#34;MapPost-modal-header&#34;&gt;&#xA;      &lt;h3 id=&#34;MapPostModalTitle&#34;&gt;New MapPost&lt;/h3&gt;&#xA;      &lt;button class=&#34;ui-btn-close&#34; id=&#34;MapPostModalClose&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;!-- View Mode Content --&gt;&#xA;    &lt;div id=&#34;MapPostModalViewBody&#34; style=&#34;display:flex; flex:1; flex-direction:column;&#34;&gt;&#xA;      &lt;!-- Injected via JS --&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;!-- Edit/Create Mode Content --&gt;&#xA;    &lt;div id=&#34;MapPostModalEditBody&#34; style=&#34;display:flex; flex:1; flex-direction:column;&#34;&gt;&#xA;      &lt;div class=&#34;MapPost-modal-body&#34;&gt;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;label for=&#34;MapPostFormTitle&#34;&gt;Title: &lt;small id=&#34;MapPostTitleCounter&#34;&#xA;              style=&#34;float: right;&#34;&gt;0/100&lt;/small&gt;&lt;/label&gt;&#xA;          &lt;input type=&#34;text&#34; id=&#34;MapPostFormTitle&#34; placeholder=&#34;Enter title...&#34;&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;label&gt;Visibility:&lt;/label&gt;&#xA;          &lt;div style=&#34;display: flex; gap: 1rem; margin-top: 0.5rem;&#34;&gt;&#xA;            &lt;label style=&#34;cursor: pointer; display: flex; align-items: center; gap: 0.3rem;&#34;&gt;&#xA;              &lt;input type=&#34;radio&#34; name=&#34;MapPostVisibility&#34; value=&#34;public&#34; checked&gt; Public&#xA;            &lt;/label&gt;&#xA;            &lt;label style=&#34;cursor: pointer; display: flex; align-items: center; gap: 0.3rem;&#34;&gt;&#xA;              &lt;input type=&#34;radio&#34; name=&#34;MapPostVisibility&#34; value=&#34;private&#34;&gt; Private&#xA;            &lt;/label&gt;&#xA;            &lt;label style=&#34;cursor: pointer; display: flex; align-items: center; gap: 0.3rem;&#34;&gt;&#xA;              &lt;input type=&#34;radio&#34; name=&#34;MapPostVisibility&#34; value=&#34;group&#34;&gt; Group&#xA;            &lt;/label&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;label for=&#34;MapPostFormContent&#34;&gt;Content: &lt;small id=&#34;MapPostContentCounter&#34;&#xA;              style=&#34;float: right;&#34;&gt;0/2000&lt;/small&gt;&lt;/label&gt;&#xA;          &lt;textarea id=&#34;MapPostFormContent&#34; placeholder=&#34;Enter your opinion...&#34;&gt;&lt;/textarea&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;MapPost-modal-footer&#34;&gt;&#xA;        &lt;div class=&#34;reply-btn-wrapper&#34;&gt;&#xA;          &lt;button class=&#34;reply-btn-submit&#34; id=&#34;MapPostBtnSubmit&#34;&gt;Submit&lt;/button&gt;&#xA;          &lt;button class=&#34;reply-btn-cancel&#34; id=&#34;MapPostBtnCancel&#34;&gt;Cancel&lt;/button&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;!-- HYSPLIT Modal --&gt;&#xA;&lt;div class=&#34;MapPost-modal-overlay&#34; id=&#34;HysplitModalOverlay&#34; style=&#34;display:none;&#34;&gt;&#xA;  &lt;div class=&#34;MapPost-modal&#34;&gt;&#xA;    &lt;div class=&#34;MapPost-modal-header&#34;&gt;&#xA;      &lt;h3 id=&#34;HysplitModalTitle&#34;&gt;HYSPLIT Simulation&lt;/h3&gt;&#xA;      &lt;button class=&#34;ui-btn-close&#34; id=&#34;HysplitModalClose&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;MapPost-modal-body&#34;&gt;&#xA;      &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;        &lt;label&gt;Location (lon, lat):&lt;/label&gt;&#xA;        &lt;div id=&#34;InputHysplitLocation&#34;&#xA;          style=&#34;padding: 0.8rem; background: var(--color-bg-alt); border-radius: var(--border-radius-0p8rem); font-family: monospace;&#34;&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;label for=&#34;InputHysplitDate&#34;&gt;Input Date:&lt;/label&gt;&#xA;          &lt;input type=&#34;date&#34; id=&#34;InputHysplitDate&#34;&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;label for=&#34;InputHysplitTime&#34;&gt;Input Time (UTC):&lt;/label&gt;&#xA;          &lt;select id=&#34;InputHysplitTime&#34;&gt;&#xA;            &lt;option value=&#34;00&#34;&gt;00:00&lt;/option&gt;&#xA;            &lt;option value=&#34;01&#34;&gt;01:00&lt;/option&gt;&#xA;            &lt;option value=&#34;02&#34;&gt;02:00&lt;/option&gt;&#xA;            &lt;option value=&#34;03&#34;&gt;03:00&lt;/option&gt;&#xA;            &lt;option value=&#34;04&#34;&gt;04:00&lt;/option&gt;&#xA;            &lt;option value=&#34;05&#34;&gt;05:00&lt;/option&gt;&#xA;            &lt;option value=&#34;06&#34;&gt;06:00&lt;/option&gt;&#xA;            &lt;option value=&#34;07&#34;&gt;07:00&lt;/option&gt;&#xA;            &lt;option value=&#34;08&#34;&gt;08:00&lt;/option&gt;&#xA;            &lt;option value=&#34;09&#34;&gt;09:00&lt;/option&gt;&#xA;            &lt;option value=&#34;10&#34;&gt;10:00&lt;/option&gt;&#xA;            &lt;option value=&#34;11&#34;&gt;11:00&lt;/option&gt;&#xA;            &lt;option value=&#34;12&#34;&gt;12:00&lt;/option&gt;&#xA;            &lt;option value=&#34;13&#34;&gt;13:00&lt;/option&gt;&#xA;            &lt;option value=&#34;14&#34;&gt;14:00&lt;/option&gt;&#xA;            &lt;option value=&#34;15&#34;&gt;15:00&lt;/option&gt;&#xA;            &lt;option value=&#34;16&#34;&gt;16:00&lt;/option&gt;&#xA;            &lt;option value=&#34;17&#34;&gt;17:00&lt;/option&gt;&#xA;            &lt;option value=&#34;18&#34;&gt;18:00&lt;/option&gt;&#xA;            &lt;option value=&#34;19&#34;&gt;19:00&lt;/option&gt;&#xA;            &lt;option value=&#34;20&#34;&gt;20:00&lt;/option&gt;&#xA;            &lt;option value=&#34;21&#34;&gt;21:00&lt;/option&gt;&#xA;            &lt;option value=&#34;22&#34;&gt;22:00&lt;/option&gt;&#xA;            &lt;option value=&#34;23&#34;&gt;23:00&lt;/option&gt;&#xA;          &lt;/select&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;div id=&#34;DivHysplitDuration&#34; style=&#34;display: flex; align-items: center; justify-content: space-between;&#34;&gt;&#xA;            &lt;label for=&#34;InputHysplitDuration&#34;&gt;Duration (hr):&lt;/label&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;input type=&#34;number&#34; id=&#34;InputHysplitDuration&#34; value=&#34;24&#34; min=&#34;1&#34; max=&#34;240&#34;&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;div id=&#34;DivHysplitHeight&#34; style=&#34;display: flex; align-items: center; justify-content: space-between;&#34;&gt;&#xA;            &lt;label for=&#34;InputHysplitHeight&#34;&gt;Height (AGL) (m):&lt;/label&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;input type=&#34;number&#34; id=&#34;InputHysplitHeight&#34; value=&#34;500&#34; min=&#34;10&#34; max=&#34;10000&#34;&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;label for=&#34;InputHysplitType&#34;&gt;Run Type:&lt;/label&gt;&#xA;          &lt;select id=&#34;InputHysplitType&#34; class=&#34;MapPost-select&#34;&gt;&#xA;            &lt;option value=&#34;trajectory&#34; selected&gt;Trajectory&lt;/option&gt;&#xA;            &lt;option value=&#34;dispersion&#34;&gt;Dispersion&lt;/option&gt;&#xA;          &lt;/select&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;label&gt;Direction:&lt;/label&gt;&#xA;          &lt;div style=&#34;display: flex; gap: 2rem; padding: 1rem 0; justify-content: center;&#34;&gt;&#xA;            &lt;label style=&#34;display: flex; align-items: center; gap: 0.5rem; cursor: pointer;&#34;&gt;&#xA;              &lt;input type=&#34;radio&#34; name=&#34;HysplitDirection&#34; value=&#34;backward&#34; checked&gt; BWD&#xA;            &lt;/label&gt;&#xA;            &lt;label style=&#34;display: flex; align-items: center; gap: 0.5rem; cursor: pointer;&#34;&gt;&#xA;              &lt;input type=&#34;radio&#34; name=&#34;HysplitDirection&#34; value=&#34;forward&#34;&gt; FWD&#xA;            &lt;/label&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &#xA;      &lt;!-- Dispersion specific settings (hidden by default) --&gt;&#xA;      &lt;div id=&#34;HysplitDispersionGroup&#34;&#xA;        style=&#34;display: none; padding: 1rem; background: var(--color-bg-alt); border-radius: var(--border-radius-0p8rem); margin-top: 1rem; border: 0.1rem solid var(--border-main);&#34;&gt;&#xA;        &lt;h4 style=&#34;margin: 0 0 1rem 0; font-size: 1.6rem; color: var(--card-shadow);&#34;&gt;Dispersion Parameters:&lt;/h4&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;div id=&#34;DivHysplitReleaseRate&#34; style=&#34;display: flex; align-items: center; justify-content: space-between;&#34;&gt;&#xA;              &lt;label for=&#34;InputHysplitRate&#34;&gt;Release Rate (kg hr-1):&lt;/label&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;InputHysplitRate&#34; value=&#34;5&#34; min=&#34;0.1&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;div id=&#34;DivHysplitReleaseDuration&#34; style=&#34;display: flex; align-items: center; justify-content: space-between;&#34;&gt;&#xA;              &lt;label for=&#34;InputHysplitReleaseDuration&#34;&gt;Release Duration (hr):&lt;/label&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;InputHysplitReleaseDuration&#34; value=&#34;1&#34; min=&#34;1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;div id=&#34;DivHysplitPdiam&#34; style=&#34;display: flex; align-items: center; justify-content: space-between;&#34;&gt;&#xA;              &lt;label for=&#34;InputHysplitPdiam&#34;&gt;Ptcl Dia. (μm):&lt;/label&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;InputHysplitPdiam&#34; value=&#34;2.5&#34; min=&#34;0.1&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;div id=&#34;DivHysplitPdensity&#34; style=&#34;display: flex; align-items: center; justify-content: space-between;&#34;&gt;&#xA;              &lt;label for=&#34;InputHysplitPdensity&#34;&gt;Ptcl Density (g cm-3):&lt;/label&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;InputHysplitPdensity&#34; value=&#34;1.2&#34; min=&#34;0.1&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &#xA;      &lt;div&#xA;        style=&#34;margin-top: 1.5rem; font-size: 1.4rem; color: var(--text-main); border-top: 0.1rem solid var(--border-main); padding-top: 0.8rem;&#34;&gt;&#xA;        * Note: Simulations use &lt;b style=&#34;color: var(--card-shadow);&#34;&gt;NAM 12km&lt;/b&gt; meteorological data by default.&#xA;        For locations outside the NAM12 domain (e.g., Alaska, Hawaii), the model automatically switches to &lt;b&#xA;          style=&#34;color: var(--card-shadow);&#34;&gt;GDAS1 (1°)&lt;/b&gt;.&#xA;        For NAM12 trajectories exceeding 72 hours, GDAS1 data is additionally used as backup to prevent domain boundary&#xA;        truncation.&#xA;        The vertical motion uses the default option (i.e., &lt;b style=&#34;color: var(--card-shadow);&#34;&gt;Model vertical velocity&lt;/b&gt;).&#xA;        Dispersion modeling is conducted with&#xA;        &lt;b style=&#34;color: var(--card-shadow);&#34;&gt;minimal physical parameters&lt;/b&gt;&#xA;        (e.g., release rate, release duration, particle diameter and density)&#xA;        due to server resource constraints.&#xA;        &lt;b style=&#34;color: var(--card-shadow);&#34;&gt;Use results for screening purposes only&lt;/b&gt;.&#xA;        For detailed scientific analysis, please visit the official website: &#xA;        &lt;a href=&#34;https://www.ready.noaa.gov/hypub-bin/trajtype.pl&#34; target=&#34;_blank&#34;&#xA;          style=&#34;color: var(--card-shadow); text-decoration: underline;&#34;&gt;NOAA READY (trajectory)&lt;/a&gt; or&#xA;        &lt;a href=&#34;https://www.ready.noaa.gov/hypub-bin/dispasrc.pl&#34; target=&#34;_blank&#34;&#xA;          style=&#34;color: var(--card-shadow); text-decoration: underline;&#34;&gt;NOAA READY (dispersion)&lt;/a&gt;.&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;MapPost-modal-footer&#34;&gt;&#xA;      &lt;div class=&#34;reply-btn-wrapper&#34;&gt;&#xA;        &lt;button class=&#34;reply-btn-submit&#34; id=&#34;HysplitBtnSubmit&#34;&gt;Run Simulation&lt;/button&gt;&#xA;        &lt;button class=&#34;reply-btn-cancel&#34; id=&#34;HysplitBtnCancel&#34;&gt;Cancel&lt;/button&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;!-- Aerscreen Modal --&gt;&#xA;&lt;div class=&#34;MapPost-modal-overlay&#34; id=&#34;AerscreenModalOverlay&#34; style=&#34;display:none;&#34;&gt;&#xA;  &lt;div class=&#34;MapPost-modal&#34;&gt;&#xA;    &lt;div class=&#34;MapPost-modal-header&#34;&gt;&#xA;      &lt;h3 id=&#34;AerscreenModalTitle&#34;&gt;Dispersion Screening&lt;/h3&gt;&#xA;      &lt;button class=&#34;ui-btn-close&#34; id=&#34;AerscreenModalClose&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;MapPost-modal-body&#34;&gt;&#xA;      &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;        &lt;div style=&#34;display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem;&#34;&gt;&#xA;          &lt;label style=&#34;margin-bottom: 0;&#34;&gt;Location (lon, lat):&lt;/label&gt;&#xA;          &lt;button id=&#34;AerscreenBtnViewResult&#34; class=&#34;reply-btn-submit&#34; style=&#34;display: none;&#34;&gt;&#xA;            Results&#xA;          &lt;/button&gt;&#xA;        &lt;/div&gt;&#xA;        &#xA;        &lt;div id=&#34;InputAerscreenLocation&#34;&#xA;          style=&#34;padding: 0.8rem; background: var(--color-bg-alt); border-radius: var(--border-radius-0p8rem); font-family: monospace;&#34;&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;input type=&#34;hidden&#34; id=&#34;AerscreenSourceLon&#34;&gt;&#xA;        &lt;input type=&#34;hidden&#34; id=&#34;AerscreenSourceLat&#34;&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;label for=&#34;AerscreenMode&#34;&gt;Simulation Mode:&lt;/label&gt;&#xA;          &lt;select id=&#34;AerscreenMode&#34; class=&#34;MapPost-select&#34;&gt;&#xA;            &lt;option value=&#34;simplified&#34; selected&gt;Simplified Gaussian Plume Model&lt;/option&gt;&#xA;            &lt;option value=&#34;aerscreen&#34;&gt;EPA AERSCREEN&lt;/option&gt;&#xA;          &lt;/select&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;label for=&#34;AerscreenPreset&#34;&gt;Preset Scenario:&lt;/label&gt;&#xA;          &lt;select id=&#34;AerscreenPreset&#34; class=&#34;MapPost-select&#34;&gt;&#xA;            &lt;option value=&#34;smallFire&#34;&gt;Small Fire (~100 acres)&lt;/option&gt;&#xA;            &lt;option value=&#34;mediumFire&#34; selected&gt;Medium Fire (~1,000 acres)&lt;/option&gt;&#xA;            &lt;option value=&#34;largeFire&#34;&gt;Large Fire (~10,000 acres)&lt;/option&gt;&#xA;            &lt;option value=&#34;majorFire&#34;&gt;Major Fire (~100,000+ acres)&lt;/option&gt;&#xA;            &lt;option value=&#34;custom&#34;&gt;Custom (Manual Input)&lt;/option&gt;&#xA;          &lt;/select&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;!-- SHARED INPUTS --&gt;&#xA;      &lt;div id=&#34;AerscreenSharedParams&#34;&gt;&#xA;        &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;        &lt;h4 style=&#34;color: var(--card-shadow);&#34;&gt;Emission Data:&lt;/h4&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label for=&#34;AerscreenEmissionRate&#34;&gt;Emission Rate (kg hr-1):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenEmissionRate&#34; value=&#34;1800&#34; min=&#34;0&#34; step=&#34;100&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label for=&#34;AerscreenEffHeight&#34;&gt;Stack / Plume Height (m):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenEffHeight&#34; value=&#34;800&#34; min=&#34;0&#34; step=&#34;50&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label for=&#34;AerscreenTerrain&#34;&gt;Terrain:&lt;/label&gt;&#xA;            &lt;select id=&#34;AerscreenTerrain&#34; class=&#34;MapPost-select&#34; style=&#34;width: 100%;&#34;&gt;&#xA;              &lt;option value=&#34;rural&#34; selected&gt;Rural&lt;/option&gt;&#xA;              &lt;option value=&#34;urban&#34;&gt;Urban&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34; id=&#34;AerscreenPopulationGroup&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;label&gt;Urban Population:&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenPopulation&#34; value=&#34;2000000&#34; min=&#34;0&#34; step=&#34;10000&#34; style=&#34;width: 100%;&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;!-- SIMPLIFIED GAUSSIAN PLUME SPECIFIC INPUTS --&gt;&#xA;      &lt;div id=&#34;AerscreenSimplifiedParams&#34;&gt;&#xA;        &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;        &lt;h4 style=&#34;color: var(--card-shadow);&#34;&gt;Meteorological Data:&lt;/h4&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label for=&#34;AerscreenWindSpeed&#34;&gt;Wind Speed (m s-1):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenWindSpeed&#34; value=&#34;5&#34; min=&#34;0.5&#34; max=&#34;30&#34; step=&#34;0.5&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label for=&#34;AerscreenWindDir&#34;&gt;Wind Direction (°):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenWindDir&#34; value=&#34;270&#34; min=&#34;0&#34; max=&#34;360&#34; step=&#34;5&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label for=&#34;AerscreenStability&#34;&gt;Stability Class:&lt;/label&gt;&#xA;            &lt;select id=&#34;AerscreenStability&#34; class=&#34;MapPost-select&#34;&gt;&#xA;              &lt;option value=&#34;A&#34;&gt;A: Very Unstable&lt;/option&gt;&#xA;              &lt;option value=&#34;B&#34;&gt;B: Unstable&lt;/option&gt;&#xA;              &lt;option value=&#34;C&#34;&gt;C: Slightly Unstable&lt;/option&gt;&#xA;              &lt;option value=&#34;D&#34; selected&gt;D: Neutral&lt;/option&gt;&#xA;              &lt;option value=&#34;E&#34;&gt;E: Slightly Stable&lt;/option&gt;&#xA;              &lt;option value=&#34;F&#34;&gt;F: Stable&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;!-- EPA AERSCREEN SPECIFIC INPUTS --&gt;&#xA;      &lt;div id=&#34;AerscreenParams&#34; style=&#34;display: none;&#34;&gt;&#xA;        &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;        &lt;h4 style=&#34;color: var(--card-shadow);&#34;&gt;Advanced Stack Data:&lt;/h4&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Stack Diameter (m):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenStackDiameter&#34; value=&#34;5.0&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Stack Temp (K):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenStackTemp&#34; value=&#34;500.0&#34; step=&#34;1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Stack Velocity (m s-1):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenStackVelocity&#34; value=&#34;5.0&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Ambient Dist (m):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenAmbientDistance&#34; value=&#34;1.0&#34; step=&#34;1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;        &lt;h4 style=&#34;color: var(--card-shadow);&#34;&gt;Chemistry Data (NOx):&lt;/h4&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;NO2 Chemistry:&lt;/label&gt;&#xA;            &lt;select id=&#34;AerscreenNo2Option&#34; class=&#34;MapPost-select&#34;&gt;&#xA;              &lt;option value=&#34;1&#34; selected&gt;1) No chemistry / Not NO2&lt;/option&gt;&#xA;              &lt;option value=&#34;2&#34;&gt;2) Ozone Limiting (OLM)&lt;/option&gt;&#xA;              &lt;option value=&#34;3&#34;&gt;3) Plume Volume Molar Ratio (PVMRM)&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div id=&#34;AerscreenNo2Details&#34; style=&#34;display: none;&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;In-stack NO2/NOx Ratio:&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenNo2StackRatio&#34; value=&#34;0.1&#34; step=&#34;0.01&#34; min=&#34;0&#34; max=&#34;1&#34;&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Ozone Units:&lt;/label&gt;&#xA;              &lt;select id=&#34;AerscreenOzoneUnits&#34; class=&#34;MapPost-select&#34;&gt;&#xA;                &lt;option value=&#34;1&#34;&gt;ug/m3&lt;/option&gt;&#xA;                &lt;option value=&#34;2&#34;&gt;ppm&lt;/option&gt;&#xA;                &lt;option value=&#34;3&#34; selected&gt;ppb&lt;/option&gt;&#xA;              &lt;/select&gt;&#xA;            &lt;/div&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Ozone Concentration:&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenOzoneValue&#34; value=&#34;40&#34; step=&#34;0.1&#34;&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&lt;/div&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;        &lt;h4 style=&#34;color: var(--card-shadow);&#34;&gt;MAKEMET Data:&lt;/h4&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Min Amb Temp (K):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenMinAmbTemp&#34; value=&#34;250.0&#34; step=&#34;1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Max Amb Temp (K):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenMaxAmbTemp&#34; value=&#34;315.0&#34; step=&#34;1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Min Wind (m s-1):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenMinWindSpeed&#34; value=&#34;0.5&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Surface Albedo:&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenAlbedo&#34; value=&#34;0.20&#34; step=&#34;0.01&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Bowen Ratio:&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenBowen&#34; value=&#34;1.0&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Roughness (m):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenRoughness&#34; value=&#34;0.10&#34; step=&#34;0.01&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Anemometer Ht (m):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenAnemometerHt&#34; value=&#34;10.0&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &#xA;        &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;        &lt;h4 style=&#34;color: var(--card-shadow);&#34;&gt;Building Data:&lt;/h4&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Downwash:&lt;/label&gt;&#xA;            &lt;select id=&#34;AerscreenBldDownwash&#34; class=&#34;MapPost-select&#34;&gt;&#xA;              &lt;option value=&#34;N&#34; selected&gt;No&lt;/option&gt;&#xA;              &lt;option value=&#34;Y&#34;&gt;Yes&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div id=&#34;AerscreenBldDetails&#34; style=&#34;display: none;&#34;&gt;&#xA;        &#xA;          &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Height (m):&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenBldHeight&#34; value=&#34;10.0&#34; step=&#34;0.1&#34;&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Min Dimension (m):&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenBldMinDim&#34; value=&#34;10.0&#34; step=&#34;0.1&#34;&gt;&#xA;            &lt;/div&gt;&#xA;          &lt;/div&gt;&#xA;          &#xA;          &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Max Dimension (m):&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenBldMaxDim&#34; value=&#34;20.0&#34; step=&#34;0.1&#34;&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Bld Orientation (0-360°):&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenBldAngle&#34; value=&#34;0.0&#34; step=&#34;1&#34;&gt;&#xA;            &lt;/div&gt;&#xA;          &lt;/div&gt;&#xA;          &#xA;          &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Stack Dir. (0-360°):&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenBldSangle&#34; value=&#34;0.0&#34; step=&#34;1&#34;&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Stack Dist. (m):&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenBldSdist&#34; value=&#34;0.0&#34; step=&#34;0.1&#34;&gt;&#xA;            &lt;/div&gt;&#xA;          &lt;/div&gt;&#xA;          &#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;        &lt;h4 style=&#34;color: var(--card-shadow);&#34;&gt;Receptor Data:&lt;/h4&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Use Flagpole:&lt;/label&gt;&#xA;            &lt;select id=&#34;AerscreenUseFlagpole&#34; class=&#34;MapPost-select&#34;&gt;&#xA;              &lt;option value=&#34;N&#34; selected&gt;No&lt;/option&gt;&#xA;              &lt;option value=&#34;Y&#34;&gt;Yes&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34; id=&#34;AerscreenFlagpoleGroup&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;label&gt;Flagpole Height (m):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenFlagpoleHeight&#34; value=&#34;10&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Discrete Rec.:&lt;/label&gt;&#xA;            &lt;select id=&#34;AerscreenUseDiscreteRec&#34; class=&#34;MapPost-select&#34;&gt;&#xA;              &lt;option value=&#34;N&#34; selected&gt;No&lt;/option&gt;&#xA;              &lt;option value=&#34;Y&#34;&gt;Yes&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34; id=&#34;AerscreenDiscreteGroup&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;label&gt;Distances (m, max 10):&lt;/label&gt;&#xA;            &lt;input type=&#34;text&#34; id=&#34;AerscreenDiscreteDistances&#34; placeholder=&#34;e.g. 100, 250, 500&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;        &lt;h4 style=&#34;color: var(--card-shadow);&#34;&gt;Fumigation Data:&lt;/h4&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Fumigation:&lt;/label&gt;&#xA;            &lt;select id=&#34;AerscreenUseFumigation&#34; class=&#34;MapPost-select&#34;&gt;&#xA;              &lt;option value=&#34;N&#34; selected&gt;No&lt;/option&gt;&#xA;              &lt;option value=&#34;Y&#34;&gt;Yes (Shoreline)&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;!-- Building Data와 동일한 정석 구조: 컨테이너 안에 Row 배치 --&gt;&#xA;        &lt;div id=&#34;AerscreenShorelineGroup&#34; style=&#34;display: none;&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Dist to Shore (m):&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenShorelineDist&#34; value=&#34;1000&#34; step=&#34;100&#34; style=&#34;width: 100%;&#34;&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;              &lt;label&gt;Shore Dir. (0-360°):&lt;/label&gt;&#xA;              &lt;input type=&#34;number&#34; id=&#34;AerscreenShorelineDir&#34; value=&#34;0&#34; step=&#34;1&#34; style=&#34;width: 100%;&#34;&gt;&#xA;            &lt;/div&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;        &lt;h4 style=&#34;color: var(--card-shadow);&#34;&gt;Terrain Output:&lt;/h4&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Use Terrain:&lt;/label&gt;&#xA;            &lt;select id=&#34;AerscreenUseTerrain&#34; class=&#34;MapPost-select&#34;&gt;&#xA;              &lt;option value=&#34;N&#34; selected&gt;No&lt;/option&gt;&#xA;              &lt;option value=&#34;Y&#34;&gt;Yes&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34; id=&#34;AerscreenRunAermapRow&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;label&gt;Run AERMAP:&lt;/label&gt;&#xA;            &lt;select id=&#34;AerscreenRunAermap&#34; class=&#34;MapPost-select&#34;&gt;&#xA;              &lt;option value=&#34;N&#34; selected&gt;No&lt;/option&gt;&#xA;              &lt;option value=&#34;Y&#34;&gt;Yes&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34; id=&#34;AerscreenUtmRow&#34; style=&#34;display: none;&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;UTM Zone (0=Auto):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenUtmZone&#34; value=&#34;0&#34; min=&#34;0&#34; max=&#34;60&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Probe Dist (m):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenProbeDistance&#34; value=&#34;5000&#34; step=&#34;100&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34; id=&#34;AerscreenManualElevRow&#34; style=&#34;display: none;&#34;&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Source Elev (m):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenSourceElevation&#34; value=&#34;0.0&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;            &lt;label&gt;Profile Base (m):&lt;/label&gt;&#xA;            &lt;input type=&#34;number&#34; id=&#34;AerscreenProfBase&#34; value=&#34;0.0&#34; step=&#34;0.1&#34;&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div&#xA;        style=&#34;margin-top: 1.5rem; font-size: 1.3rem; color: var(--text-main); border-top: 0.1rem solid var(--border-main); padding-top: 0.8rem;&#34;&gt;&#xA;        &lt;strong&gt;Screening Level Analysis&lt;/strong&gt;: Uses simplified Gaussian plume or EPA AERSCREEN model. Results do&#xA;        not replace full AERMOD regulatory modeling for permit applications.&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;MapPost-modal-footer&#34;&gt;&#xA;      &lt;div class=&#34;reply-btn-wrapper&#34;&gt;&#xA;        &lt;button class=&#34;reply-btn-submit&#34; id=&#34;AerscreenBtnRun&#34;&gt;Run Simulation&lt;/button&gt;&#xA;        &lt;button class=&#34;reply-btn-cancel&#34; id=&#34;AerscreenBtnCancel&#34;&gt;Cancel&lt;/button&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;!-- Time-Series Plot Modal --&gt;&#xA;&lt;div class=&#34;MapPost-modal-overlay&#34; id=&#34;TSplotModalOverlay&#34; style=&#34;display:none; z-index: 2000;&#34;&gt;&#xA;  &lt;div class=&#34;MapPost-modal&#34; style=&#34;max-width: 80rem; width: 95%;&#34;&gt;&#xA;    &lt;div class=&#34;MapPost-modal-header&#34;&gt;&#xA;      &lt;h3 id=&#34;TSplotModalTitle&#34;&gt;Time-Series Plot&lt;/h3&gt;&#xA;      &lt;button class=&#34;ui-btn-close&#34; id=&#34;TSplotModalClose&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;MapPost-modal-body&#34;&gt;&#xA;      &lt;div id=&#34;TSplotChartContainer&#34; style=&#34;width: 100%; height: 100%; display: none;&#34;&gt;&lt;/div&gt;&#xA;      &lt;div id=&#34;TSplotLoading&#34; style=&#34;display:none; text-align:center; padding: 5rem 2rem;&#34;&gt;&#xA;        &lt;div id=&#34;TSplotSpinner&#34;&#xA;          style=&#34;margin: 0 auto 1.5rem auto; width: 4rem; height: 4rem; border: 4px solid var(--border-soft); border-top: 4px solid var(--card-shadow); border-radius: 50%; animation: spin 1s linear infinite;&#34;&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;span id=&#34;TSplotLoadingText&#34; style=&#34;font-size: 1.4rem; color: var(--text-soft);&#34;&gt;Loading hourly data...&lt;/span&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div id=&#34;TSplotError&#34;&#xA;        style=&#34;display:none; color:var(--color-invalid, red); padding:2rem; text-align:center; font-size: 1.4rem;&#34;&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;!-- Timelapse Modal --&gt;&#xA;&lt;div class=&#34;MapPost-modal-overlay&#34; id=&#34;TimelapseModalOverlay&#34; style=&#34;display:none;&#34;&gt;&#xA;  &lt;div class=&#34;MapPost-modal&#34;&gt;&#xA;    &lt;div class=&#34;MapPost-modal-header&#34;&gt;&#xA;      &lt;h3 id=&#34;TimelapseModalTitle&#34;&gt;Export Time-lapse&lt;/h3&gt;&#xA;      &lt;button class=&#34;ui-btn-close&#34; id=&#34;TimelapseModalClose&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;MapPost-modal-body&#34;&gt;&#xA;      &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;        &lt;label&gt;Time Scale (Step by):&lt;/label&gt;&#xA;        &lt;div style=&#34;display: flex; gap: 2rem; margin-top: 0.5rem;&#34;&gt;&#xA;          &lt;label style=&#34;cursor: pointer; display: flex; align-items: center; gap: 0.5rem;&#34;&gt;&#xA;            &lt;input type=&#34;radio&#34; name=&#34;TimelapseScale&#34; value=&#34;d&#34; checked&gt; Daily (1D)&#xA;          &lt;/label&gt;&#xA;          &lt;label style=&#34;cursor: pointer; display: flex; align-items: center; gap: 0.5rem;&#34;&gt;&#xA;            &lt;input type=&#34;radio&#34; name=&#34;TimelapseScale&#34; value=&#34;h&#34;&gt; Hourly (1H)&#xA;          &lt;/label&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;        &lt;label id=&#34;TimelapseStartLabel&#34;&gt;Start Date &amp; Time:&lt;/label&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;input type=&#34;date&#34; id=&#34;TimelapseStartDate&#34;&gt;&#xA;          &lt;select id=&#34;TimelapseStartTime&#34;&gt;&#xA;            &lt;option value=&#34;00&#34;&gt;00:00&lt;/option&gt;&#xA;            &lt;option value=&#34;01&#34;&gt;01:00&lt;/option&gt;&#xA;            &lt;option value=&#34;02&#34;&gt;02:00&lt;/option&gt;&#xA;            &lt;option value=&#34;03&#34;&gt;03:00&lt;/option&gt;&#xA;            &lt;option value=&#34;04&#34;&gt;04:00&lt;/option&gt;&#xA;            &lt;option value=&#34;05&#34;&gt;05:00&lt;/option&gt;&#xA;            &lt;option value=&#34;06&#34;&gt;06:00&lt;/option&gt;&#xA;            &lt;option value=&#34;07&#34;&gt;07:00&lt;/option&gt;&#xA;            &lt;option value=&#34;08&#34;&gt;08:00&lt;/option&gt;&#xA;            &lt;option value=&#34;09&#34;&gt;09:00&lt;/option&gt;&#xA;            &lt;option value=&#34;10&#34;&gt;10:00&lt;/option&gt;&#xA;            &lt;option value=&#34;11&#34;&gt;11:00&lt;/option&gt;&#xA;            &lt;option value=&#34;12&#34;&gt;12:00&lt;/option&gt;&#xA;            &lt;option value=&#34;13&#34;&gt;13:00&lt;/option&gt;&#xA;            &lt;option value=&#34;14&#34;&gt;14:00&lt;/option&gt;&#xA;            &lt;option value=&#34;15&#34;&gt;15:00&lt;/option&gt;&#xA;            &lt;option value=&#34;16&#34;&gt;16:00&lt;/option&gt;&#xA;            &lt;option value=&#34;17&#34;&gt;17:00&lt;/option&gt;&#xA;            &lt;option value=&#34;18&#34;&gt;18:00&lt;/option&gt;&#xA;            &lt;option value=&#34;19&#34;&gt;19:00&lt;/option&gt;&#xA;            &lt;option value=&#34;20&#34;&gt;20:00&lt;/option&gt;&#xA;            &lt;option value=&#34;21&#34;&gt;21:00&lt;/option&gt;&#xA;            &lt;option value=&#34;22&#34;&gt;22:00&lt;/option&gt;&#xA;            &lt;option value=&#34;23&#34;&gt;23:00&lt;/option&gt;&#xA;          &lt;/select&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;        &lt;label id=&#34;TimelapseEndLabel&#34;&gt;End Date &amp; Time:&lt;/label&gt;&#xA;        &lt;div class=&#34;MapPost-form-group-row&#34;&gt;&#xA;          &lt;input type=&#34;date&#34; id=&#34;TimelapseEndDate&#34;&gt;&#xA;          &lt;select id=&#34;TimelapseEndTime&#34;&gt;&#xA;            &lt;option value=&#34;00&#34;&gt;00:00&lt;/option&gt;&#xA;            &lt;option value=&#34;01&#34;&gt;01:00&lt;/option&gt;&#xA;            &lt;option value=&#34;02&#34;&gt;02:00&lt;/option&gt;&#xA;            &lt;option value=&#34;03&#34;&gt;03:00&lt;/option&gt;&#xA;            &lt;option value=&#34;04&#34;&gt;04:00&lt;/option&gt;&#xA;            &lt;option value=&#34;05&#34;&gt;05:00&lt;/option&gt;&#xA;            &lt;option value=&#34;06&#34;&gt;06:00&lt;/option&gt;&#xA;            &lt;option value=&#34;07&#34;&gt;07:00&lt;/option&gt;&#xA;            &lt;option value=&#34;08&#34;&gt;08:00&lt;/option&gt;&#xA;            &lt;option value=&#34;09&#34;&gt;09:00&lt;/option&gt;&#xA;            &lt;option value=&#34;10&#34;&gt;10:00&lt;/option&gt;&#xA;            &lt;option value=&#34;11&#34;&gt;11:00&lt;/option&gt;&#xA;            &lt;option value=&#34;12&#34;&gt;12:00&lt;/option&gt;&#xA;            &lt;option value=&#34;13&#34;&gt;13:00&lt;/option&gt;&#xA;            &lt;option value=&#34;14&#34;&gt;14:00&lt;/option&gt;&#xA;            &lt;option value=&#34;15&#34;&gt;15:00&lt;/option&gt;&#xA;            &lt;option value=&#34;16&#34;&gt;16:00&lt;/option&gt;&#xA;            &lt;option value=&#34;17&#34;&gt;17:00&lt;/option&gt;&#xA;            &lt;option value=&#34;18&#34;&gt;18:00&lt;/option&gt;&#xA;            &lt;option value=&#34;19&#34;&gt;19:00&lt;/option&gt;&#xA;            &lt;option value=&#34;20&#34;&gt;20:00&lt;/option&gt;&#xA;            &lt;option value=&#34;21&#34;&gt;21:00&lt;/option&gt;&#xA;            &lt;option value=&#34;22&#34;&gt;22:00&lt;/option&gt;&#xA;            &lt;option value=&#34;23&#34;&gt;23:00&lt;/option&gt;&#xA;          &lt;/select&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;        &lt;label for=&#34;TimelapseFormSpeed&#34;&gt;Playback Speed:&lt;/label&gt;&#xA;        &lt;select id=&#34;TimelapseFormSpeed&#34;&#xA;          style=&#34;width: 100%; padding: 0.8rem; border-radius: var(--border-radius-0p8rem); border: 0.1rem solid var(--card-shadow); font-size: 1.4rem;&#34;&gt;&#xA;          &lt;option value=&#34;1000&#34;&gt;Slow (1 sec / frame)&lt;/option&gt;&#xA;          &lt;option value=&#34;500&#34; selected&gt;Normal (0.5 sec / frame)&lt;/option&gt;&#xA;          &lt;option value=&#34;200&#34;&gt;Fast (0.2 sec / frame)&lt;/option&gt;&#xA;        &lt;/select&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;hr style=&#34;margin-top: 0; margin-bottom: 0;&#34;&gt;&#xA;      &lt;b style=&#34;color: var(--card-shadow);&#34;&gt;How to use:&lt;/b&gt;&#xA;      &lt;ul style=&#34;margin-top: 0;&#34;&gt;&#xA;        &lt;li&gt;Select at least one data &lt;b&gt;layer&lt;/b&gt; on the map before generating.&lt;/li&gt;&#xA;        &lt;li&gt;Choose &lt;b style=&#34;color: var(--card-shadow);&#34;&gt;Hourly&lt;/b&gt; (max 12 frames (hours)) or &lt;b&#xA;            style=&#34;color: var(--card-shadow);&#34;&gt;Daily&lt;/b&gt; (max 14 frames (days)).&lt;/li&gt;&#xA;        &lt;li&gt;Set the start/end date range and playback speed, then click &lt;b&gt;Generate GIF&lt;/b&gt;.&lt;/li&gt;&#xA;        &lt;li&gt;Do not interact with the map while capturing. Use the &lt;b&gt;Cancel&lt;/b&gt; button to abort.&lt;/li&gt;&#xA;        &lt;li&gt;This is not supported on mobile devices.&lt;/li&gt;&#xA;      &lt;/ul&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;MapPost-modal-footer&#34;&gt;&#xA;      &lt;div class=&#34;reply-btn-wrapper&#34;&gt;&#xA;        &lt;button class=&#34;reply-btn-submit&#34; id=&#34;TimelapseBtnSubmit&#34;&#xA;          style=&#34;background-color: var(--map-accordion-gradient-start); color: var(--color-white); border: none;&#34;&gt;Generate&#xA;          GIF&lt;/button&gt;&#xA;        &lt;button class=&#34;reply-btn-cancel&#34; id=&#34;TimelapseBtnCancel&#34;&gt;Cancel&lt;/button&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;!-- Floating Dispersion Animator Modal --&gt;&#xA;&lt;div class=&#34;accordion-page collapsed&#34; id=&#34;DispersionDrawer&#34;&gt;&#xA;  &lt;div class=&#34;accordion&#34;&gt;&#xA;    &lt;div class=&#34;accordion-header&#34; id=&#34;DispersionDrawerHeaderDraggable&#34;&gt;&#xA;      &lt;div style=&#34;display: flex; align-items: center; gap: 0.8rem;&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34; style=&#34;color: var(--text-main);&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-hysplit&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;        &lt;span class=&#34;accordion-title&#34;&gt;Dispersion Animator&lt;/span&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;ui-handle-draggable&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-drag-handle&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;button id=&#34;DispersionDrawerClose&#34; class=&#34;ui-btn-close&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div id=&#34;DispersionDrawerBody&#34;&gt;&#xA;      &lt;div id=&#34;DispersionDrawerInfo&#34;&gt;&#xA;        &lt;div id=&#34;DispersionDrawerStepDisplay&#34;&gt;Step: 0 / 0&lt;/div&gt;&#xA;        &lt;div id=&#34;DispersionDrawerTimeDisplay&#34;&gt;Current: ...&lt;/div&gt;&#xA;        &lt;div id=&#34;DispersionDrawerMassDisplay&#34;&gt;&lt;/div&gt;&#xA;        &lt;div id=&#34;DispersionDrawerMeta&#34;&gt;&lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div id=&#34;DispersionDrawerControls&#34;&gt;&#xA;        &lt;button id=&#34;DispersionDrawerPlayBtn&#34; title=&#34;Play/Pause&#34;&gt;&#xA;          &lt;svg width=&#34;24&#34; height=&#34;24&#34; fill=&#34;currentColor&#34;&gt;&#xA;            &lt;path id=&#34;DispersionDrawerPlayIcon&#34; d=&#34;M8 5v14l11-7z&#34; /&gt;&#xA;          &lt;/svg&gt;&#xA;        &lt;/button&gt;&#xA;        &lt;input type=&#34;range&#34; id=&#34;DispersionDrawerSlider&#34; min=&#34;0&#34; max=&#34;0&#34; value=&#34;0&#34; step=&#34;1&#34;&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;!-- Analytics Dashboard Modal --&gt;&#xA;&lt;style&gt;&#xA;  .analytics-grid {&#xA;    overflow-y: auto;&#xA;    flex: 1;&#xA;    padding: 2rem;&#xA;    display: grid;&#xA;    grid-template-columns: repeat(6, 1fr);&#xA;    gap: 2rem;&#xA;    align-content: start;&#xA;  }&#xA;&#xA;  /* Layout Spans */&#xA;  .chart-span-pie {&#xA;    grid-column: span 2;&#xA;  }&#xA;&#xA;  /* 3 per row */&#xA;  .chart-span-bar {&#xA;    grid-column: span 3;&#xA;  }&#xA;&#xA;  /* 2 per row */&#xA;  .chart-span-full {&#xA;    grid-column: span 6;&#xA;  }&#xA;&#xA;  /* 1 per row */&#xA;&#xA;  @media (max-width: 1024px) {&#xA;    .analytics-grid {&#xA;      grid-template-columns: 1fr;&#xA;    }&#xA;&#xA;    .chart-span-pie,&#xA;    .chart-span-bar,&#xA;    .chart-span-full {&#xA;      grid-column: auto;&#xA;    }&#xA;  }&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;MapPost-modal-overlay&#34; id=&#34;AnalyticsModalOverlay&#34; style=&#34;display:none; z-index: 9999;&#34;&gt;&#xA;  &lt;div class=&#34;MapPost-modal&#34; style=&#34;width: 90vw; display: flex; flex-direction: column;&#34;&gt;&#xA;    &lt;div class=&#34;MapPost-modal-header&#34;&gt;&#xA;      &lt;h3 id=&#34;AnalyticsModalTitle&#34;&gt;Smokelyze Usage Analytics&lt;/h3&gt;&#xA;      &lt;button class=&#34;ui-btn-close&#34; id=&#34;AnalyticsModalClose&#34;&gt;&#xA;        &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;          &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;div style=&#34;padding: 1rem 2rem; background: var(--sidebar-widget-bg); border-bottom: 0.1rem solid var(--border-main); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem;&#34;&gt;&#xA;      &lt;span style=&#34;font-size: 1.4rem; color: var(--card-shadow);&#34; id=&#34;AnalyticsLastUpdated&#34;&gt;Loading data...&lt;/span&gt;&#xA;      &lt;div id=&#34;AnalyticsSummaryStats&#34; style=&#34;display: flex; gap: 2rem;&#34;&gt;&#xA;        &lt;!-- Summary stats injected via JS --&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;MapPost-modal-body analytics-grid&#34;&gt;&#xA;      &lt;!-- Row 1: 3 Pie Charts --&gt;&#xA;      &lt;div id=&#34;AnalyticsChartEvent&#34; class=&#34;chart-span-pie&#34;&#xA;        style=&#34;min-height: 350px; background: var(--color-bg); border: 0.1rem solid var(--border-main); border-radius: var(--border-radius-0p8rem); padding: 1rem;&#34;&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div id=&#34;AnalyticsChartRole&#34; class=&#34;chart-span-pie&#34;&#xA;        style=&#34;min-height: 350px; background: var(--color-bg); border: 0.1rem solid var(--border-main); border-radius: var(--border-radius-0p8rem); padding: 1rem;&#34;&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div id=&#34;AnalyticsChartDataset&#34; class=&#34;chart-span-pie&#34;&#xA;        style=&#34;min-height: 350px; background: var(--color-bg); border: 0.1rem solid var(--border-main); border-radius: var(--border-radius-0p8rem); padding: 1rem;&#34;&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;!-- Row 2: 3 Bar Charts --&gt;&#xA;      &lt;div id=&#34;AnalyticsChartLayer&#34; class=&#34;chart-span-pie&#34;&#xA;        style=&#34;min-height: 350px; background: var(--color-bg); border: 0.1rem solid var(--border-main); border-radius: var(--border-radius-0p8rem); padding: 1rem;&#34;&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div id=&#34;AnalyticsChartState&#34; class=&#34;chart-span-pie&#34;&#xA;        style=&#34;min-height: 350px; background: var(--color-bg); border: 0.1rem solid var(--border-main); border-radius: var(--border-radius-0p8rem); padding: 1rem;&#34;&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div id=&#34;AnalyticsChartAqs&#34; class=&#34;chart-span-pie&#34;&#xA;        style=&#34;min-height: 350px; background: var(--color-bg); border: 0.1rem solid var(--border-main); border-radius: var(--border-radius-0p8rem); padding: 1rem;&#34;&gt;&#xA;      &lt;/div&gt;&#xA;&#xA;      &lt;!-- Row 3: 1 Full-width Line Chart --&gt;&#xA;      &lt;div id=&#34;AnalyticsChartDate&#34; class=&#34;chart-span-full&#34;&#xA;        style=&#34;min-height: 350px; background: var(--color-bg); border: 0.1rem solid var(--border-main); border-radius: var(--border-radius-0p8rem); padding: 1rem;&#34;&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/resrc/announcements/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/resrc/announcements/</guid>
      <description>&lt;link rel=&#34;stylesheet&#34; href=&#34;https://smokelyze.org/css/board.css&#34;&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;https://smokelyze.org/css/map.css&#34;&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;https://smokelyze.org/css/data.css&#34;&gt;&#xA;&#xA;&lt;h1 style=&#34;text-align: center;&#34;&gt;&#xA;  Announcements &amp; Updates&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;div style=&#34;display: flex; gap: 1rem; margin-bottom: 2rem;&#34;&gt;&#xA;  &lt;button class=&#34;reply-btn-submit&#34; id=&#34;BoardBtnWrite&#34; style=&#34;display: none;&#34;&gt;+ Write Announcement&lt;/button&gt;&#xA;  &lt;button class=&#34;reply-btn-submit&#34; id=&#34;BoardBtnEmail&#34; style=&#34;display: none;&#34;&gt;+ Write Bulk Email&lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;hr&gt;&#xA;&#xA;&lt;div id=&#34;BoardPagination&#34; class=&#34;datadb-pagination&#34;&gt;&#xA;    &lt;button id=&#34;BoardBtnPrev&#34; class=&#34;datadb-page-btn&#34; style=&#34;visibility: hidden;&#34;&gt;&amp;lt;&lt;/button&gt;&#xA;    &lt;span id=&#34;BoardPageInfo&#34; style=&#34;visibility: hidden;&#34;&gt;&lt;/span&gt;&#xA;    &lt;button id=&#34;BoardBtnNext&#34; class=&#34;datadb-page-btn&#34; style=&#34;visibility: hidden;&#34;&gt;&amp;gt;&lt;/button&gt;&#xA;&lt;/div&gt;&#xA;    &#xA;&lt;div class=&#34;board-list&#34; id=&#34;BoardList&#34;&gt;&lt;/div&gt;&#xA;&#xA;&lt;!-- Board Modal (Reusing MapPost Style) --&gt;&#xA;&lt;div class=&#34;MapPost-modal-overlay&#34; id=&#34;BoardModalOverlay&#34; style=&#34;display:none;&#34;&gt;&#xA;    &lt;div class=&#34;MapPost-modal&#34;&gt;&#xA;        &lt;div class=&#34;MapPost-modal-header&#34;&gt;&#xA;            &lt;h3 id=&#34;BoardModalTitle&#34;&gt;New Announcement&lt;/h3&gt;&#xA;            &lt;button class=&#34;ui-btn-close&#34; id=&#34;BoardModalClose&#34;&gt;&#xA;                &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;                    &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;                &lt;/svg&gt;&#xA;            &lt;/button&gt;&#xA;        &lt;/div&gt;&#xA;&#xA;        &lt;div id=&#34;BoardModalViewBody&#34; style=&#34;display:flex; flex:1; flex-direction:column;&#34;&gt;&lt;/div&gt;&#xA;&#xA;        &lt;div id=&#34;BoardModalEditBody&#34; style=&#34;display:flex; flex:1; flex-direction:column;&#34;&gt;&#xA;            &lt;div class=&#34;MapPost-modal-body&#34;&gt;&#xA;                &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;                    &lt;label for=&#34;BoardFormTitle&#34;&gt;Title &lt;small id=&#34;BoardTitleCounter&#34;&#xA;                            style=&#34;float: right;&#34;&gt;0/100&lt;/small&gt;&lt;/label&gt;&#xA;                    &lt;input type=&#34;text&#34; id=&#34;BoardFormTitle&#34; placeholder=&#34;Enter title...&#34; maxlength=&#34;100&#34;&gt;&#xA;                &lt;/div&gt;&#xA;                &lt;div class=&#34;MapPost-form-group&#34;&gt;&#xA;                    &lt;label for=&#34;BoardFormContent&#34;&gt;Content&lt;small id=&#34;BoardContentCounter&#34;&#xA;                            style=&#34;float: right;&#34;&gt;0/3000&lt;/small&gt;&lt;/label&gt;&#xA;                    &lt;textarea id=&#34;BoardFormContent&#34; placeholder=&#34;Enter details...&#34; maxlength=&#34;3000&#34;&gt;&lt;/textarea&gt;&#xA;                &lt;/div&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;div class=&#34;MapPost-modal-footer&#34;&gt;&#xA;                &lt;div class=&#34;reply-btn-wrapper&#34;&gt;&#xA;                    &lt;button class=&#34;reply-btn-submit&#34; id=&#34;BoardBtnTest&#34; style=&#34;display: none;&#34;&gt;Send Test to Self&lt;/button&gt;&#xA;                    &lt;button class=&#34;reply-btn-submit&#34; id=&#34;BoardBtnSubmit&#34;&gt;Submit&lt;/button&gt;&#xA;                    &lt;button class=&#34;reply-btn-cancel&#34; id=&#34;BoardBtnCancel&#34;&gt;Cancel&lt;/button&gt;&#xA;                &lt;/div&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&#xA;&lt;script type=&#34;module&#34; src=&#34;https://smokelyze.org/js/fb-announcements.js&#34;&gt;&lt;/script&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/resrc/data/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/resrc/data/</guid>
      <description>&lt;link rel=&#34;stylesheet&#34; href=&#34;https://smokelyze.org/css/data.css&#34;&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;https://smokelyze.org/css/map.css&#34;&gt;&#xA;&#xA;&lt;!-- Loading Spinner (shared with loader-ui.js toggleSpinner) --&gt;&#xA;&lt;div id=&#34;MapLoadingOverlay&#34;&gt;&#xA;  &lt;div id=&#34;MapLoadingSpinner&#34;&gt;&lt;/div&gt;&#xA;  &lt;div id=&#34;MapLoadingText&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h1 style=&#34;text-align: center;&#34;&gt;&#xA;  Data Archive&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;div class=&#34;datadb-tabs&#34;&gt;&#xA;  &lt;button class=&#34;datadb-tab-btn active&#34; onclick=&#34;openTab(event, &#39;published&#39;)&#34;&gt;Published data&lt;/button&gt;&#xA;  &lt;button class=&#34;datadb-tab-btn&#34; onclick=&#34;openTab(event, &#39;annual&#39;)&#34;&gt;Latest Analysis &amp; Prediction&lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div id=&#34;published&#34; class=&#34;datadb-tab-content active&#34;&gt;&#xA;&#xA;  &lt;h3&gt;UW GAM-v2 (Lee and Jaffe, 2025)&lt;/h3&gt;&#xA;  &lt;ul&gt;&#xA;    &lt;li&gt;&#xA;      &lt;b style=&#34;font-weight: bold; color: var(--card-shadow);&#34;&gt;[Full dataset]&lt;/b&gt;:&#xA;      University of Washington ResearchWorks Archive,&#xA;      &lt;a href=&#34;https://hdl.handle.net/1773/52893&#34; target=&#34;_blank&#34;&#xA;        rel=&#34;noopener noreferrer&#34;&gt;https://hdl.handle.net/1773/52893&lt;/a&gt;&#xA;    &lt;/li&gt;&#xA;    &lt;li&gt;&#xA;      &lt;b style=&#34;font-weight: bold; color: var(--card-shadow);&#34;&gt;[Citation]&lt;/b&gt;:&#xA;      Lee, H. and Jaffe, D. A.:&#xA;      Impact of Wildfires on O3 and Air Quality Across the United States for 2019–2024 Using Generalized Additive&#xA;      Models,&#xA;      &lt;em&gt;J. Geophys. Res.: Atmos.&lt;/em&gt;, 130, e2025JD044088, 2025.&#xA;      &lt;a href=&#34;https://doi.org/10.1029/2025JD044088&#34; target=&#34;_blank&#34;&#xA;        rel=&#34;noopener noreferrer&#34;&gt;https://doi.org/10.1029/2025JD044088&lt;/a&gt;&#xA;    &lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &lt;h3&gt;UW GAM-v1 (Lee and Jaffe, 2024)&lt;/h3&gt;&#xA;  &lt;ul&gt;&#xA;    &lt;li&gt;&#xA;      &lt;b style=&#34;font-weight: bold; color: var(--card-shadow);&#34;&gt;[Full dataset]&lt;/b&gt;:&#xA;      University of Washington ResearchWorks Archive,&#xA;      &lt;a href=&#34;http://hdl.handle.net/1773/51276&#34; target=&#34;_blank&#34;&#xA;        rel=&#34;noopener noreferrer&#34;&gt;http://hdl.handle.net/1773/51276&lt;/a&gt;&#xA;    &lt;/li&gt;&#xA;    &lt;li&gt;&#xA;      &lt;b style=&#34;font-weight: bold; color: var(--card-shadow);&#34;&gt;[Citation]&lt;/b&gt;:&#xA;      Lee, H. and Jaffe, D. A.:&#xA;      Wildfire impacts on O3 in the continental United States using PM2.5 and a generalized additive model (2018–2023),&#xA;      &lt;em&gt;Environ. Sci. Technol.&lt;/em&gt;, 58, 14764–14774, 2024.&#xA;      &lt;a href=&#34;https://doi.org/10.1021/acs.est.4c05870&#34; target=&#34;_blank&#34;&#xA;        rel=&#34;noopener noreferrer&#34;&gt;https://doi.org/10.1021/acs.est.4c05870&lt;/a&gt;&#xA;    &lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &lt;h3&gt;UW Smoke PM2.5 (Jaffe et al., 2026)&lt;/h3&gt;&#xA;  &lt;ul&gt;&#xA;    &lt;li&gt;&#xA;      &lt;b style=&#34;font-weight: bold; color: var(--card-shadow);&#34;&gt;[Full dataset]&lt;/b&gt;:&#xA;      University of Washington ResearchWorks Archive,&#xA;      &lt;a href=&#34;https://hdl.handle.net/1773/53059&#34; target=&#34;_blank&#34;&#xA;        rel=&#34;noopener noreferrer&#34;&gt;https://hdl.handle.net/1773/53059&lt;/a&gt;&#xA;    &lt;/li&gt;&#xA;    &lt;li&gt;&#xA;      &lt;b style=&#34;font-weight: bold; color: var(--card-shadow);&#34;&gt;[Citation]&lt;/b&gt;:&#xA;      Jaffe, D., Lee, H., Magzamen, S., Goldberg, D., and O&#39;Dell, K.: &#xA;      Health and Regulatory Impacts of PM2.5 from Wildland Fires for 2019–2024 in the US,&#xA;      &lt;em&gt;GeoHealth&lt;/em&gt;, 10, e2025GH001576, 2026.&#xA;      &lt;a href=&#34;https://doi.org/10.1029/2025GH001576&#34; target=&#34;_blank&#34;&#xA;        rel=&#34;noopener noreferrer&#34;&gt;https://doi.org/10.1029/2025GH001576&lt;/a&gt;&#xA;    &lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;  &lt;h3&gt;EPA EMBER (Simon et al., 2024)&lt;/h3&gt;&#xA;  &lt;ul&gt;&#xA;    &lt;li&gt;&#xA;      &lt;b style=&#34;font-weight: bold; color: var(--card-shadow);&#34;&gt;[Full dataset]&lt;/b&gt;:&#xA;      Zenodo,&#xA;      &lt;a href=&#34;https://zenodo.org/records/13737754&#34; target=&#34;_blank&#34;&#xA;        rel=&#34;noopener noreferrer&#34;&gt;https://zenodo.org/records/13737754&lt;/a&gt;&#xA;    &lt;/li&gt;&#xA;    &lt;li&gt;&#xA;      &lt;b style=&#34;font-weight: bold; color: var(--card-shadow);&#34;&gt;[Citation]&lt;/b&gt;:&#xA;      Simon, H. Beidler, J., Baker, K. R., Henderson, B. H., Fox, L., Misenis, C., Campbell, P., Vukovich, J., Possiel,&#xA;      N., and Eyth, A.:&#xA;      Expediated modeling of burn events results (EMBER): A screening-level dataset of 2023 ozone fire impacts in the&#xA;      US,&#xA;      &lt;em&gt;Data in Brief&lt;/em&gt;, 58, 111208, 2024.&#xA;      &lt;a href=&#34;https://doi.org/10.1016/j.dib.2024.111208&#34; target=&#34;_blank&#34;&#xA;        rel=&#34;noopener noreferrer&#34;&gt;https://doi.org/10.1016/j.dib.2024.111208&lt;/a&gt;&#xA;    &lt;/li&gt;&#xA;    &lt;li&gt;&#xA;      &lt;b style=&#34;font-weight: bold; color: var(--card-shadow);&#34;&gt;[Note]&lt;/b&gt;:&#xA;      Since this dataset has been reprocessed to fit our application (Smokelyze), for the original dataset, please see the detailed information:&#xA;      &lt;a href=&#34;https://www.epa.gov/air-quality-analysis/expedited-modeling-burn-events-results-ember&#34; target=&#34;_blank&#34;&#xA;        rel=&#34;noopener noreferrer&#34;&gt;https://www.epa.gov/air-quality-analysis/expedited-modeling-burn-events-results-ember&lt;/a&gt;&#xA;    &lt;/li&gt;&#xA;  &lt;/ul&gt;&#xA;&#xA;  &lt;div class=&#34;published-sub-tabs-container&#34;&gt;&#xA;    &lt;div class=&#34;datadb-tabs&#34;&gt;&#xA;      &lt;button class=&#34;datadb-tab-btn active&#34; onclick=&#34;openSubTab(event, &#39;DatadbByQuerySection&#39;)&#34;&gt;AQS query&lt;/button&gt;&#xA;      &lt;button class=&#34;datadb-tab-btn&#34; onclick=&#34;openSubTab(event, &#39;DatadbStateReportSection&#39;)&#34;&gt;State report&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;!-- AQS query Sub-tab --&gt;&#xA;    &lt;div id=&#34;DatadbByQuerySection&#34; class=&#34;datadb-tab-content sub-tab-content active&#34;&gt;&#xA;      &lt;div class=&#34;card-about reveal-on-scroll&#34;&gt;&#xA;      &#xA;        &lt;!-- Config --&gt;&#xA;        &lt;div class=&#34;datadb-query-form&#34; style=&#34;align-items: flex-end;&#34;&gt;&#xA;          &lt;div class=&#34;datadb-form-group&#34;&gt;&#xA;            &lt;label for=&#34;DatadbDataSource&#34;&gt;Dataset&lt;/label&gt;&#xA;            &lt;select id=&#34;DatadbDataSource&#34;&gt;&#xA;              &lt;option value=&#34;gam-v2&#34;&gt;UW GAM-v2 (Lee and Jaffe, 2025) &lt;/option&gt;&#xA;              &lt;option value=&#34;gam-v1&#34;&gt;UW GAM-v1 (Lee and Jaffe, 2024) &lt;/option&gt;&#xA;              &lt;option value=&#34;pm-cbsa&#34;&gt;UW Smoke PM2.5 (Jaffe et al., 2026) &lt;/option&gt;&#xA;              &lt;option value=&#34;epa-ember&#34;&gt;EPA EMBER (Simon, et al., 2024) &lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;datadb-form-group&#34;&gt;&#xA;            &lt;label for=&#34;DatadbDataState&#34;&gt;State&lt;/label&gt;&#xA;            &lt;select id=&#34;DatadbDataState&#34;&gt;&#xA;              &lt;option value=&#34;&#34;&gt;Select State&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;div class=&#34;datadb-form-group&#34;&gt;&#xA;            &lt;label for=&#34;DatadbDataAQS&#34;&gt;AQS&lt;/label&gt;&#xA;            &lt;select id=&#34;DatadbDataAQS&#34;&gt;&#xA;              &lt;option value=&#34;&#34;&gt;Select AQS&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;br&gt;&#xA;&#xA;        &lt;div class=&#34;datadb-query-form&#34; style=&#34;display: flex; justify-content: flex-end;&#34;&gt;&#xA;          &lt;button class=&#34;datadb-query-btn&#34; id=&#34;DatadbDataTableBtnImport&#34;&gt;Import data&lt;/button&gt;&#xA;        &lt;/div&gt;&#xA;        &#xA;        &lt;!-- Query Content / Results --&gt;&#xA;        &lt;div id=&#34;DatadbDataTableWrapper&#34; style=&#34;display: none;&#34;&gt;&#xA;          &lt;hr&gt;&#xA;          &lt;div style=&#34;display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem;&#34;&gt;&#xA;            &lt;h3 id=&#34;DatadbDataTableTitle&#34; style=&#34;margin: 0;&#34;&gt;Query Results&lt;/h3&gt;&#xA;          &lt;/div&gt;&#xA;          &#xA;          &lt;p id=&#34;DatadbDataTableNotice&#34; style=&#34;color: var(--card-shadow); font-size: 1.4rem; font-weight: bold;&#34;&gt;&#xA;          &lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/resrc/documents/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/resrc/documents/</guid>
      <description>&lt;div class=&#34;doc-layout&#34;&gt;&#xA;&#xA;    &lt;!-- Left Sidebar --&gt;&#xA;    &lt;nav class=&#34;doc-sidebar&#34; id=&#34;DocSidebar&#34;&gt;&#xA;        &lt;div class=&#34;doc-sidebar-header&#34;&gt;&#xA;            &lt;div class=&#34;doc-sidebar-title&#34;&gt;Documents&lt;/div&gt;&#xA;            &lt;button class=&#34;ui-btn-close&#34; id=&#34;DocSidebarClose&#34;&gt;&#xA;                &lt;svg width=&#34;20&#34; height=&#34;20&#34;&gt;&#xA;                    &lt;use xlink:href=&#34;#icon-close&#34; /&gt;&#xA;                &lt;/svg&gt;&#xA;            &lt;/button&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;ul class=&#34;doc-toc&#34; id=&#34;DocToc&#34;&gt;&#xA;&#xA;            &lt;li class=&#34;doc-sidebar-divider&#34;&gt;App Information&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1 active&#34; data-doc=&#34;doc-citation&#34;&gt;&lt;a href=&#34;#&#34;&gt;Citation&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-arch&#34;&gt;&lt;a href=&#34;#&#34;&gt;Technical Stack&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-mappost&#34;&gt;&lt;a href=&#34;#&#34;&gt;MapPost&lt;/a&gt;&lt;/li&gt;&#xA;&#xA;            &lt;li class=&#34;doc-sidebar-divider&#34;&gt;Research Methodology&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-pmcrit&#34;&gt;&lt;a href=&#34;#&#34;&gt;PM2.5-criteria&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-smokeday&#34;&gt;&lt;a href=&#34;#&#34;&gt;Smoke Day&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-gam&#34;&gt;&lt;a href=&#34;#&#34;&gt;GAM&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-smoke-impacts&#34;&gt;&lt;a href=&#34;#&#34;&gt;Note on Statistics&lt;/a&gt;&lt;/li&gt;&#xA;&#xA;            &lt;li class=&#34;doc-sidebar-divider&#34;&gt;Data Pipeline&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-wildfire-news&#34;&gt;&lt;a href=&#34;#&#34;&gt;News&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-wildfire-nifc&#34;&gt;&lt;a href=&#34;#&#34;&gt;NIFC&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-airnow&#34;&gt;&lt;a href=&#34;#&#34;&gt;EPA/AirNow&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-hms&#34;&gt;&lt;a href=&#34;#&#34;&gt;NOAA/HMS&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-merra2&#34;&gt;&lt;a href=&#34;#&#34;&gt;NASA/MERRA-2&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-tropomi&#34;&gt;&lt;a href=&#34;#&#34;&gt;S5P/TROPOMI&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-tempo&#34;&gt;&lt;a href=&#34;#&#34;&gt;NASA/TEMPO&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-goes&#34;&gt;&lt;a href=&#34;#&#34;&gt;NOAA/GOES&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-hrrr&#34;&gt;&lt;a href=&#34;#&#34;&gt;NOAA/HRRR&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-viirs&#34;&gt;&lt;a href=&#34;#&#34;&gt;NOAA/VIIRS&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-hysplit&#34;&gt;&lt;a href=&#34;#&#34;&gt;NOAA/HYSPLIT&lt;/a&gt;&lt;/li&gt;&#xA;            &lt;li class=&#34;doc-toc-h1&#34; data-doc=&#34;doc-pred-gam-v2&#34;&gt;&lt;a href=&#34;#&#34;&gt;UW GAM-v2 pred.&lt;/a&gt;&lt;/li&gt;&#xA;        &lt;/ul&gt;&#xA;    &lt;/nav&gt;&#xA;&#xA;    &lt;!-- Mobile TOC toggle --&gt;&#xA;    &lt;button class=&#34;doc-toc-toggle&#34; id=&#34;DocTocToggle&#34; style=&#34;align-items: center; gap: 0.8rem; padding: 1rem 2rem;&#34;&gt;&#xA;        &lt;span style=&#34;font-size: 2.4rem; line-height: 1;&#34;&gt;☰&lt;/span&gt;&#xA;        &lt;span&gt;Contents&lt;/span&gt;&#xA;    &lt;/button&gt;&#xA;&#xA;    &lt;!-- Right Content Area --&gt;&#xA;    &lt;main class=&#34;doc-main&#34;&gt;&#xA;&#xA;        &lt;!-- Document pages will be dynamically generated here by JS --&gt;&#xA;&#xA;    &lt;/main&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&#xA;&lt;style&gt;&#xA;    .doc-layout {&#xA;        /* Standardized Font Size System (Min: 1.2 / Max: 2.2) */&#xA;        --fs-xl: 2.2rem;&#xA;        /* Main Document H2 Title */&#xA;        --fs-l: 2.0rem;&#xA;        /* Sidebar Title */&#xA;        --fs-ml: 1.8rem;&#xA;        /* Section H3, Mobile Toggle */&#xA;        --fs-m: 1.6rem;&#xA;        /* Body, H4, Callouts, Sidebar H1 */&#xA;        --fs-s: 1.5rem;&#xA;        /* Tables, Code, Sidebar Links, Flow Text, Footer */&#xA;        --fs-xs: 1.4rem;&#xA;        /* Dividers, Tags, Step Numbers, Table Headers */&#xA;        --fs-divider: 1.1rem;&#xA;&#xA;        display: flex;&#xA;        min-height: calc(100vh - var(--header-height-total) - 4rem);&#xA;        max-width: 100%;&#xA;        width: 100%;&#xA;        margin: 0;&#xA;    }&#xA;&#xA;    /* Sidebar */&#xA;    .doc-sidebar {&#xA;        position: sticky;&#xA;        top: var(--header-height-total);&#xA;        align-self: flex-start;&#xA;        width: 20%;&#xA;        min-width: 20%;&#xA;        height: calc(100vh - var(--header-height-total));&#xA;        overflow-y: auto;&#xA;        padding: 1.5rem 0;&#xA;        border-right: 0.1rem solid var(--border-main);&#xA;        background: var(--color-bg);&#xA;        scrollbar-width: thin;&#xA;    }&#xA;&#xA;    .doc-sidebar-header {&#xA;        display: flex;&#xA;        align-items: center;&#xA;        justify-content: space-between;&#xA;        padding: 0 1.5rem 0.5rem;&#xA;        border-bottom: 0.1rem solid var(--border-main);&#xA;        margin-bottom: 0.8rem;&#xA;    }&#xA;&#xA;    .doc-sidebar-title {&#xA;        font-size: var(--fs-l);&#xA;        font-weight: bold;&#xA;        color: var(--text-heading);&#xA;    }&#xA;&#xA;    #DocSidebarClose {&#xA;        display: none;&#xA;    }&#xA;&#xA;    .doc-sidebar-divider {&#xA;        padding: 2rem 1.5rem 0.5rem;&#xA;        font-size: var(--fs-divider);&#xA;        font-weight: bold;&#xA;        color: var(--card-shadow);&#xA;        text-transform: uppercase;&#xA;        letter-spacing: 0.05em;&#xA;    }&#xA;&#xA;    .doc-toc {&#xA;        list-style: none;&#xA;        padding: 0;&#xA;        margin: 0;&#xA;    }&#xA;&#xA;    .doc-toc li a {&#xA;        display: block;&#xA;        padding: 0.5rem 1.5rem;&#xA;        font-size: var(--fs-s);&#xA;        color: var(--text-main);&#xA;        text-decoration: none;&#xA;        border-left: 0.3rem solid transparent;&#xA;        transition: all 0.3s ease;&#xA;        cursor: pointer;&#xA;    }&#xA;&#xA;    .doc-toc li a:hover {&#xA;        color: var(--card-shadow);&#xA;        background: var(--color-code-bg);&#xA;        border-left-color: var(--card-shadow);&#xA;    }&#xA;&#xA;    .doc-toc li.active&gt;a {&#xA;        color: var(--card-shadow);&#xA;        font-weight: bold;&#xA;        border-left-color: var(--card-shadow);&#xA;        background: var(--color-code-bg);&#xA;    }&#xA;&#xA;    .doc-toc-h1&gt;a {&#xA;        font-weight: bold !important;&#xA;        font-size: var(--fs-m) !important;&#xA;        padding-left: 2rem !important;&#xA;        padding-top: 0.5rem !important;&#xA;    }&#xA;&#xA;    .doc-toc-h2&gt;a {&#xA;        padding-left: 3rem !important;&#xA;        font-size: var(--fs-s) !important;&#xA;    }&#xA;&#xA;    .doc-toc-sub {&#xA;        display: none;&#xA;    }&#xA;&#xA;    .doc-toc-sub.visible {&#xA;        display: list-item;&#xA;    }&#xA;&#xA;    .doc-toc-toggle {&#xA;        display: none;&#xA;        position: sticky;&#xA;        top: var(--header-height-total);&#xA;        z-index: var(--z-doc-toggle);&#xA;        width: 100%;&#xA;        padding: 1rem 2rem;&#xA;        background: var(--sidebar-widget-bg);&#xA;        border: none;&#xA;        border-bottom: 0.1rem solid var(--border-main);&#xA;        color: var(--text-heading);&#xA;        font-size: var(--fs-ml);&#xA;        font-weight: bold;&#xA;        cursor: pointer;&#xA;        text-align: left;&#xA;    }&#xA;&#xA;    /* Main */&#xA;    .doc-main {&#xA;        flex: 1;&#xA;        max-width: 100%;&#xA;        padding: 1rem 2rem 6rem;&#xA;        line-height: 1.75;&#xA;    }&#xA;&#xA;    .doc-page section {&#xA;        scroll-margin-top: calc(var(--header-height-total) + 1rem);&#xA;    }&#xA;&#xA;    .doc-main hr {&#xA;        margin: 0 !important;&#xA;    }&#xA;&#xA;    .doc-main h2 {&#xA;        font-size: var(--fs-xl);&#xA;        margin-top: 1rem;&#xA;        margin-bottom: 1rem;&#xA;        padding-bottom: 0.5rem;&#xA;    }&#xA;&#xA;    .doc-main h3 {&#xA;        font-size: var(--fs-ml);&#xA;        margin-top: 2.5rem;&#xA;        margin-bottom: 1rem;&#xA;        padding-bottom: 0.5rem;&#xA;        color: var(--card-shadow);&#xA;        border-bottom: 0.1rem solid var(--border-main);&#xA;    }&#xA;&#xA;    .doc-main h4 {&#xA;        color: var(--card-shadow);&#xA;        font-size: var(--fs-m);&#xA;        margin-top: 1.8rem;&#xA;        margin-bottom: 0.5rem;&#xA;    }&#xA;&#xA;    .doc-main p {&#xA;        font-size: var(--fs-m);&#xA;        color: var(--text-main);&#xA;        margin-bottom: 1.2rem;&#xA;    }&#xA;&#xA;    .doc-main ul,&#xA;    .doc-main ol,&#xA;    .doc-main li {&#xA;        font-size: var(--fs-m);&#xA;    }&#xA;&#xA;    .doc-main code {&#xA;        font-family: &#34;Consolas&#34;, &#34;Monaco&#34;, monospace;&#xA;        font-size: var(--fs-s);&#xA;        background: var(--color-code-bg2);&#xA;        padding: 0.15rem 0.5rem;&#xA;        border-radius: calc(var(--border-radius-0p8rem) * 0.5);&#xA;        color: var(--text-heading);&#xA;    }&#xA;&#xA;    .doc-main pre {&#xA;        background: var(--color-code-bg);&#xA;        border: 0.1rem solid var(--border-main);&#xA;        border-left: 0.4rem solid var(--card-shadow);&#xA;        border-radius: var(--border-radius-0p8rem);&#xA;        padding: 1.4rem 1.8rem;&#xA;        overflow-x: auto;&#xA;        margin: 1rem 0 2rem;&#xA;        font-size: var(--fs-xs);&#xA;        line-height: 1.55;&#xA;    }&#xA;&#xA;    .doc-main pre code {&#xA;        background: none;&#xA;        padding: 0;&#xA;        font-size: var(--fs-s);&#xA;        color: var(--text-main);&#xA;    }&#xA;&#xA;    .doc-callout {&#xA;        background: var(--color-code-bg);&#xA;        border-left: 0.5rem solid var(--card-shadow);&#xA;        padding: 1.2rem 1.6rem;&#xA;        border-radius: 0 var(--border-radius-0p8rem) var(--border-radius-0p8rem) 0;&#xA;        margin: 1.4rem 0 2rem;&#xA;        font-size: var(--fs-m);&#xA;        color: var(--text-main);&#xA;        line-height: 1.7;&#xA;    }&#xA;&#xA;    .doc-formula {&#xA;        background: var(--color-code-bg);&#xA;        border: 0.1rem solid var(--border-main);&#xA;        border-radius: var(--border-radius-0p8rem);&#xA;        padding: 1.6rem 2rem;&#xA;        margin: 1.4rem 0 2rem;&#xA;        text-align: center;&#xA;        font-family: &#34;Consolas&#34;, monospace;&#xA;        font-size: var(--fs-m);&#xA;        line-height: 2.2;&#xA;        text-align: center;&#xA;        color: var(--text-heading);&#xA;    }&#xA;&#xA;    .doc-table {&#xA;        width: 100%;&#xA;        border-collapse: collapse;&#xA;        margin: 1rem 0 2rem;&#xA;        font-size: var(--fs-s);&#xA;    }&#xA;&#xA;    .doc-table th,&#xA;    .doc-table td {&#xA;        padding: 0.8rem 1.2rem;&#xA;        text-align: left;&#xA;        border-bottom: 0.1rem solid var(--border-main);&#xA;        color: var(--text-main);&#xA;    }&#xA;&#xA;    .doc-table th {&#xA;        background: var(--color-code-bg);&#xA;        font-weight: bold;&#xA;        font-size: var(--fs-xs);&#xA;        color: var(--text-heading);&#xA;        text-transform: uppercase;&#xA;        letter-spacing: 0.05rem;&#xA;        border-bottom: 0.2rem solid var(--card-shadow);&#xA;    }&#xA;&#xA;    @media (hover: hover) {&#xA;        .doc-table tr:hover {&#xA;            background: var(--color-code-bg);&#xA;        }&#xA;    }&#xA;&#xA;    .doc-flow {&#xA;        display: flex;&#xA;        flex-direction: column;&#xA;        gap: 0.3rem;&#xA;        margin: 1.4rem 0 2rem;&#xA;    }&#xA;&#xA;    .doc-flow-step {&#xA;        position: relative;&#xA;        padding: 1rem 1.4rem 1rem 4.4rem;&#xA;        background: var(--sidebar-widget-bg);&#xA;        border-radius: var(--border-radius-0p8rem);&#xA;        border: 0.1rem solid var(--border-main);&#xA;        font-size: var(--fs-s);&#xA;        color: var(--text-main);&#xA;    }&#xA;&#xA;    .doc-step-num {&#xA;        position: absolute;&#xA;        left: 1.4rem;&#xA;        top: 1rem;&#xA;        background: var(--card-shadow) !important;&#xA;        color: var(--color-bg) !important;&#xA;        width: 2.2rem;&#xA;        height: 2.2rem;&#xA;        border-radius: 50%;&#xA;        display: inline-flex;&#xA;        align-items: center;&#xA;        justify-content: center;&#xA;        font-weight: bold;&#xA;        font-size: var(--fs-xs);&#xA;        flex-shrink: 0;&#xA;        box-shadow: 0 0.2rem 0.6rem rgba(0, 0, 0, 0.3);&#xA;    }&#xA;&#xA;    .doc-flow-arrow {&#xA;        text-align: center;&#xA;        color: var(--card-shadow);&#xA;        font-size: 1.6rem;&#xA;        line-height: 1;&#xA;        margin: 0.5rem 0;&#xA;    }&#xA;&#xA;    .doc-footer-text {&#xA;        color: var(--text-muted) !important;&#xA;        font-size: var(--fs-s) !important;&#xA;    }&#xA;&#xA;    @media (max-width: 1024px) {&#xA;        .container:has(.doc-layout) {&#xA;            max-width: 100%;&#xA;            padding: 0;&#xA;        }&#xA;&#xA;        .content:has(.doc-layout) {&#xA;            max-width: 100%;&#xA;            padding: 0;&#xA;        }&#xA;&#xA;        .doc-layout {&#xA;            flex-direction: column;&#xA;        }&#xA;&#xA;        .doc-sidebar {&#xA;            position: fixed;&#xA;            top: var(--header-height-total);&#xA;            left: 0;&#xA;            z-index: var(--z-doc-sidebar);&#xA;            width: 60%;&#xA;            max-width: 60%;&#xA;            height: calc(100vh - var(--header-height-total));&#xA;            box-shadow: 0.4rem 0 3rem rgba(0, 0, 0, 0.4);&#xA;            background: var(--mobile-nav-bg) !important;&#xA;            color: var(--color-white) !important;&#xA;            border-right: none;&#xA;&#xA;            /* Slide Animation */&#xA;            transform: translateX(-100%);&#xA;            transition: transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), visibility 0.35s;&#xA;            visibility: hidden;&#xA;        }&#xA;&#xA;        .doc-sidebar.open {&#xA;            transform: translateX(0);&#xA;            visibility: visible;&#xA;        }&#xA;&#xA;        .doc-toc-toggle {&#xA;            display: block;&#xA;            background: var(--card-shadow);&#xA;            color: var(--color-bg);&#xA;            border: none;&#xA;            font-weight: bold;&#xA;            box-shadow: 0 0.2rem 1rem rgba(0, 0, 0, 0.2);&#xA;        }&#xA;&#xA;        .doc-sidebar-header {&#xA;            border-bottom-color: rgba(255, 255, 255, 0.1);&#xA;            padding: 1.5rem 1.6rem;&#xA;        }&#xA;&#xA;        .doc-sidebar-title,&#xA;        .doc-sidebar-divider {&#xA;            color: var(--color-white) !important;&#xA;        }&#xA;&#xA;        #DocSidebarClose {&#xA;            display: block;&#xA;            color: var(--color-white);&#xA;        }&#xA;&#xA;        .doc-toc li a {&#xA;            color: var(--color-white) !important;&#xA;            font-weight: bold;&#xA;        }&#xA;&#xA;        .doc-toc li.active&gt;a,&#xA;        .doc-toc li a:hover {&#xA;            background: rgba(255, 255, 255, 0.1) !important;&#xA;            border-left-color: var(--color-white) !important;&#xA;            color: var(--color-white) !important;&#xA;        }&#xA;    }&#xA;&lt;/style&gt;&#xA;&#xA;&lt;script type=&#34;module&#34;&gt;&#xA;    import { addSwipeClose } from &#34;/js/ui-toggles.js&#34;;&#xA;    import { ESML } from &#34;/js/utils.js&#34;;&#xA;&#xA;    (function () {&#xA;        const tocItems = document.querySelectorAll(&#34;.doc-toc li&#34;);&#xA;        const subItems = document.querySelectorAll(&#34;.doc-toc-sub&#34;);&#xA;        const sidebar = document.getElementById(&#34;DocSidebar&#34;);&#xA;        const mainArea = document.querySelector(&#34;.doc-main&#34;);&#xA;&#xA;        // Document source mapping - add new docs here&#xA;        const docSources = {&#xA;            &#34;doc-citation&#34;: &#34;/docs/doc-citation.html&#34;,&#xA;            &#34;doc-arch&#34;: &#34;/docs/doc-architecture.html&#34;,&#xA;            &#34;doc-mappost&#34;: &#34;/docs/doc-mappost.html&#34;,&#xA;            &#34;doc-pmcrit&#34;: &#34;/docs/doc-pmcrit.html&#34;,&#xA;            &#34;doc-smokeday&#34;: &#34;/docs/doc-smokeday.html&#34;,&#xA;            &#34;doc-gam&#34;: &#34;/docs/doc-gam.html&#34;,&#xA;            &#34;doc-smoke-impacts&#34;: &#34;/docs/doc-smoke-impacts.html&#34;,&#xA;            &#34;doc-wildfire-news&#34;: &#34;/docs/doc-wildfire-news.html&#34;,&#xA;            &#34;doc-wildfire-nifc&#34;: &#34;/docs/doc-wildfire-nifc.html&#34;,&#xA;            &#34;doc-airnow&#34;: &#34;/docs/doc-airnow.html&#34;,&#xA;            &#34;doc-hms&#34;: &#34;/docs/doc-hms.html&#34;,&#xA;            &#34;doc-merra2&#34;: &#34;/docs/doc-merra2.html&#34;,&#xA;            &#34;doc-tropomi&#34;: &#34;/docs/doc-tropomi.html&#34;,&#xA;            &#34;doc-tempo&#34;: &#34;/docs/doc-tempo.html&#34;,&#xA;            &#34;doc-goes&#34;: &#34;/docs/doc-goes.html&#34;,&#xA;            &#34;doc-hrrr&#34;: &#34;/docs/doc-hrrr.html&#34;,&#xA;            &#34;doc-viirs&#34;: &#34;/docs/doc-viirs.html&#34;,&#xA;            &#34;doc-hysplit&#34;: &#34;/docs/doc-hysplit.html&#34;,&#xA;            &#34;doc-pred-gam-v2&#34;: &#34;/docs/doc-pred-gam-v2.html&#34;&#xA;        };&#xA;&#xA;        // Dynamically create doc-page divs&#xA;        Object.keys(docSources).forEach((docId, i) =&gt; {&#xA;            const div = document.createElement(&#34;div&#34;);&#xA;            div.className = &#34;doc-page reveal-from-right&#34;;&#xA;            div.id = docId;&#xA;            div.style.display = i === 0 ? &#34;block&#34; : &#34;none&#34;;&#xA;            div.innerHTML = &#39;&lt;p class=&#34;doc-loading&#34;&gt;Loading...&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/resrc/faq/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/resrc/faq/</guid>
      <description>&lt;h1 style=&#34;text-align: center;&#34;&gt;&#xA;    Frequently Asked Questions&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;div class=&#34;faq-hero&#34;&gt;&#xA;    &lt;p&gt;&#xA;    Everything you need to know about using Smokelyze&#xA;    &lt;br&gt;&#xA;    from data layers to analysis.&#xA;    &lt;/p&gt;&#xA;&#xA;    &lt;div class=&#34;faq-search-wrap&#34;&gt;&#xA;        &lt;input type=&#34;text&#34; class=&#34;faq-search&#34; id=&#34;FaqSearch&#34; placeholder=&#34;Search questions...&#34;&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;faq-filters&#34;&gt;&#xA;        &lt;button class=&#34;faq-filter-btn active&#34; data-filter=&#34;all&#34;&gt;All&lt;/button&gt;&#xA;        &lt;button class=&#34;faq-filter-btn&#34; data-filter=&#34;data&#34;&gt;Data &amp; Layers&lt;/button&gt;&#xA;        &lt;button class=&#34;faq-filter-btn&#34; data-filter=&#34;account&#34;&gt;Account&lt;/button&gt;&#xA;        &lt;button class=&#34;faq-filter-btn&#34; data-filter=&#34;general&#34;&gt;General&lt;/button&gt;&#xA;        &lt;button class=&#34;faq-filter-btn&#34; data-filter=&#34;ai&#34;&gt;Ai&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;faq-contact&#34;&gt;&#xA;        Can&#39;t find what you&#39;re looking for? &lt;br&gt;&#xA;        Contact the developer, PhD. Haebum Lee.&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;faq-list&#34; id=&#34;FaqList&#34;&gt;&#xA;&#xA;    &lt;!-- Data &amp; Layers --&gt;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;data&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Data&lt;/span&gt; What is the &#34;SMO&#34; (Smoke O3)?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                &lt;strong&gt;SMO (Smoke contribution to Ozone or Smoke O3)&lt;/strong&gt; represents the estimated increase&#xA;                in the MDA8 O3 concentration caused by wildfire smoke. It is calculated from the GAM residual as:&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                &lt;code&gt;Residual = MDA8 O3 (observed) - MDA8 O3_pred (predicted)&lt;/code&gt;&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                If it is a &lt;strong&gt;smoke day&lt;/strong&gt;: &lt;code&gt;SMO = Residual&lt;/code&gt;&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                While the residual is calculated for every day, the &lt;strong&gt;SMO is only reported on smoke&#xA;                    days&lt;/strong&gt;.&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                A positive SMO value means wildfire smoke likely &lt;strong&gt;increased ozone&lt;/strong&gt; at that monitoring&#xA;                site on that day. Because any model analysis will have random variations, it is important to examine how&#xA;                the SMO on an individual day compares to the distribution of all non-smoke days. This is expressed as&#xA;                the&#xA;                &lt;strong&gt;quantile&lt;/strong&gt;, which indicates where on the distribution the individual day falls. For&#xA;                example, an SMO value of 12 ppb with a 98th percentile quantile indicates the value is highly&#xA;                significant. See more discussion of statistics in the &lt;a href=&#34;https://smokelyze.org/resrc/documents?doc=doc-smoke-impacts&#34;&gt;statistics doc&lt;/a&gt;.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;data&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Data&lt;/span&gt; What does the &#34;Published&#34; data mean, and why do I need to log in?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                &lt;strong&gt;Published data&lt;/strong&gt; refers to peer-reviewed scientific model outputs (GAM-v2, GAM-v1, EPA&#xA;                EMBER, Smoke PM2.5) that estimate smoke-attributed ozone and PM2.5 concentrations.&#xA;                These datasets require &lt;strong&gt;login with a free account&lt;/strong&gt; because they are research-grade data products&#xA;                that we want to track usage for academic attribution purposes. Simply sign in with your Google account&#xA;                to access all Published layers.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;data&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Data&lt;/span&gt; Why does the map say &#34;No data found&#34; for my selected date?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                Each dataset covers a specific time period. For example, the GAM-v2 model covers &lt;strong&gt;April–October&#xA;                    of 2019–2024&lt;/strong&gt; (wildfire season only).&#xA;                If you select a date outside this range, no data will be available.&#xA;                Check the &lt;strong&gt;Layer Descriptions&lt;/strong&gt; panel (the &lt;code&gt;ℹ&lt;/code&gt; icon on the map) for the exact&#xA;                date range of each dataset.&#xA;                For HMS Smoke and Fire data, data from the &lt;strong&gt;current day&lt;/strong&gt; may not yet be available due to&#xA;                processing delays — try selecting yesterday&#39;s date.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;data&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Data&lt;/span&gt; How do I compare data across AQS sites?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                Use the &lt;strong&gt;statistical plots&lt;/strong&gt; available in the [Map] page:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Table:&lt;/strong&gt; View regional or site-level summary statistics including area&#xA;                        burned, smoke coverage, and fire metrics in a structured list.&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Bar/Line plot:&lt;/strong&gt; View state-level aggregated statistics and click individual&#xA;                        states for site-level drill-down.&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;ParCoords plot:&lt;/strong&gt; Multi-dimensional visualization to compare trends across&#xA;                        different variables or sites simultaneously.&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Scatter plot:&lt;/strong&gt; Select multiple data layers and compare their values&#xA;                        site-by-site. The first selected layer goes to the Y-axis, and additional layers become X-axis&#xA;                        traces.&lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;data&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Data&lt;/span&gt; What is the &#34;Latest Analysis &amp; Prediction&#34; in the Data Archive?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                The &lt;strong&gt;Latest Analysis &amp; Prediction&lt;/strong&gt; section (Resources &gt; Data &gt; Latest Analysis &amp; Prediction) provides&#xA;                summarized&#xA;                research outputs for specific calendar years, categorized into &lt;strong&gt;Preliminary&lt;/strong&gt; (initial&#xA;                models) and &lt;strong&gt;Finalized&lt;/strong&gt; (validated results).&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;UW GAM-v2 (+2025):&lt;/strong&gt; Predictions for wildfire seasons (2025+) using the&#xA;                        finalized model architecture, UW GAM-v2 (Lee and Jaffe, 2025).&#xA;                    &lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;UW Smoke PM2.5 (+2025):&lt;/strong&gt; Summarized PM2.5, PM2.5-criteria, and Smoke day across PM2.5 AQS sites&#xA;                        using UW Smoke PM2.5 (Jaffe et al., 2026) methodology.&#xA;                    &lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;                Finalized reports are typically released in &lt;strong&gt;September of the following year&lt;/strong&gt; (e.g., the&#xA;                2025 finalized dataset is expected in Sep 2026). These reports use the final QC data reported to the&#xA;                EPA&#39;s Air Quality System (AQS). Like all Published data, you must be logged in to download these files.&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                &lt;strong&gt;Note on Preliminary data:&lt;/strong&gt; Preliminary data combines the most recent EPA pre-generated&#xA;                data with AirNow observations, which are not considered final data. Users should exercise some caution&#xA;                when using preliminary outputs, although in practice, the preliminary data usually does not change&#xA;                significantly in the final dataset. Due to staggered reporting cycles and our goal to generate rapid analyses, we start our analysis with&#xA;                the preliminary dataset and switch to the final AQS dataset as soon as possible. Finalized data is&#xA;                established based on the EPA&#39;s official &#34;as of&#34; timestamp at the time of publication. Please use our&#xA;                analyses with awareness of these limitations.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;data&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Data&lt;/span&gt; What is the &#34;AQS query&#34; in the Data Archive?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                The &lt;strong&gt;AQS query&lt;/strong&gt; tool (located under Resources &gt; Data &gt; Published &gt; AQS query) allows you&#xA;                to extract processed data at the individual AQS monitoring station level.&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                By selecting a &lt;strong&gt;Dataset&lt;/strong&gt; (e.g., GAM-v2), &lt;strong&gt;State&lt;/strong&gt;, and a specific&#xA;                &lt;strong&gt;AQS site&lt;/strong&gt;, you can import historical model outputs and observations. Once data is&#xA;                imported, you can toggle between:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Location:&lt;/strong&gt; View the site&#39;s physical metadata and its position on a map.&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Table:&lt;/strong&gt; Browse the full dataset in a structured list and download it as a&#xA;                        &lt;strong&gt;CSV&lt;/strong&gt; for external analysis.&#xA;                    &lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Plot:&lt;/strong&gt; Generate interactive time-series charts to visualize trends over custom&#xA;                        date ranges.&lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;data&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Data&lt;/span&gt; What is the &#34;State report&#34; in the Data Archive?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                The &lt;strong&gt;State report&lt;/strong&gt; tool (Resources &gt; Data &gt; Published &gt; State report) provides aggregated&#xA;                air quality summaries at the state level. It is designed to help you understand wildfire impacts in the state level&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                Key features include:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Temporal Resolution:&lt;/strong&gt; Choose between &lt;strong&gt;&#34;By Year&#34;&lt;/strong&gt; for annual&#xA;                        trends or&#xA;                        &lt;strong&gt;&#34;By Date&#34;&lt;/strong&gt; to analyze specific high-impact periods.&#xA;                    &lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Report Types:&lt;/strong&gt; Select from various statistics, such as average smoke-attributed&#xA;                        ozone (SMO) levels, exceedance day counts, or site-specific summaries within the state.&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Exportable Data:&lt;/strong&gt; Like the AQS query tool, all generated reports can be reviewed&#xA;                        in a table format and downloaded as a &lt;strong&gt;CSV&lt;/strong&gt; file.&lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;                          &#xA;    &lt;!-- Account --&gt;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;account&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Account&lt;/span&gt; Why do I need to sign in with Google?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                Signing in is required for two reasons:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Access control&lt;/strong&gt;: Published research data is restricted to authenticated users&#xA;                        for usage tracking and academic attribution.&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Community features&lt;/strong&gt;: MapPosts (community map pins) and Announcements require&#xA;                        user identity to display authorship and enable moderation.&lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;                We use &lt;strong&gt;Google Sign-In exclusively&lt;/strong&gt; — no separate username/password is created. We only&#xA;                access your display name, email, and profile photo; no other Google data is accessed.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;account&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Account&lt;/span&gt; What is a &#34;Guest&#34; login?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                Guest mode gives you &lt;strong&gt;full access&lt;/strong&gt; to all Live data layers (HMS Smoke, Hotspots, AirNow,&#xA;                Wildfire News, NIFC Fires) &lt;strong&gt;without signing in&lt;/strong&gt;.&#xA;                However, you will not be able to access Published model data, write MapPosts, or view Announcements.&#xA;                If you only need real-time air quality monitoring, Guest mode is perfectly sufficient.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;account&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Account&lt;/span&gt; What is the &#34;UID&#34; in my profile, and how do I use it?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                The &lt;strong&gt;UID (User ID)&lt;/strong&gt; is your unique identifier within the Smokelyze platform. It is used&#xA;                to manage access permissions for collaboration features like &lt;strong&gt;MapPost&lt;/strong&gt;.&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                For example, if you want to share a MapPost with specific colleagues rather than the entire public, you&#xA;                can set the post&#39;s visibility to &lt;strong&gt;&#34;Group&#34;&lt;/strong&gt;. Only members you have added to your group via&#xA;                their UID will be able to see those posts.&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                &lt;strong&gt;How to set up a group:&lt;/strong&gt;&#xA;                &lt;ol&gt;&#xA;                    &lt;li&gt;Go to your &lt;strong&gt;Profile (User icon)&lt;/strong&gt; &gt; &lt;strong&gt;Settings&lt;/strong&gt;.&lt;/li&gt;&#xA;                    &lt;li&gt;Enter your colleague&#39;s &lt;strong&gt;UID&lt;/strong&gt; in the input field.&lt;/li&gt;&#xA;                    &lt;li&gt;Click &lt;strong&gt;&#34;Add&#34;&lt;/strong&gt; to register them as a group member.&lt;/li&gt;&#xA;                &lt;/ol&gt;&#xA;                Once registered, they will be granted permission to view and interact with your &#34;Group&#34; visibility&#xA;                MapPosts.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;!-- General --&gt;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;general&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;General&lt;/span&gt; &#xA;            I noticed an update but the page hasn&#39;t changed. How do I fix this?&#xA;            &lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                Sometimes browsers store an old version of the site in their &lt;strong&gt;Cache&lt;/strong&gt; &#xA;                to save loading time. &#xA;                If you encounter display issues or don&#39;t see the latest updates, &#xA;                you should perform a &lt;strong&gt;&#34;Hard Refresh&#34;&lt;/strong&gt;:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Windows/Linux:&lt;/strong&gt; Press &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;R&lt;/code&gt;&#xA;                        (or &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;F5&lt;/code&gt;)&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Mac:&lt;/strong&gt; Press &lt;code&gt;Cmd&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;R&lt;/code&gt;&lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;                This forces the browser to discard the cached files and download the most recent version of the&#xA;                platform. If issues persist, you may need to clear your browser&#39;s &lt;strong&gt;Cache and Cookies&lt;/strong&gt;&#xA;                (Shortcut: &lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;Del&lt;/code&gt; on Windows/Linux,&#xA;                &lt;code&gt;Cmd&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;Del&lt;/code&gt; on Mac).&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;                  &#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;general&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;General&lt;/span&gt; Which browsers are supported?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                Smokelyze works best on modern browsers:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;Edge, Chrome, Firefox, Safari, etc.&lt;/li&gt;&#xA;                    &lt;li&gt;Mobile browsers (e.g., Chrome for Android, Safari for iOS)&lt;/li&gt;&#xA;                    &lt;li&gt;Internet Explorer is not supported&lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;                For the best experience, use a &lt;strong&gt;desktop browser&lt;/strong&gt; with a screen width of 1024px or wider.&#xA;                The map and statistical plots are fully responsive but designed for larger screens.&#xA;                &#xA;                &lt;br&gt;&lt;br&gt;&#xA;                On some computers with integrated graphics (on Windows), we have found that [Chrome] has a problem in&#xA;                rendering the high resolution graphics from our app. If you see a problem while using [Chrome], we&#xA;                recommend switching to one of the other browsers. If issues persist, please contact us via the &lt;a&#xA;                    href=&#34;https://smokelyze.org/about/contact/&#34;&gt;Contact&lt;/a&gt; page.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;general&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;General&lt;/span&gt; &#xA;            The map screen is &#34;black&#34; or &#34;grey&#34;. How can I fix this?&#xA;            &lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                These display issues are almost universally caused by &lt;strong&gt;Graphics Memory (GPU VRAM) Exhaustion&lt;/strong&gt;. Our application renders massive amounts of geometric data directly in your browser. Here is how to prevent and fix memory crashes:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Browser Limits:&lt;/strong&gt; On certain Windows systems (especially with integrated graphics), Chrome may throttle GPU memory usage around 1GB to prevent system instability. If you encounter black screens, ensure Chrome is updated, or try &lt;strong&gt;Edge&lt;/strong&gt;, which often handles hardware-specific rendering more efficiently on Windows.&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Change Map Type (Switch to [Default] or [Light] Map):&lt;/strong&gt; Dense background maps (like Vector or Topo) consume the majority of your graphics memory. If you experience crashes, immediately switch your &lt;strong&gt;Map Type&lt;/strong&gt; (bottom left menu) to the &lt;strong&gt;Light&lt;/strong&gt; map. The Light map is highly optimized and practically eliminates VRAM overflows.&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Avoid Rapid Clicking:&lt;/strong&gt; Clicking through multiple dates or layers extremely fast without waiting for the map to finish drawing can forcefully overload the Javascript Garbage Collector, triggering a Black Screen. Wait for the loading spinner to resolve before clicking the next day.&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Hard Refresh:&lt;/strong&gt; If your browser tab has already crashed into a Black or Grey screen, simply refreshing normally might not clear the GPU buffer. Perform a &lt;strong&gt;Hard Refresh&lt;/strong&gt; (&lt;code&gt;Ctrl&lt;/code&gt; + &lt;code&gt;Shift&lt;/code&gt; + &lt;code&gt;R&lt;/code&gt;) to completely reset the application memory.&lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;general&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;General&lt;/span&gt; How do I cite Smokelyze in my research?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                Each dataset has its own specific research paper for citation. Please cite the relevant paper based on&#xA;                the data you used:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;GAM-v2 (Smoke O3):&lt;/strong&gt; &lt;a href=&#34;https://doi.org/10.1029/2025JD044088&#34;&#xA;                            target=&#34;_blank&#34;&gt;Lee and Jaffe, 2025 (JGR-Atmos)&lt;/a&gt;&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;GAM-v1 (Smoke O3):&lt;/strong&gt; &lt;a href=&#34;https://doi.org/10.1021/acs.est.4c05870&#34;&#xA;                            target=&#34;_blank&#34;&gt;Lee and Jaffe, 2024 (ES&amp;T)&lt;/a&gt;&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Smoke PM2.5:&lt;/strong&gt; &lt;a href=&#34;https://doi.org/10.1029/2025GH001576&#34;&#xA;                            target=&#34;_blank&#34;&gt;Jaffe et al., 2026 (GeoHealth)&lt;/a&gt;&lt;/li&gt;&#xA;                    &lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;                If you wish to cite the &lt;strong&gt;Smokelyze app itself&lt;/strong&gt;, please cite the&#xA;                &lt;strong&gt;Lee and Jaffe (2025) (GAM-v2)&lt;/strong&gt; paper for results relating to &lt;strong&gt;Smoke O3&lt;/strong&gt;,&#xA;                or the &lt;strong&gt;Jaffe et al. (2026)&lt;/strong&gt; paper for results relating to &lt;strong&gt;Smoke PM2.5&lt;/strong&gt;,&#xA;                as the current platform&#39;s development is fundamentally linked to this research.&#xA;                &lt;br&gt;&lt;br&gt;&#xA;                For full citation strings and DOI links, please visit the &lt;strong&gt;&lt;a href=&#34;https://smokelyze.org/resrc/data&#34;&gt;Data&#xA;                        Archive&lt;/a&gt;&lt;/strong&gt; page.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;general&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;General&lt;/span&gt; What is the &#34;Announcements&#34; page?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                The &lt;strong&gt;Announcements&lt;/strong&gt; page is where we post project updates, new layer releases, system&#xA;                maintenance notices, and key research milestones. Check this page regularly to stay informed about the&#xA;                latest developments in the Smokelyze platform.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;general&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;General&lt;/span&gt; What is the &#34;Links&#34; page?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                The &lt;strong&gt;Links&lt;/strong&gt; page is a curated collection of useful external resources, including official&#xA;                air quality monitoring sites, wildfire tracking tools, and academic partner organizations.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;    &#xA;    &lt;!-- Ai Chat --&gt;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;ai&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Ai&lt;/span&gt; How do I set up the Ai Chat assistant?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                The AI assistant requires a &lt;strong&gt;Google Gemini API Key&lt;/strong&gt; (free tier available):&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;1. Visit &lt;a href=&#34;https://aistudio.google.com/apikey&#34; target=&#34;_blank&#34;&gt;Google AI Studio&lt;/a&gt; and&#xA;                        generate your API key.&lt;/li&gt;&#xA;                    &lt;li&gt;2. In Smokelyze, click on your &lt;strong&gt;Profile icon&lt;/strong&gt; → &lt;strong&gt;Settings&lt;/strong&gt; → paste&#xA;                        your key into the &lt;strong&gt;Google Gemini API&lt;/strong&gt; field.&lt;/li&gt;&#xA;                    &lt;li&gt;3. Open the Ai Chat panel from the map page and start asking questions!&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Important Notes on Tiers &amp; Pricing:&lt;/strong&gt;&#xA;                        &lt;ul&gt;&#xA;                            &lt;li&gt;&lt;strong&gt;Free Tier&lt;/strong&gt;: You can use the Gemini API for free. However, please refer to the &lt;a href=&#34;https://aistudio.google.com/app/rate-limit&#34; target=&#34;_blank&#34;&gt;Gemini API Rate Limits&lt;/a&gt; as the free tier has specific quotas for requests per minute and per day.&lt;/li&gt;&#xA;                            &lt;li&gt;&lt;strong&gt;Paid Tier (Optional)&lt;/strong&gt;: If you require higher usage limits or unrestricted access, you can manually switch to a &lt;strong&gt;Paid Tier&lt;/strong&gt; by setting up a billing account directly within your Google AI Studio/Cloud project (Check &lt;a href=&#34;https://ai.google.dev/pricing&#34; target=&#34;_blank&#34;&gt;detailed pricing here&lt;/a&gt;).&lt;/li&gt;&#xA;                            &lt;li&gt;&lt;strong&gt;Model Version&lt;/strong&gt;: The assistant currently utilizes &lt;strong&gt;Gemini 3.1-flash-lite&lt;/strong&gt;. We prioritize models that offer the highest free-tier quotas and most cost-effective performance; therefore, the model version may change at any time to ensure the best user experience.&lt;/li&gt;&#xA;                        &lt;/ul&gt;&#xA;                    &lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;                Your API key is stored &lt;strong&gt;only in your browser&#39;s local storage&lt;/strong&gt; and is never saved on our&#xA;                servers. Any costs associated with a paid tier are billed &lt;strong&gt;directly to your Google Cloud account&lt;/strong&gt;.&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;ai&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Ai&lt;/span&gt; What can the AI assistant do?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                The AI assistant is a &lt;strong&gt;full-stack map controller&lt;/strong&gt; — not just a chatbot. It can:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Navigate&lt;/strong&gt;: Change dates, toggle layers, switch datasets, and fly to specific&#xA;                        locations on the map (e.g., &#34;Set the date to 2023-06-10 and show the HMS smoke layer&#34;).&lt;/li&gt;&#xA;                    &lt;li&gt;&lt;strong&gt;Analyze&lt;/strong&gt;: Run SQL queries against the entire historical database to find&#xA;                        rankings, trends, and comparisons (e.g., &#34;Which site in California had the highest SMO on&#xA;                        2023-07-15?&#34;).&lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;faq-item&#34; data-category=&#34;ai&#34;&gt;&#xA;        &lt;div class=&#34;faq-question&#34; onclick=&#34;this.parentElement.classList.toggle(&#39;open&#39;)&#34;&gt;&#xA;            &lt;h3&gt;&lt;span class=&#34;faq-tag&#34;&gt;Ai&lt;/span&gt; Is my API key secure?&lt;/h3&gt;&#xA;            &lt;span class=&#34;faq-icon&#34;&gt;+&lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;        &lt;div class=&#34;faq-answer&#34;&gt;&#xA;            &lt;div class=&#34;faq-answer-inner&#34;&gt;&#xA;                Yes. Your API key follows a &lt;strong&gt;BYOK (Bring Your Own Key)&lt;/strong&gt; model:&#xA;                &lt;ul&gt;&#xA;                    &lt;li&gt;The key is stored in your browser&#39;s &lt;code&gt;localStorage&lt;/code&gt; — it never leaves your device&#xA;                        except when making API calls.&lt;/li&gt;&#xA;                    &lt;li&gt;When communicating with our backend, the key is sent via a &lt;strong&gt;secure HTTP header&lt;/strong&gt;&#xA;                        (not in the request body) to minimize logging exposure.&lt;/li&gt;&#xA;                    &lt;li&gt;Our server uses the key only to forward your request to Google&#39;s API, then discards it. We do&#xA;                        not store, log, or cache your key.&lt;/li&gt;&#xA;                &lt;/ul&gt;&#xA;            &lt;/div&gt;&#xA;        &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;faq-no-results&#34; id=&#34;FaqNoResults&#34;&gt;&#xA;    No matching questions found. Try different keywords or &lt;a href=&#34;https://smokelyze.org/resrc/announcements/&#34;&gt;check our&#xA;    Announcements&lt;/a&gt;.&#xA;&lt;/div&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&#xA;&lt;script&gt;&#xA;    (function () {&#xA;        const searchInput = document.getElementById(&#34;FaqSearch&#34;);&#xA;        const faqList = document.getElementById(&#34;FaqList&#34;);&#xA;        const noResults = document.getElementById(&#34;FaqNoResults&#34;);&#xA;        const items = faqList.querySelectorAll(&#34;.faq-item&#34;);&#xA;        const filterBtns = document.querySelectorAll(&#34;.faq-filter-btn&#34;);&#xA;&#xA;        let activeFilter = &#34;all&#34;;&#xA;&#xA;        // Filter buttons&#xA;        filterBtns.forEach(btn =&gt; {&#xA;            btn.addEventListener(&#34;click&#34;, () =&gt; {&#xA;                filterBtns.forEach(b =&gt; b.classList.remove(&#34;active&#34;));&#xA;                btn.classList.add(&#34;active&#34;);&#xA;                activeFilter = btn.dataset.filter;&#xA;                applyFilters();&#xA;            });&#xA;        });&#xA;&#xA;        // Search&#xA;        if (searchInput) {&#xA;            searchInput.addEventListener(&#34;input&#34;, () =&gt; applyFilters());&#xA;        }&#xA;&#xA;        function applyFilters() {&#xA;            const query = (searchInput?.value || &#34;&#34;).toLowerCase().trim();&#xA;            let visibleCount = 0;&#xA;&#xA;            items.forEach(item =&gt; {&#xA;                const category = item.dataset.category;&#xA;                const text = item.textContent.toLowerCase();&#xA;                const matchCategory = (activeFilter === &#34;all&#34; || category === activeFilter);&#xA;                const matchSearch = !query || text.includes(query);&#xA;&#xA;                if (matchCategory &amp;&amp; matchSearch) {&#xA;                    item.style.display = &#34;&#34;;&#xA;                    visibleCount++;&#xA;                } else {&#xA;                    item.style.display = &#34;none&#34;;&#xA;                }&#xA;            });&#xA;&#xA;            noResults.style.display = visibleCount === 0 ? &#34;block&#34; : &#34;none&#34;;&#xA;        }&#xA;    })();&#xA;&lt;/script&gt;&#xA;&#xA;&lt;style&gt;&#xA;    /* FAQ Page Styles */&#xA;    .faq-hero {&#xA;        text-align: center;&#xA;        padding: 2rem 2rem 3rem;&#xA;        position: relative;&#xA;    }&#xA;&#xA;    .faq-hero h1 {&#xA;        font-size: 3.6rem;&#xA;        font-weight: bold;&#xA;        margin: 0 0 1rem;&#xA;        background: var(--text-heading);&#xA;        background-clip: text;&#xA;        -webkit-background-clip: text;&#xA;        -webkit-text-fill-color: transparent;&#xA;    }&#xA;&#xA;    .faq-hero p {&#xA;        font-size: 1.6rem;&#xA;        color: var(--text-main);&#xA;        max-width: 50rem;&#xA;        margin: 0 auto 2.5rem;&#xA;        line-height: 1.6;&#xA;    }&#xA;&#xA;    /* Search */&#xA;    .faq-search-wrap {&#xA;        max-width: 50rem;&#xA;        margin: 0 auto 1.5rem;&#xA;        position: relative;&#xA;    }&#xA;&#xA;    .faq-search {&#xA;        width: 100%;&#xA;        padding: 1.2rem 1.6rem 1.2rem 4.2rem;&#xA;        font-size: 1.6rem;&#xA;        border: 0.1rem solid var(--card-shadow);&#xA;        border-radius: calc(var(--border-radius-0p8rem) * 5);&#xA;        background: var(--color-bg);&#xA;        color: var(--text-main);&#xA;        outline: none;&#xA;        transition: border-color 0.3s ease, box-shadow 0.3s ease;&#xA;        box-sizing: border-box;&#xA;    }&#xA;&#xA;    .faq-search:focus {&#xA;        border-color: var(--accent-link);&#xA;        box-shadow: 0 0 0 0.3rem rgba(138, 191, 255, 0.15);&#xA;    }&#xA;&#xA;    /* Category Filters */&#xA;    .faq-filters {&#xA;        display: flex;&#xA;        justify-content: center;&#xA;        gap: 0.8rem;&#xA;        flex-wrap: wrap;&#xA;        margin-bottom: 3rem;&#xA;    }&#xA;&#xA;    .faq-filter-btn {&#xA;        padding: 0.6rem 1.6rem;&#xA;        font-size: 1.3rem;&#xA;        font-weight: bold;&#xA;        border: 0.1rem solid var(--border-main);&#xA;        border-radius: calc(var(--border-radius-0p8rem) * 5);&#xA;        background: transparent;&#xA;        color: var(--text-muted);&#xA;        cursor: pointer;&#xA;        transition: all 0.3s ease;&#xA;    }&#xA;&#xA;    .faq-filter-btn:hover {&#xA;        border-color: var(--accent-link);&#xA;        color: var(--accent-link);&#xA;    }&#xA;&#xA;    .faq-filter-btn.active {&#xA;        background: var(--accent-link);&#xA;        color: var(--color-white);&#xA;        border-color: var(--accent-link);&#xA;    }&#xA;&#xA;    /* FAQ List */&#xA;    .faq-list {&#xA;        max-width: 72rem;&#xA;        margin: 0 auto;&#xA;        padding: 0 2rem 4rem;&#xA;    }&#xA;&#xA;    .faq-category-label {&#xA;        font-size: 1.2rem;&#xA;        font-weight: bold;&#xA;        text-transform: uppercase;&#xA;        letter-spacing: 0.15em;&#xA;        color: var(--accent-gold);&#xA;        margin: 3rem 0 1.2rem;&#xA;        padding-left: 0.2rem;&#xA;    }&#xA;&#xA;    .faq-item {&#xA;        border: 0.1rem solid var(--border-main);&#xA;        border-radius: var(--border-radius-0p8rem);&#xA;        margin-bottom: 1rem;&#xA;        overflow: hidden;&#xA;        background: var(--sidebar-widget-bg);&#xA;        transition: border-color 0.3s ease, box-shadow 0.3s ease;&#xA;    }&#xA;&#xA;    .faq-item:hover {&#xA;        border-color: var(--card-shadow);&#xA;    }&#xA;&#xA;    .faq-item.open {&#xA;        border-color: var(--card-shadow);&#xA;        box-shadow: 0 0.4rem 2rem rgba(0, 0, 0, 0.12);&#xA;    }&#xA;&#xA;    .faq-question {&#xA;        display: flex;&#xA;        align-items: center;&#xA;        justify-content: space-between;&#xA;        padding: 1.6rem 2rem;&#xA;        cursor: pointer;&#xA;        user-select: none;&#xA;        gap: 1rem;&#xA;    }&#xA;&#xA;    .faq-question h3 {&#xA;        font-size: 1.6rem;&#xA;        font-weight: bold;&#xA;        color: var(--text-heading);&#xA;        margin: 0;&#xA;        line-height: 1.4;&#xA;        flex: 1;&#xA;    }&#xA;&#xA;    .faq-icon {&#xA;        font-size: 2rem;&#xA;        color: var(--text-muted);&#xA;        transition: transform 0.3s ease, color 0.3s ease;&#xA;        flex-shrink: 0;&#xA;        width: 2.4rem;&#xA;        text-align: center;&#xA;    }&#xA;&#xA;    .faq-item.open .faq-icon {&#xA;        transform: rotate(45deg);&#xA;        color: var(--card-shadow);&#xA;    }&#xA;&#xA;    .faq-answer {&#xA;        max-height: 0;&#xA;        overflow: hidden;&#xA;        transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1), padding 0.3s ease;&#xA;    }&#xA;&#xA;    .faq-item.open .faq-answer {&#xA;        max-height: 60rem;&#xA;    }&#xA;&#xA;    .faq-answer-inner {&#xA;        padding: 0 2rem 2rem;&#xA;        font-size: 1.5rem;&#xA;        line-height: 1.7;&#xA;        color: var(--text-main);&#xA;    }&#xA;&#xA;    .faq-answer-inner code {&#xA;        background: var(--color-code-bg2);&#xA;        padding: 0.2rem 0.6rem;&#xA;        border-radius: var(--border-radius-0p8rem);&#xA;        font-size: 1.3rem;&#xA;    }&#xA;&#xA;    .faq-answer-inner strong {&#xA;        color: var(--card-shadow);&#xA;    }&#xA;&#xA;    .faq-answer-inner ul {&#xA;        margin: 0.8rem 0;&#xA;        padding-left: 2rem;&#xA;    }&#xA;&#xA;    .faq-answer-inner li {&#xA;        margin-bottom: 0.4rem;&#xA;        font-size: 1.5rem;&#xA;    }&#xA;&#xA;    .faq-tag {&#xA;        display: inline-block;&#xA;        font-size: 1.1rem;&#xA;        font-weight: bold;&#xA;        padding: 0.2rem 0.8rem;&#xA;        border-radius: calc(var(--border-radius-0p8rem) * 5);&#xA;        margin-right: 0.6rem;&#xA;        background: var(--color-bg);&#xA;        color: var(--text-main);&#xA;        vertical-align: middle;&#xA;    }&#xA;&#xA;    /* No results */&#xA;    .faq-no-results {&#xA;        text-align: center;&#xA;        padding: 4rem 2rem;&#xA;        color: var(--text-muted);&#xA;        font-size: 1.6rem;&#xA;        display: none;&#xA;    }&#xA;&#xA;    /* Fade-in animation */&#xA;    .faq-item {&#xA;        opacity: 0;&#xA;        transform: translateY(1rem);&#xA;        animation: faqFadeIn 0.3s ease forwards;&#xA;    }&#xA;&#xA;    @keyframes faqFadeIn {&#xA;        to {&#xA;            opacity: 1;&#xA;            transform: translateY(0);&#xA;        }&#xA;    }&#xA;&#xA;    .faq-item:nth-child(1) {&#xA;        animation-delay: 0.02s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(2) {&#xA;        animation-delay: 0.06s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(3) {&#xA;        animation-delay: 0.10s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(4) {&#xA;        animation-delay: 0.14s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(5) {&#xA;        animation-delay: 0.18s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(6) {&#xA;        animation-delay: 0.22s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(7) {&#xA;        animation-delay: 0.26s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(8) {&#xA;        animation-delay: 0.30s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(9) {&#xA;        animation-delay: 0.34s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(10) {&#xA;        animation-delay: 0.38s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(11) {&#xA;        animation-delay: 0.42s;&#xA;    }&#xA;&#xA;    .faq-item:nth-child(12) {&#xA;        animation-delay: 0.46s;&#xA;    }&#xA;&#xA;    /* Contact CTA */&#xA;    .faq-contact {&#xA;        text-align: center;&#xA;        color: var(--text-muted);&#xA;        font-size: 1.5rem;&#xA;    }&#xA;&#xA;    .faq-contact a {&#xA;        color: var(--accent-link);&#xA;        font-weight: bold;&#xA;    }&#xA;&#xA;    @media (max-width: 1024px) {&#xA;        .faq-hero h1 {&#xA;            font-size: 2.8rem;&#xA;        }&#xA;&#xA;        .faq-question {&#xA;            padding: 1.4rem 1.4rem;&#xA;        }&#xA;&#xA;        .faq-answer-inner {&#xA;            padding: 0 1.4rem 1.6rem;&#xA;        }&#xA;&#xA;        .faq-list {&#xA;            padding: 0 1rem 4rem;&#xA;        }&#xA;    }&#xA;&lt;/style&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/resrc/gam-manual/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/resrc/gam-manual/</guid>
      <description>&lt;link rel=&#34;stylesheet&#34; href=&#34;https://smokelyze.org/css/board.css&#34;&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;https://smokelyze.org/css/map.css&#34;&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;https://smokelyze.org/css/data.css&#34;&gt;&#xA;&#xA;&lt;h1 style=&#34;text-align: center;&#34;&gt;&#xA;  Run your own GAMs&#xA;&lt;/h1&gt;&#xA;&lt;p style=&#34;text-align: center;&#34;&gt;&#xA;  Professional interface for Generalized Additive Models.&#xA;  Build, configure, and execute R-based statistical models in real-time.&#xA;&lt;/p&gt;&#xA;&#xA;&lt;div class=&#34;gm-wrapper article-content&#34;&gt;&#xA;  &lt;div class=&#34;gm-container&#34;&gt;&#xA;&#xA;    &lt;!-- [STEP 1] DATA INITIALIZATION --&gt;&#xA;    &lt;h2&gt;Step 1: Import Data &lt;/h2&gt;&#xA;&#xA;    &lt;div class=&#34;gm-card gm-card-flat&#34;&gt;&#xA;      &lt;div class=&#34;gm-head-strip&#34;&gt;&#xA;        Select Source Dataset&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;gm-pad-lg&#34;&gt;&#xA;        &lt;div class=&#34;gm-flex-end&#34;&gt;&#xA;          &lt;div class=&#34;gm-input-group&#34;&gt;&#xA;            &lt;select id=&#34;gamDataset&#34; class=&#34;gm-input&#34;&gt;&#xA;              &lt;option value=&#34;browser_upload&#34;&gt;Load the data from your browser...&lt;/option&gt;&#xA;              &lt;option value=&#34;sample_aqs_490353006&#34;&gt;Sample: AQS-490353006 (Hawthorne, Utah)&lt;/option&gt;&#xA;              &lt;option value=&#34;sample_aqs_230031100&#34;&gt;Sample: AQS-230031100 (MICMAC HEALTHMaine)&lt;/option&gt;&#xA;            &lt;/select&gt;&#xA;          &lt;/div&gt;&#xA;          &lt;input type=&#34;file&#34; id=&#34;InputUserFile&#34; accept=&#34;.csv&#34; style=&#34;display:none;&#34;&gt;&#xA;          &lt;button id=&#34;BtnLoadData&#34; class=&#34;gm-btn&#34;&gt;Load data&lt;/button&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;!-- Data Warning &amp; Preview --&gt;&#xA;    &lt;div id=&#34;DataLimitWarning&#34; class=&#34;gm-warning-box&#34;&gt;&#xA;      This tool supports simple GAM simulations only. For large datasets (&gt; 3000 rows), please perform the analysis&#xA;      directly in R.&#xA;    &lt;/div&gt;&#xA;    &lt;div id=&#34;DataPreviewContainer&#34; class=&#34;gm-data-preview-container&#34;&gt;&#xA;      &lt;table id=&#34;DataPreviewTable&#34; class=&#34;gm-data-preview-table&#34;&gt;&#xA;        &lt;thead id=&#34;DataPreviewHead&#34;&gt;&lt;/thead&gt;&#xA;        &lt;tbody id=&#34;DataPreviewBody&#34;&gt;&lt;/tbody&gt;&#xA;      &lt;/table&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;!-- Pagination matching AQS query table footer --&gt;&#xA;    &lt;div id=&#34;DataPagination&#34; class=&#34;gm-data-pagination&#34;&gt;&#xA;      &lt;button id=&#34;BtnPrevData&#34; class=&#34;gm-page-btn&#34;&gt;Previous&lt;/button&gt;&#xA;      &lt;span id=&#34;DataPageInfo&#34; class=&#34;gm-page-info&#34;&gt;Page 1 of 1&lt;/span&gt;&#xA;      &lt;button id=&#34;BtnNextData&#34; class=&#34;gm-page-btn&#34;&gt;Next&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;    &lt;br&gt;&#xA;    &lt;div id=&#34;MainSetupArea&#34; class=&#34;gm-hidden gm-container&#34;&gt;&#xA;&#xA;      &lt;h2&gt;Step 2: GAM Building Pipeline&lt;/h2&gt;&#xA;&#xA;      &lt;!-- [Step 3 Instructions from user request] --&gt;&#xA;      &lt;div class=&#34;gm-note&#34;&gt;&#xA;        &lt;h3 style=&#34;margin-bottom: 1rem;&#34;&gt;&#xA;          Quick Guide:&#xA;        &lt;/h3&gt;&#xA;        &lt;p style=&#34;margin-bottom: 1rem;&#34;&gt;For those familiar with &lt;code&gt;mgcv&lt;/code&gt; GAM, you can configure the model&#xA;          settings as follows:&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://smokelyze.org/resrc/links/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://smokelyze.org/resrc/links/</guid>
      <description>&lt;h1 style=&#34;text-align: center;&#34;&gt;&#xA;  Links&#xA;&lt;/h1&gt;&#xA;&#xA;&lt;div class=&#34;card-about reveal-on-scroll&#34;&gt;&#xA;&lt;h2&gt;For useful data archives &lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.star.nesdis.noaa.gov/smcd/spb/aq/AerosolWatch/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;AerosolWatch:&lt;/a&gt;&#xA;    Aerosol-related satellite data mapping by NOAA NESDIS STAR: Center for Satellite Applications and Research&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.airnowtech.org/index.cfm&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;AirNow-Tech:&lt;/a&gt;&#xA;    A platform for analyzing real-time and historical air quality data from the US monitoring network&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://files.airnowtech.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;AirNow-Tech archive:&lt;/a&gt;&#xA;    A repository for real-time and historical air quality data from the US monitoring network&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://atmosphere.copernicus.eu/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Copernicus CAMS:&lt;/a&gt;&#xA;    Provides global atmospheric composition data, forecasts, and reanalysis from the Copernicus Atmosphere Monitoring Service (CAMS)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://scihub.copernicus.eu/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Copernicus Hub:&lt;/a&gt;&#xA;    A portal for accessing satellite imagery and Earth observation data from the Copernicus program&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://aqs.epa.gov/aqsweb/documents/data_api.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;EPA AQS API:&lt;/a&gt;&#xA;    API intructions for retrieving air quality data collected by the US Environmental Protection Agency (EPA)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://aqs.epa.gov/aqsweb/airdata/download_files.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;EPA AQS pre-generated data:&lt;/a&gt;&#xA;    A collection of pre-processed air quality datasets available for bulk download&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.epa.gov/air-quality-analysis/pm25-tiering-tool-exceptional-events-analysis&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;EPA PM2.5 tiering tool:&lt;/a&gt;&#xA;    A tool for classifying PM2.5 air pollution events based on their severity and regulatory significance&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://mesonet.agron.iastate.edu/ASOS/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;IEM ASOS network:&lt;/a&gt;&#xA;    Iowa Environmental Mesonet (IEM) Automated Surface Observing System (ASOS) Network, &#34;riem&#34; package in R  &#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://disc.gsfc.nasa.gov/information/documents?title=Data%20Access&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NASA GES DISC:&lt;/a&gt;&#xA;    A data archive providing global climate, weather, and atmospheric datasets from NASA missions&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://so2.gsfc.nasa.gov/no2/no2_index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NASA GSFC:&lt;/a&gt;&#xA;    A resource for satellite-based NO2 data from NASA’s Goddard Space Flight Center&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://giovanni.gsfc.nasa.gov/giovanni/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NASA Giovanni:&lt;/a&gt;&#xA;    An online data analysis tool for visualizing and exploring NASA’s atmospheric and climate datasets&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://goldsmr4.gesdisc.eosdis.nasa.gov/data/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NASA MERRA-2 archive:&lt;/a&gt;&#xA;    A respitory for Modern-Era Retrospective analysis for Research and Applications, Version 2 (MERRA-2)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://power.larc.nasa.gov/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NASA POWER:&lt;/a&gt;&#xA;    A website for NASA Prediction Of Worldwide Energy Resources (POWER) project&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.goes-r.gov/products/baseline-aerosol-opt-depth.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NOAA GOES-R:&lt;/a&gt;&#xA;    A website for NOAA Geostationary Operational Environmental Satellites—R Series (GOES-R)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://console.cloud.google.com/storage/browser/gcp-public-data-goes-16;tab=objects?pageState=(%22StorageObjectListTable%22:(%22f%22:%22%255B%255D%22))&amp;pli=1&amp;prefix=&amp;forceOnObjectsSortingFiltering=false&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NOAA GOES-R GG cloud:&lt;/a&gt;&#xA;    A Googel Cloud for NOAA Geostationary Operational Environmental Satellites—R Series (GOES-R)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.goes-r.gov/products/baseline-aerosol-opt-depth.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NOAA GOES-R AOD:&lt;/a&gt;&#xA;    A respitory for NOAA GOES-R Series Advanced Baseline Imager (ABI) Level-2 Aerosol Optical Depth (AOD)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://registry.opendata.aws/noaa-hrrr-pds/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NOAA HRRR:&lt;/a&gt;&#xA;    A website for NOAA High-Resolution Rapid Refresh (HRRR) Model&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.nco.ncep.noaa.gov/pmb/products/hrrr/hrrr.t00z.wrfsfcf00.grib2.shtml&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NOAA HRRR parameters:&lt;/a&gt;&#xA;    Parameter descriptions for NOAA High-Resolution Rapid Refresh (HRRR) Model&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.temis.nl/index.php&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TEMIS:&lt;/a&gt;&#xA;    Tropospheric Emission Monitoring Internet Service (TEMIS)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://tempo.si.edu/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TEMPO:&lt;/a&gt;&#xA;    Tropospheric Emissions Monitoring of Pollution (TEMPO)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://projects.cosmicds.cfa.harvard.edu/tempo-lite/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TEMPO CosmicDS :&lt;/a&gt;&#xA;    Tropospheric Emissions Monitoring of Pollution (TEMPO) CosmicDS NO2 viewer&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.epa.gov/hesc/remote-sensing-information-gateway&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TEMPO EPA-RSIG :&lt;/a&gt;&#xA;    EPA’s Remote Sensing Information Gateway for TEMPO&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://data-portal.s5p-pal.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;TROPOMI portal:&lt;/a&gt;&#xA;    TROPOMI S5P-PAL Data Portal&#xA;  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;br&gt;&#xA;&lt;div class=&#34;card-about reveal-on-scroll&#34;&gt;&#xA;&lt;h2&gt;For spatial information &lt;/h2&gt;&#xA;&lt;ul style=&#34;font-size: 1.6rem;&#34;&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.ncei.noaa.gov/access/monitoring/reference-maps/us-climate-regions&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NOAA NCEI Geographical Reference Maps:&lt;/a&gt;&#xA;    A website for NOAA NCEI Geographical Reference Maps&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://catalog.data.gov/dataset/tiger-line-shapefile-current-nation-u-s-core-based-statistical-areas&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;US Census Bureau:&lt;/a&gt;&#xA;    TIGER/Line Shapefile, Current, Nation, US, Core-Based Statistical Areas&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://geodata.bts.gov/datasets/usdot::core-based-statistical-areas/explore?location=34.940269%2C-93.312937%2C4.54&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;USDOT BTS:&lt;/a&gt;&#xA;    US Department of Transportation: ArcGIS Online, Core-Based Statistical Areas&#xA;  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;br&gt;&#xA;&lt;div class=&#34;card-about reveal-on-scroll&#34;&gt;&#xA;&lt;h2&gt;For wildfire information &lt;/h2&gt;&#xA;&lt;ul style=&#34;font-size: 1.6rem;&#34;&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://cwfis.cfs.nrcan.gc.ca/report/archives?year=2013&amp;month=09&amp;day=04&amp;process=Submit&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NRC:&lt;/a&gt;&#xA;    A website for Natural Resources Canada (NRC)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.nifc.gov/fire-information/statistics/wildfires&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;NIFC:&lt;/a&gt;&#xA;    A website for National Interagency Fire Center (NIFC)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://sciencenorthwest.com/cooking-up-pollution-a-study-on-how-gas-stoves-affect-indoor-air-pollution/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Science Northwest:&lt;/a&gt;&#xA;    A blog on environmental science, air quality, and climate change (Dr. Jaffe, UW)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://wfeis.mtri.org/home&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;WFEIS:&lt;/a&gt;&#xA;    Wildland Fire Emissions Inventory System (WFEIS) - assessments of historical wildland fire emissions across US, Canada, and global boreal regions&#xA;  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;br&gt;&#xA;&lt;div class=&#34;card-about reveal-on-scroll&#34;&gt;&#xA;&lt;h2&gt;For models &lt;/h2&gt;&#xA;&lt;ul style=&#34;font-size: 1.6rem;&#34;&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www.epa.gov/scram/aermod-modeling-system-development&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;EPA AERMOD:&lt;/a&gt;&#xA;    A Gaussian air dispersion model used for estimating air pollutant concentrations from industrial sources&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://www2.acom.ucar.edu/facility/flexpart&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;FLEXPART:&lt;/a&gt;&#xA;    FLEXible PARTicle dispersion model (FLEXPART)&#xA;  &lt;/li&gt;&#xA;  &lt;li&gt;&#xA;    &lt;a href=&#34;https://uataq.github.io/stilt/#/best-practices&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;STILT:&lt;/a&gt;&#xA;    Stochastic Time-Inverted Lagrangian Transport Model v2.x (STILT)&#xA;  &lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;</description>
    </item>
  </channel>
</rss>
