Static event bus for UI event log messages. Gameplay posts text plus a display duration, and the Razor Eventlog panel subscribes to OnMessage to show entries without referencing Razor types from game code.
using System;
namespace BrickJam.UI;
/// <summary>
/// Decouples server/gameplay code from the Razor <c>Eventlog</c> panel. Gameplay posts here; the
/// panel subscribes. Keeps non-UI code free of Razor-generated type references.
/// </summary>
public static class EventlogBus
{
public static event Action<string, float> OnMessage;
public static void Post( string text, float time = 8f ) => OnMessage?.Invoke( text, time );
}