anchor.diff:      return $('<div>', {'id':'hit-box'}).append($hitImg).append($hitCount);
     };
   
  -  const lastEventPredictedCorrectly = () => {
  -    const last = counts.lastEvent;
  -    return last && last.predicted != 'none' && last.predicted == last.colour;
  +  const predictedIncorrectly = (light) => prediction(light) && light.predicted != light.colour;
  +
  +  const predictedCorrectly   = (light) => prediction(light) && light.predicted == light.colour;
  +
  +  const prediction = (light) => light.prediction != 'none';
  +
  +  const lastLight = () => {
  +    const last = counts.lastLight;
  +    return last ? last : { predicted:'none' }
     };
   
     const isRag = (s) => ['red','amber','green'].includes(s);
  
positive.code:     const colour = event.colour;
      const predicted = event.predicted;
      counts[colour] += 1;
      counts.lastEvent = event;
      // Don't count timed_out or faulty as incorrect predictions.
      if (predicted && predicted != 'none' && isRag(colour)) {
        if (colour === predicted) {
  
negative.code:   const totalCount = () => {
      const total = counts.red + counts.amber + counts.green + counts.timed_out;
      return $('<div>', {
        'class': `traffic-light-count ${lastColour()}`,
        'data-tip': 'traffic_light_count',
        'data-red-count': counts.red,
        'data-amber-count': counts.amber,
  