Job duration by phase (longest → shortest)
Phases parsed from Runner section_start/section_end
markers in each job log (prepare = image/sources; cache =
restore_cache; artifacts = inbound job artifacts; script =
before_script+script; postprocess = upload/archive/cleanup).
Queue wait is not part of the bar (see hover for queued duration).