Gantt
The same <timeline> as the episode timelines, against a calendar rather than a clock. The axis reads which it has from the data: a value like "2026-01-05" is a date, "12:30" is elapsed time, and the origin, the gridline spacing and the label format all follow from that. Mixing the two in one timeline is refused - an axis is one or the other.
Result
Source examples/gantt.svgn
<diagram>
<!-- The same <timeline> as the episode timelines, against a calendar rather
than a clock. The axis reads which it has from the data: a value like
"2026-01-05" is a date, "12:30" is elapsed time, and the origin, the
gridline spacing and the label format all follow from that. Mixing the
two in one timeline is refused - an axis is one or the other. -->
<data name="release">
<record phase="Research" start="2026-01-05" end="2026-02-02"/>
<record phase="Design" start="2026-01-26" end="2026-03-09"/>
<record phase="Build" start="2026-02-23" end="2026-05-11"/>
<record phase="Test" start="2026-04-13" end="2026-06-01"/>
<record phase="Docs" start="2026-05-04" end="2026-06-15"/>
<record phase="Launch" start="2026-06-15" end="2026-06-29"/>
</data>
<timeline data="release" lane="phase" start="start" end="end"
width="820" x-start="150" bar-height="44" fill="lane"/>
</diagram>