--- nfl_lmp_cron_candidate.py
+++ nfl_lmp_cron_candidate.py
@@ -1196,45 +1196,15 @@
 def hermes_lmp_tick():
     try:
         if not hermes_lmp_refresh_epg():
-            print("HERMES LMP: EPG NO ACTUALIZADO")
             return
-
         from hermes_lmp_epg_cache_v2 import cargar_vigente
-        from hermes_lmp_observer import observar
-        from datetime import datetime
-        import pytz
-
-        tz = pytz.timezone("America/Tijuana")
-        ahora = datetime.now(tz)
-
-        registro = cargar_vigente(
-            "hermes_lmp_epg_live.json",
-            max_edad_segundos=300
-        )
-
+        from hermes_lmp_v5_runtime import tick
+        registro = cargar_vigente("hermes_lmp_epg_live.json", 300)
         if registro is None:
-            print(
-                "HERMES LMP V5:",
-                "EPG NO VIGENTE",
-                "| SIN ACCIONES"
-            )
             return
-
-        epg = registro["epg"]
-        decisiones = observar(epg, ahora=ahora)
-
-        print(
-            "HERMES LMP V5:",
-            ahora.isoformat(),
-            "| EQUIPOS:", len(decisiones),
-            "| MODO: DIAGNOSTICO"
-        )
-
+        tick(registro["epg"], O11_PANELS["panel_1"], STREAM_DATABASE)
     except Exception as e:
-        print(
-            "HERMES LMP V5 ERROR:",
-            type(e).__name__
-        )
+        print("HERMES LMP V5 ERROR:", type(e).__name__, str(e)[:160])
 
 scheduler.add_job(
     hermes_lmp_tick,
@@ -1664,6 +1634,10 @@
     team_slug = team.lower().replace("-", "").strip()
     if team_slug not in STREAM_DATABASE[league]: 
         raise HTTPException(status_code=404, detail="Equipo no encontrado")
+    if league == "lmp":
+        from hermes_lmp_v5_runtime import access_allowed
+        if not access_allowed(team_slug):
+            raise HTTPException(status_code=403, detail="LMP fuera de ventana autorizada")
     
     user_agent = request.headers.get("user-agent", "Desconocido")
     if team_slug not in active_viewers[league]: 
