Equation of Time
The sun is not on time. Solar noon, the moment it crosses your meridian, moves about by up to 16 minutes across the year. Pick a date and place to see why.
Over the year
Above zero, the sun is ahead of the clock and a sundial reads noon before it. Below zero, it is behind.
The analemma
One dot per day: the sun's declination (vertical) against the equation of time (horizontal, in minutes). The horizontal axis is not to the same scale as the vertical one. This is the figure-of-eight from a fixed clock time, drawn as a graph; it is not a picture of the sky.
Why it changes
Two things make the sun's day uneven. The Earth's axis is tilted by about 23.4 degrees, so the sun's apparent path along the sky runs slant to the clock's steady hours. And the orbit is an ellipse: the Earth moves fastest when it is closest to the sun, in early January, and slowest in early July. Together these give a sundial a lead of about 16 minutes in early November and a lag of about 14 minutes in mid-February.
To find solar noon on your clock, the page uses: noon + 4 minutes for each degree your place lies west of your clock's standard meridian (15 degrees per hour of offset), minus the equation of time.
What was checked
The equation of time and declination use the Fourier series of Spencer (1971). Against values I remember (11 February about −14.2 minutes, 3 November about +16.4, 14 May about +3.7, 26 July about −6.4) it is within 0.2 minute. Its largest value is +16.4 minutes on day 305, its smallest −14.3 on day 45; the declination runs from −23.4 to +23.5 degrees. The solar noon for Greenwich on 3 November is 11:43.6. These came from a separate Node script, not from this page. In the built-in browser the readouts matched that script: 3 November shows +16 min 22 s, declination −14.83° and solar noon 11:43:38 (12:43:38 at longitude −15); 11 February shows −14 min 12 s; 21 June shows +23.45°. The browser showed no console errors, and the year curve and the analemma both drew. At 375 px wide the page has no horizontal scroll (page width 375) and the two charts fill 343 px.
Dark theme: forced by setting the theme attribute, which switched the page colours; I could not get a screenshot of it, so the look of the dark theme is not checked by eye. Also not checked: real sun times at real places (no sun-position data is used, so local noon can differ by a few minutes from the formula, and the time zone is typed in, not looked up); daylight saving; and the series' exact error beyond the points I remember. The historic reasons for the uneven day are from memory.