diff --git a/node_modules/material-design-lite/dist/components/animation/demo.html b/node_modules/material-design-lite/dist/components/animation/demo.html
new file mode 100644
index 0000000..d74309f
--- /dev/null
+++ b/node_modules/material-design-lite/dist/components/animation/demo.html
@@ -0,0 +1,256 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="description" content="A front-end template that helps you build fast, modern mobile web apps.">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <title>animation test</title>
+
+        <!-- Fonts -->
+    <link href='https://fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en' rel='stylesheet' type='text/css'>
+    <link href="https://fonts.googleapis.com/icon?family=Material+Icons"
+      rel="stylesheet">
+
+    <!-- Page styles -->
+    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/0.0.1/prism.min.css">
+    <link rel="stylesheet" href="../../material.min.css">
+    <link rel="stylesheet" href="../../components/demos.css">
+    <script src="../../material.min.js"></script>
+
+    
+    <style>
+      /**
+ * Copyright 2015 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.demo-animation {
+  height: 200px;
+  width: 300px;
+  padding: 0;
+  background: none;
+}
+
+.demo-animation__container {
+  position: relative;
+  overflow: hidden;
+  margin: 0;
+  padding: 0;
+  width: 100%;
+  height: 100%;
+  text-align: center;
+  background-color: #ddd;
+}
+
+.demo-animation__container-foreground {
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  left: 0;
+  top: 0;
+  z-index: 100;
+}
+
+.demo-animation__container-background {
+  line-height: 200px;
+  z-index: -100;
+}
+
+/* Outside the view, on the left.
+   We leave the view when moving to this state, so we use fast-out-linear-in. */
+.demo-animation--position-0 {
+  left: -102px;
+}
+
+/* Left side.
+   We enter the view when moving to this state, so we use linear-out-slow-in. */
+.demo-animation--position-1 {
+  left: 20px;
+}
+
+/* Right side.
+   We're always visible when moving to this state, so we use default. */
+.demo-animation--position-2 {
+  left: 180px;
+}
+
+/* Outside the view, on the right.
+   We leave the view when moving to this state, so we use fast-out-linear-in. */
+.demo-animation--position-3 {
+  left: 302px;
+}
+
+/* Right side.
+   We enter the view when moving to this state, so we use linear-out-slow-in. */
+.demo-animation--position-4 {
+  left: 180px;
+}
+
+/* Left side.
+   We're always visible when moving to this state, so we use default. */
+.demo-animation--position-5 {
+  left: 20px;
+}
+
+.demo-animation__movable {
+  background-color: red;
+  border-radius: 2px;
+  display: block;
+  height: 100px;
+  width: 100px;
+  position: absolute;
+  top: 50px;
+  transition-property: left;
+  transition-duration: 0.2s;
+}
+
+    </style>
+
+  </head>
+  <body>
+
+    <div style="padding-top: 24px;">
+      
+        
+    <div class="demo-preview-block demo-animation demo-js-animation">
+      <div class="demo-animation__container">
+        <div class="demo-animation__container-background">Click me to animate</div>
+        <div class="demo-animation__container-foreground"></div>
+        <div class="demo-animation__movable demo-animation--position-0 mdl-shadow--2dp"></div>
+      </div>
+    </div>
+
+      
+    </div>
+    <!-- Built with love using Material Design Lite -->
+
+    
+    <script>
+      /**
+ * @license
+ * Copyright 2015 Google Inc. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Class constructor for Animation MDL component.
+ * Implements MDL component design pattern defined at:
+ * https://github.com/jasonmayes/mdl-component-design-pattern
+ * @param {HTMLElement} element The element that will be upgraded.
+ */
+function DemoAnimation(element) {
+  'use strict';
+
+  this.element_ = element;
+  this.position_ = this.Constant_.STARTING_POSITION;
+  this.movable_ = this.element_.querySelector('.' + this.CssClasses_.MOVABLE);
+  // Initialize instance.
+  this.init();
+}
+
+/**
+ * Store strings for class names defined by this component that are used in
+ * JavaScript. This allows us to simply change it in one place should we
+ * decide to modify at a later date.
+ * @enum {string}
+ * @private
+ */
+DemoAnimation.prototype.CssClasses_ = {
+  MOVABLE: 'demo-animation__movable',
+  POSITION_PREFIX: 'demo-animation--position-',
+  FAST_OUT_SLOW_IN: 'mdl-animation--fast-out-slow-in',
+  LINEAR_OUT_SLOW_IN: 'mdl-animation--linear-out-slow-in',
+  FAST_OUT_LINEAR_IN: 'mdl-animation--fast-out-linear-in'
+};
+
+/**
+ * Store constants in one place so they can be updated easily.
+ * @enum {string | number}
+ * @private
+ */
+DemoAnimation.prototype.Constant_ = {
+  STARTING_POSITION: 0,
+  // Which animation to use for which state. Check demo.css for an explanation.
+  ANIMATIONS: [
+    DemoAnimation.prototype.CssClasses_.FAST_OUT_LINEAR_IN,
+    DemoAnimation.prototype.CssClasses_.LINEAR_OUT_SLOW_IN,
+    DemoAnimation.prototype.CssClasses_.FAST_OUT_SLOW_IN,
+    DemoAnimation.prototype.CssClasses_.FAST_OUT_LINEAR_IN,
+    DemoAnimation.prototype.CssClasses_.LINEAR_OUT_SLOW_IN,
+    DemoAnimation.prototype.CssClasses_.FAST_OUT_SLOW_IN
+  ]
+};
+
+/**
+ * Handle click of element.
+ * @param {Event} event The event that fired.
+ * @private
+ */
+DemoAnimation.prototype.handleClick_ = function(event) {
+  'use strict';
+
+  this.movable_.classList.remove(this.CssClasses_.POSITION_PREFIX +
+      this.position_);
+  this.movable_.classList.remove(this.Constant_.ANIMATIONS[this.position_]);
+
+  this.position_++;
+  if (this.position_ > 5) {
+    this.position_ = 0;
+  }
+
+  this.movable_.classList.add(this.Constant_.ANIMATIONS[this.position_]);
+  this.movable_.classList.add(this.CssClasses_.POSITION_PREFIX +
+      this.position_);
+};
+
+/**
+ * Initialize element.
+ */
+DemoAnimation.prototype.init = function() {
+  'use strict';
+
+  if (this.element_) {
+    if (!this.movable_) {
+      console.error('Was expecting to find an element with class name ' +
+          this.CssClasses_.MOVABLE + ' inside of: ', this.element_);
+      return;
+    }
+
+    this.element_.addEventListener('click', this.handleClick_.bind(this));
+  }
+};
+
+// The component registers itself. It can assume componentHandler is available
+// in the global scope.
+componentHandler.register({
+  constructor: DemoAnimation,
+  classAsString: 'DemoAnimation',
+  cssClass: 'demo-js-animation'
+});
+
+    </script>
+  </body>
+</html>
