<!-- ============================================================
     IRO — INTERACTIVE UNITED STATES MAP
     Squarespace Code Block
     ============================================================ -->

<div id="iro-states-map">

  <style>
    #iro-states-map {
      --iro-blue: #2774AE;
      --iro-blue-dark: #145A8D;
      --iro-blue-light: #DCEAF5;
      --iro-blue-pale: #F3F8FC;
      --iro-yellow: #FFD100;
      --iro-text: #173F5F;
      --iro-gray: #AFC4D4;
      --iro-white: #FFFFFF;

      font-family: inherit;
      color: var(--iro-text);
      width: 100%;
      max-width: 1200px;
      margin: 0 auto;
      box-sizing: border-box;
    }

    #iro-states-map *,
    #iro-states-map *::before,
    #iro-states-map *::after {
      box-sizing: border-box;
    }

    /* ---------- HEADER ---------- */

    #iro-states-map .iro-map-header {
      text-align: center;
      margin-bottom: 35px;
    }

    #iro-states-map .iro-eyebrow {
      color: var(--iro-blue);
      font-size: 18px;
      font-weight: 700;
      letter-spacing: 2px;
      text-transform: uppercase;
      margin-bottom: 10px;
    }

    #iro-states-map h2 {
      margin: 0;
      color: var(--iro-blue-dark);
      font-size: clamp(32px, 5vw, 64px);
      line-height: 2.25;
      font-weight: 750;
    }

    #iro-states-map .iro-subtitle {
      max-width: 680px;
      margin: 16px auto 0;
      color: #52718A;
      font-size: 18px;
      line-height: 1.6;
    }

    /* ---------- MAP AREA ---------- */

    #iro-states-map .iro-map-layout {
      display: grid;
      grid-template-columns: minmax(0, 1fr) 310px;
      gap: 35px;
      align-items: center;
    }

    #iro-states-map .iro-map-container {
      position: relative;
      background: linear-gradient(
        145deg,
        #F8FBFD 0%,
        #FFFFFF 100%
      );
      border-radius: 24px;
      padding: 25px;
      border: 1px solid #D9E8F2;
      box-shadow: 0 10px 35px rgba(39, 116, 174, 0.08);
    }

    #iro-states-map svg {
      display: block;
      width: 100%;
      height: auto;
      overflow: visible;
    }

    /* ---------- STATE COLORS ---------- */

    #iro-states-map .state {
      fill: var(--iro-blue-light);
      stroke: #FFFFFF;
      stroke-width: 1.4;
      stroke-linejoin: round;
      cursor: pointer;
      transition:
        fill 0.18s ease,
        stroke 0.18s ease,
        filter 0.18s ease;
    }

    #iro-states-map .state:hover,
    #iro-states-map .state:focus {
      fill: var(--iro-yellow);
      stroke: #D2A900;
      outline: none;
      filter: drop-shadow(0 3px 4px rgba(0,0,0,.12));
    }

    #iro-states-map .state.adopted {
      fill: var(--iro-blue);
    }

    #iro-states-map .state.adopted:hover,
    #iro-states-map .state.adopted:focus,
    #iro-states-map .state.selected {
      fill: var(--iro-yellow);
      stroke: #D2A900;
      filter: drop-shadow(0 4px 5px rgba(0,0,0,.16));
    }

    /* ---------- INFO PANEL ---------- */

    #iro-states-map .iro-info-panel {
      background: var(--iro-white);
      border: 1px solid #D9E8F2;
      border-radius: 20px;
      padding: 28px;
      box-shadow: 0 10px 35px rgba(39, 116, 174, 0.08);
      min-height: 245px;
    }

    #iro-states-map .iro-info-kicker {
      color: var(--iro-blue);
      font-size: 12px;
      font-weight: 800;
      letter-spacing: 1.5px;
      text-transform: uppercase;
      margin-bottom: 9px;
    }

    #iro-states-map .iro-info-name {
      font-size: 29px;
      font-weight: 750;
      color: var(--iro-blue);
      line-height: 1.15;
      margin-bottom: 8px;
    }

    #iro-states-map .iro-info-year {
      display: inline-flex;
      align-items: center;
      gap: 7px;
      background: var(--iro-yellow);
      color: #234A64;
      padding: 7px 13px;
      border-radius: 999px;
      font-size: 13px;
      font-weight: 750;
      margin-bottom: 18px;
    }

    #iro-states-map .iro-info-description {
      font-size: 15px;
      line-height: 1.6;
      color: #557287;
      margin: 0;
    }

    /* ---------- SUMMARY ---------- */

    #iro-states-map .iro-summary {
      display: flex;
      justify-content: center;
      gap: 15px;
      margin-top: 30px;
      flex-wrap: wrap;
    }

    #iro-states-map .iro-stat {
      min-width: 155px;
      text-align: center;
      background: var(--iro-blue);
      color: white;
      padding: 18px 25px;
      border-radius: 16px;
    }

    #iro-states-map .iro-stat-number {
      display: block;
      font-size: 32px;
      line-height: 1;
      font-weight: 800;
      margin-bottom: 6px;
    }

    #iro-states-map .iro-stat-label {
      font-size: 12px;
      letter-spacing: 1px;
      text-transform: uppercase;
      opacity: .9;
    }

    /* ---------- LEGEND ---------- */

    #iro-states-map .iro-legend {
      display: flex;
      justify-content: center;
      align-items: center;
      gap: 25px;
      margin: 25px 0 5px;
      flex-wrap: wrap;
      color: #52718A;
      font-size: 13px;
    }

    #iro-states-map .iro-legend-item {
      display: flex;
      align-items: center;
      gap: 8px;
    }

    #iro-states-map .iro-legend-swatch {
      width: 18px;
      height: 18px;
      border-radius: 5px;
      border: 1px solid rgba(0,0,0,.08);
    }

    #iro-states-map .iro-legend-swatch.adopted {
      background: var(--iro-blue);
    }

    #iro-states-map .iro-legend-swatch.available {
      background: var(--iro-blue-light);
    }

    #iro-states-map .iro-legend-swatch.selected {
      background: var(--iro-yellow);
    }

    /* ---------- STATE CATALOG ---------- */

    #iro-states-map .iro-catalog {
      margin-top: 60px;
    }

    #iro-states-map .iro-catalog-title {
      text-align: center;
      color: var(--iro-blue);
      font-size: 30px;
      margin: 0 0 25px;
      font-weight: 750;
    }

    #iro-states-map .iro-state-list {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      gap: 12px;
    }

    #iro-states-map .iro-state-button {
      appearance: none;
      border: 1px solid #D9E8F2;
      background: white;
      color: var(--iro-text);
      border-radius: 12px;
      padding: 14px 12px;
      text-align: left;
      cursor: pointer;
      transition:
        background .18s ease,
        border-color .18s ease,
        transform .18s ease;
      font: inherit;
    }

    #iro-states-map .iro-state-button:hover,
    #iro-states-map .iro-state-button:focus {
      border-color: var(--iro-blue);
      background: var(--iro-blue-pale);
      transform: translateY(-2px);
      outline: none;
    }

    #iro-states-map .iro-state-button.adopted {
      border-color: var(--iro-blue);
    }

    #iro-states-map .iro-state-button-name {
      display: block;
      font-weight: 700;
      font-size: 15px;
    }

    #iro-states-map .iro-state-button-status {
      display: block;
      margin-top: 4px;
      font-size: 12px;
      color: #718A9B;
    }

    #iro-states-map .iro-state-button.adopted
      .iro-state-button-status {
      color: var(--iro-blue);
      font-weight: 700;
    }

    /* ---------- MOBILE ---------- */

    @media (max-width: 850px) {
      #iro-states-map .iro-map-layout {
        grid-template-columns: 1fr;
      }

      #iro-states-map .iro-info-panel {
        min-height: auto;
      }

      #iro-states-map .iro-state-list {
        grid-template-columns: repeat(3, 1fr);
      }
    }

    @media (max-width: 600px) {
      #iro-states-map .iro-map-container {
        padding: 10px;
        border-radius: 16px;
      }

      #iro-states-map .iro-subtitle {
        font-size: 16px;
      }

      #iro-states-map .iro-state-list {
        grid-template-columns: repeat(2, 1fr);
      }

      #iro-states-map .iro-summary {
        gap: 8px;
      }

      #iro-states-map .iro-stat {
        flex: 1;
        min-width: 120px;
        padding: 15px 10px;
      }

      #iro-states-map .iro-stat-number {
        font-size: 27px;
      }
    }
  </style>


  <!-- ==========================================================
       PAGE INTRO
       ========================================================== -->

  <div class="iro-map-header">
    <div class="iro-eyebrow">Immunization Record One</div>

    <h2>States Leading the Way</h2>

    <p class="iro-subtitle">
      A growing network of states is adopting IRO to make
      immunization records more portable, secure, and accessible.
    </p>
  </div>


  <!-- ==========================================================
       MAP + INFORMATION PANEL
       ========================================================== -->

  <div class="iro-map-layout">

    <div class="iro-map-container">
      <div id="iro-map-svg"></div>

      <div class="iro-legend">
        <div class="iro-legend-item">
          <span class="iro-legend-swatch adopted"></span>
          IRO adopted
        </div>

        <div class="iro-legend-item">
          <span class="iro-legend-swatch available"></span>
          Not yet adopted
        </div>

        <div class="iro-legend-item">
          <span class="iro-legend-swatch selected"></span>
          Selected
        </div>
      </div>
    </div>


    <div class="iro-info-panel" aria-live="polite">

      <div class="iro-info-kicker">
        Select a state
      </div>

      <div class="iro-info-name" id="iro-info-name">
        United States
      </div>

      <div class="iro-info-year" id="iro-info-year">
        IRO State Network
      </div>

      <p class="iro-info-description" id="iro-info-description">
        Click any state on the map to learn about its IRO
        adoption status.
      </p>

    </div>

  </div>


  <!-- ==========================================================
       SUMMARY
       ========================================================== -->

  <div class="iro-summary">

    <div class="iro-stat">
      <span class="iro-stat-number" id="iro-adopted-count">0</span>
      <span class="iro-stat-label">States adopted</span>
    </div>

    <div class="iro-stat">
      <span class="iro-stat-number">50</span>
      <span class="iro-stat-label">States</span>
    </div>

  </div>


  <!-- ==========================================================
       STATE CATALOG
       ========================================================== -->

  <div class="iro-catalog">

    <h3 class="iro-catalog-title">
      Recently Adopted States
    </h3>

    <div
      class="iro-state-list"
      id="iro-state-list">
    </div>

  </div>


  <!-- ==========================================================
       JAVASCRIPT
       ========================================================== -->

  <script>
  (function () {

    /*
     * ==========================================================
     * IRO STATE DATA
     *
     * THIS IS THE ONLY SECTION YOU NEED TO EDIT
     *
     * Add a state using:
     *
     * CA: {
     *   year: "2026",
     *   description: "Your description here."
     * }
     *
     * Leave states out of this object if they have not adopted IRO.
     * ==========================================================
     */

    const IRO_ADOPTED_STATES = {

      CA: {
        year: "2026",
        description:
          "California was the first state to adopt IRO as part of its statewide immunization record modernization initiative."
      },

      OR: {
        year: "2027",
        description:
          "Following the success of IRO implementation in California, Oregon has adopted IRO to improve portability and accessibility of children's immunization records."
      }
    };


    /*
     * ==========================================================
     * STATE NAMES
     * ==========================================================
     */

    const STATE_NAMES = {
      AL:"Alabama",
      AK:"Alaska",
      AZ:"Arizona",
      AR:"Arkansas",
      CA:"California",
      CO:"Colorado",
      CT:"Connecticut",
      DE:"Delaware",
      FL:"Florida",
      GA:"Georgia",
      HI:"Hawaii",
      ID:"Idaho",
      IL:"Illinois",
      IN:"Indiana",
      IA:"Iowa",
      KS:"Kansas",
      KY:"Kentucky",
      LA:"Louisiana",
      ME:"Maine",
      MD:"Maryland",
      MA:"Massachusetts",
      MI:"Michigan",
      MN:"Minnesota",
      MS:"Mississippi",
      MO:"Missouri",
      MT:"Montana",
      NE:"Nebraska",
      NV:"Nevada",
      NH:"New Hampshire",
      NJ:"New Jersey",
      NM:"New Mexico",
      NY:"New York",
      NC:"North Carolina",
      ND:"North Dakota",
      OH:"Ohio",
      OK:"Oklahoma",
      OR:"Oregon",
      PA:"Pennsylvania",
      RI:"Rhode Island",
      SC:"South Carolina",
      SD:"South Dakota",
      TN:"Tennessee",
      TX:"Texas",
      UT:"Utah",
      VT:"Vermont",
      VA:"Virginia",
      WA:"Washington",
      WV:"West Virginia",
      WI:"Wisconsin",
      WY:"Wyoming"
    };


    /*
     * ==========================================================
     * LOAD THE SVG MAP
     *
     * The map package contains individual SVG paths for each
     * state. It is loaded only once and then controlled locally
     * by the code below.
     * ==========================================================
     */

    const MAP_URL =
      "https://cdn.jsdelivr.net/npm/@svg-maps/usa@2.0.0/index.js";


    const mapContainer =
      document.getElementById("iro-map-svg");

    const stateList =
      document.getElementById("iro-state-list");

    const adoptedCount =
      document.getElementById("iro-adopted-count");

    const infoName =
      document.getElementById("iro-info-name");

    const infoYear =
      document.getElementById("iro-info-year");

    const infoDescription =
      document.getElementById("iro-info-description");


    /*
     * ==========================================================
     * INFORMATION PANEL
     * ==========================================================
     */

    function showState(abbreviation) {

      const name =
        STATE_NAMES[abbreviation] || abbreviation;

      const adoption =
        IRO_ADOPTED_STATES[abbreviation];

      infoName.textContent = name;

      if (adoption) {

        infoYear.textContent =
          "IRO adopted " + adoption.year;

        infoDescription.textContent =
          adoption.description ||
          "This state is part of the growing IRO network.";

      } else {

        infoYear.textContent =
          "Coming soon";

        infoDescription.textContent =
          "IRO is building a growing nationwide network " +
          "of secure, portable immunization records.";

      }

      document
        .querySelectorAll("#iro-states-map .state")
        .forEach(function (state) {
          state.classList.remove("selected");
        });

      const selected =
        document.querySelector(
          '#iro-states-map .state[data-state="' +
          abbreviation +
          '"]'
        );

      if (selected) {
        selected.classList.add("selected");
      }
    }


    /*
     * ==========================================================
     * CREATE CATALOG
     * ==========================================================
     */

    function buildCatalog() {

      stateList.innerHTML = "";

      Object.keys(STATE_NAMES)
        .sort(function (a, b) {
          return STATE_NAMES[a]
            .localeCompare(STATE_NAMES[b]);
        })
        .forEach(function (abbr) {

          const button =
            document.createElement("button");

          const adopted =
            IRO_ADOPTED_STATES[abbr];

          button.className =
            "iro-state-button" +
            (adopted ? " adopted" : "");

          button.type = "button";

          button.setAttribute(
            "aria-label",
            STATE_NAMES[abbr]
          );

          button.innerHTML = `
            <span class="iro-state-button-name">
              ${STATE_NAMES[abbr]}
            </span>
            <span class="iro-state-button-status">
              ${
                adopted
                  ? "IRO adopted " + adopted.year
                  : "Not yet adopted"
              }
            </span>
          `;

          button.addEventListener(
            "click",
            function () {
              showState(abbr);

              const mapState =
                document.querySelector(
                  '#iro-states-map .state[data-state="' +
                  abbr +
                  '"]'
                );

              if (mapState) {
                mapState.scrollIntoView({
                  behavior: "smooth",
                  block: "center"
                });
              }
            }
          );

          stateList.appendChild(button);
        });
    }


    /*
     * ==========================================================
     * LOAD MAP DATA
     * ==========================================================
     */

    function loadMap() {

      const script =
        document.createElement("script");

      script.src = MAP_URL;

      script.onload = function () {

        /*
         * Some versions of the package expose the map
         * through the global object while others are
         * intended for module bundlers.
         *
         * If the CDN package does not expose the map
         * globally, the fallback message below appears.
         */

        if (
          typeof window.USA_MAP !== "undefined"
        ) {
          renderMap(window.USA_MAP);
          return;
        }

        /*
         * Fallback:
         * Use a lightweight external SVG map loader.
         */

        loadSVGMap();
      };

      script.onerror = function () {
        loadSVGMap();
      };

      document.head.appendChild(script);
    }


    /*
     * ==========================================================
     * SVG FALLBACK
     *
     * This uses the public SVG map directly if the package
     * cannot be initialized by Squarespace.
     * ==========================================================
     */

    function loadSVGMap() {

      const svgURL =
        "https://www.simplemaps.com/static/svg/us/us.svg";

      fetch(svgURL)

        .then(function (response) {
          if (!response.ok) {
            throw new Error("Map could not be loaded.");
          }
          return response.text();
        })

        .then(function (svgText) {

          mapContainer.innerHTML =
            svgText;

          const svg =
            mapContainer.querySelector("svg");

          if (!svg) {
            throw new Error("Invalid SVG.");
          }

          svg.removeAttribute("width");
          svg.removeAttribute("height");

          svg.style.width = "100%";
          svg.style.height = "auto";

          /*
           * SimpleMaps identifies states with their
           * postal abbreviations.
           */

          const paths =
            svg.querySelectorAll(
              "[id], [data-id]"
            );

          paths.forEach(function (element) {

            const rawID =
              element.getAttribute("id") ||
              element.getAttribute("data-id");

            const abbr =
              rawID &&
              rawID.toUpperCase();

            if (!STATE_NAMES[abbr]) {
              return;
            }

            element.classList.add("state");

            element.setAttribute(
              "data-state",
              abbr
            );

            if (IRO_ADOPTED_STATES[abbr]) {
              element.classList.add("adopted");
            }

            element.setAttribute(
              "tabindex",
              "0"
            );

            element.setAttribute(
              "role",
              "button"
            );

            element.addEventListener(
              "click",
              function () {
                showState(abbr);
              }
            );

            element.addEventListener(
              "keydown",
              function (event) {

                if (
                  event.key === "Enter" ||
                  event.key === " "
                ) {
                  event.preventDefault();
                  showState(abbr);
                }

              }
            );

          });

        })

        .catch(function () {

          mapContainer.innerHTML = `
            <div style="
              padding:50px 25px;
              text-align:center;
              color:#52718A;
              font-size:15px;
              line-height:1.6;
            ">
              The interactive map could not be loaded.
              Please refresh the page or contact IRO.
            </div>
          `;

        });
    }


    /*
     * ==========================================================
     * INITIALIZE
     * ==========================================================
     */

    adoptedCount.textContent =
      Object.keys(IRO_ADOPTED_STATES).length;

    buildCatalog();

    loadMap();

  })();
  </script>

</div>