diff --git a/index.html b/index.html
index a70ad6a..2779462 100644
--- a/index.html
+++ b/index.html
@@ -19,8 +19,7 @@
   <link rel="stylesheet" href="neon.css">
   <!-- Script: Make my navbar transparent when the document is scrolled to top -->
   <script src="js/navbar-ontop.js"></script>
-  <!-- Script: Animated entrance -->
-  <script src="js/animate-in.js"></script>
+  
   <link rel="stylesheet" href="css/animations.css">
   <link rel="stylesheet" href="css/style.css">
   <link rel="stylesheet" href="css/table.css">
diff --git a/js/animate-in.js b/js/animate-in.js
deleted file mode 100644
index 9f3e66c..0000000
--- a/js/animate-in.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * animate-in.js 1.0.0
- * Animate elements on entrance
- * 
- * Usage:
- *
- * Make sure to add this to the <head> of your page to avoid flickering on load 
- * Based on https://andycaygill.github.io/scroll-entrance/
- */
-(function() {
-
-	//Set up defaults
-  	var duration = "1000";
-  	var heightOffset = 100;
-
-
-    // document.write("<style id='temp-animate-in'>*[class^='animate-in'], *[class*=' animate-in'] {display:none}</style>")
-
-  	function isElementVisible(elem) {
-
-      var rect = elem.getBoundingClientRect();
-
-      //Return true if any of the following conditions are met:
-      return (
-        // The top is in view: the top is more than 0 and less than the window height (the top of the element is in view)
-        ( (rect.top + heightOffset) >= 0 && (rect.top + heightOffset) <= window.innerHeight ) || 
-        // The bottom is in view: bottom position is greater than 0 and greater than the window height
-        ( (rect.bottom + heightOffset) >= 0 && (rect.bottom + heightOffset) <= window.innerHeight ) ||
-        // The top is above the viewport and the bottom is below the viewport
-        ( (rect.top + heightOffset) < 0 && (rect.bottom + heightOffset) > window.innerHeight )
-      )
-
-  	}
-
-
-	function update() {
-		var nodes = document.querySelectorAll("*:not(.animate-in-done)[class^='animate-in'], *:not(.animate-in-done)[class*=' animate-in']")
-
-		for (var i = 0; i < nodes.length; i++) {
-			if (isElementVisible(nodes[i])) {
-				nodes[i].classList.remove("out-of-viewport")
-				nodes[i].classList.add("animate-in-done")
-			} else {
-				nodes[i].classList.add("out-of-viewport")
-  		}
-  	}
-  }
-
-	document.addEventListener("DOMContentLoaded", function(event) {
-	  update()
-    // setTimeout(function() {
-    //   document.querySelector("#temp-animate-in").remove()
-    // })
-	});
-
-	window.addEventListener("scroll", function() {
-	  update()			
-  })
-
-})();
-
