.node path.success {
  fill: #729FCF;
}

.node path.unstable {
  fill: #FCE94F;
}

.node path.failure {
  fill: #EF2929;
}

.node path.aborted {
  fill: #ABABAB;
}

.node path.pending {
  fill: #ABABAB;
}

.node text.better {
  fill: #29EF29;
}

.node text.worse {
  fill: #EF2929;
}

.node circle {
  fill: white;
}

.node {
  font: 15px sans-serif;
}

@-webkit-keyframes blink {
    from { opacity: 1.0 }
    to { opacity: 0.0 }
 }

.node path.pending {
    -webkit-animation-name: blink;
    -webkit-animation-duration: 1s;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-direction: alternate;
}

.link {
  fill: none;
  stroke: #ccc;
  stroke-width: 1.5;
}

.node path.success {
  fill: #729FCF;
}

.node path.unstable {
  fill: #FCE94F;
}

.node path.failure {
  fill: #EF2929;
}

.node path.aborted {
  fill: #ABABAB;
}

.node path.pending {
  fill: #ABABAB;
}

.node text.better {
  fill: #29EF29;
}

.node text.worse {
  fill: #EF2929;
}

.node circle {
  fill: white;
}

.node {
  font: 15px sans-serif;
}

@-webkit-keyframes blink {
    from { opacity: 1.0 }
    to { opacity: 0.0 }
}

@-moz-keyframes blink {
    from { opacity: 1.0 }
    to { opacity: 0.0 }
}

@keyframes blink {
    from { opacity: 1.0 }
    to { opacity: 0.0 }
}

.node path.pending {
    -webkit-animation-name: blink;
    -webkit-animation-duration: 1s;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-direction: alternate;
    -moz-animation-name: blink;
    -moz-animation-duration: 1s;
    -moz-animation-iteration-count: infinite;
    -moz-animation-direction: alternate;
    animation-name: blink;
    animation-duration: 1s;
    animation-iteration-count: infinite;
    animation-direction: alternate;
}

.link {
  fill: none;
  stroke: #ccc;
  stroke-width: 1.5;
}

Add support for Firefox Animations
Add support for Firefox Animations
