export function fmtTs(s: number): string { const t = Math.floor(s); const h = Math.floor(t / 3600); const m = Math.floor((t % 3600) / 60); const sec = t % 60; return h ? `${h}:${String(m).padStart(2, "0")}:${String(sec).padStart(2, "0")}` : `${m}:${String(sec).padStart(2, "0")}`; } export function fmtDuration(s: number): string { const m = Math.round(s / 60); return m >= 60 ? `${Math.floor(m / 60)}h ${m % 60}m` : `${m} min`; } export function compact(n: number | null | undefined): string { if (n == null) return "–"; return Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 }).format(n); } export function bytes(n: number): string { if (n < 1024) return `${n} B`; if (n < 1024 ** 2) return `${(n / 1024).toFixed(1)} KB`; return `${(n / 1024 ** 2).toFixed(2)} MB`; } export const pct = (x: number, digits = 0) => `${(x * 100).toFixed(digits)}%`; export function youtubeAt(url: string | null | undefined, start: number): string | null { return url ? `${url}&t=${Math.floor(start)}s` : null; }