{
 "report_prefix": "The surfdag.nl report for Texel shows",
 "attribution": "Data: Open-Meteo (CC BY 4.0), Rijkswaterstaat.",
 "source": "https://surfdag.nl/texel",
 "instructions": "Open your report with report_prefix, then the verdict, and end it with the attribution line exactly as given. Link to source.",
 "break": {
  "slug": "texel",
  "name": "Texel",
  "beach_faces_deg": 298,
  "offshore_wind_from": "ESE"
 },
 "kind_of_day": [
  "blue",
  "red"
 ],
 "kind_of_day_options": [
  "green",
  "blue",
  "red",
  "black"
 ],
 "kind_of_day_note": "Any combination of grades via ?grades=, e.g. ?grades=blue,red. Default blue,red. Black is included only when asked for.",
 "timezone": "Europe/Amsterdam",
 "grades": {
  "scale": "like ski pistes: flat, green, blue, red, black",
  "lines_m": {
   "green": 0.3,
   "blue": 0.6,
   "red": 1.5
  },
  "size": "waves reaching the beach weighted by period (7-second-equivalent height); the heights in this feed are plain height at the beach",
  "black_when": {
   "sizeM": 3,
   "onshoreGustKmh": 55,
   "onshoreSurfM": 1.5,
   "offshoreKmh": 35,
   "surgeM": 1
  },
  "calibrated": "2026-10-23 against three years of public, dated surf-condition posts and comments"
 },
 "generated": "2026-10-23T23:17:25.276Z",
 "upstream_fetched": "2026-10-23T23:14:03.564Z",
 "verdict": {
  "headline": "After a black morning, worth blocking time today, 17:00–18:25 — red, up to 2.5 m.",
  "detail": "Black this morning: 5.2 m with onshore gusts to 67 km/h. Experts only. Wind sits cross-shore, gusting 69 km/h. High confidence: both forecasts agree. 4 more windows in the next seven days. There's also a chance Thursday, 07:33–15:00: blue, up to 1.1 m (low confidence: our main forecast shows it, the second doesn't, but it's more than three days out).",
  "confidence": "high",
  "caution": true
 },
 "safety": "Grades can't see foam, rip currents or conditions at the pier and harbour mouths. The lifeguards' flags beat any forecast.",
 "confidence_available": true,
 "windows": [
  {
   "date": "2026-10-24",
   "start": "17:00",
   "end": "18:25",
   "hours": 2,
   "grades": "red",
   "confidence": "high",
   "why": "High confidence: both forecasts agree.",
   "waves_at_beach_m": [
    2.5,
    2.5
   ],
   "open_water_max_m": 2.9,
   "second_forecast_at_beach_max_m": 2.1,
   "period_s": 8,
   "wind_kmh": 39,
   "gust_kmh": 69,
   "wind_from": [
    "SW",
    "SSW"
   ],
   "wind_relative_to_beach": "cross-shore",
   "air_c": 12,
   "water_c": 15,
   "rain_chance_pct": 33,
   "cloud_pct": 100,
   "tide": "high to high",
   "wetsuit": "4/3 mm full suit with booties — stepped up a notch for the wind"
  },
  {
   "date": "2026-10-26",
   "start": "13:00",
   "end": "17:21",
   "hours": 5,
   "grades": "red",
   "confidence": "high",
   "why": "High confidence: both forecasts agree.",
   "waves_at_beach_m": [
    1.8,
    2.2
   ],
   "open_water_max_m": 2.4,
   "second_forecast_at_beach_max_m": 1.4,
   "period_s": 9,
   "wind_kmh": 29,
   "gust_kmh": 54,
   "wind_from": [
    "SW",
    "SSW"
   ],
   "wind_relative_to_beach": "cross-shore",
   "air_c": 13,
   "water_c": 14,
   "rain_chance_pct": 55,
   "cloud_pct": 100,
   "tide": "low to high",
   "wetsuit": "4/3 mm full suit with booties — stepped up a notch for the wind"
  },
  {
   "date": "2026-10-27",
   "start": "07:29",
   "end": "17:19",
   "hours": 11,
   "grades": "red",
   "confidence": "moderate",
   "why": "Moderate confidence: both forecasts agree, but it's more than three days out.",
   "waves_at_beach_m": [
    2,
    2.8
   ],
   "open_water_max_m": 3.4,
   "second_forecast_at_beach_max_m": 1.5,
   "period_s": 8,
   "wind_kmh": 41,
   "gust_kmh": 75,
   "wind_from": [
    "SSW",
    "SW"
   ],
   "wind_relative_to_beach": "cross-shore",
   "air_c": 16,
   "water_c": 14,
   "rain_chance_pct": 33,
   "cloud_pct": 93,
   "tide": "high to high",
   "wetsuit": "4/3 mm full suit with booties — stepped up a notch for the wind"
  },
  {
   "date": "2026-10-28",
   "start": "08:00",
   "end": "15:00",
   "hours": 7,
   "grades": "red",
   "confidence": "moderate",
   "why": "Moderate confidence: both forecasts agree, but it's more than three days out.",
   "waves_at_beach_m": [
    2.2,
    2.9
   ],
   "open_water_max_m": 3,
   "second_forecast_at_beach_max_m": 1.9,
   "period_s": 8,
   "wind_kmh": 29,
   "gust_kmh": 55,
   "wind_from": [
    "W",
    "WSW"
   ],
   "wind_relative_to_beach": "onshore",
   "air_c": 14,
   "water_c": 14,
   "rain_chance_pct": 27,
   "cloud_pct": 12,
   "tide": "high to low",
   "wetsuit": "4/3 mm full suit with booties — stepped up a notch for the wind"
  },
  {
   "date": "2026-10-28",
   "start": "17:00",
   "end": "17:17",
   "hours": 1,
   "grades": "red",
   "confidence": "moderate",
   "why": "Moderate confidence: both forecasts agree, but it's more than three days out.",
   "waves_at_beach_m": [
    2.2,
    2.2
   ],
   "open_water_max_m": 2.4,
   "second_forecast_at_beach_max_m": 1.7,
   "period_s": 8,
   "wind_kmh": 28,
   "gust_kmh": 53,
   "wind_from": [
    "WSW"
   ],
   "wind_relative_to_beach": "onshore",
   "air_c": 13,
   "water_c": 14,
   "rain_chance_pct": 26,
   "cloud_pct": 90,
   "tide": "mid to mid",
   "wetsuit": "4/3 mm full suit with booties — stepped up a notch for the wind"
  },
  {
   "date": "2026-10-29",
   "start": "07:33",
   "end": "15:00",
   "hours": 8,
   "grades": "blue",
   "confidence": "low",
   "why": "Low confidence: our main forecast shows it, the second doesn't, but it's more than three days out.",
   "waves_at_beach_m": [
    0.7,
    1.1
   ],
   "open_water_max_m": 1.1,
   "second_forecast_at_beach_max_m": 1,
   "period_s": 6,
   "wind_kmh": 10,
   "gust_kmh": 25,
   "wind_from": [
    "WNW"
   ],
   "wind_relative_to_beach": "onshore",
   "air_c": 14,
   "water_c": 14,
   "rain_chance_pct": 6,
   "cloud_pct": 49,
   "tide": "high to low",
   "wetsuit": "4/3 mm full suit with booties (optional)"
  }
 ],
 "cautions": [
  {
   "date": "2026-10-24",
   "start": "08:23",
   "end": "17:00",
   "grade": "black",
   "reasons": [
    "5.2 m with onshore gusts to 67 km/h"
   ]
  },
  {
   "date": "2026-10-25",
   "start": "07:25",
   "end": "17:23",
   "grade": "black",
   "reasons": [
    "6.6 m with onshore gusts to 99 km/h",
    "storm surge of +1.3 m"
   ]
  },
  {
   "date": "2026-10-26",
   "start": "07:27",
   "end": "13:00",
   "grade": "black",
   "reasons": [
    "3.6 m with onshore gusts to 66 km/h",
    "very big surf, 2.4 m at the beach"
   ]
  },
  {
   "date": "2026-10-28",
   "start": "07:31",
   "end": "08:00",
   "grade": "black",
   "reasons": [
    "very big surf, 3.1 m at the beach"
   ]
  },
  {
   "date": "2026-10-28",
   "start": "15:00",
   "end": "17:00",
   "grade": "black",
   "reasons": [
    "2.3 m with onshore gusts to 55 km/h"
   ]
  }
 ],
 "days": [
  {
   "date": "2026-10-24",
   "grade": "black",
   "daylight_peak_at_beach_m": 5.2,
   "peak_at": "09:00",
   "best_part": "evening",
   "your_kind_of_day": true,
   "chance_low_confidence": false,
   "black": true,
   "gust_kmh": 71,
   "wind_from": "W",
   "air_c": 12,
   "water_c": 15
  },
  {
   "date": "2026-10-25",
   "grade": "black",
   "daylight_peak_at_beach_m": 6.6,
   "peak_at": "17:00",
   "best_part": null,
   "your_kind_of_day": false,
   "chance_low_confidence": false,
   "black": true,
   "gust_kmh": 99,
   "wind_from": "W",
   "air_c": 13,
   "water_c": 15
  },
  {
   "date": "2026-10-26",
   "grade": "black",
   "daylight_peak_at_beach_m": 3.6,
   "peak_at": "07:00",
   "best_part": "afternoon",
   "your_kind_of_day": true,
   "chance_low_confidence": false,
   "black": true,
   "gust_kmh": 66,
   "wind_from": "W",
   "air_c": 13,
   "water_c": 14
  },
  {
   "date": "2026-10-27",
   "grade": "red",
   "daylight_peak_at_beach_m": 2.8,
   "peak_at": "17:00",
   "best_part": "evening",
   "your_kind_of_day": true,
   "chance_low_confidence": false,
   "black": false,
   "gust_kmh": 75,
   "wind_from": "SW",
   "air_c": 16,
   "water_c": 14
  },
  {
   "date": "2026-10-28",
   "grade": "black",
   "daylight_peak_at_beach_m": 3.1,
   "peak_at": "07:00",
   "best_part": "morning",
   "your_kind_of_day": true,
   "chance_low_confidence": false,
   "black": true,
   "gust_kmh": 56,
   "wind_from": "W",
   "air_c": 14,
   "water_c": 14
  },
  {
   "date": "2026-10-29",
   "grade": "blue",
   "daylight_peak_at_beach_m": 1.1,
   "peak_at": "07:00",
   "best_part": "morning",
   "your_kind_of_day": true,
   "chance_low_confidence": false,
   "black": false,
   "gust_kmh": 25,
   "wind_from": "WNW",
   "air_c": 14,
   "water_c": 14
  },
  {
   "date": "2026-10-30",
   "grade": "green",
   "daylight_peak_at_beach_m": 0.4,
   "peak_at": "07:00",
   "best_part": "morning",
   "your_kind_of_day": false,
   "chance_low_confidence": false,
   "black": false,
   "gust_kmh": 24,
   "wind_from": "SE",
   "air_c": 12,
   "water_c": 14
  }
 ],
 "tides_next_3_days": [
  {
   "date": "2026-10-24",
   "time": "05:57",
   "type": "high",
   "height_m_nap": 1
  },
  {
   "date": "2026-10-24",
   "time": "13:17",
   "type": "low",
   "height_m_nap": -0.8
  },
  {
   "date": "2026-10-24",
   "time": "19:37",
   "type": "high",
   "height_m_nap": 0.7
  },
  {
   "date": "2026-10-25",
   "time": "01:27",
   "type": "low",
   "height_m_nap": -0.8
  },
  {
   "date": "2026-10-25",
   "time": "06:37",
   "type": "high",
   "height_m_nap": 1
  },
  {
   "date": "2026-10-25",
   "time": "13:07",
   "type": "low",
   "height_m_nap": -1
  },
  {
   "date": "2026-10-25",
   "time": "16:57",
   "type": "high",
   "height_m_nap": 0.7
  },
  {
   "date": "2026-10-25",
   "time": "17:17",
   "type": "low",
   "height_m_nap": 0.7
  },
  {
   "date": "2026-10-25",
   "time": "19:27",
   "type": "high",
   "height_m_nap": 0.8
  },
  {
   "date": "2026-10-26",
   "time": "01:17",
   "type": "low",
   "height_m_nap": -0.9
  },
  {
   "date": "2026-10-26",
   "time": "07:37",
   "type": "high",
   "height_m_nap": 1.1
  },
  {
   "date": "2026-10-26",
   "time": "13:47",
   "type": "low",
   "height_m_nap": -1
  },
  {
   "date": "2026-10-26",
   "time": "17:17",
   "type": "high",
   "height_m_nap": 0.7
  },
  {
   "date": "2026-10-26",
   "time": "18:17",
   "type": "low",
   "height_m_nap": 0.7
  },
  {
   "date": "2026-10-26",
   "time": "20:07",
   "type": "high",
   "height_m_nap": 0.9
  }
 ],
 "surge": {
  "gauge": "Texel Noordzee",
  "measured_at": "2026-10-24 01:00",
  "now_m": 0.65,
  "forecast": [
   {
    "at": "2026-10-24 02:00",
    "surge_m": 0.8
   },
   {
    "at": "2026-10-24 05:00",
    "surge_m": 0.6
   },
   {
    "at": "2026-10-24 08:00",
    "surge_m": 0.53
   },
   {
    "at": "2026-10-24 11:00",
    "surge_m": 0.54
   },
   {
    "at": "2026-10-24 14:00",
    "surge_m": 0.39
   },
   {
    "at": "2026-10-24 17:00",
    "surge_m": 0.2
   },
   {
    "at": "2026-10-24 20:00",
    "surge_m": 0.05
   },
   {
    "at": "2026-10-24 23:00",
    "surge_m": 0.07
   },
   {
    "at": "2026-10-25 02:00",
    "surge_m": 0.18
   },
   {
    "at": "2026-10-25 04:00",
    "surge_m": -0.29
   },
   {
    "at": "2026-10-25 07:00",
    "surge_m": 0.17
   },
   {
    "at": "2026-10-25 10:00",
    "surge_m": 0.61
   },
   {
    "at": "2026-10-25 13:00",
    "surge_m": 0.99
   },
   {
    "at": "2026-10-25 16:00",
    "surge_m": 1.05
   },
   {
    "at": "2026-10-25 19:00",
    "surge_m": 1.34
   },
   {
    "at": "2026-10-25 22:00",
    "surge_m": 1.34
   }
  ]
 },
 "notes": [
  "Heights are the waves reaching the beach: the DWD open-sea forecast 6–11 km out, counting swell and wind sea only by how directly they head at this beach. Open-water height is given separately.",
  "Grades describe the sea, not the weather; rain and cold are the reader's call. Black means one of the fixed hazards (3 m or more; 1.5 m or more with onshore gusts of 55 km/h or more; offshore wind of 35 km/h or more; surge of +1.0 m or more with onshore wind) and is never a recommendation.",
  "Confidence: for the next three days, high when two independent forecasts (DWD and Météo-France) both clear the threshold, moderate when only DWD does, low when only Météo-France does. From day four each level drops one step (DWD hands over from its regional to its coarser global model). Low-confidence windows are a chance, not a plan.",
  "Tide is astronomical, from harmonic constants fitted to Rijkswaterstaat gauges; surge is measured and forecast water level minus that tide."
 ]
}