// Convert a duration in seconds to a humanised string like "2h 13m" or "45m 12s". // Returns "?" for non-finite or negative input so the UI never renders NaN/empty. export function humaniseUptime(seconds: number | null | undefined): string { if (seconds == null || !Number.isFinite(seconds) || seconds < 0) return '?' const s = Math.floor(seconds) const days = Math.floor(s / 86400) const hours = Math.floor((s % 86400) / 3600) const minutes = Math.floor((s % 3600) / 60) const secs = s % 60 if (days > 0) return `${days}d ${hours}h` if (hours > 0) return `${hours}h ${minutes}m` if (minutes > 0) return `${minutes}m ${secs}s` return `${secs}s` }