completed preliminary interactive version using Canvas