{
  "id": "tide-table-method",
  "name": "Method Note",
  "theme": "tide-table",
  "category": "Editorial",
  "description": "Documentation for how a prediction is produced, set as a numbered method with the equations hanging in the margin where they can be checked without breaking the sentence.",
  "layout": "A 68ch reading column with a 200px equation margin on the right; numbered steps hang their numerals in a left gutter outside the text block.",
  "modules": [
    {
      "key": "head",
      "name": "Method head",
      "html": "\n<header class=\"mh\"><span class=\"k\">Method note 04</span><h1>How a prediction is produced</h1><p class=\"dk\">Predictions are harmonic, not statistical. This note describes the constituents used, where the observations come from, and what the published uncertainty actually covers.</p></header>"
    },
    {
      "key": "steps",
      "name": "Numbered method",
      "html": "\n<ol class=\"st\">\n  <li><h2>Collect the observation series</h2><p>Each station reports at six-minute intervals. A year of clean observation is the minimum for a first analysis; stations with less are marked provisional and are excluded from the network summary.</p></li>\n  <li><h2>Fit the harmonic constituents</h2><p>We solve for 62 constituents by least squares. The four principal ones account for most of the range at every station in this network; the remainder matter chiefly in shallow water where the curve is distorted.</p></li>\n  <li><h2>Predict forward</h2><p>The fitted constituents are evaluated forward to produce height at any instant. This step is deterministic and contains no weather information at all, which is the single most misunderstood fact about tide prediction.</p></li>\n  <li><h2>Compare against observation</h2><p>The difference between observed and predicted height is the surge. It is a residual, not a measurement, and it carries everything the harmonic model does not know about — chiefly wind and atmospheric pressure.</p></li>\n</ol>"
    },
    {
      "key": "margin",
      "name": "Equation margin",
      "html": "\n<aside class=\"eq\">\n  <div><span class=\"k\">Constituent</span><code>h(t) = H·cos(ωt − g)</code><p>Amplitude H, speed ω, phase lag g.</p></div>\n  <div><span class=\"k\">Prediction</span><code>Z(t) = Z₀ + Σ hᵢ(t)</code><p>Mean level plus the sum of all fitted constituents.</p></div>\n  <div><span class=\"k\">Surge</span><code>S = Z_obs − Z_pred</code><p>Published to two decimal places.</p></div>\n</aside>"
    },
    {
      "key": "caveat",
      "name": "Uncertainty note",
      "html": "\n<section class=\"cv\"><h2>What the published uncertainty covers</h2><p>The quoted ±0.05 m is the residual standard deviation of the harmonic fit over the analysis period. It does not include gauge error, datum error, or any allowance for weather. A day with a 0.40 m surge is not a day on which the prediction was wrong by 0.40 m; it is a day on which the weather added 0.40 m to a correct prediction.</p></section>"
    }
  ],
  "moduleCount": 4,
  "reorderable": false,
  "meta": {
    "id": "tide-table-method",
    "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-method.json",
  "structure": "A 68ch reading column with a 200px equation margin on the right; numbered steps hang their numerals in a left gutter outside the text block.",
  "html": "<div class=\"dz dz-tide-table-method\" data-design=\"tide-table-method\" data-theme=\"tide-table\">\n<section class=\"dz-mod\" data-mod=\"head\" aria-label=\"Method head\">\n<header class=\"mh\"><span class=\"k\">Method note 04</span><h1>How a prediction is produced</h1><p class=\"dk\">Predictions are harmonic, not statistical. This note describes the constituents used, where the observations come from, and what the published uncertainty actually covers.</p></header></section><div class=\"cols\"><div class=\"main\"><section class=\"dz-mod\" data-mod=\"steps\" aria-label=\"Numbered method\">\n<ol class=\"st\">\n  <li><h2>Collect the observation series</h2><p>Each station reports at six-minute intervals. A year of clean observation is the minimum for a first analysis; stations with less are marked provisional and are excluded from the network summary.</p></li>\n  <li><h2>Fit the harmonic constituents</h2><p>We solve for 62 constituents by least squares. The four principal ones account for most of the range at every station in this network; the remainder matter chiefly in shallow water where the curve is distorted.</p></li>\n  <li><h2>Predict forward</h2><p>The fitted constituents are evaluated forward to produce height at any instant. This step is deterministic and contains no weather information at all, which is the single most misunderstood fact about tide prediction.</p></li>\n  <li><h2>Compare against observation</h2><p>The difference between observed and predicted height is the surge. It is a residual, not a measurement, and it carries everything the harmonic model does not know about — chiefly wind and atmospheric pressure.</p></li>\n</ol></section><section class=\"dz-mod\" data-mod=\"caveat\" aria-label=\"Uncertainty note\">\n<section class=\"cv\"><h2>What the published uncertainty covers</h2><p>The quoted ±0.05 m is the residual standard deviation of the harmonic fit over the analysis period. It does not include gauge error, datum error, or any allowance for weather. A day with a 0.40 m surge is not a day on which the prediction was wrong by 0.40 m; it is a day on which the weather added 0.40 m to a correct prediction.</p></section></section></div><section class=\"dz-mod\" data-mod=\"margin\" aria-label=\"Equation margin\">\n<aside class=\"eq\">\n  <div><span class=\"k\">Constituent</span><code>h(t) = H·cos(ωt − g)</code><p>Amplitude H, speed ω, phase lag g.</p></div>\n  <div><span class=\"k\">Prediction</span><code>Z(t) = Z₀ + Σ hᵢ(t)</code><p>Mean level plus the sum of all fitted constituents.</p></div>\n  <div><span class=\"k\">Surge</span><code>S = Z_obs − Z_pred</code><p>Published to two decimal places.</p></div>\n</aside></section></div>\n</div>",
  "css": "\n.dz-tide-table-method { background: var(--background); color: var(--foreground); font-family: var(--pv-body); padding: 30px 28px 40px; max-width: 1100px; margin: 0 auto; }\n.dz-tide-table-method .mh { padding-bottom: 20px; border-bottom: 2px solid var(--border); }\n.dz-tide-table-method .k { font-family: var(--pv-body); text-transform: uppercase; letter-spacing: .14em; font-size: 10.5px; font-weight: 600; color: var(--muted-foreground); }\n.dz-tide-table-method h1 { font-family: var(--pv-display); font-size: 46px; font-weight: 500; margin: 5px 0 12px; letter-spacing: -.02em; }\n.dz-tide-table-method .dk { font-size: 16px; line-height: 1.7; margin: 0; max-width: 70ch; }\n.dz-tide-table-method .cols { display: grid; grid-template-columns: 1fr 200px; gap: 40px; margin-top: 28px; align-items: start; }\n.dz-tide-table-method .st { list-style: none; counter-reset: s; margin: 0; padding: 0; }\n.dz-tide-table-method .st li { counter-increment: s; position: relative; padding: 0 0 22px 46px; }\n.dz-tide-table-method .st li::before { content: counter(s, decimal-leading-zero); position: absolute; left: 0; top: 2px; font-family: var(--pv-mono); font-size: 13px; color: var(--muted-foreground); }\n.dz-tide-table-method .st h2 { font-family: var(--pv-display); font-size: 18px; font-weight: 600; margin: 0 0 6px; }\n.dz-tide-table-method .st p { margin: 0; font-size: 14.5px; line-height: 1.66; max-width: 70ch; }\n.dz-tide-table-method .eq { border-left: 1px solid var(--border); padding-left: 22px; }\n.dz-tide-table-method .eq div { margin-bottom: 22px; }\n.dz-tide-table-method code { display: block; font-family: var(--pv-mono); font-size: 13px; margin: 6px 0 5px; }\n.dz-tide-table-method .eq p { margin: 0; font-size: 12px; color: var(--muted-foreground); line-height: 1.5; }\n.dz-tide-table-method .cv { margin-top: 12px; padding-top: 18px; border-top: 1px solid var(--border); }\n.dz-tide-table-method .cv 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 10px; font-family: var(--pv-body); }\n.dz-tide-table-method .cv p { margin: 0; font-size: 14.5px; line-height: 1.66; 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"
}