{
  "id": "tide-table-open",
  "name": "Open Data",
  "theme": "tide-table",
  "category": "Landing",
  "description": "A landing page for a public data service that leads with the one figure a visitor came for and puts the marketing, such as it is, below the fold where it belongs.",
  "layout": "A hairline-ruled hero whose largest element is a single live figure, then a three-column ruled feature row and a plain access table.",
  "modules": [
    {
      "key": "hero",
      "name": "Figure hero",
      "html": "\n<header class=\"fh\"><div><span class=\"k\">Kirkwall Pier · now</span><b class=\"big\">4.62<i>m</i></b><span class=\"d\">Rising. Next high water 14:08 at 4.87 m.</span></div><img src=\"{{ART hero}}\" alt=\"{{ARTALT hero}}\"></header>"
    },
    {
      "key": "lead",
      "name": "Lead text",
      "html": "\n<section class=\"ld\"><h1>Fourteen stations, six-minute intervals, no key required</h1><p>Predicted and observed sea level for the northern network, published continuously since 1994. The full archive is open, the licence is permissive, and the API has no rate limit worth mentioning.</p></section>"
    },
    {
      "key": "three",
      "name": "Feature row",
      "html": "\n<section class=\"tr\">\n  <div><span class=\"k\">Coverage</span><p>Fourteen gauges from Scrabster to North Ronaldsay, each with at least eleven years of continuous record.</p></div>\n  <div><span class=\"k\">Latency</span><p>Observations appear within ninety seconds of the gauge reporting. Predictions are computed a year ahead.</p></div>\n  <div><span class=\"k\">Licence</span><p>Open Government Licence. Attribution appreciated, redistribution unrestricted, commercial use fine.</p></div>\n</section>"
    },
    {
      "key": "access",
      "name": "Access table",
      "html": "\n<section class=\"ac\"><h2>How to get it</h2>\n<table><tbody>\n<tr><td>Live JSON</td><td class=\"n\">/v2/station/4417/latest</td><td>Single reading, six-minute cadence</td></tr>\n<tr><td>Series CSV</td><td class=\"n\">/v2/station/4417/series</td><td>Up to five years per request</td></tr>\n<tr><td>Predictions</td><td class=\"n\">/v2/station/4417/predict</td><td>Any window inside the next 366 days</td></tr>\n<tr><td>Bulk archive</td><td class=\"n\">/archive/2026.tar.zst</td><td>Whole network, one year, 4.1 GB</td></tr>\n</tbody></table>\n<p class=\"fn\">No registration. If you are pulling the whole archive nightly, please use the bulk file rather than the series endpoint — it is cheaper for both of us.</p></section>"
    }
  ],
  "moduleCount": 4,
  "reorderable": true,
  "meta": {
    "id": "tide-table-open",
    "model": "Claude Opus 5",
    "author": "Claude Code",
    "createdAt": "2026-09-01T23:34:56+09:00",
    "updatedAt": "2026-09-01T23:34:56+09:00",
    "version": "1.0.0",
    "isNew": false
  },
  "link": "/api/v1/designs/tide-table-open.json",
  "structure": "A hairline-ruled hero whose largest element is a single live figure, then a three-column ruled feature row and a plain access table.",
  "html": "<div class=\"dz dz-tide-table-open\" data-design=\"tide-table-open\" data-theme=\"tide-table\">\n<section class=\"dz-mod\" data-mod=\"hero\" aria-label=\"Figure hero\">\n<header class=\"fh\"><div><span class=\"k\">Kirkwall Pier · now</span><b class=\"big\">4.62<i>m</i></b><span class=\"d\">Rising. Next high water 14:08 at 4.87 m.</span></div><img src=\"https://designlookbook.dev/assets/img/tide-table-hero.webp\" alt=\"A flat estuary at low tide under an overcast sky\"></header></section>\n<section class=\"dz-mod\" data-mod=\"lead\" aria-label=\"Lead text\">\n<section class=\"ld\"><h1>Fourteen stations, six-minute intervals, no key required</h1><p>Predicted and observed sea level for the northern network, published continuously since 1994. The full archive is open, the licence is permissive, and the API has no rate limit worth mentioning.</p></section></section>\n<section class=\"dz-mod\" data-mod=\"three\" aria-label=\"Feature row\">\n<section class=\"tr\">\n  <div><span class=\"k\">Coverage</span><p>Fourteen gauges from Scrabster to North Ronaldsay, each with at least eleven years of continuous record.</p></div>\n  <div><span class=\"k\">Latency</span><p>Observations appear within ninety seconds of the gauge reporting. Predictions are computed a year ahead.</p></div>\n  <div><span class=\"k\">Licence</span><p>Open Government Licence. Attribution appreciated, redistribution unrestricted, commercial use fine.</p></div>\n</section></section>\n<section class=\"dz-mod\" data-mod=\"access\" aria-label=\"Access table\">\n<section class=\"ac\"><h2>How to get it</h2>\n<table><tbody>\n<tr><td>Live JSON</td><td class=\"n\">/v2/station/4417/latest</td><td>Single reading, six-minute cadence</td></tr>\n<tr><td>Series CSV</td><td class=\"n\">/v2/station/4417/series</td><td>Up to five years per request</td></tr>\n<tr><td>Predictions</td><td class=\"n\">/v2/station/4417/predict</td><td>Any window inside the next 366 days</td></tr>\n<tr><td>Bulk archive</td><td class=\"n\">/archive/2026.tar.zst</td><td>Whole network, one year, 4.1 GB</td></tr>\n</tbody></table>\n<p class=\"fn\">No registration. If you are pulling the whole archive nightly, please use the bulk file rather than the series endpoint — it is cheaper for both of us.</p></section></section>\n</div>",
  "css": "\n.dz-tide-table-open { background: var(--background); color: var(--foreground); font-family: var(--pv-body); padding: 0 0 40px; }\n.dz-tide-table-open .fh { display: grid; grid-template-columns: 1fr 1fr; gap: 0; align-items: center; border-bottom: 2px solid var(--border); }\n.dz-tide-table-open .fh > div { padding: 40px 28px; }\n.dz-tide-table-open .k { font-family: var(--pv-body); text-transform: uppercase; letter-spacing: .14em; font-size: 10.5px; font-weight: 600; color: var(--muted-foreground); display: block; }\n.dz-tide-table-open .big { display: block; font-family: var(--pv-mono); font-size: 92px; font-variant-numeric: tabular-nums; letter-spacing: -.04em; line-height: 1; margin: 10px 0 8px; }\n.dz-tide-table-open .big i { font-style: normal; font-size: 34px; color: var(--muted-foreground); margin-left: 8px; }\n.dz-tide-table-open .d { font-size: 14px; color: var(--muted-foreground); }\n.dz-tide-table-open .fh img { width: 100%; height: 280px; object-fit: cover; display: block; filter: var(--img-filter); }\n.dz-tide-table-open .ld { padding: 34px 28px 26px; max-width: 900px; }\n.dz-tide-table-open h1 { font-family: var(--pv-display); font-size: 46px; font-weight: 500; margin: 0 0 14px; letter-spacing: -.02em; line-height: 1.16; }\n.dz-tide-table-open .ld p { margin: 0; font-size: 16px; line-height: 1.7; max-width: 70ch; color: var(--muted-foreground); }\n.dz-tide-table-open .tr { display: grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--border); }\n.dz-tide-table-open .tr div { padding: 22px 26px 22px 28px; border-right: 1px solid var(--border); }\n.dz-tide-table-open .tr div:last-child { border-right: 0; }\n.dz-tide-table-open .tr p { margin: 8px 0 0; font-size: 13.5px; line-height: 1.6; }\n.dz-tide-table-open .ac { padding: 30px 28px 0; }\n.dz-tide-table-open h2 { font-family: var(--pv-body); text-transform: uppercase; letter-spacing: .14em; font-size: 10.5px; font-weight: 600; color: var(--muted-foreground); margin: 0 0 12px; }\n.dz-tide-table-open table { width: 100%; border-collapse: collapse; }\n.dz-tide-table-open td { padding: 10px 0; border-bottom: 1px solid color-mix(in oklab, var(--border) 55%, transparent); font-size: 13.5px; }\n.dz-tide-table-open td:first-child { width: 130px; font-weight: 600; }\n.dz-tide-table-open .n { font-family: var(--pv-mono); font-size: 13px; color: var(--accent); width: 300px; }\n.dz-tide-table-open .fn { font-size: 12.5px; color: var(--muted-foreground); margin: 14px 0 0; max-width: 70ch; }\n",
  "requiredTheme": "/api/v1/themes/tide-table.json",
  "googleFontsHref": "https://fonts.googleapis.com/css2?family=Spectral:wght@400;500;600;700&family=Inconsolata:wght@400;500;600;700&display=swap"
}