{
  "format": "subfork.graph/1",
  "thumbnail": "data:image/jpeg;base64,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",
  "definition": {
    "version": "0.1.0",
    "name": "Tidal Resonance",
    "description": "Three NOAA coastal stations become flowing SVG tide-prediction ribbons. Six-minute UTC samples, shared time scrubber, units and palettes. Educational only, not observed conditions or a navigation tool.",
    "nodes": [
      {
        "node_instance_id": "sf_url",
        "node_id": "n_url_input",
        "node_version": "1.0.0",
        "title": "San Francisco / NOAA predictions",
        "params": {
          "url": "https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?product=predictions&date=today&interval=6&datum=MLLW&station=9414290&time_zone=gmt&units=metric&format=json&application=Subfork"
        }
      },
      {
        "node_instance_id": "sf_fetch",
        "node_id": "n_fetch_url",
        "node_version": "1.0.0",
        "title": "Fetch San Francisco",
        "params": {
          "method": "GET",
          "timeout_seconds": 30,
          "max_response_bytes": 500000
        },
        "exposed_inputs": [
          "url"
        ],
        "inputs_visibility_configured": true,
        "exposed_outputs": [
          "body",
          "status",
          "headers"
        ],
        "outputs_visibility_configured": true
      },
      {
        "node_instance_id": "sf_parse",
        "node_id": "n_json_parse",
        "node_version": "1.0.0",
        "title": "Parse San Francisco",
        "params": {}
      },
      {
        "node_instance_id": "seattle_url",
        "node_id": "n_url_input",
        "node_version": "1.0.0",
        "title": "Seattle / NOAA predictions",
        "params": {
          "url": "https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?product=predictions&date=today&interval=6&datum=MLLW&station=9447130&time_zone=gmt&units=metric&format=json&application=Subfork"
        }
      },
      {
        "node_instance_id": "seattle_fetch",
        "node_id": "n_fetch_url",
        "node_version": "1.0.0",
        "title": "Fetch Seattle",
        "params": {
          "method": "GET",
          "timeout_seconds": 30,
          "max_response_bytes": 500000
        },
        "exposed_inputs": [
          "url"
        ],
        "inputs_visibility_configured": true,
        "exposed_outputs": [
          "body",
          "status",
          "headers"
        ],
        "outputs_visibility_configured": true
      },
      {
        "node_instance_id": "seattle_parse",
        "node_id": "n_json_parse",
        "node_version": "1.0.0",
        "title": "Parse Seattle",
        "params": {}
      },
      {
        "node_instance_id": "ny_url",
        "node_id": "n_url_input",
        "node_version": "1.0.0",
        "title": "The Battery / NOAA predictions",
        "params": {
          "url": "https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?product=predictions&date=today&interval=6&datum=MLLW&station=8518750&time_zone=gmt&units=metric&format=json&application=Subfork"
        }
      },
      {
        "node_instance_id": "ny_fetch",
        "node_id": "n_fetch_url",
        "node_version": "1.0.0",
        "title": "Fetch The Battery",
        "params": {
          "method": "GET",
          "timeout_seconds": 30,
          "max_response_bytes": 500000
        },
        "exposed_inputs": [
          "url"
        ],
        "inputs_visibility_configured": true,
        "exposed_outputs": [
          "body",
          "status",
          "headers"
        ],
        "outputs_visibility_configured": true
      },
      {
        "node_instance_id": "ny_parse",
        "node_id": "n_json_parse",
        "node_version": "1.0.0",
        "title": "Parse The Battery",
        "params": {}
      },
      {
        "node_instance_id": "dataset",
        "node_id": "n_json_template",
        "node_version": "1.0.0",
        "title": "Three-coast prediction snapshot",
        "params": {
          "template": {
            "schema_version": "tidal-resonance/1",
            "units": "meters",
            "datum": "MLLW",
            "time_zone": "UTC",
            "stations": [
              {
                "name": "San Francisco",
                "station": "9414290",
                "payload": "{{ inputs.sf_payload }}",
                "status": "{{ inputs.sf_status }}",
                "url": "{{ inputs.sf_url }}",
                "headers": "{{ inputs.sf_headers }}"
              },
              {
                "name": "Seattle",
                "station": "9447130",
                "payload": "{{ inputs.seattle_payload }}",
                "status": "{{ inputs.seattle_status }}",
                "url": "{{ inputs.seattle_url }}",
                "headers": "{{ inputs.seattle_headers }}"
              },
              {
                "name": "The Battery",
                "station": "8518750",
                "payload": "{{ inputs.ny_payload }}",
                "status": "{{ inputs.ny_status }}",
                "url": "{{ inputs.ny_url }}",
                "headers": "{{ inputs.ny_headers }}"
              }
            ]
          }
        },
        "custom_inputs": {
          "sf_payload": "json",
          "sf_status": "int",
          "sf_url": "url",
          "sf_headers": "json",
          "seattle_payload": "json",
          "seattle_status": "int",
          "seattle_url": "url",
          "seattle_headers": "json",
          "ny_payload": "json",
          "ny_status": "int",
          "ny_url": "url",
          "ny_headers": "json"
        },
        "exposed_inputs": [
          "sf_payload",
          "sf_status",
          "sf_url",
          "sf_headers",
          "seattle_payload",
          "seattle_status",
          "seattle_url",
          "seattle_headers",
          "ny_payload",
          "ny_status",
          "ny_url",
          "ny_headers"
        ],
        "inputs_visibility_configured": true
      },
      {
        "node_instance_id": "encode",
        "node_id": "n_json_stringify",
        "node_version": "1.0.0",
        "title": "HTML-safe tide data",
        "params": {
          "html_safe": true
        }
      },
      {
        "node_instance_id": "view",
        "node_id": "n_html_template",
        "node_version": "1.0.0",
        "title": "Tidal Resonance / coastal ribbons",
        "params": {
          "template": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <title>Tidal Resonance</title>\n    <style>\n      :root {\n        color-scheme: light;\n        --paper: #edece2;\n        --ink: #193d47;\n        --muted: #526c72;\n        --line: #bec9c3;\n        --accent: #176f79;\n      }\n      * {\n        box-sizing: border-box;\n      }\n      body {\n        margin: 0;\n        background:\n          radial-gradient(ellipse at 90% 0%, #d2e5db, transparent 60%),\n          var(--paper);\n        color: var(--ink);\n        font:\n          16px Georgia,\n          serif;\n      }\n      main {\n        max-width: 1450px;\n        margin: auto;\n        padding: 35px;\n      }\n      .eyebrow,\n      .mono,\n      label,\n      select,\n      button,\n      input,\n      footer,\n      #status,\n      #error {\n        font:\n          12px/1.6 \"Courier New\",\n          monospace;\n      }\n      .eyebrow {\n        letter-spacing: 0.18em;\n        color: var(--accent);\n        text-transform: uppercase;\n      }\n      header {\n        display: flex;\n        align-items: end;\n        justify-content: space-between;\n        gap: 25px;\n        padding-bottom: 24px;\n        border-bottom: 1px solid var(--line);\n      }\n      h1 {\n        margin: 18px 0 10px;\n        font-size: clamp(44px, 7vw, 90px);\n        font-weight: normal;\n        line-height: 1;\n        letter-spacing: -0.05em;\n      }\n      h1 em {\n        color: var(--accent);\n      }\n      h2 {\n        font-size: 24px;\n        font-weight: normal;\n        margin: 0 0 10px;\n      }\n      p {\n        line-height: 1.6;\n      }\n      .subtitle {\n        margin: 0;\n        color: var(--muted);\n      }\n      .source {\n        max-width: 300px;\n        color: var(--muted);\n        text-align: right;\n      }\n      .source strong {\n        display: block;\n        color: var(--ink);\n        font-weight: normal;\n        font-size: 17px;\n      }\n      .controls {\n        display: flex;\n        flex-wrap: wrap;\n        align-items: end;\n        gap: 24px;\n        padding: 18px 0;\n        border-bottom: 1px solid var(--line);\n      }\n      label {\n        display: grid;\n        gap: 5px;\n        color: var(--muted);\n      }\n      select,\n      button,\n      input {\n        background: #f6f5ed;\n        border: 1px solid #9cafaa;\n        border-radius: 3px;\n        padding: 7px 10px;\n        color: var(--ink);\n        max-width: 100%;\n      }\n      button {\n        cursor: pointer;\n      }\n      :focus-visible {\n        outline: 2px solid var(--accent);\n        outline-offset: 3px;\n      }\n      .scrubber {\n        flex: 1;\n        min-width: 200px;\n      }\n      input[type=\"range\"] {\n        width: 100%;\n        accent-color: var(--accent);\n        padding: 8px 0;\n      }\n      #time {\n        font-size: 24px;\n        color: var(--accent);\n        min-width: 100px;\n      }\n      figure {\n        margin: 18px 0 0;\n      }\n      svg {\n        display: block;\n        width: 100%;\n        height: auto;\n      }\n      svg text {\n        fill: var(--muted);\n        font:\n          12px \"Courier New\",\n          monospace;\n      }\n      svg .station-name {\n        fill: var(--ink);\n        font:\n          25px Georgia,\n          serif;\n      }\n      figcaption,\n      #status {\n        color: var(--muted);\n      }\n      .cards {\n        display: grid;\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n        gap: 22px;\n        margin-top: 24px;\n      }\n      article {\n        border-top: 2px solid var(--accent);\n        padding-top: 15px;\n        min-width: 0;\n      }\n      article strong {\n        display: block;\n        font-size: 35px;\n        font-weight: normal;\n        margin: 10px 0;\n      }\n      article p {\n        margin: 7px 0;\n      }\n      article input {\n        width: 100%;\n        font-size: 10px;\n      }\n      #error {\n        background: #f6e4d2;\n        padding: 15px;\n        border: 1px solid #b07650;\n      }\n      footer {\n        margin-top: 28px;\n        padding-top: 18px;\n        border-top: 1px solid var(--line);\n        color: var(--muted);\n      }\n      @media (max-width: 700px) {\n        main {\n          padding: 20px;\n        }\n        header {\n          display: block;\n        }\n        .source {\n          text-align: left;\n          margin-top: 18px;\n        }\n        .cards {\n          grid-template-columns: 1fr;\n        }\n        .chart-scroll {\n          overflow-x: auto;\n        }\n        svg {\n          min-width: 650px;\n        }\n      }\n    </style>\n  </head>\n  <body>\n    <main>\n      <header>\n        <div>\n          <div class=\"eyebrow\">Subfork / coastal rhythm studies / 07</div>\n          <h1>Tidal <em>Resonance.</em></h1>\n          <p class=\"subtitle\">Three coasts. One day. Different rhythms.</p>\n        </div>\n        <div class=\"source mono\">\n          <strong id=\"date\">NOAA tide predictions</strong>Six-minute samples /\n          UTC<br />Heights relative to each station's MLLW datum\n        </div>\n      </header>\n      <p id=\"error\" role=\"alert\" hidden></p>\n      <section class=\"controls\" aria-label=\"Tide controls\">\n        <label\n          >Coast<select id=\"station\">\n            <option value=\"all\">All three stations</option>\n          </select></label\n        >\n        <label\n          >Units<select id=\"units\">\n            <option value=\"m\">Meters</option>\n            <option value=\"ft\">Feet</option>\n          </select></label\n        >\n        <label\n          >Palette<select id=\"palette\">\n            <option value=\"coastal\">Coastal ink</option>\n            <option value=\"sunset\">Sunset</option>\n            <option value=\"mono\">Monochrome</option>\n          </select></label\n        >\n        <label class=\"scrubber\"\n          >Inspect time / UTC<input\n            type=\"range\"\n            id=\"cursor\"\n            min=\"0\"\n            max=\"239\"\n            step=\"1\"\n            value=\"120\"\n        /></label>\n        <output id=\"time\" class=\"mono\" for=\"cursor\">12:00</output>\n      </section>\n      <figure>\n        <div class=\"chart-scroll\">\n          <svg\n            id=\"chart\"\n            viewBox=\"0 0 1200 630\"\n            role=\"img\"\n            aria-labelledby=\"chart-title chart-desc\"\n          >\n            <title id=\"chart-title\">\n              One day's tide predictions at three stations\n            </title>\n            <desc id=\"chart-desc\">\n              Ribbons trace predicted water height. A shared UTC cursor selects\n              an exact six-minute sample, also listed in the station cards\n              below. Dashed lines indicate local zero datum.\n            </desc>\n            <g id=\"plot\"></g>\n          </svg>\n        </div>\n        <figcaption class=\"mono\">\n          Shared height scale; separate local zero references. Ribbons are\n          six-minute predictions joined by straight segments, not observed\n          waves. Negative values mean below local Mean Lower Low Water (MLLW),\n          not negative water depth.\n        </figcaption>\n      </figure>\n      <p id=\"status\" role=\"status\"></p>\n      <section\n        id=\"cards\"\n        class=\"cards\"\n        aria-label=\"Selected time and station details\"\n      ></section>\n      <footer>\n        NOAA CO-OPS harmonic tide predictions, not measured water levels or a\n        weather/storm-surge forecast. Educational visualization only; not for\n        navigation or safety decisions. Rerun the graph to refresh. The page\n        makes no network requests.\n      </footer>\n    </main>\n    <script id=\"dataset\" type=\"application/json\">\n      {{ inputs.dataset_json }}\n    </script>\n    <script>\n      (() => {\n        \"use strict\";\n        const $ = (id) => document.getElementById(id);\n        const STEP = 360000,\n          DAY = 86400000,\n          NS = \"http://www.w3.org/2000/svg\";\n        const palettes = {\n          coastal: [\"#176f79\", \"#6b8170\", \"#ad683f\"],\n          sunset: [\"#b2583f\", \"#98657d\", \"#8a751e\"],\n          mono: [\"#204e60\", \"#204e60\", \"#204e60\"],\n        };\n        function html(tag, text, className) {\n          const e = document.createElement(tag);\n          if (text !== undefined) e.textContent = text;\n          if (className) e.className = className;\n          return e;\n        }\n        function svg(tag, attrs, text) {\n          const e = document.createElementNS(NS, tag);\n          for (const [k, v] of Object.entries(attrs))\n            e.setAttribute(k, String(v));\n          if (text !== undefined) e.textContent = text;\n          return e;\n        }\n        function utc(time) {\n          return new Date(time).toISOString().slice(11, 16);\n        }\n        try {\n          const data = JSON.parse($(\"dataset\").textContent);\n          if (\n            data.schema_version !== \"tidal-resonance/1\" ||\n            !Array.isArray(data.stations) ||\n            data.stations.length !== 3\n          )\n            throw new Error(\n              \"Expected a three-station tidal-resonance/1 dataset.\",\n            );\n          if (\n            data.units !== \"meters\" ||\n            data.datum !== \"MLLW\" ||\n            data.time_zone !== \"UTC\"\n          )\n            throw new Error(\n              \"Expected meter heights relative to MLLW with UTC timestamps.\",\n            );\n          const stations = data.stations.map((station, index) => {\n            const name = String(station.name || \"Station \" + (index + 1));\n            const source = {\n              ...station,\n              name,\n              index,\n              records: [],\n              rejected: 0,\n              duplicates: 0,\n              excess: 0,\n              issue: \"\",\n            };\n            const rows = station.payload?.predictions;\n            if (\n              station.status !== 200 ||\n              station.payload?.error ||\n              !Array.isArray(rows)\n            ) {\n              source.issue = station.payload?.error\n                ? String(\n                    station.payload.error.message || \"NOAA returned an error\",\n                  )\n                : \"No prediction list (HTTP \" + station.status + \")\";\n              return source;\n            }\n            source.excess = Math.max(0, rows.length - 240);\n            const seen = new Set();\n            for (const row of rows.slice(0, 240)) {\n              const time =\n                typeof row?.t === \"string\" &&\n                /^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}$/.test(row.t)\n                  ? Date.parse(row.t.replace(\" \", \"T\") + \":00Z\")\n                  : NaN;\n              const height =\n                typeof row?.v === \"string\" &&\n                /^-?\\d+(\\.\\d+)?$/.test(row.v.trim())\n                  ? Number(row.v)\n                  : NaN;\n              if (\n                !Number.isFinite(time) ||\n                new Date(time).toISOString().slice(0, 16).replace(\"T\", \" \") !==\n                  row.t ||\n                time % STEP !== 0 ||\n                !Number.isFinite(height) ||\n                Math.abs(height) > 100\n              ) {\n                source.rejected++;\n                continue;\n              }\n              if (seen.has(time)) {\n                source.duplicates++;\n                continue;\n              }\n              seen.add(time);\n              source.records.push({ time, height });\n            }\n            source.records.sort((a, b) => a.time - b.time);\n            return source;\n          });\n          const first = stations.find((station) => station.records.length)\n            ?.records[0];\n          if (!first)\n            throw new Error(\n              \"No usable predictions. \" +\n                stations\n                  .map(\n                    (station) =>\n                      station.name + \": \" + (station.issue || \"empty data\"),\n                  )\n                  .join(\"; \"),\n            );\n          const anchor = Math.floor(first.time / DAY) * DAY;\n          $(\"date\").textContent =\n            new Date(anchor).toISOString().slice(0, 10) + \" / UTC\";\n          for (const station of stations) {\n            const inDay = station.records.filter(\n              (row) => row.time >= anchor && row.time < anchor + DAY,\n            );\n            station.rejected += station.records.length - inDay.length;\n            station.records = inDay;\n            station.samples = new Map(\n              inDay.map((row) => [row.time, row.height]),\n            );\n            const option = html(\"option\", station.name);\n            option.value = String(station.index);\n            $(\"station\").append(option);\n          }\n          const values = stations.flatMap((station) =>\n            station.records.map((row) => row.height),\n          );\n          const low = Math.min(0, ...values),\n            high = Math.max(0.1, ...values),\n            span = high - low;\n          const clock = (slot) => utc(anchor + slot * STEP);\n          function draw() {\n            const chosen = $(\"station\").value;\n            const visible = stations.filter(\n              (station) => chosen === \"all\" || chosen === String(station.index),\n            );\n            const slot = Number($(\"cursor\").value),\n              time = anchor + slot * STEP;\n            const unit = $(\"units\").value,\n              factor = unit === \"ft\" ? 3.280839895 : 1;\n            const format = (height) =>\n              (height * factor).toFixed(2) + \" \" + unit;\n            const colors = palettes[$(\"palette\").value];\n            const panelHeight = 170,\n              left = 220,\n              width = 920;\n            $(\"time\").textContent = clock(slot) + \" UTC\";\n            $(\"cursor\").setAttribute(\"aria-valuetext\", clock(slot) + \" UTC\");\n            $(\"plot\").replaceChildren();\n            $(\"cards\").replaceChildren();\n            $(\"chart\").setAttribute(\n              \"viewBox\",\n              \"0 0 1200 \" + (visible.length * panelHeight + 80),\n            );\n            $(\"chart-title\").textContent =\n              new Date(anchor).toISOString().slice(0, 10) +\n              \" / NOAA predicted tides\";\n            visible.forEach((station, rowIndex) => {\n              const top = 25 + rowIndex * panelHeight;\n              const y = (height) => top + 125 - ((height - low) / span) * 105;\n              const x = (time) =>\n                left + ((time - anchor) / (239 * STEP)) * width;\n              const color = colors[station.index];\n              $(\"plot\").append(\n                svg(\n                  \"text\",\n                  { x: 0, y: top + 35, class: \"station-name\" },\n                  station.name,\n                ),\n                svg(\"text\", { x: 0, y: top + 57 }, \"NOAA / \" + station.station),\n                svg(\n                  \"text\",\n                  { x: 0, y: top + 100 },\n                  station.samples.has(time)\n                    ? format(station.samples.get(time))\n                    : \"No sample\",\n                ),\n              );\n              for (const hour of [0, 6, 12, 18])\n                $(\"plot\").append(\n                  svg(\"line\", {\n                    x1: x(anchor + hour * 3600000),\n                    x2: x(anchor + hour * 3600000),\n                    y1: top + 10,\n                    y2: top + 132,\n                    stroke: \"#bcc8c2\",\n                    \"stroke-opacity\": 0.5,\n                  }),\n                );\n              $(\"plot\").append(\n                svg(\"line\", {\n                  x1: left,\n                  x2: left + width,\n                  y1: y(0),\n                  y2: y(0),\n                  stroke: color,\n                  \"stroke-dasharray\": \"3 5\",\n                  \"stroke-opacity\": 0.5,\n                }),\n                svg(\"text\", { x: left + width + 7, y: y(0) + 4 }, \"0\"),\n              );\n              const segments = [];\n              let segment = [];\n              for (const sample of station.records) {\n                if (\n                  segment.length &&\n                  sample.time - segment[segment.length - 1].time !== STEP\n                ) {\n                  segments.push(segment);\n                  segment = [];\n                }\n                segment.push(sample);\n              }\n              if (segment.length) segments.push(segment);\n              for (const segment of segments) {\n                const line =\n                  \"M \" +\n                  segment\n                    .map((sample) => x(sample.time) + \" \" + y(sample.height))\n                    .join(\" L \");\n                if (segment.length > 1)\n                  $(\"plot\").append(\n                    svg(\"path\", {\n                      d:\n                        line +\n                        \" L \" +\n                        x(segment.at(-1).time) +\n                        \" \" +\n                        y(0) +\n                        \" L \" +\n                        x(segment[0].time) +\n                        \" \" +\n                        y(0) +\n                        \" Z\",\n                      fill: color,\n                      \"fill-opacity\": 0.18,\n                    }),\n                  );\n                $(\"plot\").append(\n                  svg(\"path\", {\n                    d: line,\n                    stroke: color,\n                    \"stroke-width\": 2.5,\n                    fill: \"none\",\n                  }),\n                );\n                if (segment.length === 1)\n                  $(\"plot\").append(\n                    svg(\"circle\", {\n                      cx: x(segment[0].time),\n                      cy: y(segment[0].height),\n                      r: 2.5,\n                      fill: color,\n                    }),\n                  );\n              }\n              $(\"plot\").append(\n                svg(\"line\", {\n                  x1: x(time),\n                  x2: x(time),\n                  y1: top + 8,\n                  y2: top + 132,\n                  stroke: color,\n                  \"stroke-width\": 1.2,\n                }),\n              );\n              if (station.samples.has(time))\n                $(\"plot\").append(\n                  svg(\"circle\", {\n                    cx: x(time),\n                    cy: y(station.samples.get(time)),\n                    r: 5,\n                    fill: color,\n                    stroke: \"#edece2\",\n                    \"stroke-width\": 2,\n                  }),\n                );\n              if (!station.records.length)\n                $(\"plot\").append(\n                  svg(\n                    \"text\",\n                    { x: left + 20, y: top + 65 },\n                    \"Predictions unavailable for this day\",\n                  ),\n                );\n              const card = html(\"article\");\n              card.style.borderColor = color;\n              card.append(\n                html(\"h2\", station.name),\n                html(\n                  \"div\",\n                  \"Station \" + station.station + \" / \" + clock(slot) + \" UTC\",\n                  \"mono\",\n                ),\n                html(\n                  \"strong\",\n                  station.samples.has(time)\n                    ? format(station.samples.get(time))\n                    : \"Unavailable\",\n                ),\n              );\n              if (station.records.length) {\n                const heights = station.records.map((sample) => sample.height);\n                card.append(\n                  html(\n                    \"p\",\n                    \"Sampled daily range: \" +\n                      format(Math.min(...heights)) +\n                      \" to \" +\n                      format(Math.max(...heights)),\n                    \"mono\",\n                  ),\n                );\n              }\n              card.append(\n                html(\n                  \"p\",\n                  station.records.length +\n                    \" / 240 samples. \" +\n                    station.rejected +\n                    \" invalid/off-day; \" +\n                    station.duplicates +\n                    \" duplicate; \" +\n                    station.excess +\n                    \" over-cap.\",\n                  \"mono\",\n                ),\n              );\n              if (station.issue) card.append(html(\"p\", station.issue, \"mono\"));\n              const label = html(\"label\", \"NOAA station URL (select to copy)\"),\n                input = html(\"input\");\n              input.readOnly = true;\n              input.value = /^\\d{7}$/.test(String(station.station))\n                ? \"https://tidesandcurrents.noaa.gov/noaatidepredictions.html?id=\" +\n                  station.station\n                : \"Station URL unavailable\";\n              input.addEventListener(\"focus\", () => input.select());\n              label.append(input);\n              card.append(label);\n              $(\"cards\").append(card);\n            });\n            for (const hour of [0, 6, 12, 18])\n              $(\"plot\").append(\n                svg(\n                  \"text\",\n                  {\n                    x: left + (hour / 23.9) * width,\n                    y: visible.length * panelHeight + 50,\n                    \"text-anchor\": \"middle\",\n                  },\n                  String(hour).padStart(2, \"0\") + \":00\",\n                ),\n              );\n            $(\"plot\").append(\n              svg(\n                \"text\",\n                {\n                  x: left + width,\n                  y: visible.length * panelHeight + 50,\n                  \"text-anchor\": \"end\",\n                },\n                \"23:54 UTC\",\n              ),\n            );\n            const incomplete = stations.filter(\n              (station) => station.records.length !== 240,\n            );\n            $(\"status\").textContent =\n              (incomplete.length\n                ? \"Incomplete coverage: \" +\n                  incomplete.map((station) => station.name).join(\", \") +\n                  \". Gaps are not interpolated. \"\n                : \"720 predicted samples across three stations. \") +\n              \"Day resolved by NOAA's date=today request; actual returned UTC date shown above. Shared scale: \" +\n              format(low) +\n              \" to \" +\n              format(high) +\n              \" relative to each local datum. Sampled extrema are not exact high/low tide times.\";\n          }\n          for (const id of [\"station\", \"units\", \"palette\"])\n            $(id).addEventListener(\"change\", draw);\n          $(\"cursor\").addEventListener(\"input\", draw);\n          draw();\n        } catch (error) {\n          $(\"error\").hidden = false;\n          $(\"error\").textContent =\n            error.message || \"Unable to render predictions.\";\n        }\n      })();\n    </script>\n  </body>\n</html>\n"
        },
        "custom_inputs": {
          "dataset_json": "str"
        },
        "exposed_inputs": [
          "dataset_json"
        ],
        "inputs_visibility_configured": true
      },
      {
        "node_instance_id": "response",
        "node_id": "n_html_response",
        "node_version": "1.0.0",
        "title": "Tide atlas page",
        "params": {}
      },
      {
        "node_instance_id": "data_response",
        "node_id": "n_json_response",
        "node_version": "1.0.0",
        "title": "Prediction dataset response",
        "params": {}
      }
    ],
    "edges": [
      {
        "source_node_id": "sf_url",
        "source_output": "url",
        "target_node_id": "sf_fetch",
        "target_input": "url"
      },
      {
        "source_node_id": "sf_fetch",
        "source_output": "body",
        "target_node_id": "sf_parse",
        "target_input": "text"
      },
      {
        "source_node_id": "sf_parse",
        "source_output": "value",
        "target_node_id": "dataset",
        "target_input": "sf_payload"
      },
      {
        "source_node_id": "sf_fetch",
        "source_output": "status",
        "target_node_id": "dataset",
        "target_input": "sf_status"
      },
      {
        "source_node_id": "sf_url",
        "source_output": "url",
        "target_node_id": "dataset",
        "target_input": "sf_url"
      },
      {
        "source_node_id": "sf_fetch",
        "source_output": "headers",
        "target_node_id": "dataset",
        "target_input": "sf_headers"
      },
      {
        "source_node_id": "seattle_url",
        "source_output": "url",
        "target_node_id": "seattle_fetch",
        "target_input": "url"
      },
      {
        "source_node_id": "seattle_fetch",
        "source_output": "body",
        "target_node_id": "seattle_parse",
        "target_input": "text"
      },
      {
        "source_node_id": "seattle_parse",
        "source_output": "value",
        "target_node_id": "dataset",
        "target_input": "seattle_payload"
      },
      {
        "source_node_id": "seattle_fetch",
        "source_output": "status",
        "target_node_id": "dataset",
        "target_input": "seattle_status"
      },
      {
        "source_node_id": "seattle_url",
        "source_output": "url",
        "target_node_id": "dataset",
        "target_input": "seattle_url"
      },
      {
        "source_node_id": "seattle_fetch",
        "source_output": "headers",
        "target_node_id": "dataset",
        "target_input": "seattle_headers"
      },
      {
        "source_node_id": "ny_url",
        "source_output": "url",
        "target_node_id": "ny_fetch",
        "target_input": "url"
      },
      {
        "source_node_id": "ny_fetch",
        "source_output": "body",
        "target_node_id": "ny_parse",
        "target_input": "text"
      },
      {
        "source_node_id": "ny_parse",
        "source_output": "value",
        "target_node_id": "dataset",
        "target_input": "ny_payload"
      },
      {
        "source_node_id": "ny_fetch",
        "source_output": "status",
        "target_node_id": "dataset",
        "target_input": "ny_status"
      },
      {
        "source_node_id": "ny_url",
        "source_output": "url",
        "target_node_id": "dataset",
        "target_input": "ny_url"
      },
      {
        "source_node_id": "ny_fetch",
        "source_output": "headers",
        "target_node_id": "dataset",
        "target_input": "ny_headers"
      },
      {
        "source_node_id": "dataset",
        "source_output": "value",
        "target_node_id": "encode",
        "target_input": "value"
      },
      {
        "source_node_id": "encode",
        "source_output": "text",
        "target_node_id": "view",
        "target_input": "dataset_json"
      },
      {
        "source_node_id": "view",
        "source_output": "html",
        "target_node_id": "response",
        "target_input": "html"
      },
      {
        "source_node_id": "dataset",
        "source_output": "value",
        "target_node_id": "data_response",
        "target_input": "value"
      }
    ],
    "graph_outputs": {
      "html": {
        "node_instance_id": "view",
        "output_name": "html"
      },
      "response": {
        "node_instance_id": "response",
        "output_name": "response"
      },
      "dataset": {
        "node_instance_id": "dataset",
        "output_name": "value"
      },
      "data_response": {
        "node_instance_id": "data_response",
        "output_name": "response"
      }
    },
    "metadata": {
      "template": {
        "category": "html",
        "status": "provider-backed-probe",
        "summary": "Bounded NOAA predictions from three coasts form an inspectable tidal atlas.",
        "requires": {
          "nodes": [
            "n_url_input",
            "n_fetch_url",
            "n_json_parse",
            "n_json_template",
            "n_json_stringify",
            "n_html_template",
            "n_html_response",
            "n_json_response"
          ],
          "panels": [
            "html",
            "json"
          ],
          "capabilities": [
            "public-http"
          ],
          "secrets": []
        }
      },
      "canvas": {
        "positions": {
          "sf_url": {
            "x": 60,
            "y": 80
          },
          "sf_fetch": {
            "x": 370,
            "y": 80
          },
          "sf_parse": {
            "x": 680,
            "y": 80
          },
          "seattle_url": {
            "x": 60,
            "y": 320
          },
          "seattle_fetch": {
            "x": 370,
            "y": 320
          },
          "seattle_parse": {
            "x": 680,
            "y": 320
          },
          "ny_url": {
            "x": 60,
            "y": 560
          },
          "ny_fetch": {
            "x": 370,
            "y": 560
          },
          "ny_parse": {
            "x": 680,
            "y": 560
          },
          "dataset": {
            "x": 990,
            "y": 200
          },
          "encode": {
            "x": 1300,
            "y": 200
          },
          "view": {
            "x": 1610,
            "y": 200
          },
          "response": {
            "x": 1920,
            "y": 200
          },
          "data_response": {
            "x": 1300,
            "y": 500
          }
        },
        "recommended_panels": [
          {
            "kind": "html",
            "binding": {
              "nodeInstanceId": "view",
              "outputName": "html"
            }
          },
          {
            "kind": "json",
            "binding": {
              "nodeInstanceId": "dataset",
              "outputName": "value"
            }
          }
        ]
      }
    }
  },
  "tags": [
    "html",
    "visualizations"
  ]
}
