ui/TimeBar.razor
@using Sandbox;
@using Sandbox.UI;
@inherits Panel
@attribute [StyleSheet("TimeBar.razor.scss")]

<root>
	@{
		var manager = Manager.Instance;
		var totalTime = manager.GetTimerTotalTime();
		var remainingTime = MathF.Max(totalTime - manager.TimerElapsed, 0);
		string timeText = remainingTime > 0.99f ? MathF.Ceiling(remainingTime).ToString("0") : remainingTime.ToString("0.0");

		var timePercent = remainingTime > 0.99f
			? Math.Clamp(MathF.Ceiling(remainingTime) / totalTime, 0f, 1f)
			: Math.Clamp((totalTime - manager.TimerElapsed) / totalTime, 0f, 1f);
	}

	<div class="time_bar">
		<div class="time_bar_overlay" style="height:@(timePercent * 100f)%; transition: height @(timePercent >= 1f ? 0.05f : Utils.Map(timePercent, 1f, 0f, 1.2f, 0.05f, EasingType.SineIn))s ease-out;"></div>
	</div>

	<div class="time_bar_border"></div>

	<div class="hourglass_icon" style="transform: scale(@(Utils.Map(Manager.Instance.TimeSinceTimerChanged, 0f, 1f, 1.35f, 1f, EasingType.QuadOut)));">
		⌛
		<div class="time_label">
			@($"{timeText}")
		</div>
	</div>
</root>

@code
{
	protected override int BuildHash()
	{
		return HashCode.Combine(
			Time.Now
		);
	}
}