{
  "generated_at": "2026-11-12T15:54:50+00:00",
  "spot_slug": "la-jolla",
  "spot_name": "La Jolla",
  "location": "La Jolla, San Diego",
  "region": "California",
  "date": "2026-11-12",
  "numeric_score_0_100": 64,
  "grade": "C",
  "grade_probabilities": {
    "F": 0.0,
    "D": 0.15896232884809133,
    "C": 0.5403214785774249,
    "B": 0.300716192574484,
    "A": 0.0,
    "A+": 0.0
  },
  "raw_grade_probabilities": {
    "F": 0.0,
    "D": 0.15896232884809133,
    "C": 0.5403214785774249,
    "B": 0.300716192574484,
    "A": 0.0,
    "A+": 0.0
  },
  "most_likely_grade": {
    "grade": "C",
    "probability": 0.5403
  },
  "model_source": "soft_probabilistic",
  "display_policy_version": "v4-bimodal-aware",
  "display_override": null,
  "estimated_visibility_range_ft": [
    10,
    14
  ],
  "estimated_visibility_mid_ft": 12.0,
  "raw_expected_vis_ft": 13.46,
  "guardrail_applied": false,
  "confidence": "medium",
  "best_window": "Early morning to late morning before wind builds",
  "risk_factors": [
    "Elevated surf can stir up the shallows.",
    "Afternoon wind may texture the surface."
  ],
  "positive_factors": [
    "Overall swell load is modest."
  ],
  "explanation": "Conditions score blends swell, wave energy, and wind with the open sandy shore calibration. La Jolla soft probabilistic model \u2014 development data only.  Prospective validation required before public accuracy claims.  See PROSPECTIVE_VALIDATION_PLAN.md.",
  "is_projected": false,
  "projected_from": null,
  "forecast_basis": "Open-Meteo marine components (coherent hourly swell)",
  "report_text": "Dive Pro's beta model estimates 10-14 ft of visibility for 2026-11-12, a C grade. This is a forecast, not a measured visibility report. The model flags swell energy, surface movement and wind-driven mixing as constraints on clarity.\n\nAt the 7:54 AM PT issuance, the predicted tidal height was rising toward the next high tide at 9:31 AM PT. This is time-stamped tide context, not a promise of improving or declining clarity. Tidal height alone does not establish underwater current, slack water or visibility.\n\nA visibility grade does not assess entry safety or rip currents. Check the latest local surf forecast, actual entry and exit, water-quality advisories and your own limits. Conditions can differ between sheltered and exposed sites; clearer-looking water is not proof that an entry is suitable.",
  "features": {
    "date": "2026-11-12",
    "coherent_swell_source": "hourly_max_height_event",
    "surf_height_mean_ft": 3.94,
    "surf_height_max_ft": 3.94,
    "primary_swell_height_mean_ft": 2.69,
    "primary_swell_height_max_ft": 2.69,
    "primary_swell_period_mean_s": 9.8,
    "primary_swell_period_max_s": 9.8,
    "swell_wave_height_max_ft": 2.69,
    "swell_wave_period_max_s": 9.8,
    "swell_wave_direction_deg": 273,
    "swell_direction_label": "W",
    "wind_wave_height_max_ft": 0.66,
    "wind_wave_period_max_s": 1.8,
    "secondary_swell_height_ft": 1.97,
    "secondary_swell_period_s": 8.65,
    "secondary_swell_direction_deg": 266,
    "secondary_swell_direction_label": "W",
    "ml_p1_height_ft": 2.69,
    "ml_p1_period_s": 9.8,
    "ml_p1_direction_deg": 273,
    "ml_p2_height_ft": 1.97,
    "ml_p2_period_s": 8.65,
    "ml_p2_direction_deg": 266,
    "ml_ww_height_ft": 0.66,
    "ml_ww_period_s": 1.8,
    "ml_wave_yesterday_ft": 3.74,
    "ml_wave_2d_ago_ft": 4.18,
    "ml_wave_3d_ago_ft": 3.81,
    "ml_wave_7d_avg_ft": 3.75,
    "rain_target_day_forecast_in": 0.0,
    "rain_prior_3day_in": 0.0,
    "rain_prior_7day_in": 0.0,
    "rain_24h_in": 0.0,
    "ml_rain_3day_in": 0.0,
    "ml_rain_7day_in": 0.0,
    "ml_gust_max_mph": 11.2,
    "ml_sst_f": 74.2,
    "ml_sin_doy": -0.7494,
    "ml_cos_doy": 0.6621,
    "ml_month": 11.0,
    "ml_buoy_ht_ft": 2.69,
    "ml_buoy_per_s": 9.8,
    "ml_buoy_dir_deg": 273,
    "ml_buoy_exp": 0.921,
    "ml_buoy_energy_wtd": 6.529,
    "ml_wind_dir_deg": 195,
    "ml_upwelling_wind": 0.0,
    "ml_pressure_trend": -3.2,
    "ml_sst_anomaly": 11.2,
    "ml_wave_trend": -0.01,
    "ml_wave_accel": -0.44,
    "ml_tide_min_ft": 0.02,
    "ml_tide_range_ft": 5.47,
    "ml_tide_morning_avg": 4.87,
    "wave_height_max_ft": 3.94,
    "wind_speed_mean_mph": 6.02,
    "wind_speed_max_mph": 9.4,
    "wind_gust_max_mph": 11.2,
    "wave_energy_mean_kj": 109.368,
    "wave_energy_max_kj": 109.368,
    "total_swell_height_mean_ft": 2.77,
    "total_swell_height_max_ft": 2.77,
    "swell_power_proxy_mean": 109.368,
    "swell_power_proxy_max": 109.368,
    "short_period_swell_energy": 0.775,
    "long_period_swell_energy": 108.593,
    "mixed_swell_score": 2,
    "wind_wave_churn_proxy": 11.102,
    "wave_energy_wind_interaction": 1028.061,
    "water_temp_estimate_f": 74.2,
    "buoy_water_temp_f": 75.0,
    "buoy_water_temp_source": "ndbc_46254",
    "air_temp_max_f": 75.2,
    "air_temp_min_f": 57.4,
    "tide_range_ft": 5.47,
    "wind_chart": [
      {
        "time": "00:00",
        "speed_mph": 3.3
      },
      {
        "time": "01:00",
        "speed_mph": 4.7
      },
      {
        "time": "02:00",
        "speed_mph": 4.2
      },
      {
        "time": "03:00",
        "speed_mph": 3.5
      },
      {
        "time": "04:00",
        "speed_mph": 3.8
      },
      {
        "time": "05:00",
        "speed_mph": 6.5
      },
      {
        "time": "06:00",
        "speed_mph": 5.4
      },
      {
        "time": "07:00",
        "speed_mph": 4.8
      },
      {
        "time": "08:00",
        "speed_mph": 3.8
      },
      {
        "time": "09:00",
        "speed_mph": 3.8
      },
      {
        "time": "10:00",
        "speed_mph": 4.2
      },
      {
        "time": "11:00",
        "speed_mph": 6.9
      },
      {
        "time": "12:00",
        "speed_mph": 7.4
      },
      {
        "time": "13:00",
        "speed_mph": 8.2
      },
      {
        "time": "14:00",
        "speed_mph": 9.0
      },
      {
        "time": "15:00",
        "speed_mph": 9.4
      },
      {
        "time": "16:00",
        "speed_mph": 8.3
      },
      {
        "time": "17:00",
        "speed_mph": 6.3
      },
      {
        "time": "18:00",
        "speed_mph": 4.8
      },
      {
        "time": "19:00",
        "speed_mph": 3.1
      },
      {
        "time": "20:00",
        "speed_mph": 4.9
      },
      {
        "time": "21:00",
        "speed_mph": 5.1
      },
      {
        "time": "22:00",
        "speed_mph": 6.5
      },
      {
        "time": "23:00",
        "speed_mph": 4.7
      }
    ],
    "wave_chart": [
      {
        "time": "00:00",
        "height_ft": 3.9
      },
      {
        "time": "01:00",
        "height_ft": 3.9
      },
      {
        "time": "02:00",
        "height_ft": 3.8
      },
      {
        "time": "03:00",
        "height_ft": 3.8
      },
      {
        "time": "04:00",
        "height_ft": 3.7
      },
      {
        "time": "05:00",
        "height_ft": 3.7
      },
      {
        "time": "06:00",
        "height_ft": 3.7
      },
      {
        "time": "07:00",
        "height_ft": 3.6
      },
      {
        "time": "08:00",
        "height_ft": 3.5
      },
      {
        "time": "09:00",
        "height_ft": 3.5
      },
      {
        "time": "10:00",
        "height_ft": 3.5
      },
      {
        "time": "11:00",
        "height_ft": 3.5
      },
      {
        "time": "12:00",
        "height_ft": 3.5
      },
      {
        "time": "13:00",
        "height_ft": 3.5
      },
      {
        "time": "14:00",
        "height_ft": 3.5
      },
      {
        "time": "15:00",
        "height_ft": 3.5
      },
      {
        "time": "16:00",
        "height_ft": 3.6
      },
      {
        "time": "17:00",
        "height_ft": 3.7
      },
      {
        "time": "18:00",
        "height_ft": 3.7
      },
      {
        "time": "19:00",
        "height_ft": 3.7
      },
      {
        "time": "20:00",
        "height_ft": 3.7
      },
      {
        "time": "21:00",
        "height_ft": 3.8
      },
      {
        "time": "22:00",
        "height_ft": 3.8
      },
      {
        "time": "23:00",
        "height_ft": 3.8
      }
    ],
    "tide_chart": [
      {
        "time": "00:00",
        "height_ft": 3.23
      },
      {
        "time": "01:00",
        "height_ft": 3.0
      },
      {
        "time": "02:00",
        "height_ft": 2.76
      },
      {
        "time": "03:00",
        "height_ft": 2.64
      },
      {
        "time": "04:00",
        "height_ft": 2.77
      },
      {
        "time": "05:00",
        "height_ft": 3.17
      },
      {
        "time": "06:00",
        "height_ft": 3.78
      },
      {
        "time": "07:00",
        "height_ft": 4.49
      },
      {
        "time": "08:00",
        "height_ft": 5.11
      },
      {
        "time": "09:00",
        "height_ft": 5.49
      },
      {
        "time": "10:00",
        "height_ft": 5.49
      },
      {
        "time": "11:00",
        "height_ft": 5.07
      },
      {
        "time": "12:00",
        "height_ft": 4.27
      },
      {
        "time": "13:00",
        "height_ft": 3.21
      },
      {
        "time": "14:00",
        "height_ft": 2.07
      },
      {
        "time": "15:00",
        "height_ft": 1.06
      },
      {
        "time": "16:00",
        "height_ft": 0.34
      },
      {
        "time": "17:00",
        "height_ft": 0.02
      },
      {
        "time": "18:00",
        "height_ft": 0.12
      },
      {
        "time": "19:00",
        "height_ft": 0.57
      },
      {
        "time": "20:00",
        "height_ft": 1.24
      },
      {
        "time": "21:00",
        "height_ft": 1.96
      },
      {
        "time": "22:00",
        "height_ft": 2.58
      },
      {
        "time": "23:00",
        "height_ft": 2.98
      }
    ],
    "tide_phase_reference_time_local": "2026-11-12T07:54:50.626175-08:00",
    "tide_phase": "rising",
    "tide_next_event": {
      "time": "09:31",
      "height_ft": 5.54,
      "type": "H"
    },
    "tide_slack_windows": [
      {
        "around": "03:01",
        "start": "02:31",
        "end": "03:31",
        "type": "L"
      },
      {
        "around": "09:31",
        "start": "09:01",
        "end": "10:01",
        "type": "H"
      },
      {
        "around": "17:15",
        "start": "16:45",
        "end": "17:45",
        "type": "L"
      }
    ],
    "source": "open_meteo_marine_coherent",
    "marine_data_filled": false
  },
  "cams": [
    {
      "title": "Scripps Pier Live Visibility",
      "url": "https://coollab.ucsd.edu/pierviz/",
      "embed": null
    }
  ],
  "tide_source": "NOAA La Jolla 9410230 - 2026-11-12",
  "wind_source": "Open-Meteo hourly wind - 2026-11-12",
  "description": "La Jolla dive visibility forecast \u2014 La Jolla Cove, Shores, Canyon, and adjacent kelp forest.  Model trained on La Jolla DivePro reports.  Development model: not validated for public accuracy claims.",
  "habitat": "Kelp forest and sand channels",
  "exposure": "Open sandy shore",
  "calibration_note": "La Jolla soft probabilistic model \u2014 development data only.  Prospective validation required before public accuracy claims.  See PROSPECTIVE_VALIDATION_PLAN.md.",
  "camera_note": "Updated a few times daily from the Scripps Pier cam.",
  "report_text_version": "v3-issuance-scoped-no-safety-verdict",
  "community_report": {
    "visibility_ft": null,
    "weight": 0.0,
    "confidence_label": "low",
    "source_excerpt": null,
    "error": null
  }
}