Project import generated by Copybara.

GitOrigin-RevId: 63746295f1a5ab5a619056791995793d65529e62
diff --git a/node_modules/material-design-lite/src/INTRODUCTION.md b/node_modules/material-design-lite/src/INTRODUCTION.md
new file mode 100755
index 0000000..e27dfb2
--- /dev/null
+++ b/node_modules/material-design-lite/src/INTRODUCTION.md
@@ -0,0 +1,44 @@
+# Material Design Lite
+
+## Introduction
+**Material Design Light (MDL)** is a library of components for web developers based on Google's **Material Design** philosophy: "A visual language for our users that synthesizes the classic principles of good design with the innovation and possibility of technology and science." Understanding the goals and principles of Material Design is critical to the proper use of the MDL components. If you have not yet read the [Material Design Introduction](http://www.google.com/design/spec/material-design/introduction.html), you should do so before attempting to use the components.
+
+The MDL components are created with CSS, JavaScript, and HTML. You can use the components to construct web pages and web apps that are attractive, consistent, and functional. Pages developed with MDL will adhere to modern web design principles like browser portability, device independence, and graceful degradation.
+
+The MDL component library includes new versions of common user interface controls such as buttons, check boxes, and text fields, adapted to follow Material Design concepts. The library also includes enhanced and specialized features like cards, column layouts, sliders, spinners, tabs, typography, and more.
+
+MDL is free to download and use, and may be used with or without any build library or development environment (such as [Material Design Lite](http://www.getmdl.io/)). It is a cross-browser, cross-OS web developer's toolkit that can be used by anyone who wants to write more productive, portable, and — most importantly — usable web pages.
+
+## Getting started
+
+### Get the components
+To obtain the components, clone or download the [GitHub MDL repository](https://github.com/google/material-design-lite). Copy the entire package (the top-level folder and everything below it) to the project folder where you will write your HTML pages. This ensures that your project can access all of MDL's components and assets, and that you always have the original files for reference in case you break something. :-)
+
+### Include the master CSS and JavaScript
+In each HTML page in your project, include the minified (compressed) CSS and JavaScript files using standard relative-path references and the Material Icon font. This example assumes that a copy of the MDL package folders resides in your project folder.
+
+
+```html
+<link rel="stylesheet" href="css/material.min.css">
+<script src="js/material.min.js"></script>
+<link rel="stylesheet" href="//fonts.googleapis.com/icon?family=Material+Icons">
+```
+
+That's it! You are now ready to use the MDL components.
+
+### Use the components
+In general, follow these basic steps to use an MDL component in your HTML page.
+
+1. Start with a standard HTML element, such as `<button>`, `<div>`, or `<ul>`, depending on the MDL component you want to use. This establishes the element in the page and readies it for MDL modification.<br><br>
+2. Add one or more MDL-specific CSS classes to the element, such as `mdl-button` or   `mdl-tabs__panel` again depending on the component. The classes apply the MDL enhancements to the element and effectively turn it into an MDL component.<br><br>
+3. View the page, preferably in multiple browsers on multiple devices, to ensure that the component looks and behaves as expected.
+
+>**A note about HTML elements and MDL CSS classes**
+>Material Design Lite uses CSS *independent classes*, which can apply to any HTML element, to construct components. For some components, you can use almost any element. For other components, some elements give better visual or behavioral performance than others. The examples in each component's README file use elements that perform well as that component. If you must use elements other than those shown in the examples, we encourage you to experiment to find the best combination of HTML elements and MDL CSS classes for your application.
+
+## What's next?
+Detailed instructions for using the components, including MDL classes and their effects, coding considerations, and configuration options, can be found in each component's `README.md` file. Working examples using various options are in each component's `demo.html` page.
+
+## License
+
+Copyright Google, 2015. Licensed under an Apache-2 license.
diff --git a/node_modules/material-design-lite/src/_color-definitions.scss b/node_modules/material-design-lite/src/_color-definitions.scss
new file mode 100644
index 0000000..10b3646
--- /dev/null
+++ b/node_modules/material-design-lite/src/_color-definitions.scss
@@ -0,0 +1,599 @@
+/**
+ * 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.
+ */
+
+/* ==========  Color Palettes  ========== */
+
+// Color order: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900, A100, A200,
+// A400, A700.
+
+$palette-red:
+"255,235,238"
+"255,205,210"
+"239,154,154"
+"229,115,115"
+"239,83,80"
+"244,67,54"
+"229,57,53"
+"211,47,47"
+"198,40,40"
+"183,28,28"
+"255,138,128"
+"255,82,82"
+"255,23,68"
+"213,0,0";
+
+$palette-red-50: nth($palette-red, 1);
+$palette-red-100: nth($palette-red, 2);
+$palette-red-200: nth($palette-red, 3);
+$palette-red-300: nth($palette-red, 4);
+$palette-red-400: nth($palette-red, 5);
+$palette-red-500: nth($palette-red, 6);
+$palette-red-600: nth($palette-red, 7);
+$palette-red-700: nth($palette-red, 8);
+$palette-red-800: nth($palette-red, 9);
+$palette-red-900: nth($palette-red, 10);
+$palette-red-A100: nth($palette-red, 11);
+$palette-red-A200: nth($palette-red, 12);
+$palette-red-A400: nth($palette-red, 13);
+$palette-red-A700: nth($palette-red, 14);
+
+$palette-pink:
+"252,228,236"
+"248,187,208"
+"244,143,177"
+"240,98,146"
+"236,64,122"
+"233,30,99"
+"216,27,96"
+"194,24,91"
+"173,20,87"
+"136,14,79"
+"255,128,171"
+"255,64,129"
+"245,0,87"
+"197,17,98";
+
+$palette-pink-50: nth($palette-pink, 1);
+$palette-pink-100: nth($palette-pink, 2);
+$palette-pink-200: nth($palette-pink, 3);
+$palette-pink-300: nth($palette-pink, 4);
+$palette-pink-400: nth($palette-pink, 5);
+$palette-pink-500: nth($palette-pink, 6);
+$palette-pink-600: nth($palette-pink, 7);
+$palette-pink-700: nth($palette-pink, 8);
+$palette-pink-800: nth($palette-pink, 9);
+$palette-pink-900: nth($palette-pink, 10);
+$palette-pink-A100: nth($palette-pink, 11);
+$palette-pink-A200: nth($palette-pink, 12);
+$palette-pink-A400: nth($palette-pink, 13);
+$palette-pink-A700: nth($palette-pink, 14);
+
+$palette-purple:
+"243,229,245"
+"225,190,231"
+"206,147,216"
+"186,104,200"
+"171,71,188"
+"156,39,176"
+"142,36,170"
+"123,31,162"
+"106,27,154"
+"74,20,140"
+"234,128,252"
+"224,64,251"
+"213,0,249"
+"170,0,255";
+
+$palette-purple-50: nth($palette-purple, 1);
+$palette-purple-100: nth($palette-purple, 2);
+$palette-purple-200: nth($palette-purple, 3);
+$palette-purple-300: nth($palette-purple, 4);
+$palette-purple-400: nth($palette-purple, 5);
+$palette-purple-500: nth($palette-purple, 6);
+$palette-purple-600: nth($palette-purple, 7);
+$palette-purple-700: nth($palette-purple, 8);
+$palette-purple-800: nth($palette-purple, 9);
+$palette-purple-900: nth($palette-purple, 10);
+$palette-purple-A100: nth($palette-purple, 11);
+$palette-purple-A200: nth($palette-purple, 12);
+$palette-purple-A400: nth($palette-purple, 13);
+$palette-purple-A700: nth($palette-purple, 14);
+
+$palette-deep-purple:
+"237,231,246"
+"209,196,233"
+"179,157,219"
+"149,117,205"
+"126,87,194"
+"103,58,183"
+"94,53,177"
+"81,45,168"
+"69,39,160"
+"49,27,146"
+"179,136,255"
+"124,77,255"
+"101,31,255"
+"98,0,234";
+
+$palette-deep-purple-50: nth($palette-deep-purple, 1);
+$palette-deep-purple-100: nth($palette-deep-purple, 2);
+$palette-deep-purple-200: nth($palette-deep-purple, 3);
+$palette-deep-purple-300: nth($palette-deep-purple, 4);
+$palette-deep-purple-400: nth($palette-deep-purple, 5);
+$palette-deep-purple-500: nth($palette-deep-purple, 6);
+$palette-deep-purple-600: nth($palette-deep-purple, 7);
+$palette-deep-purple-700: nth($palette-deep-purple, 8);
+$palette-deep-purple-800: nth($palette-deep-purple, 9);
+$palette-deep-purple-900: nth($palette-deep-purple, 10);
+$palette-deep-purple-A100: nth($palette-deep-purple, 11);
+$palette-deep-purple-A200: nth($palette-deep-purple, 12);
+$palette-deep-purple-A400: nth($palette-deep-purple, 13);
+$palette-deep-purple-A700: nth($palette-deep-purple, 14);
+
+$palette-indigo:
+"232,234,246"
+"197,202,233"
+"159,168,218"
+"121,134,203"
+"92,107,192"
+"63,81,181"
+"57,73,171"
+"48,63,159"
+"40,53,147"
+"26,35,126"
+"140,158,255"
+"83,109,254"
+"61,90,254"
+"48,79,254";
+
+$palette-indigo-50: nth($palette-indigo, 1);
+$palette-indigo-100: nth($palette-indigo, 2);
+$palette-indigo-200: nth($palette-indigo, 3);
+$palette-indigo-300: nth($palette-indigo, 4);
+$palette-indigo-400: nth($palette-indigo, 5);
+$palette-indigo-500: nth($palette-indigo, 6);
+$palette-indigo-600: nth($palette-indigo, 7);
+$palette-indigo-700: nth($palette-indigo, 8);
+$palette-indigo-800: nth($palette-indigo, 9);
+$palette-indigo-900: nth($palette-indigo, 10);
+$palette-indigo-A100: nth($palette-indigo, 11);
+$palette-indigo-A200: nth($palette-indigo, 12);
+$palette-indigo-A400: nth($palette-indigo, 13);
+$palette-indigo-A700: nth($palette-indigo, 14);
+
+$palette-blue:
+"227,242,253"
+"187,222,251"
+"144,202,249"
+"100,181,246"
+"66,165,245"
+"33,150,243"
+"30,136,229"
+"25,118,210"
+"21,101,192"
+"13,71,161"
+"130,177,255"
+"68,138,255"
+"41,121,255"
+"41,98,255";
+
+$palette-blue-50: nth($palette-blue, 1);
+$palette-blue-100: nth($palette-blue, 2);
+$palette-blue-200: nth($palette-blue, 3);
+$palette-blue-300: nth($palette-blue, 4);
+$palette-blue-400: nth($palette-blue, 5);
+$palette-blue-500: nth($palette-blue, 6);
+$palette-blue-600: nth($palette-blue, 7);
+$palette-blue-700: nth($palette-blue, 8);
+$palette-blue-800: nth($palette-blue, 9);
+$palette-blue-900: nth($palette-blue, 10);
+$palette-blue-A100: nth($palette-blue, 11);
+$palette-blue-A200: nth($palette-blue, 12);
+$palette-blue-A400: nth($palette-blue, 13);
+$palette-blue-A700: nth($palette-blue, 14);
+
+$palette-light-blue:
+"225,245,254"
+"179,229,252"
+"129,212,250"
+"79,195,247"
+"41,182,246"
+"3,169,244"
+"3,155,229"
+"2,136,209"
+"2,119,189"
+"1,87,155"
+"128,216,255"
+"64,196,255"
+"0,176,255"
+"0,145,234";
+
+$palette-light-blue-50: nth($palette-light-blue, 1);
+$palette-light-blue-100: nth($palette-light-blue, 2);
+$palette-light-blue-200: nth($palette-light-blue, 3);
+$palette-light-blue-300: nth($palette-light-blue, 4);
+$palette-light-blue-400: nth($palette-light-blue, 5);
+$palette-light-blue-500: nth($palette-light-blue, 6);
+$palette-light-blue-600: nth($palette-light-blue, 7);
+$palette-light-blue-700: nth($palette-light-blue, 8);
+$palette-light-blue-800: nth($palette-light-blue, 9);
+$palette-light-blue-900: nth($palette-light-blue, 10);
+$palette-light-blue-A100: nth($palette-light-blue, 11);
+$palette-light-blue-A200: nth($palette-light-blue, 12);
+$palette-light-blue-A400: nth($palette-light-blue, 13);
+$palette-light-blue-A700: nth($palette-light-blue, 14);
+
+$palette-cyan:
+"224,247,250"
+"178,235,242"
+"128,222,234"
+"77,208,225"
+"38,198,218"
+"0,188,212"
+"0,172,193"
+"0,151,167"
+"0,131,143"
+"0,96,100"
+"132,255,255"
+"24,255,255"
+"0,229,255"
+"0,184,212";
+
+$palette-cyan-50: nth($palette-cyan, 1);
+$palette-cyan-100: nth($palette-cyan, 2);
+$palette-cyan-200: nth($palette-cyan, 3);
+$palette-cyan-300: nth($palette-cyan, 4);
+$palette-cyan-400: nth($palette-cyan, 5);
+$palette-cyan-500: nth($palette-cyan, 6);
+$palette-cyan-600: nth($palette-cyan, 7);
+$palette-cyan-700: nth($palette-cyan, 8);
+$palette-cyan-800: nth($palette-cyan, 9);
+$palette-cyan-900: nth($palette-cyan, 10);
+$palette-cyan-A100: nth($palette-cyan, 11);
+$palette-cyan-A200: nth($palette-cyan, 12);
+$palette-cyan-A400: nth($palette-cyan, 13);
+$palette-cyan-A700: nth($palette-cyan, 14);
+
+$palette-teal:
+"224,242,241"
+"178,223,219"
+"128,203,196"
+"77,182,172"
+"38,166,154"
+"0,150,136"
+"0,137,123"
+"0,121,107"
+"0,105,92"
+"0,77,64"
+"167,255,235"
+"100,255,218"
+"29,233,182"
+"0,191,165";
+
+$palette-teal-50: nth($palette-teal, 1);
+$palette-teal-100: nth($palette-teal, 2);
+$palette-teal-200: nth($palette-teal, 3);
+$palette-teal-300: nth($palette-teal, 4);
+$palette-teal-400: nth($palette-teal, 5);
+$palette-teal-500: nth($palette-teal, 6);
+$palette-teal-600: nth($palette-teal, 7);
+$palette-teal-700: nth($palette-teal, 8);
+$palette-teal-800: nth($palette-teal, 9);
+$palette-teal-900: nth($palette-teal, 10);
+$palette-teal-A100: nth($palette-teal, 11);
+$palette-teal-A200: nth($palette-teal, 12);
+$palette-teal-A400: nth($palette-teal, 13);
+$palette-teal-A700: nth($palette-teal, 14);
+
+$palette-green:
+"232,245,233"
+"200,230,201"
+"165,214,167"
+"129,199,132"
+"102,187,106"
+"76,175,80"
+"67,160,71"
+"56,142,60"
+"46,125,50"
+"27,94,32"
+"185,246,202"
+"105,240,174"
+"0,230,118"
+"0,200,83";
+
+$palette-green-50: nth($palette-green, 1);
+$palette-green-100: nth($palette-green, 2);
+$palette-green-200: nth($palette-green, 3);
+$palette-green-300: nth($palette-green, 4);
+$palette-green-400: nth($palette-green, 5);
+$palette-green-500: nth($palette-green, 6);
+$palette-green-600: nth($palette-green, 7);
+$palette-green-700: nth($palette-green, 8);
+$palette-green-800: nth($palette-green, 9);
+$palette-green-900: nth($palette-green, 10);
+$palette-green-A100: nth($palette-green, 11);
+$palette-green-A200: nth($palette-green, 12);
+$palette-green-A400: nth($palette-green, 13);
+$palette-green-A700: nth($palette-green, 14);
+
+$palette-light-green:
+"241,248,233"
+"220,237,200"
+"197,225,165"
+"174,213,129"
+"156,204,101"
+"139,195,74"
+"124,179,66"
+"104,159,56"
+"85,139,47"
+"51,105,30"
+"204,255,144"
+"178,255,89"
+"118,255,3"
+"100,221,23";
+
+$palette-light-green-50: nth($palette-light-green, 1);
+$palette-light-green-100: nth($palette-light-green, 2);
+$palette-light-green-200: nth($palette-light-green, 3);
+$palette-light-green-300: nth($palette-light-green, 4);
+$palette-light-green-400: nth($palette-light-green, 5);
+$palette-light-green-500: nth($palette-light-green, 6);
+$palette-light-green-600: nth($palette-light-green, 7);
+$palette-light-green-700: nth($palette-light-green, 8);
+$palette-light-green-800: nth($palette-light-green, 9);
+$palette-light-green-900: nth($palette-light-green, 10);
+$palette-light-green-A100: nth($palette-light-green, 11);
+$palette-light-green-A200: nth($palette-light-green, 12);
+$palette-light-green-A400: nth($palette-light-green, 13);
+$palette-light-green-A700: nth($palette-light-green, 14);
+
+$palette-lime:
+"249,251,231"
+"240,244,195"
+"230,238,156"
+"220,231,117"
+"212,225,87"
+"205,220,57"
+"192,202,51"
+"175,180,43"
+"158,157,36"
+"130,119,23"
+"244,255,129"
+"238,255,65"
+"198,255,0"
+"174,234,0";
+
+$palette-lime-50: nth($palette-lime, 1);
+$palette-lime-100: nth($palette-lime, 2);
+$palette-lime-200: nth($palette-lime, 3);
+$palette-lime-300: nth($palette-lime, 4);
+$palette-lime-400: nth($palette-lime, 5);
+$palette-lime-500: nth($palette-lime, 6);
+$palette-lime-600: nth($palette-lime, 7);
+$palette-lime-700: nth($palette-lime, 8);
+$palette-lime-800: nth($palette-lime, 9);
+$palette-lime-900: nth($palette-lime, 10);
+$palette-lime-A100: nth($palette-lime, 11);
+$palette-lime-A200: nth($palette-lime, 12);
+$palette-lime-A400: nth($palette-lime, 13);
+$palette-lime-A700: nth($palette-lime, 14);
+
+$palette-yellow:
+"255,253,231"
+"255,249,196"
+"255,245,157"
+"255,241,118"
+"255,238,88"
+"255,235,59"
+"253,216,53"
+"251,192,45"
+"249,168,37"
+"245,127,23"
+"255,255,141"
+"255,255,0"
+"255,234,0"
+"255,214,0";
+
+$palette-yellow-50: nth($palette-yellow, 1);
+$palette-yellow-100: nth($palette-yellow, 2);
+$palette-yellow-200: nth($palette-yellow, 3);
+$palette-yellow-300: nth($palette-yellow, 4);
+$palette-yellow-400: nth($palette-yellow, 5);
+$palette-yellow-500: nth($palette-yellow, 6);
+$palette-yellow-600: nth($palette-yellow, 7);
+$palette-yellow-700: nth($palette-yellow, 8);
+$palette-yellow-800: nth($palette-yellow, 9);
+$palette-yellow-900: nth($palette-yellow, 10);
+$palette-yellow-A100: nth($palette-yellow, 11);
+$palette-yellow-A200: nth($palette-yellow, 12);
+$palette-yellow-A400: nth($palette-yellow, 13);
+$palette-yellow-A700: nth($palette-yellow, 14);
+
+$palette-amber:
+"255,248,225"
+"255,236,179"
+"255,224,130"
+"255,213,79"
+"255,202,40"
+"255,193,7"
+"255,179,0"
+"255,160,0"
+"255,143,0"
+"255,111,0"
+"255,229,127"
+"255,215,64"
+"255,196,0"
+"255,171,0";
+
+$palette-amber-50: nth($palette-amber, 1);
+$palette-amber-100: nth($palette-amber, 2);
+$palette-amber-200: nth($palette-amber, 3);
+$palette-amber-300: nth($palette-amber, 4);
+$palette-amber-400: nth($palette-amber, 5);
+$palette-amber-500: nth($palette-amber, 6);
+$palette-amber-600: nth($palette-amber, 7);
+$palette-amber-700: nth($palette-amber, 8);
+$palette-amber-800: nth($palette-amber, 9);
+$palette-amber-900: nth($palette-amber, 10);
+$palette-amber-A100: nth($palette-amber, 11);
+$palette-amber-A200: nth($palette-amber, 12);
+$palette-amber-A400: nth($palette-amber, 13);
+$palette-amber-A700: nth($palette-amber, 14);
+
+$palette-orange:
+"255,243,224"
+"255,224,178"
+"255,204,128"
+"255,183,77"
+"255,167,38"
+"255,152,0"
+"251,140,0"
+"245,124,0"
+"239,108,0"
+"230,81,0"
+"255,209,128"
+"255,171,64"
+"255,145,0"
+"255,109,0";
+
+$palette-orange-50: nth($palette-orange, 1);
+$palette-orange-100: nth($palette-orange, 2);
+$palette-orange-200: nth($palette-orange, 3);
+$palette-orange-300: nth($palette-orange, 4);
+$palette-orange-400: nth($palette-orange, 5);
+$palette-orange-500: nth($palette-orange, 6);
+$palette-orange-600: nth($palette-orange, 7);
+$palette-orange-700: nth($palette-orange, 8);
+$palette-orange-800: nth($palette-orange, 9);
+$palette-orange-900: nth($palette-orange, 10);
+$palette-orange-A100: nth($palette-orange, 11);
+$palette-orange-A200: nth($palette-orange, 12);
+$palette-orange-A400: nth($palette-orange, 13);
+$palette-orange-A700: nth($palette-orange, 14);
+
+$palette-deep-orange:
+"251,233,231"
+"255,204,188"
+"255,171,145"
+"255,138,101"
+"255,112,67"
+"255,87,34"
+"244,81,30"
+"230,74,25"
+"216,67,21"
+"191,54,12"
+"255,158,128"
+"255,110,64"
+"255,61,0"
+"221,44,0";
+
+$palette-deep-orange-50: nth($palette-deep-orange, 1);
+$palette-deep-orange-100: nth($palette-deep-orange, 2);
+$palette-deep-orange-200: nth($palette-deep-orange, 3);
+$palette-deep-orange-300: nth($palette-deep-orange, 4);
+$palette-deep-orange-400: nth($palette-deep-orange, 5);
+$palette-deep-orange-500: nth($palette-deep-orange, 6);
+$palette-deep-orange-600: nth($palette-deep-orange, 7);
+$palette-deep-orange-700: nth($palette-deep-orange, 8);
+$palette-deep-orange-800: nth($palette-deep-orange, 9);
+$palette-deep-orange-900: nth($palette-deep-orange, 10);
+$palette-deep-orange-A100: nth($palette-deep-orange, 11);
+$palette-deep-orange-A200: nth($palette-deep-orange, 12);
+$palette-deep-orange-A400: nth($palette-deep-orange, 13);
+$palette-deep-orange-A700: nth($palette-deep-orange, 14);
+
+
+// Color order: 50, 100, 200, 300, 400, 500, 600, 700, 800, 900.
+
+$palette-brown:
+"239,235,233"
+"215,204,200"
+"188,170,164"
+"161,136,127"
+"141,110,99"
+"121,85,72"
+"109,76,65"
+"93,64,55"
+"78,52,46"
+"62,39,35";
+
+$palette-brown-50: nth($palette-brown, 1);
+$palette-brown-100: nth($palette-brown, 2);
+$palette-brown-200: nth($palette-brown, 3);
+$palette-brown-300: nth($palette-brown, 4);
+$palette-brown-400: nth($palette-brown, 5);
+$palette-brown-500: nth($palette-brown, 6);
+$palette-brown-600: nth($palette-brown, 7);
+$palette-brown-700: nth($palette-brown, 8);
+$palette-brown-800: nth($palette-brown, 9);
+$palette-brown-900: nth($palette-brown, 10);
+
+$palette-grey:
+"250,250,250"
+"245,245,245"
+"238,238,238"
+"224,224,224"
+"189,189,189"
+"158,158,158"
+"117,117,117"
+"97,97,97"
+"66,66,66"
+"33,33,33";
+
+$palette-grey-50: nth($palette-grey, 1);
+$palette-grey-100: nth($palette-grey, 2);
+$palette-grey-200: nth($palette-grey, 3);
+$palette-grey-300: nth($palette-grey, 4);
+$palette-grey-400: nth($palette-grey, 5);
+$palette-grey-500: nth($palette-grey, 6);
+$palette-grey-600: nth($palette-grey, 7);
+$palette-grey-700: nth($palette-grey, 8);
+$palette-grey-800: nth($palette-grey, 9);
+$palette-grey-900: nth($palette-grey, 10);
+
+$palette-blue-grey:
+"236,239,241"
+"207,216,220"
+"176,190,197"
+"144,164,174"
+"120,144,156"
+"96,125,139"
+"84,110,122"
+"69,90,100"
+"55,71,79"
+"38,50,56";
+
+$palette-blue-grey-50: nth($palette-blue-grey, 1);
+$palette-blue-grey-100: nth($palette-blue-grey, 2);
+$palette-blue-grey-200: nth($palette-blue-grey, 3);
+$palette-blue-grey-300: nth($palette-blue-grey, 4);
+$palette-blue-grey-400: nth($palette-blue-grey, 5);
+$palette-blue-grey-500: nth($palette-blue-grey, 6);
+$palette-blue-grey-600: nth($palette-blue-grey, 7);
+$palette-blue-grey-700: nth($palette-blue-grey, 8);
+$palette-blue-grey-800: nth($palette-blue-grey, 9);
+$palette-blue-grey-900: nth($palette-blue-grey, 10);
+
+$color-black: "0,0,0";
+$color-white: "255,255,255";
+
+
+/* colors.scss */
+$styleguide-generate-template: false !default;
+
+// The two possible colors for overlayed text.
+$color-dark-contrast: $color-white !default;
+$color-light-contrast: $color-black !default;
diff --git a/node_modules/material-design-lite/src/_functions.scss b/node_modules/material-design-lite/src/_functions.scss
new file mode 100644
index 0000000..80e7ca4
--- /dev/null
+++ b/node_modules/material-design-lite/src/_functions.scss
@@ -0,0 +1,19 @@
+/**
+ * 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.
+ */
+
+@function strip-units($number) {
+  @return $number / ($number * 0 + 1);
+}
diff --git a/node_modules/material-design-lite/src/_mixins.scss b/node_modules/material-design-lite/src/_mixins.scss
new file mode 100644
index 0000000..858077e
--- /dev/null
+++ b/node_modules/material-design-lite/src/_mixins.scss
@@ -0,0 +1,301 @@
+/**
+ * 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.
+ */
+
+/* Typography */
+
+@mixin typo-preferred-font($usePreferred: true) {
+  @if $usePreferred {
+    font-family: $preferred_font;
+  }
+}
+
+@mixin typo-display-4($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 112px;
+  font-weight: 300;
+  line-height: 1;
+  letter-spacing: -0.04em;
+
+  @if $colorContrast {
+    opacity: 0.54;
+  }
+}
+
+@mixin typo-display-3($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 56px;
+  font-weight: 400;
+  line-height: 1.35;
+  letter-spacing: -0.02em;
+
+  @if $colorContrast {
+    opacity: 0.54;
+  }
+}
+
+@mixin typo-display-2($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 45px;
+  font-weight: 400;
+  line-height: 48px;
+
+  @if $colorContrast {
+    opacity: 0.54;
+  }
+}
+
+@mixin typo-display-1($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 34px;
+  font-weight: 400;
+  line-height: 40px;
+
+  @if $colorContrast {
+    opacity: 0.54;
+  }
+}
+
+@mixin typo-headline($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 24px;
+  font-weight: 400;
+  line-height: 32px;
+  -moz-osx-font-smoothing: grayscale;
+
+  @if $colorContrast {
+    opacity: 0.87;
+  }
+}
+
+@mixin typo-title($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 20px;
+  font-weight: 500;
+  line-height: 1;
+  letter-spacing: 0.02em;
+
+  @if $colorContrast {
+    opacity: 0.87;
+  }
+}
+
+@mixin typo-subhead($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 16px;
+  font-weight: 400;
+  line-height: 24px;
+  letter-spacing: 0.04em;
+
+  @if $colorContrast {
+    opacity: 0.87;
+  }
+}
+
+@mixin typo-subhead-2($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 16px;
+  font-weight: 400;
+  line-height: 28px;
+  letter-spacing: 0.04em;
+
+  @if $colorContrast {
+    opacity: 0.87;
+  }
+}
+
+@mixin typo-body-2($colorContrast: false, $usePreferred: false) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 14px;
+  @if $usePreferred {
+    font-weight: 500;
+  } @else {
+    font-weight: bold;
+  }
+  line-height: 24px;
+  letter-spacing: 0;
+
+  @if $colorContrast {
+    opacity: 0.87;
+  }
+}
+
+@mixin typo-body-1($colorContrast: false, $usePreferred: false) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 14px;
+  font-weight: 400;
+  line-height: 24px;
+  letter-spacing: 0;
+
+  @if $colorContrast {
+    opacity: 0.87;
+  }
+}
+
+@mixin typo-caption($colorContrast: false, $usePreferred: false) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 12px;
+  font-weight: 400;
+  line-height: 1;
+  letter-spacing: 0;
+
+  @if $colorContrast {
+    opacity: 0.54;
+  }
+}
+
+@mixin typo-blockquote($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  position: relative;
+  font-size: 24px;
+  font-weight: 300;
+  font-style: italic;
+  line-height: 1.35;
+  letter-spacing: 0.08em;
+
+  &:before {
+    position: absolute;
+    left: -0.5em;
+    content: '“';
+  }
+
+  &:after {
+    content: '”';
+    margin-left: -0.05em;
+  }
+
+  @if $colorContrast {
+    opacity: 0.54;
+  }
+}
+
+@mixin typo-menu($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 14px;
+  font-weight: 500;
+  line-height: 1;
+  letter-spacing: 0;
+
+  @if $colorContrast {
+    opacity: 0.87;
+  }
+}
+
+@mixin typo-button($colorContrast: false, $usePreferred: true) {
+  @include typo-preferred-font($usePreferred);
+  font-size: 14px;
+  font-weight: 500;
+  text-transform: uppercase;
+  line-height: 1;
+  letter-spacing: 0;
+
+  @if $colorContrast {
+    opacity: 0.87;
+  }
+}
+
+@mixin typo-icon() {
+  font-family: 'Material Icons';
+  font-weight: normal;
+  font-style: normal;
+  font-size: 24px;
+  line-height: 1;
+  letter-spacing: normal;
+  text-transform: none;
+  display: inline-block;
+  word-wrap: normal;
+  font-feature-settings: 'liga';
+  -webkit-font-feature-settings: 'liga';
+  -webkit-font-smoothing: antialiased;
+}
+
+/* Shadows */
+
+// Focus shadow mixin.
+@mixin focus-shadow() {
+  box-shadow: 0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36);
+}
+
+@mixin shadow-2dp() {
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
+              0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),
+              0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
+}
+@mixin shadow-3dp() {
+  box-shadow: 0 3px 4px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
+              0 3px 3px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity),
+              0 1px 8px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity);
+}
+@mixin shadow-4dp() {
+  box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
+              0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),
+              0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);
+}
+@mixin shadow-6dp() {
+  box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity),
+              0 1px 18px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity),
+              0 3px 5px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity);
+}
+@mixin shadow-8dp() {
+  box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $shadow-key-penumbra-opacity),
+              0 3px 14px 2px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),
+              0 5px 5px -3px rgba(0, 0, 0, $shadow-key-umbra-opacity);
+}
+
+@mixin shadow-16dp() {
+  box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $shadow-key-penumbra-opacity),
+              0  6px 30px 5px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),
+              0  8px 10px -5px rgba(0, 0, 0, $shadow-key-umbra-opacity);
+}
+
+@mixin shadow-24dp() {
+  box-shadow: 0  9px 46px  8px rgba(0, 0, 0, $shadow-key-penumbra-opacity),
+              0 11px 15px -7px rgba(0, 0, 0, $shadow-ambient-shadow-opacity),
+              0 24px 38px  3px rgba(0, 0, 0, $shadow-key-umbra-opacity);
+}
+
+/* Animations */
+
+@mixin material-animation-fast-out-slow-in($duration:0.2s) {
+  transition-duration: $duration;
+  transition-timing-function: $animation-curve-fast-out-slow-in;
+}
+
+@mixin material-animation-linear-out-slow-in($duration:0.2s) {
+  transition-duration: $duration;
+  transition-timing-function: $animation-curve-linear-out-slow-in;
+}
+
+@mixin material-animation-fast-out-linear-in($duration:0.2s) {
+  transition-duration: $duration;
+  transition-timing-function: $animation-curve-fast-out-linear-in;
+}
+
+@mixin material-animation-default($duration:0.2s) {
+  transition-duration: $duration;
+  transition-timing-function: $animation-curve-default;
+}
+
+/* Dialog */
+
+@mixin dialog-width($units:5) {
+  @if(type_of($units) != 'number') {
+    @error "The unit given to dialog-width should be a number.";
+  }
+  // 56dp is the base unit width for Dialogs.
+  // With 5 units being the number of units for a mobile device.
+  // https://goo.gl/sK2O5o
+  width: $units * 56px;
+}
diff --git a/node_modules/material-design-lite/src/_variables.scss b/node_modules/material-design-lite/src/_variables.scss
new file mode 100644
index 0000000..78be5a4
--- /dev/null
+++ b/node_modules/material-design-lite/src/_variables.scss
@@ -0,0 +1,592 @@
+/**
+ * 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.
+ */
+
+/*------------------------------------*\
+    $CONTENTS
+\*------------------------------------*/
+/**
+ * STYLE GUIDE VARIABLES------------------Declarations of Sass variables
+ * -----Typography
+ * -----Colors
+ * -----Textfield
+ * -----Switch
+ * -----Spinner
+ * -----Radio
+ * -----Menu
+ * -----List
+ * -----Layout
+ * -----Icon toggles
+ * -----Footer
+ * -----Column
+ * -----Checkbox
+ * -----Card
+ * -----Button
+ * -----Animation
+ * -----Progress
+ * -----Badge
+ * -----Shadows
+ * -----Grid
+ * -----Data table
+ * -----Dialog
+ * -----Snackbar
+ * -----Tooltip
+ * -----Chip
+ *
+ * Even though all variables have the `!default` directive, most of them
+ * should not be changed as they are dependent one another. This can cause
+ * visual distortions (like alignment issues) that are hard to track down
+ * and fix.
+ */
+
+
+/* ==========  TYPOGRAPHY  ========== */
+
+/* We're splitting fonts into "preferred" and "performance" in order to optimize
+   page loading. For important text, such as the body, we want it to load
+   immediately and not wait for the web font load, whereas for other sections,
+   such as headers and titles, we're OK with things taking a bit longer to load.
+   We do have some optional classes and parameters in the mixins, in case you
+   definitely want to make sure you're using the preferred font and don't mind
+   the performance hit.
+   We should be able to improve on this once CSS Font Loading L3 becomes more
+   widely available.
+*/
+$preferred_font: 'Roboto', 'Helvetica', 'Arial', sans-serif !default;
+$performance_font: 'Helvetica', 'Arial', sans-serif !default;
+
+/* ==========  COLORS  ========== */
+
+/**
+*
+* Material design color palettes.
+* @see http://www.google.com/design/spec/style/color.html
+*
+**/
+
+@import "color-definitions";
+@import "functions";
+
+/* ==========  IMAGES  ========== */
+$image_path: '/images' !default;
+
+/* ==========  Color & Themes  ========== */
+
+// Define whether individual color palette items should have classes created.
+// Setting this to true will remove individual color classes for each color in the palettes.
+// To improve overall performance (assuming they aren't used) by:
+// * Saving server bandwidth sending the extra classes
+// * Save client computation against the classes
+// it is RECOMMENDED you set this to true.
+$trim-color-classes: false !default;
+
+// Use color primarily for emphasis. Choose colors that fit with
+// your brand and provide good contrast between visual components.
+$color-primary: $palette-indigo-500 !default;
+$color-primary-dark: $palette-indigo-700 !default;
+$color-accent: $palette-pink-A200 !default;
+
+// Our primary is dark, so use $color-dark-contrast for overlaid text.
+$color-primary-contrast: $color-dark-contrast !default;
+// Our accent is dark, so use $color-dark-contrast for overlaid text.
+$color-accent-contrast: $color-dark-contrast !default;
+
+// Replace all colors with placeholders if we're generating a template.
+@if $styleguide-generate-template == true {
+  $color-primary: '$color-primary';
+  $color-primary-dark: '$color-primary-dark';
+  $color-accent: '$color-accent';
+  $color-primary-contrast: '$color-primary-contrast';
+  $color-accent-contrast: '$color-accent-contrast';
+}
+
+/* ==========  Typography  ========== */
+
+// We use the following default color styles: text-color-primary and
+// text-color-secondary. For light themes, use text-color-primary-inverse
+// and text-color-secondary-inverse.
+
+$text-color-primary: unquote("rgba(#{$color-black}, 0.87)") !default;
+$text-link-color: unquote("rgb(#{$color-accent})") !default;
+
+// Define whether to target elements directly for typographic enhancements.
+// Turning this off means you need to use mdl-* classes more often.
+// Other components may also fail to adhere to MD without these rules.
+// It is strongly recommended you leave this as true.
+
+$target-elements-directly: true !default;
+
+/* ==========  Components  ========== */
+
+/* ==========  Standard Buttons  ========== */
+
+// Default button colors.
+$button-primary-color: unquote("rgba(#{$palette-grey-500}, 0.20)") !default;
+$button-secondary-color: unquote("rgb(#{$color-black})") !default;
+$button-hover-color: $button-primary-color !default;
+$button-active-color: unquote("rgba(#{$palette-grey-500}, 0.40)") !default;
+$button-focus-color: unquote("rgba(#{$color-black}, 0.12)") !default;
+
+// Colored button colors.
+$button-primary-color-alt: unquote("rgb(#{$color-primary})") !default;
+$button-secondary-color-alt: unquote("rgb(#{$color-primary-contrast})") !default;
+$button-hover-color-alt: unquote("rgb(#{$color-primary})") !default;
+$button-active-color-alt: unquote("rgb(#{$color-primary})") !default;
+$button-focus-color-alt: $button-focus-color !default;
+
+// Ripple color for colored raised buttons.
+$button-ripple-color-alt: unquote("rgb(#{$color-primary-contrast})") !default;
+
+// Disabled button colors.
+$button-primary-color-disabled: unquote("rgba(#{$color-black}, 0.12)") !default;
+$button-secondary-color-disabled: unquote("rgba(#{$color-black}, 0.26)") !default;
+
+// FAB colors and sizes.
+$button-fab-color-alt: unquote("rgb(#{$color-accent})") !default;
+$button-fab-hover-color-alt: unquote("rgb(#{$color-accent})") !default;
+$button-fab-active-color-alt: unquote("rgb(#{$color-accent})") !default;
+$button-fab-text-color-alt: unquote("rgb(#{$color-accent-contrast})") !default;
+$button-fab-ripple-color-alt: unquote("rgb(#{$color-accent-contrast})") !default;
+
+// Icon button colors and sizes.
+$button-icon-color: unquote("rgb(#{$palette-grey-700})") !default;
+$button-icon-focus-color: $button-focus-color !default;
+
+/* ==========  Icon Toggles  ========== */
+
+$icon-toggle-color: unquote("rgb(#{$palette-grey-700})") !default;
+$icon-toggle-focus-color: $button-focus-color !default;
+$icon-toggle-checked-color: unquote("rgb(#{$color-primary})") !default;
+$icon-toggle-checked-focus-color: unquote("rgba(#{$color-primary}, 0.26)") !default;
+$icon-toggle-disabled-color: unquote("rgba(#{$color-black}, 0.26)") !default;
+
+/* ==========  Radio Buttons  ========== */
+
+$radio-color: unquote("rgb(#{$color-primary})") !default;
+$radio-off-color: unquote("rgba(#{$color-black}, 0.54)") !default;
+$radio-disabled-color: unquote("rgba(#{$color-black}, 0.26)") !default;
+
+/* ==========  Ripple effect  ========== */
+
+$ripple-bg-color: unquote("rgb(#{$color-light-contrast})") !default;
+
+/* ==========  Layout  ========== */
+
+$layout-nav-color: unquote("rgb(#{$palette-grey-300})") !default;
+
+// Drawer
+$layout-drawer-bg-color: unquote("rgb(#{$palette-grey-50})") !default;
+$layout-drawer-border-color: unquote("rgb(#{$palette-grey-300})") !default;
+$layout-text-color: unquote("rgb(#{$palette-grey-800})") !default;
+$layout-drawer-navigation-color: #757575 !default;
+$layout-drawer-navigation-link-active-background: unquote("rgb(#{$palette-grey-300})") !default;
+$layout-drawer-navigation-link-active-color: unquote("rgb(#{$color-light-contrast})") !default;
+
+// Header
+$layout-header-bg-color: unquote("rgb(#{$color-primary})") !default;
+$layout-header-text-color: unquote("rgb(#{$color-primary-contrast})") !default;
+$layout-header-nav-hover-color: unquote("rgba(#{$palette-grey-700}, 0.6)") !default;
+$layout-header-tab-text-color: unquote("rgba(#{$color-primary-contrast}, 0.6)") !default;
+
+// Tabs
+$layout-header-tab-highlight: unquote("rgb(#{$color-accent})") !default;
+
+/* ==========  Content Tabs  ========== */
+
+$tab-highlight-color: unquote("rgb(#{$color-primary})") !default;
+$tab-text-color: unquote("rgba(#{$color-black}, 0.54)") !default;
+$tab-active-text-color: unquote("rgba(#{$color-black}, 0.87)") !default;
+$tab-border-color: unquote("rgb(#{$palette-grey-300})") !default;
+
+/* ==========  Checkboxes  ========== */
+
+$checkbox-color: unquote("rgb(#{$color-primary})") !default;
+$checkbox-off-color: unquote("rgba(#{$color-black}, 0.54)") !default;
+$checkbox-disabled-color: unquote("rgba(#{$color-black}, 0.26)") !default;
+$checkbox-focus-color: unquote("rgba(#{$color-primary}, 0.26)") !default;
+$checkbox-image-path: $image_path;
+
+/* ==========  Switches  ========== */
+
+$switch-color: unquote("rgb(#{$color-primary})") !default;
+$switch-faded-color: unquote("rgba(#{$color-primary}, 0.26)") !default;
+$switch-thumb-color: $switch-color !default;
+$switch-track-color: unquote("rgba(#{$color-primary}, 0.5)") !default;
+
+$switch-off-thumb-color: unquote("rgb(#{$palette-grey-50})") !default;
+$switch-off-track-color: unquote("rgba(#{$color-black}, 0.26)") !default;
+$switch-disabled-thumb-color: unquote("rgb(#{$palette-grey-400})") !default;
+$switch-disabled-track-color: unquote("rgba(#{$color-black}, 0.12)") !default;
+
+/* ==========  Spinner  ========== */
+
+$spinner-color-1: unquote("rgb(#{$palette-blue-400})") !default;
+$spinner-color-2: unquote("rgb(#{$palette-red-500})") !default;
+$spinner-color-3: unquote("rgb(#{$palette-yellow-600})") !default;
+$spinner-color-4: unquote("rgb(#{$palette-green-500})") !default;
+
+$spinner-single-color: unquote("rgb(#{$color-primary})") !default;
+
+/* ==========  Text fields  ========== */
+
+$input-text-background-color: transparent !default;
+$input-text-label-color: unquote("rgba(#{$color-black}, 0.26)") !default;
+$input-text-bottom-border-color: unquote("rgba(#{$color-black}, 0.12)") !default;
+$input-text-highlight-color: unquote("rgb(#{$color-primary})") !default;
+$input-text-disabled-color: $input-text-bottom-border-color !default;
+$input-text-disabled-text-color: $input-text-label-color !default;
+$input-text-error-color: unquote("rgb(#{$palette-red-A700})") !default;
+
+/* ==========  Card  ========== */
+
+$card-background-color: unquote("rgb(#{$color-white})") !default;
+$card-text-color: unquote("rgb(#{$color-black})") !default;
+$card-image-placeholder-color: unquote("rgb(#{$color-accent})") !default;
+$card-supporting-text-text-color: unquote("rgba(#{$color-black}, 0.54)") !default;
+$card-border-color: rgba(0,0,0,0.1) !default;
+$card-subtitle-color: unquote("rgba(#{$color-black}, 0.54)") !default;
+
+/* ==========  Sliders ========== */
+
+$range-bg-color: unquote("rgba(#{$color-black}, 0.26)") !default;
+$range-color: unquote("rgb(#{$color-primary})") !default;
+$range-faded-color: unquote("rgba(#{$color-primary}, 0.26)") !default;
+$range-bg-focus-color: unquote("rgba(#{$color-black}, 0.12)") !default;
+
+/* ========== Progress ========== */
+$progress-main-color: unquote("rgb(#{$color-primary})") !default;
+$progress-secondary-color: unquote("rgba(#{$color-primary-contrast}, 0.7)") !default;
+$progress-fallback-buffer-color: unquote("rgba(#{$color-primary-contrast}, 0.9)") !default;
+$progress-image-path: $image_path;
+
+/* ==========  List ========== */
+
+$list-main-text-text-color: unquote("rgba(#{$color-black}, 0.87)") !default;
+$list-supporting-text-text-color: unquote("rgba(#{$color-black}, 0.54)") !default;
+$list-icon-color: unquote("rgb(#{$palette-grey-600})") !default;
+$list-avatar-color: white !default;
+
+/* ==========  Item ========== */
+
+// Default Item Colors
+$default-item-text-color: unquote("rgba(#{$color-black}, 0.87)") !default;
+$default-item-outline-color: unquote("rgb(#{$palette-grey-400})") !default;
+$default-item-hover-bg-color: unquote("rgb(#{$palette-grey-200})") !default;
+$default-item-focus-bg-color: unquote("rgb(#{$palette-grey-200})") !default;
+$default-item-active-bg-color: unquote("rgb(#{$palette-grey-300})") !default;
+$default-item-divider-color: unquote("rgba(#{$color-black}, 0.12)") !default;
+
+// Disabled Button Colors
+$disabled-item-text-color: unquote("rgb(#{$palette-grey-400})") !default;
+
+/* ==========  Dropdown menu ========== */
+
+$default-dropdown-bg-color: unquote("rgb(#{$color-white})") !default;
+
+/* ==========  Tooltips  ========== */
+
+$tooltip-text-color: unquote("rgb(#{$color-white})") !default;
+$tooltip-background-color: unquote("rgba(#{$palette-grey-700}, 0.9)") !default;
+
+/* ==========  Footer  ========== */
+
+$footer-bg-color: unquote("rgb(#{$palette-grey-800})") !default;
+$footer-color: unquote("rgb(#{$palette-grey-500})") !default;
+$footer-heading-color: unquote("rgb(#{$palette-grey-300})") !default;
+$footer-button-fill-color: $footer-color !default;
+$footer-underline-color: $footer-color !default;
+
+
+/* TEXTFIELD */
+
+$input-text-font-size: 16px !default;
+$input-text-width: 100% !default;
+$input-text-padding: 4px !default;
+$input-text-vertical-spacing: 20px !default;
+
+$input-text-button-size: 32px !default;
+$input-text-floating-label-fontsize: 12px !default;
+$input-text-expandable-icon-top: 16px !default;
+
+
+/* SWITCH */
+
+$switch-label-font-size: 16px !default;
+$switch-label-height: 24px !default;
+$switch-track-height: 14px !default;
+$switch-track-length: 36px !default;
+$switch-thumb-size: 20px !default;
+$switch-track-top: ($switch-label-height - $switch-track-height) / 2 !default;
+$switch-thumb-top: ($switch-label-height - $switch-thumb-size) / 2 !default;
+$switch-ripple-size: $switch-label-height * 2 !default;
+$switch-helper-size: 8px !default;
+
+/* SPINNER */
+
+$spinner-size: 28px !default;
+$spinner-stroke-width: 3px !default;
+
+// Amount of circle the arc takes up.
+$spinner-arc-size: 270deg !default;
+// Time it takes to expand and contract arc.
+$spinner-arc-time: 1333ms !default;
+// How much the start location of the arc should rotate each time.
+$spinner-arc-start-rot: 216deg !default;
+
+$spinner-duration: 360 * $spinner-arc-time / (
+    strip-units($spinner-arc-start-rot + (360deg - $spinner-arc-size)));
+
+
+/* RADIO */
+
+$radio-label-font-size: 16px !default;
+$radio-label-height: 24px !default;
+$radio-button-size: 16px !default;
+$radio-inner-margin: $radio-button-size / 4;
+$radio-padding: 8px !default;
+$radio-top-offset: ($radio-label-height - $radio-button-size) / 2;
+$radio-ripple-size: 42px !default;
+
+
+/* MENU */
+
+$menu-expand-duration: 0.3s !default;
+$menu-fade-duration: 0.2s !default;
+
+/* LIST */
+
+$list-border: 8px !default;
+$list-min-height: 48px !default;
+$list-min-padding: 16px !default;
+$list-bottom-padding: 20px !default;
+$list-avatar-text-left-distance: 72px !default;
+$list-icon-text-left-distance: 72px !default;
+
+$list-avatar-size: 40px !default;
+$list-icon-size: 24px !default;
+
+$list-two-line-height: 72px !default;
+$list-three-line-height: 88px !default;
+
+/* LAYOUT */
+
+$layout-drawer-narrow: 240px !default;
+$layout-drawer-wide: 456px !default;
+$layout-drawer-width: $layout-drawer-narrow !default;
+
+$layout-header-icon-size: 32px !default;
+$layout-screen-size-threshold: 1024px !default;
+$layout-header-icon-margin: 24px !default;
+$layout-drawer-button-mobile-size: 32px !default;
+$layout-drawer-button-desktop-size: 48px !default;
+
+$layout-header-mobile-row-height: 56px !default;
+$layout-mobile-header-height: $layout-header-mobile-row-height;
+$layout-header-desktop-row-height: 64px !default;
+$layout-desktop-header-height: $layout-header-desktop-row-height;
+
+$layout-header-desktop-baseline: 80px !default;
+$layout-header-mobile-baseline: 72px !default;
+$layout-header-mobile-indent: 16px !default;
+$layout-header-desktop-indent: 40px !default;
+
+$layout-tab-font-size: 14px !default;
+$layout-tab-bar-height: 48px !default;
+$layout-tab-mobile-padding: 12px !default;
+$layout-tab-desktop-padding: 24px !default;
+$layout-tab-highlight-thickness: 2px !default;
+
+
+/* ICON TOGGLE */
+
+$icon-toggle-size: 32px !default;
+$icon-toggle-font-size: 24px !default;
+$icon-toggle-ripple-size: 36px !default;
+
+/* FOOTER */
+
+/*mega-footer*/
+$footer-min-padding: 16px !default;
+$footer-padding-sides: 40px !default;
+$footer-heading-font-size: 14px !default;
+$footer-heading-line-height: (1.7 * $footer-heading-font-size) !default;
+$footer-btn-size: 36px  !default;
+
+/*mini-footer*/
+$padding: 16px !default;
+$footer-heading-font-size: 24px !default;
+$footer-heading-line-height: (1.5 * $footer-heading-font-size) !default;
+$footer-btn-size: 36px !default;
+
+/* CHECKBOX */
+
+$checkbox-label-font-size: 16px !default;
+$checkbox-label-height: 24px !default;
+$checkbox-button-size: 16px !default;
+$checkbox-inner-margin: 2px !default;
+$checkbox-padding: 8px !default;
+$checkbox-top-offset:
+($checkbox-label-height - $checkbox-button-size - $checkbox-inner-margin) / 2;
+$checkbox-ripple-size: $checkbox-label-height * 1.5;
+
+/* CARD */
+
+/* Card dimensions */
+$card-width: 330px !default;
+$card-height: 200px !default;
+$card-font-size: 16px !default;
+$card-title-font-size: 24px !default;
+$card-subtitle-font-size: 14px !default;
+$card-horizontal-padding: 16px !default;
+$card-vertical-padding: 16px !default;
+
+$card-title-perspective-origin-x: 165px !default;
+$card-title-perspective-origin-y: 56px !default;
+
+$card-title-transform-origin-x: 165px !default;
+$card-title-transform-origin-y: 56px !default;
+
+$card-title-text-transform-origin-x: 149px !default;
+$card-title-text-transform-origin-y: 48px !default;
+
+$card-supporting-text-font-size: 1rem !default;
+$card-supporting-text-line-height: 18px !default;
+
+$card-actions-font-size: 16px !default;
+
+$card-title-text-font-weight: 300 !default;
+$card-z-index: 1 !default;
+
+/* Cover image */
+$card-cover-image-height: 186px !default;
+$card-background-image-url: '' !default;
+
+
+/* BUTTON */
+/**
+ *
+ * Dimensions
+ *
+ */
+$button-min-width: 64px !default;
+$button-height: 36px !default;
+$button-padding: 16px !default;
+$button-margin: 4px !default;
+$button-border-radius: 2px !default;
+
+$button-fab-size: 56px !default;
+$button-fab-size-mini: 40px !default;
+$button-fab-font-size: 24px !default;
+
+$button-icon-size: 32px !default;
+$button-icon-size-mini: 24px !default;
+
+
+/* ANIMATION */
+$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1) !default;
+$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1) !default;
+$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1) !default;
+
+$animation-curve-default: $animation-curve-fast-out-slow-in !default;
+
+
+/* PROGRESS */
+$bar-height: 4px !default;
+
+/* BADGE */
+$badge-font-size: 12px !default;
+$badge-color: unquote("rgb(#{$color-accent-contrast})") !default;
+$badge-color-inverse: unquote("rgb(#{$color-accent})") !default;
+$badge-background: unquote("rgb(#{$color-accent})") !default;
+$badge-background-inverse: unquote("rgba(#{$color-accent-contrast},0.2)") !default;
+$badge-size : 22px !default;
+$badge-padding: 2px !default;
+$badge-overlap: 12px !default;
+
+/* SHADOWS */
+
+$shadow-key-umbra-opacity: 0.2 !default;
+$shadow-key-penumbra-opacity: 0.14 !default;
+$shadow-ambient-shadow-opacity: 0.12 !default;
+
+/* GRID */
+
+$grid-desktop-columns: 12 !default;
+$grid-desktop-gutter: 16px !default;
+$grid-desktop-margin: 16px !default;
+
+$grid-desktop-breakpoint: 840px !default;
+
+$grid-tablet-columns: 8 !default;
+$grid-tablet-gutter: $grid-desktop-gutter !default;
+$grid-tablet-margin: $grid-desktop-margin !default;
+
+$grid-tablet-breakpoint: 480px !default;
+
+$grid-phone-columns: 4 !default;
+$grid-phone-gutter: $grid-desktop-gutter !default;
+$grid-phone-margin: $grid-desktop-margin !default;
+
+$grid-cell-default-columns: $grid-phone-columns !default;
+$grid-max-columns: $grid-desktop-columns !default;
+
+/* DATA TABLE */
+
+$data-table-font-size: 13px !default;
+$data-table-header-font-size: 12px !default;
+$data-table-header-sort-icon-size: 16px !default;
+
+$data-table-header-color: rgba(#000, 0.54) !default;
+$data-table-header-sorted-color: rgba(#000, 0.87) !default;
+$data-table-header-sorted-icon-hover-color: rgba(#000, 0.26) !default;
+$data-table-divider-color: rgba(#000, 0.12) !default;
+
+$data-table-hover-color: #eeeeee !default;
+$data-table-selection-color: #e0e0e0 !default;
+
+$data-table-dividers: 1px solid $data-table-divider-color !default;
+
+$data-table-row-height: 48px !default;
+$data-table-last-row-height: 56px !default;
+$data-table-header-height: 56px !default;
+
+$data-table-column-spacing: 36px !default;
+$data-table-column-padding: $data-table-column-spacing / 2;
+
+$data-table-card-header-height: 64px !default;
+$data-table-card-title-top: 20px !default;
+$data-table-card-padding: 24px !default;
+$data-table-button-padding-right: 16px !default;
+$data-table-cell-top: $data-table-card-padding / 2;
+
+/* DIALOG */
+$dialog-content-color: $card-supporting-text-text-color;
+
+/* SNACKBAR */
+
+// Hard coded since the color is not present in any palette.
+$snackbar-background-color: #323232 !default;
+$snackbar-tablet-breakpoint: $grid-tablet-breakpoint;
+$snackbar-action-color: unquote("rgb(#{$color-accent})") !default;
+
+/* TOOLTIP */
+$tooltip-font-size: 10px !default;
+$tooltip-font-size-large: 14px !default;
+
+/* CHIP */
+$chip-bg-color: rgb(222, 222, 222) !default;
+$chip-bg-active-color: rgb(214, 214, 214) !default;
+$chip-height: 32px !default;
+$chip-font-size: 13px !default; 
diff --git a/node_modules/material-design-lite/src/animation/_animation.scss b/node_modules/material-design-lite/src/animation/_animation.scss
new file mode 100644
index 0000000..26df669
--- /dev/null
+++ b/node_modules/material-design-lite/src/animation/_animation.scss
@@ -0,0 +1,34 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+
+.mdl-animation--default {
+  transition-timing-function: $animation-curve-default;
+}
+
+.mdl-animation--fast-out-slow-in {
+  transition-timing-function: $animation-curve-fast-out-slow-in;
+}
+
+.mdl-animation--linear-out-slow-in {
+  transition-timing-function: $animation-curve-linear-out-slow-in;
+}
+
+.mdl-animation--fast-out-linear-in {
+  transition-timing-function: $animation-curve-fast-out-linear-in;
+}
diff --git a/node_modules/material-design-lite/src/animation/demo.css b/node_modules/material-design-lite/src/animation/demo.css
new file mode 100644
index 0000000..58d8764
--- /dev/null
+++ b/node_modules/material-design-lite/src/animation/demo.css
@@ -0,0 +1,95 @@
+/**
+ * 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;
+}
diff --git a/node_modules/material-design-lite/src/animation/demo.html b/node_modules/material-design-lite/src/animation/demo.html
new file mode 100644
index 0000000..64e9f5e
--- /dev/null
+++ b/node_modules/material-design-lite/src/animation/demo.html
@@ -0,0 +1,7 @@
+    <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>
diff --git a/node_modules/material-design-lite/src/animation/demo.js b/node_modules/material-design-lite/src/animation/demo.js
new file mode 100644
index 0000000..a4800eb
--- /dev/null
+++ b/node_modules/material-design-lite/src/animation/demo.js
@@ -0,0 +1,112 @@
+/**
+ * @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'
+});
diff --git a/node_modules/material-design-lite/src/badge/README.md b/node_modules/material-design-lite/src/badge/README.md
new file mode 100644
index 0000000..abbc525
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/README.md
@@ -0,0 +1,68 @@
+## Introduction
+
+The Material Design Lite (MDL) **badge** component is an onscreen notification element. A badge consists of a small circle, typically containing a number or other characters, that appears in proximity to another object. A badge can be both a notifier that there are additional items associated with an object and an indicator of how many items there are.
+
+You can use a badge to unobtrusively draw the user's attention to items they might not otherwise notice, or to emphasize that items may need their attention. For example:
+
+* A "New messages" notification might be followed by a badge containing the number of unread messages.
+* A "You have unpurchased items in your shopping cart" reminder might include a badge showing the number of items in the cart.
+* A "Join the discussion!" button might have an accompanying badge indicating the number of users currently participating in the discussion.
+
+A badge is almost always positioned near a link so that the user has a convenient way to access the additional information indicated by the badge. However, depending on the intent, the badge itself may or may not be part of the link.
+
+Badges are a new feature in user interfaces, and provide users with a visual clue to help them discover additional relevant content. Their design and use is therefore an important factor in the overall user experience.
+
+### To include an MDL **badge** component:
+
+&nbsp;1. Code  an `<a>` (anchor/link) or a `<span>` element. Include any desired attributes and content.
+```html
+<a href="#">This link has a badge.</a>
+```
+&nbsp;2. Add one or more MDL classes, separated by spaces, to the element using the `class` attribute.
+```html
+<a href="#" class="mdl-badge">This link has a badge.</a>
+```
+&nbsp;3. Add a `data-badge` attribute and quoted string value for the badge.
+```html
+<a href="#" class="mdl-badge" data-badge="5">This link has a badge.</a>
+```
+
+The badge component is ready for use.
+
+>**Note:** Because of the badge component's small size, the `data-badge` value should typically contain one to three characters. More than three characters will not cause an error, but some characters may fall outside the badge and thus be difficult or impossible to see. The value of the `data-badge` attribute is centered in the badge.
+
+#### Examples
+
+A badge inside a link.
+```html
+<a href="#" class="mdl-badge" data-badge="7">This link contains a badge.</a>
+```
+
+A badge near, but not included in, a link.
+```html
+<a href="#">This link is followed by a badge.</a>
+<span class="mdl-badge" data-badge="12"></span>
+```
+
+A badge inside a link with too many characters to fit inside the badge.
+```html
+<a href="#" class="mdl-badge" data-badge="123456789">
+This badge has too many characters.</a>
+```
+
+A badge inside a link with no badge background color.
+```html
+<a href="#" class="mdl-badge mdl-badge--no-background" data-badge="123">
+This badge has no background color.</a>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual enhancements to the badge. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-badge` | Defines badge as an MDL component | Required on span or link |
+| `mdl-badge--no-background` | Applies open-circle effect to badge | Optional |
+| `mdl-badge--overlap` | Make the badge overlap with its container | Optional |
+| `data-badge="value"` | Assigns string value to badge | Not a class, but a separate attribute; required on span or link |
diff --git a/node_modules/material-design-lite/src/badge/_badge.scss b/node_modules/material-design-lite/src/badge/_badge.scss
new file mode 100644
index 0000000..c3b42ec
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/_badge.scss
@@ -0,0 +1,72 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+.mdl-badge {
+  position : relative;
+  white-space: nowrap;
+  margin-right: ($badge-size + $badge-padding);
+
+  &:not([data-badge]) {
+    margin-right: auto;
+  }
+
+  &[data-badge]:after {
+    content: attr(data-badge);
+
+    display: flex;
+    flex-direction: row;
+    flex-wrap: wrap;
+    justify-content: center;
+    align-content: center;
+    align-items: center;
+
+    position: absolute;
+    top: -($badge-size / 2);
+    right: -($badge-size + $badge-padding);
+
+    .mdl-button & {
+      top: -10px;
+      right: -5px;
+    }
+
+    font-family: $preferred_font;
+    font-weight: 600;
+    font-size: $badge-font-size;
+    width: $badge-size;
+    height: $badge-size;
+    border-radius : 50%;
+
+    background: $badge-background;
+    color: $badge-color;
+  }
+
+  &.mdl-badge--no-background {
+    &[data-badge]:after {
+      color: $badge-color-inverse;
+      background: $badge-background-inverse;
+
+      box-shadow: 0 0 1px gray;
+    }
+  }
+  &.mdl-badge--overlap {
+    margin-right: ($badge-size - $badge-overlap);
+    &:after {
+      right: -($badge-size - $badge-overlap);
+    }
+  }
+}
diff --git a/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-icon-demo.html b/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-icon-demo.html
new file mode 100644
index 0000000..1baa6ff
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-icon-demo.html
@@ -0,0 +1,9 @@
+<style>
+.demo-badge__badge-on-icon-icon .mdl-badge {
+  color: rgba(0, 0, 0, 0.24);
+}
+.demo-badge__badge-on-icon-icon .mdl-badge.material-icons {
+  font-size: 32px;
+}
+</style>
+{% include "badge-on-icon-icon.html" %}
diff --git a/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-icon.html b/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-icon.html
new file mode 100644
index 0000000..3b23967
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-icon.html
@@ -0,0 +1,2 @@
+<!-- Icon badge on icon -->
+<div class="material-icons mdl-badge mdl-badge--overlap" data-badge="♥">account_box</div>
diff --git a/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-text-demo.html b/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-text-demo.html
new file mode 100644
index 0000000..1437ef8
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-text-demo.html
@@ -0,0 +1,9 @@
+<style>
+.demo-badge__badge-on-icon-text .mdl-badge {
+  color: rgba(0, 0, 0, 0.24);
+}
+.demo-badge__badge-on-icon-text .mdl-badge.material-icons {
+  font-size: 32px;
+}
+</style>
+{% include "badge-on-icon-text.html" %}
diff --git a/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-text.html b/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-text.html
new file mode 100644
index 0000000..e73a9f2
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/snippets/badge-on-icon-text.html
@@ -0,0 +1,2 @@
+<!-- Number badge on icon -->
+<div class="material-icons mdl-badge mdl-badge--overlap" data-badge="1">account_box</div>
diff --git a/node_modules/material-design-lite/src/badge/snippets/badge-on-text-icon-demo.html b/node_modules/material-design-lite/src/badge/snippets/badge-on-text-icon-demo.html
new file mode 100644
index 0000000..57ab2bf
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/snippets/badge-on-text-icon-demo.html
@@ -0,0 +1,6 @@
+<style>
+.demo-badge__badge-on-text-icon .mdl-badge {
+  color: rgba(0, 0, 0, 0.24);
+}
+</style>
+{% include "badge-on-text-icon.html" %}
diff --git a/node_modules/material-design-lite/src/badge/snippets/badge-on-text-icon.html b/node_modules/material-design-lite/src/badge/snippets/badge-on-text-icon.html
new file mode 100644
index 0000000..86c1240
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/snippets/badge-on-text-icon.html
@@ -0,0 +1,2 @@
+<!-- Icon badge -->
+<span class="mdl-badge" data-badge="♥">Mood</span>
diff --git a/node_modules/material-design-lite/src/badge/snippets/badge-on-text-text-demo.html b/node_modules/material-design-lite/src/badge/snippets/badge-on-text-text-demo.html
new file mode 100644
index 0000000..37d26e1
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/snippets/badge-on-text-text-demo.html
@@ -0,0 +1,7 @@
+<style>
+.demo-badge__badge-on-text-text .mdl-badge {
+  color: rgba(0, 0, 0, 0.24);
+}
+</style>
+
+{% include "badge-on-text-text.html" %}
diff --git a/node_modules/material-design-lite/src/badge/snippets/badge-on-text-text.html b/node_modules/material-design-lite/src/badge/snippets/badge-on-text-text.html
new file mode 100644
index 0000000..d2f66eb
--- /dev/null
+++ b/node_modules/material-design-lite/src/badge/snippets/badge-on-text-text.html
@@ -0,0 +1,2 @@
+<!-- Number badge -->
+<span class="mdl-badge" data-badge="4">Inbox</span>
diff --git a/node_modules/material-design-lite/src/button/README.md b/node_modules/material-design-lite/src/button/README.md
new file mode 100755
index 0000000..1ad5186
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/README.md
@@ -0,0 +1,59 @@
+## Introduction
+
+The Material Design Lite (MDL) **button** component is an enhanced version of the standard HTML `<button>` element. A button consists of text and/or an image that clearly communicates what action will occur when the user clicks or touches it. The MDL button component provides various types of buttons, and allows you to add both display and click effects.
+
+Buttons are a ubiquitous feature of most user interfaces, regardless of a site's content or function. Their design and use is therefore an important factor in the overall user experience. See the button component's [Material Design specifications page](http://www.google.com/design/spec/components/buttons.html) for details.
+
+The available button display types are *flat* (default), *raised*, *fab*, *mini-fab*, and *icon*; any of these types may be plain (light gray) or *colored*, and may be initially or programmatically *disabled*. The *fab*, *mini-fab*, and *icon* button types typically use a small image as their caption rather than text.
+
+### To include an MDL **button** component:
+
+&nbsp;1. Code a `<button>` element. Include any desired attributes and values, such as an id or event handler, and add a text caption or image as appropriate.
+```html
+<button>Save</button>
+```
+&nbsp;2. Add one or more MDL classes, separated by spaces, to the button using the `class` attribute.
+```html
+<button class="mdl-button mdl-js-button mdl-button--raised">Save</button>
+```
+
+The button component is ready for use.
+
+#### Examples
+
+A button with the "raised" effect.
+```html
+<button class="mdl-button mdl-js-button mdl-button--raised">Save</button>
+```
+
+A button with the "fab" effect.
+```html
+<button class="mdl-button mdl-js-button mdl-button--fab">OK</button>
+```
+
+A button with the "icon" and "colored" effects.
+```html
+<button class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored">?</button>
+```
+
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the button. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-button` | Defines button as an MDL component | Required |
+| `mdl-js-button` | Assigns basic MDL behavior to button | Required |
+| (none) | Applies *flat* display effect to button (default) |  |
+| `mdl-button--raised` | Applies *raised* display effect | Mutually exclusive with *fab*, *mini-fab*, and *icon* |
+| `mdl-button--fab` | Applies *fab* (circular) display effect | Mutually exclusive with *raised*, *mini-fab*, and *icon* |
+| `mdl-button--mini-fab` | Applies *mini-fab* (small fab circular) display effect | Mutually exclusive with *raised*, *fab*, and *icon* |
+| `mdl-button--icon` | Applies *icon* (small plain circular) display effect | Mutually exclusive with *raised*, *fab*, and *mini-fab*  |
+| `mdl-button--colored` | Applies *colored* display effect (primary or accent color, depending on the type of button) | Colors are defined in `material.min.css` |
+| `mdl-button--primary` | Applies *primary* color display effect | Colors are defined in `material.min.css` |
+| `mdl-button--accent` | Applies *accent* color display effect | Colors are defined in `material.min.css` |
+| `mdl-js-ripple-effect` | Applies *ripple* click effect | May be used in combination with any other classes |
+
+>**Note:** Disabled versions of all the available button types are provided, and are invoked with the standard HTML boolean attribute `disabled`. `<button class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect" disabled>Raised Ripples Disabled</button>`. Alternatively, the `mdl-button--disabled` class can be used to achieve the same style but it does not disable the functionality of the element.
+>This attribute may be added or removed programmatically via scripting.
diff --git a/node_modules/material-design-lite/src/button/_button.scss b/node_modules/material-design-lite/src/button/_button.scss
new file mode 100644
index 0000000..25bb3b3
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/_button.scss
@@ -0,0 +1,305 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+// The button component. Defaults to a flat button.
+.mdl-button {
+  background: transparent;
+  border: none;
+  border-radius: $button-border-radius;
+  color: $button-secondary-color;
+  position: relative;
+  height: $button-height;
+  margin: 0;
+  min-width: $button-min-width;
+  padding: 0 $button-padding;
+  display: inline-block;
+  @include typo-button();
+  overflow: hidden;
+  will-change: box-shadow;
+  transition: box-shadow 0.2s $animation-curve-fast-out-linear-in,
+              background-color 0.2s $animation-curve-default,
+              color 0.2s $animation-curve-default;
+  outline: none;
+  cursor: pointer;
+  text-decoration: none;
+  text-align: center;
+  line-height: $button-height;
+  vertical-align: middle;
+
+  &::-moz-focus-inner {
+    border: 0;
+  }
+
+  &:hover {
+    background-color: $button-hover-color;
+  }
+
+  &:focus:not(:active) {
+    background-color: $button-focus-color;
+  }
+
+  &:active {
+    background-color: $button-active-color;
+  }
+
+  &.mdl-button--colored {
+    color: $button-primary-color-alt;
+
+    &:focus:not(:active) {
+      background-color: $button-focus-color-alt;
+    }
+  }
+}
+
+input.mdl-button[type="submit"] {
+  -webkit-appearance:none;
+}
+
+  // Raised buttons
+  .mdl-button--raised {
+    background: $button-primary-color;
+    @include shadow-2dp();
+
+    &:active {
+      @include shadow-4dp();
+      background-color: $button-active-color;
+    }
+
+    &:focus:not(:active) {
+      @include focus-shadow();
+      background-color: $button-active-color;
+    }
+
+    &.mdl-button--colored {
+      background: $button-primary-color-alt;
+      color: $button-secondary-color-alt;
+
+      &:hover {
+        background-color: $button-hover-color-alt;
+      }
+
+      &:active {
+        background-color: $button-active-color-alt;
+      }
+
+      &:focus:not(:active) {
+        background-color: $button-active-color-alt;
+      }
+
+      & .mdl-ripple {
+        background: $button-ripple-color-alt;
+      }
+    }
+  }
+
+
+  // FABs
+  .mdl-button--fab {
+    border-radius: 50%;
+    font-size: $button-fab-font-size;
+    height: $button-fab-size;
+    margin: auto;
+    min-width: $button-fab-size;
+    width: $button-fab-size;
+    padding: 0;
+    overflow: hidden;
+    background: $button-primary-color;
+    box-shadow: 0 1px 1.5px 0 rgba(0,0,0,0.12), 0 1px 1px 0 rgba(0,0,0,0.24);
+    position: relative;
+    line-height: normal;
+
+    & .material-icons {
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);
+      line-height: $button-fab-font-size;
+      width: $button-fab-font-size;
+    }
+
+    &.mdl-button--mini-fab {
+      height: $button-fab-size-mini;
+      min-width: $button-fab-size-mini;
+      width: $button-fab-size-mini;
+    }
+
+    & .mdl-button__ripple-container {
+      border-radius: 50%;
+      // Fixes clipping bug in Safari.
+      -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
+    }
+
+    &:active {
+      @include shadow-4dp();
+      background-color: $button-active-color;
+    }
+
+    &:focus:not(:active) {
+      @include focus-shadow();
+      background-color: $button-active-color;
+    }
+
+    &.mdl-button--colored {
+      background: $button-fab-color-alt;
+      color: $button-fab-text-color-alt;
+
+      &:hover {
+        background-color: $button-fab-hover-color-alt;
+      }
+
+      &:focus:not(:active) {
+        background-color: $button-fab-active-color-alt;
+      }
+
+      &:active {
+        background-color: $button-fab-active-color-alt;
+      }
+
+      & .mdl-ripple {
+        background: $button-fab-ripple-color-alt;
+      }
+    }
+  }
+
+
+  // Icon buttons
+  .mdl-button--icon {
+    border-radius: 50%;
+    font-size: $button-fab-font-size;
+    height: $button-icon-size;
+    margin-left: 0;
+    margin-right: 0;
+    min-width: $button-icon-size;
+    width: $button-icon-size;
+    padding: 0;
+    overflow: hidden;
+    color: inherit;
+    line-height: normal;
+
+    & .material-icons {
+      position: absolute;
+      top: 50%;
+      left: 50%;
+      transform: translate(- $button-fab-font-size / 2, - $button-fab-font-size / 2);
+      line-height: $button-fab-font-size;
+      width: $button-fab-font-size;
+    }
+
+    &.mdl-button--mini-icon {
+      height: $button-icon-size-mini;
+      min-width: $button-icon-size-mini;
+      width: $button-icon-size-mini;
+
+      & .material-icons {
+        top: ($button-icon-size-mini - $button-fab-font-size) / 2;
+        left: ($button-icon-size-mini - $button-fab-font-size) / 2;
+      }
+    }
+
+    & .mdl-button__ripple-container {
+      border-radius: 50%;
+      // Fixes clipping bug in Safari.
+      -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
+    }
+  }
+
+
+  // Ripples
+  .mdl-button__ripple-container {
+    display: block;
+    height: 100%;
+    left: 0px;
+    position: absolute;
+    top: 0px;
+    width: 100%;
+    z-index: 0;
+    overflow: hidden;
+
+    .mdl-button[disabled] & .mdl-ripple,
+    .mdl-button.mdl-button--disabled & .mdl-ripple {
+      background-color: transparent;
+    }
+  }
+
+// Colorized buttons
+
+.mdl-button--primary.mdl-button--primary {
+  color: $button-primary-color-alt;
+  & .mdl-ripple {
+    background: $button-secondary-color-alt;
+  }
+  &.mdl-button--raised, &.mdl-button--fab {
+    color: $button-secondary-color-alt;
+    background-color: $button-primary-color-alt;
+  }
+}
+
+.mdl-button--accent.mdl-button--accent {
+  color: $button-fab-color-alt;
+  & .mdl-ripple {
+    background: $button-fab-text-color-alt;
+  }
+  &.mdl-button--raised, &.mdl-button--fab {
+    color: $button-fab-text-color-alt;
+    background-color: $button-fab-color-alt;
+  }
+}
+
+// Disabled buttons
+
+.mdl-button {
+  // Bump up specificity by using [disabled] twice.
+  &[disabled][disabled],
+  &.mdl-button--disabled.mdl-button--disabled {
+    color: $button-secondary-color-disabled;
+    cursor: default;
+    background-color: transparent;
+  }
+
+  &--fab {
+    // Bump up specificity by using [disabled] twice.
+    &[disabled][disabled],
+    &.mdl-button--disabled.mdl-button--disabled {
+      background-color: $button-primary-color-disabled;
+      color: $button-secondary-color-disabled;
+    }
+  }
+
+  &--raised {
+    // Bump up specificity by using [disabled] twice.
+    &[disabled][disabled],
+    &.mdl-button--disabled.mdl-button--disabled {
+      background-color: $button-primary-color-disabled;
+      color: $button-secondary-color-disabled;
+      box-shadow: none;
+    }
+  }
+  &--colored {
+    // Bump up specificity by using [disabled] twice.
+    &[disabled][disabled],
+    &.mdl-button--disabled.mdl-button--disabled {
+      color: $button-secondary-color-disabled;
+    }
+  }
+}
+
+// Align icons inside buttons with text
+.mdl-button .material-icons {
+  vertical-align: middle;
+}
diff --git a/node_modules/material-design-lite/src/button/button.js b/node_modules/material-design-lite/src/button/button.js
new file mode 100644
index 0000000..cc9ba8d
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/button.js
@@ -0,0 +1,123 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Button 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.
+   */
+  var MaterialButton = function MaterialButton(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialButton'] = MaterialButton;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialButton.prototype.Constant_ = {
+    // None for now.
+  };
+
+  /**
+   * 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
+   */
+  MaterialButton.prototype.CssClasses_ = {
+    RIPPLE_EFFECT: 'mdl-js-ripple-effect',
+    RIPPLE_CONTAINER: 'mdl-button__ripple-container',
+    RIPPLE: 'mdl-ripple'
+  };
+
+  /**
+   * Handle blur of element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialButton.prototype.blurHandler_ = function(event) {
+    if (event) {
+      this.element_.blur();
+    }
+  };
+
+  // Public methods.
+
+  /**
+   * Disable button.
+   *
+   * @public
+   */
+  MaterialButton.prototype.disable = function() {
+    this.element_.disabled = true;
+  };
+  MaterialButton.prototype['disable'] = MaterialButton.prototype.disable;
+
+  /**
+   * Enable button.
+   *
+   * @public
+   */
+  MaterialButton.prototype.enable = function() {
+    this.element_.disabled = false;
+  };
+  MaterialButton.prototype['enable'] = MaterialButton.prototype.enable;
+
+  /**
+   * Initialize element.
+   */
+  MaterialButton.prototype.init = function() {
+    if (this.element_) {
+      if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {
+        var rippleContainer = document.createElement('span');
+        rippleContainer.classList.add(this.CssClasses_.RIPPLE_CONTAINER);
+        this.rippleElement_ = document.createElement('span');
+        this.rippleElement_.classList.add(this.CssClasses_.RIPPLE);
+        rippleContainer.appendChild(this.rippleElement_);
+        this.boundRippleBlurHandler = this.blurHandler_.bind(this);
+        this.rippleElement_.addEventListener('mouseup', this.boundRippleBlurHandler);
+        this.element_.appendChild(rippleContainer);
+      }
+      this.boundButtonBlurHandler = this.blurHandler_.bind(this);
+      this.element_.addEventListener('mouseup', this.boundButtonBlurHandler);
+      this.element_.addEventListener('mouseleave', this.boundButtonBlurHandler);
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialButton,
+    classAsString: 'MaterialButton',
+    cssClass: 'mdl-js-button',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/button/snippets/fab-colored-ripple.html b/node_modules/material-design-lite/src/button/snippets/fab-colored-ripple.html
new file mode 100644
index 0000000..df2d39a
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/fab-colored-ripple.html
@@ -0,0 +1,4 @@
+<!-- Colored FAB button with ripple -->
+<button class="mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
+  <i class="material-icons">add</i>
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/fab-colored.html b/node_modules/material-design-lite/src/button/snippets/fab-colored.html
new file mode 100644
index 0000000..b25e8da
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/fab-colored.html
@@ -0,0 +1,4 @@
+<!-- Colored FAB button -->
+<button class="mdl-button mdl-js-button mdl-button--fab mdl-button--colored">
+  <i class="material-icons">add</i>
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/fab-disabled.html b/node_modules/material-design-lite/src/button/snippets/fab-disabled.html
new file mode 100644
index 0000000..3dc9cb4
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/fab-disabled.html
@@ -0,0 +1,4 @@
+<!-- Disabled FAB button -->
+<button class="mdl-button mdl-js-button mdl-button--fab" disabled>
+  <i class="material-icons">add</i>
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/fab-mini-colored.html b/node_modules/material-design-lite/src/button/snippets/fab-mini-colored.html
new file mode 100644
index 0000000..3e35a15
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/fab-mini-colored.html
@@ -0,0 +1,4 @@
+<!-- Colored mini FAB button -->
+<button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab mdl-button--colored">
+  <i class="material-icons">add</i>
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/fab-mini.html b/node_modules/material-design-lite/src/button/snippets/fab-mini.html
new file mode 100644
index 0000000..8b5c5ca
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/fab-mini.html
@@ -0,0 +1,4 @@
+<!-- Mini FAB button -->
+<button class="mdl-button mdl-js-button mdl-button--fab mdl-button--mini-fab">
+  <i class="material-icons">add</i>
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/fab-ripple.html b/node_modules/material-design-lite/src/button/snippets/fab-ripple.html
new file mode 100644
index 0000000..02c42f9
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/fab-ripple.html
@@ -0,0 +1,4 @@
+<!-- FAB button with ripple -->
+<button class="mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect">
+  <i class="material-icons">add</i>
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/fab.html b/node_modules/material-design-lite/src/button/snippets/fab.html
new file mode 100644
index 0000000..0874925
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/fab.html
@@ -0,0 +1,4 @@
+<!-- FAB button -->
+<button class="mdl-button mdl-js-button mdl-button--fab">
+  <i class="material-icons">add</i>
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/flat-accent.html b/node_modules/material-design-lite/src/button/snippets/flat-accent.html
new file mode 100644
index 0000000..b650bc2
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/flat-accent.html
@@ -0,0 +1,4 @@
+<!-- Accent-colored flat button -->
+<button class="mdl-button mdl-js-button mdl-button--accent">
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/flat-disabled.html b/node_modules/material-design-lite/src/button/snippets/flat-disabled.html
new file mode 100644
index 0000000..9139038
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/flat-disabled.html
@@ -0,0 +1,4 @@
+<!-- Disabled flat button -->
+<button class="mdl-button mdl-js-button" disabled>
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/flat-primary.html b/node_modules/material-design-lite/src/button/snippets/flat-primary.html
new file mode 100644
index 0000000..780ce48
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/flat-primary.html
@@ -0,0 +1,4 @@
+<!-- Primary-colored flat button -->
+<button class="mdl-button mdl-js-button mdl-button--primary">
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/flat-ripple.html b/node_modules/material-design-lite/src/button/snippets/flat-ripple.html
new file mode 100644
index 0000000..c8c37a8
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/flat-ripple.html
@@ -0,0 +1,4 @@
+<!-- Flat button with ripple -->
+<button class="mdl-button mdl-js-button mdl-js-ripple-effect">
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/flat.html b/node_modules/material-design-lite/src/button/snippets/flat.html
new file mode 100644
index 0000000..19da613
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/flat.html
@@ -0,0 +1,4 @@
+<!-- Flat button -->
+<button class="mdl-button mdl-js-button">
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/icon-colored.html b/node_modules/material-design-lite/src/button/snippets/icon-colored.html
new file mode 100644
index 0000000..cabcb5a
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/icon-colored.html
@@ -0,0 +1,4 @@
+<!-- Colored icon button -->
+<button class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored">
+  <i class="material-icons">mood</i>
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/icon.html b/node_modules/material-design-lite/src/button/snippets/icon.html
new file mode 100644
index 0000000..122023a
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/icon.html
@@ -0,0 +1,4 @@
+<!-- Icon button -->
+<button class="mdl-button mdl-js-button mdl-button--icon">
+  <i class="material-icons">mood</i>
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/raised-accent.html b/node_modules/material-design-lite/src/button/snippets/raised-accent.html
new file mode 100644
index 0000000..cb547f1
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/raised-accent.html
@@ -0,0 +1,4 @@
+<!-- Accent-colored raised button -->
+<button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent">
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/raised-colored.html b/node_modules/material-design-lite/src/button/snippets/raised-colored.html
new file mode 100644
index 0000000..713c2f5
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/raised-colored.html
@@ -0,0 +1,4 @@
+<!-- Colored raised button -->
+<button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored">
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/raised-disabled.html b/node_modules/material-design-lite/src/button/snippets/raised-disabled.html
new file mode 100644
index 0000000..545bec7
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/raised-disabled.html
@@ -0,0 +1,4 @@
+<!-- Raised disabled button -->
+<button class="mdl-button mdl-js-button mdl-button--raised" disabled>
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/raised-ripple-accent.html b/node_modules/material-design-lite/src/button/snippets/raised-ripple-accent.html
new file mode 100644
index 0000000..9d33d8b
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/raised-ripple-accent.html
@@ -0,0 +1,4 @@
+<!-- Accent-colored raised button with ripple -->
+<button class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent">
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/raised-ripple.html b/node_modules/material-design-lite/src/button/snippets/raised-ripple.html
new file mode 100644
index 0000000..6b38c0b
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/raised-ripple.html
@@ -0,0 +1,4 @@
+<!-- Raised button with ripple -->
+<button class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect">
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/button/snippets/raised.html b/node_modules/material-design-lite/src/button/snippets/raised.html
new file mode 100644
index 0000000..a939733
--- /dev/null
+++ b/node_modules/material-design-lite/src/button/snippets/raised.html
@@ -0,0 +1,4 @@
+<!-- Raised button -->
+<button class="mdl-button mdl-js-button mdl-button--raised">
+  Button
+</button>
diff --git a/node_modules/material-design-lite/src/card/README.md b/node_modules/material-design-lite/src/card/README.md
new file mode 100755
index 0000000..2611892
--- /dev/null
+++ b/node_modules/material-design-lite/src/card/README.md
@@ -0,0 +1,128 @@
+## Introduction
+
+The Material Design Lite (MDL) **card** component is a user interface element representing a virtual piece of paper that contains related data &mdash; such as a photo, some text, and a link &mdash; that are all about a single subject.
+
+Cards are a convenient means of coherently displaying related content that is composed of different types of objects. They are also well-suited for presenting similar objects whose size or supported actions can vary considerably, like photos with captions of variable length. Cards have a constant width and a variable height, depending on their content.
+
+Cards are a fairly new feature in user interfaces, and allow users an access point to more complex and detailed information. Their design and use is an important factor in the overall user experience. See the card component's [Material Design specifications page](http://www.google.com/design/spec/components/cards.html) for details.
+
+### To include an MDL **card** component:
+
+&nbsp;1. Code a `<div>` element; this is the "outer" container, intended to hold all of the card's content.
+```html
+<div>
+</div>
+```
+&nbsp;2. Inside the div, code one or more "inner" divs, one for each desired content block. A card containing a title, an image, some text, and an action bar would contain four "inner" divs, all siblings.
+```html
+<div>
+  <div>
+  ...
+  </div>
+  <div>
+  ...
+  </div>
+  <div>
+  ...
+  </div>
+  <div>
+  ...
+  </div>
+</div>
+```
+&nbsp;3. Add one or more MDL classes, separated by spaces, to the "outer" div and the "inner" divs (depending on their intended use) using the `class` attribute.
+```html
+<div class="mdl-card">
+  <div class="mdl-card__title">
+  ...
+  </div>
+  <div class="mdl-card__media">
+  ...
+  </div>
+  <div class="mdl-card__supporting-text">
+  ...
+  </div>
+  <div class="mdl-card__actions">
+  ...
+  </div>
+</div>
+```
+&nbsp;4. Add content to each "inner" div, again depending on its intended use, using standard HTML elements and, optionally, additional MDL classes.
+```html
+<div class="mdl-card">
+  <div class="mdl-card__title">
+    <h2 class="mdl-card__title-text">title Text Goes Here</h2>
+  </div>
+  <div class="mdl-card__media">
+    <img src="photo.jpg" width="220" height="140" border="0" alt="" style="padding:20px;">
+  </div>
+  <div class="mdl-card__supporting-text">
+    This text might describe the photo and provide further information, such as where and
+    when it was taken.
+  </div>
+  <div class="mdl-card__actions">
+    <a href="(URL or function)">Related Action</a>
+  </div>
+</div>
+```
+
+The card component is ready for use.
+
+#### Examples
+
+A card (no shadow) with a title, image, text, and action.
+
+```html
+<div class="mdl-card">
+  <div class="mdl-card__title">
+     <h2 class="mdl-card__title-text">Auckland Sky Tower<br>Auckland, New Zealand</h2>
+  </div>
+  <div class="mdl-card__media">
+    <img src="skytower.jpg" width="173" height="157" border="0" alt=""
+     style="padding:10px;">
+  </div>
+  <div class="mdl-card__supporting-text">
+  The Sky Tower is an observation and telecommunications tower located in Auckland,
+  New Zealand. It is 328 metres (1,076 ft) tall, making it the tallest man-made structure
+  in the Southern Hemisphere.
+  </div>
+  <div class="mdl-card__actions">
+     <a href="http://en.wikipedia.org/wiki/Sky_Tower_%28Auckland%29">Wikipedia entry</a>
+  </div>
+</div>
+```
+
+Card (level-3 shadow) with an image, caption, and text:
+
+```html
+<div class="mdl-card mdl-shadow--4dp">
+  <div class="mdl-card__media"><img src="skytower.jpg" width="173" height="157" border="0"
+   alt="" style="padding:10px;">
+  </div>
+  <div class="mdl-card__supporting-text">
+    Auckland Sky Tower, taken March 24th, 2014
+  </div>
+  <div class="mdl-card__supporting-text">
+  The Sky Tower is an observation and telecommunications tower located in Auckland,
+  New Zealand. It is 328 metres (1,076 ft) tall, making it the tallest man-made structure
+  in the Southern Hemisphere.
+  </div>
+</div>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the card. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-card` | Defines div element as an MDL card container | Required on "outer" div |
+| `mdl-card--border` | Adds a border to the card section that it's applied to | Used on the "inner" divs |
+| `mdl-shadow--2dp through mdl-shadow--16dp` | Assigns variable shadow depths (2, 3, 4, 6, 8, or 16) to card | Optional, goes on "outer" div; if omitted, no shadow is present |
+| `mdl-card__title` | Defines div as a card title container | Required on "inner" title div |
+| `mdl-card__title-text` | Assigns appropriate text characteristics to card title | Required on head tag (H1 - H6) inside title div |
+| `mdl-card__subtitle-text` | Assigns text characteristics to a card subtitle | Optional. Should be a child of the title element. |
+| `mdl-card__media` | Defines div as a card media container | Required on "inner" media div |
+| `mdl-card__supporting-text` | Defines div as a card body text container and assigns appropriate text characteristics to body text | Required on "inner" body text div; text goes directly inside the div with no intervening containers |
+| `mdl-card__actions` | Defines div as a card actions container and assigns appropriate text characteristics to actions text | Required on "inner" actions div; content goes directly inside the div with no intervening containers |
+| `mdl-card__menu` | Defines element as top right menu button | Optional. Should be a child of the `mdl-card` element. |
diff --git a/node_modules/material-design-lite/src/card/_card.scss b/node_modules/material-design-lite/src/card/_card.scss
new file mode 100644
index 0000000..6f8c19f
--- /dev/null
+++ b/node_modules/material-design-lite/src/card/_card.scss
@@ -0,0 +1,115 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+.mdl-card {
+  display: flex;
+  flex-direction: column;
+  font-size: $card-font-size;
+  font-weight: 400;
+  min-height: $card-height;
+  overflow: hidden;
+  width: $card-width;
+  z-index: $card-z-index;
+  position: relative;
+  background: $card-background-color;
+  border-radius: 2px;
+  box-sizing: border-box;
+}
+
+.mdl-card__media {
+  background-color: $card-image-placeholder-color;
+  background-repeat: repeat;
+  background-position: 50% 50%;
+  background-size: cover;
+  background-origin: padding-box;
+  background-attachment: scroll;
+  box-sizing: border-box;
+}
+
+.mdl-card__title {
+  align-items: center;
+  color: $card-text-color;
+  display: block;
+  display: flex;
+  justify-content: stretch;
+  line-height: normal;
+  padding: $card-vertical-padding $card-horizontal-padding;
+  perspective-origin: $card-title-perspective-origin-x $card-title-perspective-origin-y;
+  transform-origin: $card-title-transform-origin-x $card-title-transform-origin-y;
+  box-sizing: border-box;
+
+  &.mdl-card--border {
+    border-bottom: 1px solid $card-border-color;
+  }
+}
+
+.mdl-card__title-text {
+  align-self: flex-end;
+  color: inherit;
+  display: block;
+  display: flex;
+  font-size: $card-title-font-size;
+  font-weight: $card-title-text-font-weight;
+  line-height: normal;
+  overflow: hidden;
+  transform-origin: $card-title-text-transform-origin-x $card-title-text-transform-origin-y;
+  margin: 0;
+}
+
+.mdl-card__subtitle-text {
+  font-size: $card-subtitle-font-size;
+  color: $card-subtitle-color;
+  margin: 0;
+}
+
+.mdl-card__supporting-text {
+  color: $card-supporting-text-text-color;
+  font-size: $card-supporting-text-font-size;
+  line-height: $card-supporting-text-line-height;
+  overflow: hidden;
+  padding: $card-vertical-padding $card-horizontal-padding;
+  width: 90%;
+
+  &.mdl-card--border {
+    border-bottom: 1px solid $card-border-color;
+  }
+}
+
+.mdl-card__actions {
+  font-size: $card-actions-font-size;
+  line-height: normal;
+  width: 100%;
+  background-color: rgba(0,0,0,0);
+  padding: 8px;
+  box-sizing: border-box;
+
+  &.mdl-card--border {
+    border-top: 1px solid $card-border-color;
+  }
+}
+
+.mdl-card--expand {
+  flex-grow: 1;
+}
+
+
+.mdl-card__menu {
+  position: absolute;
+  right: 16px;
+  top: 16px;
+}
diff --git a/node_modules/material-design-lite/src/card/snippets/event.html b/node_modules/material-design-lite/src/card/snippets/event.html
new file mode 100644
index 0000000..b5407c3
--- /dev/null
+++ b/node_modules/material-design-lite/src/card/snippets/event.html
@@ -0,0 +1,47 @@
+<!-- Event card -->
+<style>
+.demo-card-event.mdl-card {
+  width: 256px;
+  height: 256px;
+  background: #3E4EB8;
+}
+.demo-card-event > .mdl-card__actions {
+  border-color: rgba(255, 255, 255, 0.2);
+}
+.demo-card-event > .mdl-card__title {
+  align-items: flex-start;
+}
+.demo-card-event > .mdl-card__title > h4 {
+  margin-top: 0;
+}
+.demo-card-event > .mdl-card__actions {
+  display: flex;
+  box-sizing:border-box;
+  align-items: center;
+}
+.demo-card-event > .mdl-card__actions > .material-icons {
+  padding-right: 10px;
+}
+.demo-card-event > .mdl-card__title,
+.demo-card-event > .mdl-card__actions,
+.demo-card-event > .mdl-card__actions > .mdl-button {
+  color: #fff;
+}
+</style>
+
+<div class="demo-card-event mdl-card mdl-shadow--2dp">
+  <div class="mdl-card__title mdl-card--expand">
+    <h4>
+      Featured event:<br>
+      May 24, 2016<br>
+      7-11pm
+    </h4>
+  </div>
+  <div class="mdl-card__actions mdl-card--border">
+    <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
+      Add to Calendar
+    </a>
+    <div class="mdl-layout-spacer"></div>
+    <i class="material-icons">event</i>
+  </div>
+</div>
diff --git a/node_modules/material-design-lite/src/card/snippets/image.html b/node_modules/material-design-lite/src/card/snippets/image.html
new file mode 100644
index 0000000..f9cb645
--- /dev/null
+++ b/node_modules/material-design-lite/src/card/snippets/image.html
@@ -0,0 +1,25 @@
+<!-- Image card -->
+<style>
+.demo-card-image.mdl-card {
+  width: 256px;
+  height: 256px;
+  background: url('../assets/demos/image_card.jpg') center / cover;
+}
+.demo-card-image > .mdl-card__actions {
+  height: 52px;
+  padding: 16px;
+  background: rgba(0, 0, 0, 0.2);
+}
+.demo-card-image__filename {
+  color: #fff;
+  font-size: 14px;
+  font-weight: 500;
+}
+</style>
+
+<div class="demo-card-image mdl-card mdl-shadow--2dp">
+  <div class="mdl-card__title mdl-card--expand"></div>
+  <div class="mdl-card__actions">
+    <span class="demo-card-image__filename">Image.jpg</span>
+  </div>
+</div>
diff --git a/node_modules/material-design-lite/src/card/snippets/square.html b/node_modules/material-design-lite/src/card/snippets/square.html
new file mode 100644
index 0000000..93d13f5
--- /dev/null
+++ b/node_modules/material-design-lite/src/card/snippets/square.html
@@ -0,0 +1,27 @@
+<!-- Square card -->
+<style>
+.demo-card-square.mdl-card {
+  width: 320px;
+  height: 320px;
+}
+.demo-card-square > .mdl-card__title {
+  color: #fff;
+  background:
+    url('../assets/demos/dog.png') bottom right 15% no-repeat #46B6AC;
+}
+</style>
+
+<div class="demo-card-square mdl-card mdl-shadow--2dp">
+  <div class="mdl-card__title mdl-card--expand">
+    <h2 class="mdl-card__title-text">Update</h2>
+  </div>
+  <div class="mdl-card__supporting-text">
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+    Aenan convallis.
+  </div>
+  <div class="mdl-card__actions mdl-card--border">
+    <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
+      View Updates
+    </a>
+  </div>
+</div>
diff --git a/node_modules/material-design-lite/src/card/snippets/wide.html b/node_modules/material-design-lite/src/card/snippets/wide.html
new file mode 100644
index 0000000..0ee9240
--- /dev/null
+++ b/node_modules/material-design-lite/src/card/snippets/wide.html
@@ -0,0 +1,34 @@
+<!-- Wide card with share menu button -->
+<style>
+.demo-card-wide.mdl-card {
+  width: 512px;
+}
+.demo-card-wide > .mdl-card__title {
+  color: #fff;
+  height: 176px;
+  background: url('../assets/demos/welcome_card.jpg') center / cover;
+}
+.demo-card-wide > .mdl-card__menu {
+  color: #fff;
+}
+</style>
+
+<div class="demo-card-wide mdl-card mdl-shadow--2dp">
+  <div class="mdl-card__title">
+    <h2 class="mdl-card__title-text">Welcome</h2>
+  </div>
+  <div class="mdl-card__supporting-text">
+    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+    Mauris sagittis pellentesque lacus eleifend lacinia...
+  </div>
+  <div class="mdl-card__actions mdl-card--border">
+    <a class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
+      Get Started
+    </a>
+  </div>
+  <div class="mdl-card__menu">
+    <button class="mdl-button mdl-button--icon mdl-js-button mdl-js-ripple-effect">
+      <i class="material-icons">share</i>
+    </button>
+  </div>
+</div>
diff --git a/node_modules/material-design-lite/src/checkbox/README.md b/node_modules/material-design-lite/src/checkbox/README.md
new file mode 100755
index 0000000..2a000e7
--- /dev/null
+++ b/node_modules/material-design-lite/src/checkbox/README.md
@@ -0,0 +1,64 @@
+## Introduction
+
+The Material Design Lite (MDL) **checkbox** component is an enhanced version of the standard HTML `<input type="checkbox">` element. A checkbox consists of a small square and, typically, text that clearly communicates a binary condition that will be set or unset when the user clicks or touches it. Checkboxes typically, but not necessarily, appear in groups, and can be selected and deselected individually. The MDL checkbox component allows you to add display and click effects.
+
+Checkboxes are a common feature of most user interfaces, regardless of a site's content or function. Their design and use is therefore an important factor in the overall user experience. See the checkbox component's [Material Design specifications page](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-checkbox) for details.
+
+The enhanced checkbox component has a more vivid visual look than a standard checkbox, and may be initially or programmatically *disabled*.
+
+### To include an MDL **checkbox** component:
+
+&nbsp;1. Code a `<label>` element and give it a `for` attribute whose value is the unique id of the checkbox it will contain. The `for` attribute is optional when the `<input>` element is contained inside the `<label>` element, but is recommended for clarity.
+```html
+<label for="chkbox1">
+...
+</label>
+```
+&nbsp;2. Inside the label, code an `<input>` element and give it a `type` attribute whose value is `"checkbox"`. Also give it an `id` attribute whose value matches the label's `for` attribute value.
+```html
+<label for="chkbox1">
+  <input type="checkbox" id="chkbox1">
+</label>
+```
+&nbsp;3. Also inside the label, after the checkbox, code a `<span>` element containing the checkbox's text caption.
+```html
+<label for="chkbox1">
+  <input type="checkbox" id="chkbox1">
+  <span>Enable AutoSave</span>
+</label>
+```
+&nbsp;4. Add one or more MDL classes, separated by spaces, to the label, checkbox, and caption using the `class` attribute.
+```html
+<label for="chkbox1" class="mdl-checkbox mdl-js-checkbox">
+  <input type="checkbox" id="chkbox1" class="mdl-checkbox__input">
+  <span class="mdl-checkbox__label">Enable AutoSave</span>
+</label>
+```
+
+The checkbox component is ready for use.
+
+#### Example
+
+A checkbox with a ripple click effect.
+
+```html
+<label for="chkbox1" class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
+  <input type="checkbox" id="chkbox1" class="mdl-checkbox__input">
+  <span class="mdl-checkbox__label">Enable AutoSave</span>
+</label>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the checkbox. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-checkbox` | Defines label as an MDL component | Required on label element|
+| `mdl-js-checkbox` | Assigns basic MDL behavior to label | Required on label element |
+| `mdl-checkbox__input` | Applies basic MDL behavior to checkbox | Required on input element (checkbox) |
+| `mdl-checkbox__label` | Applies basic MDL behavior to caption | Required on span element (caption) |
+| `mdl-js-ripple-effect` | Applies *ripple* click effect | Optional; goes on label element, not input element (checkbox) |
+
+>**Note:** Disabled versions of all the available checkbox types are provided, and are invoked with the standard HTML boolean attribute `disabled`. `<input type="checkbox" id="checkbox-5" class="mdl-checkbox__input" disabled>`
+>This attribute may be added or removed programmatically via scripting.
diff --git a/node_modules/material-design-lite/src/checkbox/_checkbox.scss b/node_modules/material-design-lite/src/checkbox/_checkbox.scss
new file mode 100644
index 0000000..3dd265e
--- /dev/null
+++ b/node_modules/material-design-lite/src/checkbox/_checkbox.scss
@@ -0,0 +1,180 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-checkbox {
+  position: relative;
+
+  z-index: 1;
+
+  vertical-align: middle;
+
+  display: inline-block;
+
+  box-sizing: border-box;
+  width: 100%;
+  height: $checkbox-label-height;
+  margin: 0;
+  padding: 0;
+
+  &.is-upgraded {
+    padding-left: $checkbox-button-size + $checkbox-padding;
+  }
+}
+
+.mdl-checkbox__input {
+  line-height: $checkbox-label-height;
+
+  .mdl-checkbox.is-upgraded & {
+    // Hide input element, while still making it respond to focus.
+    position: absolute;
+    width: 0;
+    height: 0;
+    margin: 0;
+    padding: 0;
+    opacity: 0;
+    -ms-appearance: none;
+    -moz-appearance: none;
+    -webkit-appearance: none;
+    appearance: none;
+    border: none;
+  }
+}
+
+.mdl-checkbox__box-outline {
+  position: absolute;
+  top: $checkbox-top-offset;
+  left: 0;
+
+  display: inline-block;
+
+  box-sizing: border-box;
+  width: $checkbox-button-size;
+  height: $checkbox-button-size;
+  margin: 0;
+
+  cursor: pointer;
+  overflow: hidden;
+
+  border: 2px solid $checkbox-off-color;
+  border-radius: 2px;
+
+  z-index: 2;
+
+  .mdl-checkbox.is-checked & {
+    border: 2px solid $checkbox-color;
+  }
+
+  fieldset[disabled] .mdl-checkbox &,
+  .mdl-checkbox.is-disabled & {
+    border: 2px solid $checkbox-disabled-color;
+    cursor: auto;
+  }
+}
+
+.mdl-checkbox__focus-helper {
+  position: absolute;
+  top: $checkbox-top-offset;
+  left: 0;
+
+  display: inline-block;
+
+  box-sizing: border-box;
+  width: $checkbox-button-size;
+  height: $checkbox-button-size;
+  border-radius: 50%;
+
+  background-color: transparent;
+
+  .mdl-checkbox.is-focused & {
+    box-shadow: 0 0 0px ($checkbox-button-size / 2) rgba(0, 0, 0, 0.1);
+    background-color: rgba(0, 0, 0, 0.1);
+  }
+
+  .mdl-checkbox.is-focused.is-checked & {
+    box-shadow: 0 0 0px ($checkbox-button-size / 2) $checkbox-focus-color;
+    background-color: $checkbox-focus-color;
+  }
+}
+
+.mdl-checkbox__tick-outline {
+  position: absolute;
+  top: 0;
+  left: 0;
+  height: 100%;
+  width: 100%;
+  mask: url("#{$checkbox-image-path}/tick-mask.svg?embed");
+
+  background: transparent;
+  @include material-animation-default(0.28s);
+  transition-property: background;
+
+  .mdl-checkbox.is-checked & {
+    background: $checkbox-color url("#{$checkbox-image-path}/tick.svg?embed");
+  }
+
+  fieldset[disabled] .mdl-checkbox.is-checked &,
+  .mdl-checkbox.is-checked.is-disabled & {
+    background: $checkbox-disabled-color url("#{$checkbox-image-path}/tick.svg?embed");
+  }
+}
+
+.mdl-checkbox__label {
+  position: relative;
+  cursor: pointer;
+  font-size: $checkbox-label-font-size;
+  line-height: $checkbox-label-height;
+  margin: 0;
+
+  fieldset[disabled] .mdl-checkbox &,
+  .mdl-checkbox.is-disabled & {
+    color: $checkbox-disabled-color;
+    cursor: auto;
+  }
+}
+
+.mdl-checkbox__ripple-container {
+  position: absolute;
+  z-index: 2;
+  top: -(($checkbox-ripple-size - $checkbox-label-height) / 2);
+  left: -(($checkbox-ripple-size - $checkbox-button-size) / 2);
+
+  box-sizing: border-box;
+  width: $checkbox-ripple-size;
+  height: $checkbox-ripple-size;
+  border-radius: 50%;
+
+  cursor: pointer;
+
+  overflow: hidden;
+  -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
+
+  & .mdl-ripple {
+    background: $checkbox-color;
+  }
+
+  fieldset[disabled] .mdl-checkbox &,
+  .mdl-checkbox.is-disabled & {
+    cursor: auto;
+  }
+
+  fieldset[disabled] .mdl-checkbox & .mdl-ripple,
+  .mdl-checkbox.is-disabled & .mdl-ripple {
+    background: transparent;
+  }
+}
diff --git a/node_modules/material-design-lite/src/checkbox/checkbox.js b/node_modules/material-design-lite/src/checkbox/checkbox.js
new file mode 100644
index 0000000..148035b
--- /dev/null
+++ b/node_modules/material-design-lite/src/checkbox/checkbox.js
@@ -0,0 +1,269 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Checkbox MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialCheckbox = function MaterialCheckbox(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialCheckbox'] = MaterialCheckbox;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialCheckbox.prototype.Constant_ = {
+    TINY_TIMEOUT: 0.001
+  };
+
+  /**
+   * 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
+   */
+  MaterialCheckbox.prototype.CssClasses_ = {
+    INPUT: 'mdl-checkbox__input',
+    BOX_OUTLINE: 'mdl-checkbox__box-outline',
+    FOCUS_HELPER: 'mdl-checkbox__focus-helper',
+    TICK_OUTLINE: 'mdl-checkbox__tick-outline',
+    RIPPLE_EFFECT: 'mdl-js-ripple-effect',
+    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',
+    RIPPLE_CONTAINER: 'mdl-checkbox__ripple-container',
+    RIPPLE_CENTER: 'mdl-ripple--center',
+    RIPPLE: 'mdl-ripple',
+    IS_FOCUSED: 'is-focused',
+    IS_DISABLED: 'is-disabled',
+    IS_CHECKED: 'is-checked',
+    IS_UPGRADED: 'is-upgraded'
+  };
+
+  /**
+   * Handle change of state.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialCheckbox.prototype.onChange_ = function(event) {
+    this.updateClasses_();
+  };
+
+  /**
+   * Handle focus of element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialCheckbox.prototype.onFocus_ = function(event) {
+    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle lost focus of element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialCheckbox.prototype.onBlur_ = function(event) {
+    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle mouseup.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialCheckbox.prototype.onMouseUp_ = function(event) {
+    this.blur_();
+  };
+
+  /**
+   * Handle class updates.
+   *
+   * @private
+   */
+  MaterialCheckbox.prototype.updateClasses_ = function() {
+    this.checkDisabled();
+    this.checkToggleState();
+  };
+
+  /**
+   * Add blur.
+   *
+   * @private
+   */
+  MaterialCheckbox.prototype.blur_ = function() {
+    // TODO: figure out why there's a focus event being fired after our blur,
+    // so that we can avoid this hack.
+    window.setTimeout(function() {
+      this.inputElement_.blur();
+    }.bind(this), /** @type {number} */ (this.Constant_.TINY_TIMEOUT));
+  };
+
+  // Public methods.
+
+  /**
+   * Check the inputs toggle state and update display.
+   *
+   * @public
+   */
+  MaterialCheckbox.prototype.checkToggleState = function() {
+    if (this.inputElement_.checked) {
+      this.element_.classList.add(this.CssClasses_.IS_CHECKED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_CHECKED);
+    }
+  };
+  MaterialCheckbox.prototype['checkToggleState'] =
+      MaterialCheckbox.prototype.checkToggleState;
+
+  /**
+   * Check the inputs disabled state and update display.
+   *
+   * @public
+   */
+  MaterialCheckbox.prototype.checkDisabled = function() {
+    if (this.inputElement_.disabled) {
+      this.element_.classList.add(this.CssClasses_.IS_DISABLED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);
+    }
+  };
+  MaterialCheckbox.prototype['checkDisabled'] =
+      MaterialCheckbox.prototype.checkDisabled;
+
+  /**
+   * Disable checkbox.
+   *
+   * @public
+   */
+  MaterialCheckbox.prototype.disable = function() {
+    this.inputElement_.disabled = true;
+    this.updateClasses_();
+  };
+  MaterialCheckbox.prototype['disable'] = MaterialCheckbox.prototype.disable;
+
+  /**
+   * Enable checkbox.
+   *
+   * @public
+   */
+  MaterialCheckbox.prototype.enable = function() {
+    this.inputElement_.disabled = false;
+    this.updateClasses_();
+  };
+  MaterialCheckbox.prototype['enable'] = MaterialCheckbox.prototype.enable;
+
+  /**
+   * Check checkbox.
+   *
+   * @public
+   */
+  MaterialCheckbox.prototype.check = function() {
+    this.inputElement_.checked = true;
+    this.updateClasses_();
+  };
+  MaterialCheckbox.prototype['check'] = MaterialCheckbox.prototype.check;
+
+  /**
+   * Uncheck checkbox.
+   *
+   * @public
+   */
+  MaterialCheckbox.prototype.uncheck = function() {
+    this.inputElement_.checked = false;
+    this.updateClasses_();
+  };
+  MaterialCheckbox.prototype['uncheck'] = MaterialCheckbox.prototype.uncheck;
+
+  /**
+   * Initialize element.
+   */
+  MaterialCheckbox.prototype.init = function() {
+    if (this.element_) {
+      this.inputElement_ = this.element_.querySelector('.' +
+          this.CssClasses_.INPUT);
+
+      var boxOutline = document.createElement('span');
+      boxOutline.classList.add(this.CssClasses_.BOX_OUTLINE);
+
+      var tickContainer = document.createElement('span');
+      tickContainer.classList.add(this.CssClasses_.FOCUS_HELPER);
+
+      var tickOutline = document.createElement('span');
+      tickOutline.classList.add(this.CssClasses_.TICK_OUTLINE);
+
+      boxOutline.appendChild(tickOutline);
+
+      this.element_.appendChild(tickContainer);
+      this.element_.appendChild(boxOutline);
+
+      if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {
+        this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);
+        this.rippleContainerElement_ = document.createElement('span');
+        this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);
+        this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);
+        this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);
+        this.boundRippleMouseUp = this.onMouseUp_.bind(this);
+        this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);
+
+        var ripple = document.createElement('span');
+        ripple.classList.add(this.CssClasses_.RIPPLE);
+
+        this.rippleContainerElement_.appendChild(ripple);
+        this.element_.appendChild(this.rippleContainerElement_);
+      }
+      this.boundInputOnChange = this.onChange_.bind(this);
+      this.boundInputOnFocus = this.onFocus_.bind(this);
+      this.boundInputOnBlur = this.onBlur_.bind(this);
+      this.boundElementMouseUp = this.onMouseUp_.bind(this);
+      this.inputElement_.addEventListener('change', this.boundInputOnChange);
+      this.inputElement_.addEventListener('focus', this.boundInputOnFocus);
+      this.inputElement_.addEventListener('blur', this.boundInputOnBlur);
+      this.element_.addEventListener('mouseup', this.boundElementMouseUp);
+
+      this.updateClasses_();
+      this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialCheckbox,
+    classAsString: 'MaterialCheckbox',
+    cssClass: 'mdl-js-checkbox',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/checkbox/snippets/check-off.html b/node_modules/material-design-lite/src/checkbox/snippets/check-off.html
new file mode 100644
index 0000000..1cbcc25
--- /dev/null
+++ b/node_modules/material-design-lite/src/checkbox/snippets/check-off.html
@@ -0,0 +1,4 @@
+<label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect" for="checkbox-2">
+  <input type="checkbox" id="checkbox-2" class="mdl-checkbox__input">
+  <span class="mdl-checkbox__label">Checkbox</span>
+</label>
diff --git a/node_modules/material-design-lite/src/checkbox/snippets/check-on.html b/node_modules/material-design-lite/src/checkbox/snippets/check-on.html
new file mode 100644
index 0000000..cd7a065
--- /dev/null
+++ b/node_modules/material-design-lite/src/checkbox/snippets/check-on.html
@@ -0,0 +1,4 @@
+<label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect" for="checkbox-1">
+  <input type="checkbox" id="checkbox-1" class="mdl-checkbox__input" checked>
+  <span class="mdl-checkbox__label">Checkbox</span>
+</label>
diff --git a/node_modules/material-design-lite/src/chip/README.md b/node_modules/material-design-lite/src/chip/README.md
new file mode 100644
index 0000000..21a0c9f
--- /dev/null
+++ b/node_modules/material-design-lite/src/chip/README.md
@@ -0,0 +1,65 @@
+## Introduction
+
+The Material Design Lite (MDL) **chip** component is a small, interactive element.
+Chips are commonly used for contacts, text, rules, icons, and photos.
+
+## TO INCLUDE AN MDL CHIP COMPONENT:
+
+&nbsp;1. Create a container element for the chip; typically `<span>` and `<div>` are used, but any container element should work equally well. If you need interactivity, use a `<button>`, or add the `tabindex` attribute to your container.
+```html
+<span>
+</span>
+```
+
+&nbsp;2. Add in the text wrapper and the MDL classes.
+```html
+<span class="mdl-chip">
+    <span class="mdl-chip__text">Chip Text</span>
+</span>
+```
+
+&nbsp;3. For deletable chips, add in the delete icon. This can be an `<a>`, `<button>` or non-interactive tags like `<span>`.
+```html
+<span class="mdl-chip">
+    <span class="mdl-chip__text">Chip Text</span>
+    <a href="#" class="mdl-chip__action"><i class="material-icons">cancel</i></a>
+</span>
+```
+
+&nbsp;4. Contact chips need to have the `mdl-chip--contact` class added to the container, along with another container for the contact icon. The icon container for photos is typically an `<img>` tag, but other types of content can be used with a little extra supporting css.
+```html
+<span class="mdl-chip">
+    <span class="mdl-chip__contact mdl-color--teal mdl-color-text--white">A</span>
+    <span class="mdl-chip__text">Chip Text</span>
+    <a href="#" class="mdl-chip__action"><i class="material-icons">cancel</i></a>
+</span>
+```
+
+## Examples
+
+A button based contact chip whose contact image is a `<span>` with a `background-image`.
+
+```html
+<style>
+    .demo-chip .mdl-chip__contact {
+        background-image: url("./path/to/image");
+        background-size: cover;
+    }
+</style>
+
+<button class="mdl-chip demo-chip">
+    <span class="mdl-chip__contact">&nbsp;</span>
+    <span class="mdl-chip__text">Chip Text</span>
+    <a href="#" class="mdl-chip__action"><i class="material-icons">cancel</i></a>
+</button>
+```
+
+## CSS Classes
+
+| MDL Class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-chip` | Defines element as an MDL chip container | Required on "outer" container |
+| `mdl-chip--contact` | Defines an MDL chip as a contact style chip | Optional, goes on "outer" container |
+| `mdl-chip__text` | Defines element as the chip's text | Required on "inner" text container |
+| `mdl-chip__action` | Defines element as the chip's action | Required on "inner" action container, if present |
+| `mdl-chip__contact` | Defines element as the chip's contact container | Required on "inner" contact container, if the `mdl-chip--contact` class is present on "outer" container |
\ No newline at end of file
diff --git a/node_modules/material-design-lite/src/chip/_chip.scss b/node_modules/material-design-lite/src/chip/_chip.scss
new file mode 100644
index 0000000..18e0549
--- /dev/null
+++ b/node_modules/material-design-lite/src/chip/_chip.scss
@@ -0,0 +1,88 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-chip {
+    height: $chip-height;
+    font-family: $preferred_font;
+    line-height: $chip-height;
+    padding: 0 12px;
+    border: 0;
+    border-radius: $chip-height / 2;
+    background-color: $chip-bg-color;
+    display: inline-block;
+    color: $text-color-primary;
+    margin: 2px 0;
+    font-size: 0;
+    white-space: nowrap;
+
+    &__text {
+        font-size: $chip-font-size;
+        vertical-align: middle;
+        display: inline-block;
+    }
+
+    &__action {
+        height: 24px;
+        width: 24px;
+        background: transparent;
+        opacity: 0.54;
+        display: inline-block;
+        cursor: pointer;
+        text-align: center;
+        vertical-align: middle;
+        padding: 0;
+        margin: 0 0 0 4px;
+        font-size: $chip-font-size;
+        text-decoration: none;
+        color: $text-color-primary;
+        border: none;
+        outline: none;
+        overflow: hidden;
+    }
+    
+    &__contact {
+        height: $chip-height;
+        width: $chip-height;
+        border-radius: $chip-height / 2;
+        display: inline-block;
+        vertical-align: middle;
+        margin-right: 8px;
+        overflow: hidden;
+        text-align: center;
+        font-size: 18px;
+        line-height: 32px;
+    }
+    
+    &:focus {
+        outline: 0;
+        @include shadow-2dp();
+    }
+    
+    &:active {
+        background-color: $chip-bg-active-color;
+    }
+    
+    &--deletable {
+        padding-right: 4px;
+    }
+    
+    &--contact {
+        padding-left: 0;
+    }
+}
\ No newline at end of file
diff --git a/node_modules/material-design-lite/src/chip/snippets/basic.html b/node_modules/material-design-lite/src/chip/snippets/basic.html
new file mode 100644
index 0000000..f996f82
--- /dev/null
+++ b/node_modules/material-design-lite/src/chip/snippets/basic.html
@@ -0,0 +1,4 @@
+<!-- Basic Chip -->
+<span class="mdl-chip">
+    <span class="mdl-chip__text">Basic Chip</span>
+</span>
\ No newline at end of file
diff --git a/node_modules/material-design-lite/src/chip/snippets/button.html b/node_modules/material-design-lite/src/chip/snippets/button.html
new file mode 100644
index 0000000..231fdf6
--- /dev/null
+++ b/node_modules/material-design-lite/src/chip/snippets/button.html
@@ -0,0 +1,4 @@
+<!-- Button Chip -->
+<button type="button" class="mdl-chip">
+    <span class="mdl-chip__text">Button Chip</span>
+</button>
\ No newline at end of file
diff --git a/node_modules/material-design-lite/src/chip/snippets/contact.html b/node_modules/material-design-lite/src/chip/snippets/contact.html
new file mode 100644
index 0000000..2d205cf
--- /dev/null
+++ b/node_modules/material-design-lite/src/chip/snippets/contact.html
@@ -0,0 +1,5 @@
+<!-- Contact Chip -->
+<span class="mdl-chip mdl-chip--contact">
+    <span class="mdl-chip__contact mdl-color--teal mdl-color-text--white">A</span>
+    <span class="mdl-chip__text">Contact Chip</span>
+</span>
diff --git a/node_modules/material-design-lite/src/chip/snippets/deletable-contact.html b/node_modules/material-design-lite/src/chip/snippets/deletable-contact.html
new file mode 100644
index 0000000..3f45da3
--- /dev/null
+++ b/node_modules/material-design-lite/src/chip/snippets/deletable-contact.html
@@ -0,0 +1,6 @@
+<!-- Deletable Contact Chip -->
+<span class="mdl-chip mdl-chip--contact mdl-chip--deletable">
+    <img class="mdl-chip__contact" src="/templates/dashboard/images/user.jpg"></img>
+    <span class="mdl-chip__text">Deletable Contact Chip</span>
+    <a href="#" class="mdl-chip__action"><i class="material-icons">cancel</i></a>
+</span>
\ No newline at end of file
diff --git a/node_modules/material-design-lite/src/chip/snippets/deletable.html b/node_modules/material-design-lite/src/chip/snippets/deletable.html
new file mode 100644
index 0000000..6200e39
--- /dev/null
+++ b/node_modules/material-design-lite/src/chip/snippets/deletable.html
@@ -0,0 +1,5 @@
+<!-- Deletable Chip -->
+<span class="mdl-chip mdl-chip--deletable">
+    <span class="mdl-chip__text">Deletable Chip</span>
+    <button type="button" class="mdl-chip__action"><i class="material-icons">cancel</i></button>
+</span>
\ No newline at end of file
diff --git a/node_modules/material-design-lite/src/data-table/README.md b/node_modules/material-design-lite/src/data-table/README.md
new file mode 100644
index 0000000..63ff51e
--- /dev/null
+++ b/node_modules/material-design-lite/src/data-table/README.md
@@ -0,0 +1,162 @@
+## Introduction
+
+The Material Design Lite (MDL) **data-table** component is an enhanced version of the standard HTML `<table>`. A data-table consists of rows and columns of well-formatted data, presented with appropriate user interaction capabilities.
+
+Tables are a ubiquitous feature of most user interfaces, regardless of a site's content or function. Their design and use is therefore an important factor in the overall user experience. See the data-table component's [Material Design specifications page](http://www.google.com/design/spec/components/data-tables.html) for details.
+
+The available row/column/cell types in a data-table are mostly self-formatting; that is, once the data-table is defined, the individual cells require very little specific attention. For example, the rows exhibit shading behavior on mouseover and selection, numeric values are automatically formatted by default, and the addition of a single class makes the table rows individually or collectively selectable. This makes the data-table component convenient and easy to code for the developer, as well as attractive and intuitive for the user.
+
+### To include an MDL **data-table** component:
+
+&nbsp;1. Code a `<table>` element. Include `<thead>` and `<tbody>` elements to hold the title and data rows, respectively.
+```html
+<table>
+  <thead>
+  </thead>
+  <tbody>
+  </tbody>
+</table>
+```
+
+&nbsp;2. Add one or more MDL classes, separated by spaces, to the table using the `class` attribute.
+```html
+<table class="mdl-data-table mdl-js-data-table">
+  <thead>
+  </thead>
+  <tbody>
+  </tbody>
+</table>
+```
+
+&nbsp;2. Inside the `<thead>`, code exactly one table row `<tr>` containing one table header cell `<th>` for each column, and include the desired text in the header cells. To ensure proper header alignment, add the "non-numeric" MDL class to the header cell of text-only columns. (Data cells are formatted as numeric by default.)
+```html
+<table class="mdl-data-table mdl-js-data-table">
+  <thead>
+    <tr>
+      <th class="mdl-data-table__cell--non-numeric">Name</th>
+      <th>Age</th>
+      <th>ID Number</th>
+    </tr>
+  </thead>
+  <tbody>
+  </tbody>
+</table>
+```
+
+&nbsp;3. Inside the `<tbody>`, code one table row `<tr>` for each data row and one table data cell `<td>` for each column in the row. As with the header cells, add the "non-numeric" MDL class to text-only data cells to ensure proper alignment.
+```html
+<table class="mdl-data-table mdl-js-data-table">
+  <thead>
+    <tr>
+      <th class="mdl-data-table__cell--non-numeric">Name</th>
+      <th>Age</th>
+      <th>ID Number</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Don Aubrey</td>
+      <td>25</td>
+      <td>49021</td>
+    </tr>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Sophia Carson</td>
+      <td>32</td>
+      <td>10258</td>
+    </tr>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Steve Moreno</td>
+      <td>29</td>
+      <td>12359</td>
+    </tr>
+  </tbody>
+</table>
+```
+
+The data-table component is ready for use.
+
+#### Examples
+
+A data-table with a "master" select checkbox and individual row select checkboxes.
+```html
+<table class="mdl-data-table mdl-js-data-table mdl-data-table--selectable">
+  <thead>
+    <tr>
+      <th class="mdl-data-table__cell--non-numeric">Material</th>
+      <th>Quantity</th>
+      <th>Unit price</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Acrylic (Transparent)</td>
+      <td>250</td>
+      <td>$2.90</td>
+    </tr>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Plywood (Birch)</td>
+      <td>50</td>
+      <td>$1.25</td>
+    </tr>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Laminate (Gold on Blue)</td>
+      <td>10</td>
+      <td>$12.35</td>
+    </tr>
+  </tbody>
+</table>
+```
+
+A data-table without select checkboxes containing mostly text data.
+```html
+<table class="mdl-data-table mdl-js-data-table">
+  <thead>
+    <tr>
+      <th class="mdl-data-table__cell--non-numeric">Name</th>
+      <th class="mdl-data-table__cell--non-numeric">Nickname</th>
+      <th>Age</th>
+      <th class="mdl-data-table__cell--non-numeric">Living?</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">John Lennon</td>
+      <td class="mdl-data-table__cell--non-numeric">The smart one</td>
+      <td>40</td>
+      <td class="mdl-data-table__cell--non-numeric">No</td>
+    </tr>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Paul McCartney</td>
+      <td class="mdl-data-table__cell--non-numeric">The cute one</td>
+      <td>73</td>
+      <td class="mdl-data-table__cell--non-numeric">Yes</td>
+    </tr>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">George Harrison</td>
+      <td class="mdl-data-table__cell--non-numeric">The shy one</td>
+      <td>58</td>
+      <td class="mdl-data-table__cell--non-numeric">No</td>
+    </tr>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Ringo Starr</td>
+      <td class="mdl-data-table__cell--non-numeric">The funny one</td>
+      <td>74</td>
+      <td class="mdl-data-table__cell--non-numeric">Yes</td>
+    </tr>
+  </tbody>
+</table>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the data-table. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-data-table` | Defines table as an MDL component | Required on table element|
+| `mdl-js-data-table` | Assigns basic MDL behavior to table | Required on table element|
+| `mdl-data-table--selectable` | Applies all/individual selectable behavior (checkboxes) | Optional; goes on table element |
+| `mdl-data-table__header--sorted-ascending` | Applies visual styling to indicate the column is sorted in ascending order | Optional; goes on table header (`th`) |
+| `mdl-data-table__header--sorted-descending` | Applies visual styling to indicate the column is sorted in descending order | Optional; goes on table header (`th`) |
+| `mdl-data-table__cell--non-numeric` | Applies text formatting to data cell | Optional; goes on both table header and table data cells |
+| (none) | Applies numeric formatting to header or data cell (default) |  |
diff --git a/node_modules/material-design-lite/src/data-table/_data-table.scss b/node_modules/material-design-lite/src/data-table/_data-table.scss
new file mode 100644
index 0000000..1f04724
--- /dev/null
+++ b/node_modules/material-design-lite/src/data-table/_data-table.scss
@@ -0,0 +1,120 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-data-table {
+  position: relative;
+  border: $data-table-dividers;
+  border-collapse: collapse;
+  white-space: nowrap;
+  font-size: $data-table-font-size;
+  background-color: unquote("rgb(#{$color-white})");
+
+  thead {
+    padding-bottom: 3px;
+
+    .mdl-data-table__select {
+      margin-top: 0;
+    }
+  }
+
+  tbody {
+    tr {
+      position: relative;
+      height: $data-table-row-height;
+      @include material-animation-default(0.28s);
+      transition-property: background-color;
+
+      &.is-selected {
+        background-color: $data-table-selection-color;
+      }
+
+      &:hover {
+        background-color: $data-table-hover-color;
+      }
+    }
+  }
+
+  td, th {
+    padding: 0 $data-table-column-padding 12px $data-table-column-padding;
+    text-align: right;
+
+    &:first-of-type {
+      padding-left: 24px;
+    }
+
+    &:last-of-type {
+      padding-right: 24px;
+    }
+  }
+
+  td {
+    position: relative;
+    vertical-align: middle;
+    height: $data-table-row-height;
+    border-top: $data-table-dividers;
+    border-bottom: $data-table-dividers;
+    padding-top: $data-table-cell-top;
+    box-sizing: border-box;
+
+    .mdl-data-table__select {
+      vertical-align: middle;
+    }
+  }
+
+  th {
+    position: relative;
+    vertical-align: bottom;
+    text-overflow: ellipsis;
+    @include typo-body-2();
+    height: $data-table-row-height;
+    font-size: $data-table-header-font-size;
+    color: $data-table-header-color;
+    padding-bottom: 8px;
+    box-sizing: border-box;
+
+    &.mdl-data-table__header--sorted-ascending,
+    &.mdl-data-table__header--sorted-descending {
+      color: $data-table-header-sorted-color;
+      &:before {
+        @include typo-icon;
+        font-size: $data-table-header-sort-icon-size;
+        content: "\e5d8";
+        margin-right: 5px;
+        vertical-align: sub;
+      }
+      &:hover {
+        cursor: pointer;
+        &:before {
+          color: $data-table-header-sorted-icon-hover-color;
+        }
+      }
+    }
+    &.mdl-data-table__header--sorted-descending:before {
+      content: "\e5db";
+    }
+  }
+}
+
+.mdl-data-table__select {
+  width: 16px;
+}
+
+.mdl-data-table__cell--non-numeric.mdl-data-table__cell--non-numeric {
+  text-align: left;
+}
diff --git a/node_modules/material-design-lite/src/data-table/data-table.js b/node_modules/material-design-lite/src/data-table/data-table.js
new file mode 100644
index 0000000..f2d7983
--- /dev/null
+++ b/node_modules/material-design-lite/src/data-table/data-table.js
@@ -0,0 +1,177 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Data Table Card MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  var MaterialDataTable = function MaterialDataTable(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+
+  window['MaterialDataTable'] = MaterialDataTable;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialDataTable.prototype.Constant_ = {
+    // None at the moment.
+  };
+
+  /**
+   * 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
+   */
+  MaterialDataTable.prototype.CssClasses_ = {
+    DATA_TABLE: 'mdl-data-table',
+    SELECTABLE: 'mdl-data-table--selectable',
+    SELECT_ELEMENT: 'mdl-data-table__select',
+    IS_SELECTED: 'is-selected',
+    IS_UPGRADED: 'is-upgraded'
+  };
+
+  /**
+   * Generates and returns a function that toggles the selection state of a
+   * single row (or multiple rows).
+   *
+   * @param {Element} checkbox Checkbox that toggles the selection state.
+   * @param {Element} row Row to toggle when checkbox changes.
+   * @param {(Array<Object>|NodeList)=} opt_rows Rows to toggle when checkbox changes.
+   * @private
+   */
+  MaterialDataTable.prototype.selectRow_ = function(checkbox, row, opt_rows) {
+    if (row) {
+      return function() {
+        if (checkbox.checked) {
+          row.classList.add(this.CssClasses_.IS_SELECTED);
+        } else {
+          row.classList.remove(this.CssClasses_.IS_SELECTED);
+        }
+      }.bind(this);
+    }
+
+    if (opt_rows) {
+      return function() {
+        var i;
+        var el;
+        if (checkbox.checked) {
+          for (i = 0; i < opt_rows.length; i++) {
+            el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');
+            el['MaterialCheckbox'].check();
+            opt_rows[i].classList.add(this.CssClasses_.IS_SELECTED);
+          }
+        } else {
+          for (i = 0; i < opt_rows.length; i++) {
+            el = opt_rows[i].querySelector('td').querySelector('.mdl-checkbox');
+            el['MaterialCheckbox'].uncheck();
+            opt_rows[i].classList.remove(this.CssClasses_.IS_SELECTED);
+          }
+        }
+      }.bind(this);
+    }
+  };
+
+  /**
+   * Creates a checkbox for a single or or multiple rows and hooks up the
+   * event handling.
+   *
+   * @param {Element} row Row to toggle when checkbox changes.
+   * @param {(Array<Object>|NodeList)=} opt_rows Rows to toggle when checkbox changes.
+   * @private
+   */
+  MaterialDataTable.prototype.createCheckbox_ = function(row, opt_rows) {
+    var label = document.createElement('label');
+    var labelClasses = [
+      'mdl-checkbox',
+      'mdl-js-checkbox',
+      'mdl-js-ripple-effect',
+      this.CssClasses_.SELECT_ELEMENT
+    ];
+    label.className = labelClasses.join(' ');
+    var checkbox = document.createElement('input');
+    checkbox.type = 'checkbox';
+    checkbox.classList.add('mdl-checkbox__input');
+
+    if (row) {
+      checkbox.checked = row.classList.contains(this.CssClasses_.IS_SELECTED);
+      checkbox.addEventListener('change', this.selectRow_(checkbox, row));
+    } else if (opt_rows) {
+      checkbox.addEventListener('change', this.selectRow_(checkbox, null, opt_rows));
+    }
+
+    label.appendChild(checkbox);
+    componentHandler.upgradeElement(label, 'MaterialCheckbox');
+    return label;
+  };
+
+  /**
+   * Initialize element.
+   */
+  MaterialDataTable.prototype.init = function() {
+    if (this.element_) {
+      var firstHeader = this.element_.querySelector('th');
+      var bodyRows = Array.prototype.slice.call(this.element_.querySelectorAll('tbody tr'));
+      var footRows = Array.prototype.slice.call(this.element_.querySelectorAll('tfoot tr'));
+      var rows = bodyRows.concat(footRows);
+
+      if (this.element_.classList.contains(this.CssClasses_.SELECTABLE)) {
+        var th = document.createElement('th');
+        var headerCheckbox = this.createCheckbox_(null, rows);
+        th.appendChild(headerCheckbox);
+        firstHeader.parentElement.insertBefore(th, firstHeader);
+
+        for (var i = 0; i < rows.length; i++) {
+          var firstCell = rows[i].querySelector('td');
+          if (firstCell) {
+            var td = document.createElement('td');
+            if (rows[i].parentNode.nodeName.toUpperCase() === 'TBODY') {
+              var rowCheckbox = this.createCheckbox_(rows[i]);
+              td.appendChild(rowCheckbox);
+            }
+            rows[i].insertBefore(td, firstCell);
+          }
+        }
+        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
+      }
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialDataTable,
+    classAsString: 'MaterialDataTable',
+    cssClass: 'mdl-js-data-table'
+  });
+})();
diff --git a/node_modules/material-design-lite/src/data-table/snippets/data-table.html b/node_modules/material-design-lite/src/data-table/snippets/data-table.html
new file mode 100644
index 0000000..e269e04
--- /dev/null
+++ b/node_modules/material-design-lite/src/data-table/snippets/data-table.html
@@ -0,0 +1,26 @@
+<table class="mdl-data-table mdl-js-data-table mdl-data-table--selectable mdl-shadow--2dp">
+  <thead>
+    <tr>
+      <th class="mdl-data-table__cell--non-numeric">Material</th>
+      <th>Quantity</th>
+      <th>Unit price</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Acrylic (Transparent)</td>
+      <td>25</td>
+      <td>$2.90</td>
+    </tr>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Plywood (Birch)</td>
+      <td>50</td>
+      <td>$1.25</td>
+    </tr>
+    <tr>
+      <td class="mdl-data-table__cell--non-numeric">Laminate (Gold on Blue)</td>
+      <td>10</td>
+      <td>$2.35</td>
+    </tr>
+  </tbody>
+</table>
diff --git a/node_modules/material-design-lite/src/demos.css b/node_modules/material-design-lite/src/demos.css
new file mode 100644
index 0000000..d0cfefb
--- /dev/null
+++ b/node_modules/material-design-lite/src/demos.css
@@ -0,0 +1,39 @@
+/**
+ * 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-page {
+  width: 100%;
+  height: auto;
+
+  margin: 0;
+  padding: 0;
+
+  padding: 24px;
+  box-sizing: border-box;
+}
+
+.demo-preview-block {
+  padding: 20px;
+  padding-bottom: 0;
+  margin-bottom: 0;
+  box-sizing: border-box;
+  width: 100%;
+}
+
+.demo-code {
+  width: 100%;
+  box-sizing: border-box;
+}
diff --git a/node_modules/material-design-lite/src/dialog/README.md b/node_modules/material-design-lite/src/dialog/README.md
new file mode 100644
index 0000000..6faff7e
--- /dev/null
+++ b/node_modules/material-design-lite/src/dialog/README.md
@@ -0,0 +1,128 @@
+## Introduction
+
+The Material Design Lite (MDL) **dialog** component allows for verification of
+user actions, simple data input, and alerts to provide extra information to users.
+
+## Basic Usage
+
+To use the dialog component, you must be using a browser that supports the [dialog element](http://www.w3.org/TR/2013/CR-html5-20130806/interactive-elements.html#the-dialog-element).
+Only Chrome and Opera have native support at the time of writing.
+For other browsers you will need to include the [dialog polyfill](https://github.com/GoogleChrome/dialog-polyfill) or create your own.
+
+Once you have dialog support create a dialog element.
+The element when using the polyfill **must** be a child of the `body` element.
+Within that container, add a content element with the class `mdl-dialog__content`.
+Add you content, then create an action container with the class `mdl-dialog__actions`.
+Finally for the markup, add your buttons within this container for triggering dialog functions.
+
+Keep in mind, the order is automatically reversed for actions.
+Material Design requires that the primary (confirmation) action be displayed last.
+So, the first action you create will appear last on the action bar.
+This allows for more natural coding and tab ordering while following the specification.
+
+Remember to add the event handlers for your action items.
+After your dialog markup is created, add the event listeners to the page to trigger the dialog to show.
+
+For example:
+
+```javascript
+  var button = document.querySelector('button');
+  var dialog = document.querySelector('dialog');
+  button.addEventListener('click', function() {
+    dialog.showModal();
+    /* Or dialog.show(); to show the dialog without a backdrop. */
+  });
+```
+
+## Examples
+
+### Simple Dialog
+
+See this example live in [codepen](http://codepen.io/Garbee/full/EPoaMj/).
+
+```html
+<body>
+  <button id="show-dialog" type="button" class="mdl-button">Show Dialog</button>
+  <dialog class="mdl-dialog">
+    <h4 class="mdl-dialog__title">Allow data collection?</h4>
+    <div class="mdl-dialog__content">
+      <p>
+        Allowing us to collect data will let us get you the information you want faster.
+      </p>
+    </div>
+    <div class="mdl-dialog__actions">
+      <button type="button" class="mdl-button">Agree</button>
+      <button type="button" class="mdl-button close">Disagree</button>
+    </div>
+  </dialog>
+  <script>
+    var dialog = document.querySelector('dialog');
+    var showDialogButton = document.querySelector('#show-dialog');
+    if (! dialog.showModal) {
+      dialogPolyfill.registerDialog(dialog);
+    }
+    showDialogButton.addEventListener('click', function() {
+      dialog.showModal();
+    });
+    dialog.querySelector('.close').addEventListener('click', function() {
+      dialog.close();
+    });
+  </script>
+</body>
+```
+
+### Dialog with full width actions
+
+See this example live in [codepen](http://codepen.io/Garbee/full/JGMowG/).
+
+```html
+<body>
+  <button type="button" class="mdl-button show-modal">Show Modal</button>
+  <dialog class="mdl-dialog">
+    <div class="mdl-dialog__content">
+      <p>
+        Allow this site to collect usage data to improve your experience?
+      </p>
+    </div>
+    <div class="mdl-dialog__actions mdl-dialog__actions--full-width">
+      <button type="button" class="mdl-button">Agree</button>
+      <button type="button" class="mdl-button close">Disagree</button>
+    </div>
+  </dialog>
+  <script>
+    var dialog = document.querySelector('dialog');
+    var showModalButton = document.querySelector('.show-modal');
+    if (! dialog.showModal) {
+      dialogPolyfill.registerDialog(dialog);
+    }
+    showModalButton.addEventListener('click', function() {
+      dialog.showModal();
+    });
+    dialog.querySelector('.close').addEventListener('click', function() {
+      dialog.close();
+    });
+  </script>
+</body>
+```
+
+## CSS Classes
+
+### Blocks
+
+| MDL Class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-dialog` | Defines the container of the dialog component. | Required on dialog container. |
+
+### Elements
+
+| MDL Class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-dialog__title` | Defines the title container in the dialog. | Optional on title container. |
+| `mdl-dialog__content` | Defines the content container of the dialog. | Required on content container. |
+| `mdl-dialog__actions` | Defines the actions container in the dialog. | Required on action container. |
+
+### Modifiers
+
+| MDL Class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-dialog__actions--full-width` | Modifies the actions to each take the full width of the container. This makes each take their own line. | Optional on action container. |
diff --git a/node_modules/material-design-lite/src/dialog/_dialog.scss b/node_modules/material-design-lite/src/dialog/_dialog.scss
new file mode 100644
index 0000000..9f2c3e6
--- /dev/null
+++ b/node_modules/material-design-lite/src/dialog/_dialog.scss
@@ -0,0 +1,57 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-dialog {
+    border: none;
+    @include shadow-24dp;
+    @include dialog-width;
+
+    &__title {
+        padding: 24px 24px 0;
+        margin: 0;
+        font-size: 2.5rem;
+    }
+    &__actions {
+        padding: 8px 8px 8px 24px;
+        display: flex;
+        flex-direction: row-reverse;
+        flex-wrap: wrap;
+        > * {
+            margin-right: 8px;
+            height: 36px;
+            &:first-child {
+                margin-right: 0;
+            }
+        }
+        &--full-width {
+          padding: 0 0 8px 0;
+          > * {
+            height: 48px;
+            flex: 0 0 100%;
+            padding-right: 16px;
+            margin-right: 0;
+            text-align: right;
+          }
+        }
+    }
+    &__content {
+        padding: 20px 24px 24px 24px;
+        color: $dialog-content-color;
+    }
+}
diff --git a/node_modules/material-design-lite/src/footer/README.md b/node_modules/material-design-lite/src/footer/README.md
new file mode 100755
index 0000000..3913a51
--- /dev/null
+++ b/node_modules/material-design-lite/src/footer/README.md
@@ -0,0 +1,405 @@
+## Introduction
+
+The Material Design Lite (MDL) **footer** component is a comprehensive container intended to present a substantial amount of related content in a visually attractive and logically intuitive area. Although it is called "footer", it may be placed at any appropriate location on a device screen, either before or after other content.
+
+An MDL footer component takes two basic forms: *mega-footer* and *mini-footer*. As the names imply, mega-footers contain more (and more complex) content than mini-footers. A mega-footer presents multiple sections of content separated by horizontal rules, while a mini-footer presents a single section of content. Both footer forms have their own internal structures, including required and optional elements, and typically include both informational and clickable content, such as links.
+
+Footers, as represented by this component, are a fairly new feature in user interfaces, and allow users to view discrete blocks of content in a coherent and consistently organized way. Their design and use is an important factor in the overall user experience.
+
+### To include an MDL **mega-footer** component:
+
+&nbsp;1a. Code a `<footer>` element. Inside the footer, include one `<div>` element for each content section, typically three: *top*, *middle*, and *bottom*.
+```html
+<footer>
+  <div>
+  ...
+  </div>
+  <div>
+  ...
+  </div>
+  <div>
+  ...
+  </div>
+</footer>
+```
+&nbsp;1b. Add the appropriate MDL classes to the footer and divs using the `class` attribute.
+```html
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__top-section">
+  ...
+  </div>
+  <div class="mdl-mega-footer__middle-section">
+  ...
+  </div>
+  <div class="mdl-mega-footer__bottom-section">
+  ...
+  </div>
+</footer>
+```
+&nbsp;2a. Inside the top section div, code two sibling "inner" divs for the *left* and *right* content sections.
+```html
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__top-section">
+    <div>
+    ...
+    </div>
+    <div>
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__middle-section">
+  ...
+  </div>
+  <div class="mdl-mega-footer__bottom-section">
+  ...
+  </div>
+</footer>
+```
+&nbsp;2b. Add the appropriate MDL classes to the two "inner" left and right divs using the `class` attribute.
+```html
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__top-section">
+    <div class="mdl-mega-footer__left-section">
+    ...
+    </div>
+    <div class="mdl-mega-footer__right-section">
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__middle-section">
+  ...
+  </div>
+  <div class="mdl-mega-footer__bottom-section">
+  ...
+  </div>
+</footer>
+```
+&nbsp;3a. Inside the middle section div, code one or more sibling "inner" divs for the *drop-down* content sections. That is, for two drop-down sections, you would code two divs.
+```html
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__top-section">
+    <div class="mdl-mega-footer__left-section">
+    ...
+    </div>
+    <div class="mdl-mega-footer__right-section">
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__middle-section">
+    <div>
+    ...
+    </div>
+    <div>
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__bottom-section">
+  ...
+  </div>
+</footer>
+```
+&nbsp;3b. Add the appropriate MDL classes to the two "inner" drop-down divs using the `class` attribute.
+```html
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__top-section">
+    <div class="mdl-mega-footer__left-section">
+    ...
+    </div>
+    <div class="mdl-mega-footer__right-section">
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__middle-section">
+    <div class="mdl-mega-footer__drop-down-section">
+    ...
+    </div>
+    <div class="mdl-mega-footer__drop-down-section">
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__bottom-section">
+  ...
+  </div>
+</footer>
+```
+&nbsp;4a. Inside the bottom section div, code an "inner" div for the section heading and a sibling unordered list for the bottom section links.
+```html
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__top-section">
+    <div class="mdl-mega-footer__left-section">
+    ...
+    </div>
+    <div class="mdl-mega-footer__right-section">
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__middle-section">
+    <div class="mdl-mega-footer__drop-down-section">
+    ...
+    </div>
+    <div class="mdl-mega-footer__drop-down-section">
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__bottom-section">
+    <div>
+      ...
+    </div>
+    <ul>
+      ...
+    </ul>
+  </div>
+</footer>
+```
+&nbsp;4b. Add the appropriate MDL classes to the "inner" div heading and list using the `class` attribute.
+```html
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__top-section">
+    <div class="mdl-mega-footer__left-section">
+    ...
+    </div>
+    <div class="mdl-mega-footer__right-section">
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__middle-section">
+    <div class="mdl-mega-footer__drop-down-section">
+    ...
+    </div>
+    <div class="mdl-mega-footer__drop-down-section">
+    ...
+    </div>
+  </div>
+  <div class="mdl-mega-footer__bottom-section">
+    <div class="mdl-logo">
+    </div>
+    <ul class="mdl-mega-footer__link-list">
+      ...
+    </ul>
+  </div>
+</footer>
+```
+&nbsp;5. Add content to the top (left and right), middle (drop-downs), and bottom (text and links) sections of the footer; include any appropriate MDL classes using the `class` attribute.
+```html
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__top-section">
+    <div class="mdl-mega-footer__left-section">
+      <button class="mdl-mega-footer__social-btn"></button>
+      <button class="mdl-mega-footer__social-btn"></button>
+      <button class="mdl-mega-footer__social-btn"></button>
+    </div>
+    <div class="mdl-mega-footer__right-section">
+      <a href="">Link 1</a>
+      <a href="">Link 2</a>
+      <a href="">Link 3</a>
+    </div>
+  </div>
+  <div class="mdl-mega-footer__middle-section">
+    <div class="mdl-mega-footer__drop-down-section">
+      <h1 class="mdl-mega-footer__heading">Drop-down 1 Heading</h1>
+      <ul class="mdl-mega-footer__link-list">
+        <li><a href="">Link A</a></li>
+        <li><a href="">Link B</a></li>
+        <li><a href="">Link C</a></li>
+        <li><a href="">Link D</a></li>
+      </ul>
+    </div>
+    <div class="mdl-mega-footer__drop-down-section">
+      <h1 class="mdl-mega-footer__heading">Drop-down 2 Heading</h1>
+      <ul class="mdl-mega-footer__link-list">
+        <li><a href="">Link A</a></li>
+        <li><a href="">Link B</a></li>
+        <li><a href="">Link C</a></li>
+      </ul>
+    </div>
+  </div>
+  <div class="mdl-mega-footer__bottom-section">
+    <div class="mdl-logo">
+    Mega-Footer Bottom Section Heading
+    </div>
+    <ul class="mdl-mega-footer__link-list">
+      <li><a href="">Link A</a></li>
+      <li><a href="">Link B</a></li>
+    </ul>
+  </div>
+</footer>
+```
+
+The mega-footer component is ready for use.
+
+#### Examples
+
+A mega-footer component with three sections and two drop-down sections in the middle section.
+```html
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__top-section">
+    <div class="mdl-mega-footer__left-section">
+      <button class="mdl-mega-footer__social-btn"></button>
+      <button class="mdl-mega-footer__social-btn"></button>
+      <button class="mdl-mega-footer__social-btn"></button>
+    </div>
+    <div class="mdl-mega-footer__right-section">
+      <a href="#">Introduction</a>
+      <a href="#">App Status Dashboard</a>
+      <a href="#">Terms of Service</a>
+    </div>
+  </div>
+  <div class="mdl-mega-footer__middle-section">
+    <div class="mdl-mega-footer__drop-down-section">
+      <h1 class="mdl-mega-footer__heading">Learning and Support</h1>
+      <ul class="mdl-mega-footer__link-list">
+        <li><a href="#">Resource Center</a></li>
+        <li><a href="#">Help Center</a></li>
+        <li><a href="#">Community</a></li>
+        <li><a href="#">Learn with Google</a></li>
+        <li><a href="#">Small Business Community</a></li>
+        <li><a href="#">Think Insights</a></li>
+      </ul>
+    </div>
+    <div class="mdl-mega-footer__drop-down-section">
+      <h1 class="mdl-mega-footer__heading">Just for Developers</h1>
+      <ul class="mdl-mega-footer__link-list">
+        <li><a href="#">Google Developers</a></li>
+        <li><a href="#">AdWords API</a></li>
+        <li><a href="#">AdWords Scipts</a></li>
+        <li><a href="#">AdWords Remarketing Tag</a></li>
+      </ul>
+    </div>
+  </div>
+  <div class="mdl-mega-footer__bottom-section">
+    <div class="mdl-logo">
+      More Information
+    </div>
+    <ul class="mdl-mega-footer__link-list">
+      <li><a href="#">Help</a></li>
+      <li><a href="#">Privacy and Terms</a></li>
+    </ul>
+  </div>
+</footer>
+```
+
+### To include an MDL **mini-footer** component:
+
+&nbsp;1a. Code a `<footer>` element. Inside the footer, code two `<div>` elements, one for the *left* section and one for the *right* section.
+```html
+<footer>
+  <div>
+  ...
+  </div>
+  <div>
+  ...
+  </div>
+</footer>
+```
+&nbsp;1b. Add the appropriate MDL classes to the footer and divs using the `class` attribute.
+```html
+<footer class="mdl-mini-footer">
+  <div class="mdl-mini-footer__left-section">
+  ...
+  </div>
+  <div class="mdl-mini-footer__right-section">
+  ...
+  </div>
+</footer>
+```
+&nbsp;2a. Inside the left section div, code an "inner" div for the section heading and a sibling unordered list for the left section links.
+```html
+<footer class="mdl-mini-footer">
+  <div class="mdl-mini-footer__left-section">
+    <div>
+      ...
+    </div>
+    <ul>
+      ...
+    </ul>
+  </div>
+  <div class="mdl-mini-footer__right-section">
+  ...
+  </div>
+</footer>
+```
+&nbsp;2b. Add the appropriate MDL classes to the "inner" div and list using the `class` attribute.
+```html
+<footer class="mdl-mini-footer">
+  <div class="mdl-mini-footer__left-section">
+    <div class="mdl-logo">
+      ...
+    </div>
+    <ul class="mdl-mini-footer__link-list">
+      ...
+    </ul>
+  </div>
+  <div class="mdl-mini-footer__right-section">
+  ...
+  </div>
+</footer>
+```
+&nbsp;3. Add content to the left (text and links) and right (text or decoration) sections of the footer; include any appropriate MDL classes using the `class` attribute.
+```html
+<footer class="mdl-mini-footer">
+  <div class="mdl-mini-footer__left-section">
+    <div class="mdl-logo">
+      Mini-footer Heading
+    </div>
+    <ul class="mdl-mini-footer__link-list">
+      <li><a href="">Link 1</a></li>
+      <li><a href="">Link 2</a></li>
+      <li><a href="">Link 3</a></li>
+    </ul>
+  </div>
+  <div class="mdl-mini-footer__right-section">
+    <button class="mdl-mini-footer__social-btn"></button>
+    <button class="mdl-mini-footer__social-btn"></button>
+    <button class="mdl-mini-footer__social-btn"></button>
+  </div>
+</footer>
+```
+
+The mini-footer component is ready for use.
+
+#### Examples
+
+A mini-footer with left and right sections.
+
+```html
+<footer class="mdl-mini-footer">
+  <div class="mdl-mini-footer__left-section">
+    <div class="mdl-logo">
+      More Information
+    </div>
+    <ul class="mdl-mini-footer__link-list">
+      <li><a href="#">Help</a></li>
+      <li><a href="#">Privacy and Terms</a></li>
+      <li><a href="#">User Agreement</a></li>
+    </ul>
+  </div>
+  <div class="mdl-mini-footer__right-section">
+    <button class="mdl-mini-footer__social-btn"></button>
+    <button class="mdl-mini-footer__social-btn"></button>
+    <button class="mdl-mini-footer__social-btn"></button>
+  </div>
+</footer>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual enhancements to the footer. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-mega-footer` | Defines container as an MDL mega-footer component | Required on footer element |
+| `mdl-mega-footer__top-section` | Defines container as a footer top section | Required on top section "outer" div element |
+| `mdl-mega-footer__left-section` | Defines container as a left section | Required on left section "inner" div element |
+| `mdl-mega-footer__social-btn` | Defines a decorative square within mega-footer | Required on button element (if used) |
+| `mdl-mega-footer__right-section` | Defines container as a right section | Required on right section "inner" div element |
+| `mdl-mega-footer__middle-section` | Defines container as a footer middle section | Required on middle section "outer" div element |
+| `mdl-mega-footer__drop-down-section` | Defines container as a drop-down (vertical) content area | Required on drop-down "inner" div elements |
+| `mdl-mega-footer__heading` | Defines a heading as a mega-footer heading | Required on h1 element inside drop-down section |
+| `mdl-mega-footer__link-list` | Defines an unordered list as a drop-down (vertical) list | Required on ul element inside drop-down section |
+| `mdl-mega-footer__bottom-section` | Defines container as a footer bottom section | Required on bottom section "outer" div element |
+| `mdl-logo` | Defines a container as a styled section heading | Required on "inner" div element in mega-footer bottom-section or mini-footer left-section |
+| `mdl-mini-footer` | Defines container as an MDL mini-footer component | Required on footer element |
+| `mdl-mini-footer__left-section` | Defines container as a left section | Required on left section "inner" div element |
+| `mdl-mini-footer__link-list` | Defines an unordered list as an inline (horizontal) list | Required on ul element sibling to "mdl-logo" div element |
+| `mdl-mini-footer__right-section` | Defines container as a right section | Required on right section "inner" div element |
+| `mdl-mini-footer__social-btn` | Defines a decorative square within mini-footer | Required on button element (if used) |
diff --git a/node_modules/material-design-lite/src/footer/_mega_footer.scss b/node_modules/material-design-lite/src/footer/_mega_footer.scss
new file mode 100644
index 0000000..49ea23a
--- /dev/null
+++ b/node_modules/material-design-lite/src/footer/_mega_footer.scss
@@ -0,0 +1,321 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-mega-footer {
+  padding: $footer-min-padding $footer-padding-sides;
+
+  color: $footer-color;
+  background-color: $footer-bg-color;
+}
+
+
+.mdl-mega-footer--top-section:after,
+.mdl-mega-footer--middle-section:after,
+.mdl-mega-footer--bottom-section:after,
+.mdl-mega-footer__top-section:after,
+.mdl-mega-footer__middle-section:after,
+.mdl-mega-footer__bottom-section:after {
+  content: '';
+  display: block;
+  clear: both;
+}
+
+.mdl-mega-footer--left-section,
+.mdl-mega-footer__left-section {
+  margin-bottom: $footer-min-padding;
+}
+
+.mdl-mega-footer--right-section,
+.mdl-mega-footer__right-section {
+  margin-bottom: $footer-min-padding;
+}
+
+.mdl-mega-footer--right-section a,
+.mdl-mega-footer__right-section a {
+  display: block;
+
+  margin-bottom: $footer-min-padding;
+
+  color: inherit;
+  text-decoration: none;
+}
+
+@media screen and (min-width: 760px) {
+  .mdl-mega-footer--left-section,
+  .mdl-mega-footer__left-section {
+    float: left;
+  }
+
+  .mdl-mega-footer--right-section,
+  .mdl-mega-footer__right-section {
+    float: right;
+  }
+
+  .mdl-mega-footer--right-section a,
+  .mdl-mega-footer__right-section a {
+    display: inline-block;
+
+    margin-left: $footer-min-padding;
+
+    line-height: $footer-btn-size;
+    vertical-align: middle;
+  }
+}
+
+.mdl-mega-footer--social-btn,
+.mdl-mega-footer__social-btn {
+  width: $footer-btn-size;
+  height: $footer-btn-size;
+
+  padding: 0;
+  margin: 0;
+
+  background-color: $footer-button-fill-color;
+
+  border: none;
+}
+
+.mdl-mega-footer--drop-down-section,
+.mdl-mega-footer__drop-down-section {
+  display: block;
+
+  position: relative;
+}
+
+@media screen and (min-width: 760px) {
+  .mdl-mega-footer--drop-down-section,
+  .mdl-mega-footer__drop-down-section {
+    width: 33%;
+  }
+
+  .mdl-mega-footer--drop-down-section:nth-child(1),
+  .mdl-mega-footer--drop-down-section:nth-child(2),
+  .mdl-mega-footer__drop-down-section:nth-child(1),
+  .mdl-mega-footer__drop-down-section:nth-child(2) {
+    float: left;
+  }
+
+  .mdl-mega-footer--drop-down-section:nth-child(3),
+  .mdl-mega-footer__drop-down-section:nth-child(3) {
+    float: right;
+
+    &:after {
+      clear: right;
+    }
+  }
+
+  .mdl-mega-footer--drop-down-section:nth-child(4),
+  .mdl-mega-footer__drop-down-section:nth-child(4) {
+    clear: right;
+    float: right;
+  }
+
+  .mdl-mega-footer--middle-section:after,
+  .mdl-mega-footer__middle-section:after {
+    content: '';
+
+    display: block;
+
+    clear: both;
+  }
+
+  .mdl-mega-footer--bottom-section,
+  .mdl-mega-footer__bottom-section {
+    padding-top: 0;
+  }
+}
+
+@media screen and (min-width: 1024px) {
+  .mdl-mega-footer--drop-down-section,
+  .mdl-mega-footer--drop-down-section:nth-child(3),
+  .mdl-mega-footer--drop-down-section:nth-child(4),
+  .mdl-mega-footer__drop-down-section,
+  .mdl-mega-footer__drop-down-section:nth-child(3),
+  .mdl-mega-footer__drop-down-section:nth-child(4) {
+    width: 24%;
+
+    float: left;
+  }
+}
+
+.mdl-mega-footer--heading-checkbox,
+.mdl-mega-footer__heading-checkbox {
+  position: absolute;
+  width: 100%;
+  height: $footer-heading-line-height + ($footer-min-padding * 2);
+
+  padding: ($footer-min-padding * 2);
+  margin: 0;
+  margin-top: -$footer-min-padding;
+
+  cursor: pointer;
+
+  z-index: 1;
+  opacity: 0;
+
+  & + .mdl-mega-footer--heading:after,
+  & + .mdl-mega-footer__heading:after {
+    font-family: 'Material Icons';
+    content: '\E5CE'
+  }
+}
+
+.mdl-mega-footer--heading-checkbox:checked,
+.mdl-mega-footer__heading-checkbox:checked {
+  // WebViews in iOS 9 break the "~" operator, and WebViews in OS X 10.10
+  // break consecutive "+" operators in some cases. Therefore, we need to use
+  // both here to cover all the bases.
+  & ~ .mdl-mega-footer--link-list,
+  & ~ .mdl-mega-footer__link-list,
+  & + .mdl-mega-footer--heading + .mdl-mega-footer--link-list,
+  & + .mdl-mega-footer__heading + .mdl-mega-footer__link-list {
+    display: none;
+  }
+
+  & + .mdl-mega-footer--heading:after,
+  & + .mdl-mega-footer__heading:after {
+    font-family: 'Material Icons';
+    content: '\E5CF'
+  }
+}
+
+.mdl-mega-footer--heading,
+.mdl-mega-footer__heading {
+  position: relative;
+  width: 100%;
+
+  padding-right: $footer-heading-line-height + $footer-min-padding;
+  margin-bottom: $footer-min-padding;
+
+  box-sizing:border-box;
+
+  font-size: $footer-heading-font-size;
+  line-height: $footer-heading-line-height;
+
+  font-weight: 500;
+
+  white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
+
+  color: $footer-heading-color;
+}
+
+.mdl-mega-footer--heading:after,
+.mdl-mega-footer__heading:after {
+  content: '';
+
+  position: absolute;
+  top: 0;
+  right: 0;
+
+  display: block;
+
+  width: $footer-heading-line-height;
+  height: $footer-heading-line-height;
+
+  background-size: cover;
+}
+
+.mdl-mega-footer--link-list,
+.mdl-mega-footer__link-list {
+  list-style: none;
+
+  margin: 0;
+  padding: 0;
+
+  margin-bottom: $footer-min-padding * 2;
+  &:after {
+    clear: both;
+    display: block;
+    content: '';
+  }
+}
+
+.mdl-mega-footer--link-list li,
+.mdl-mega-footer__link-list li {
+  @include typo-body-1();
+  line-height: 20px;
+}
+
+.mdl-mega-footer--link-list a,
+.mdl-mega-footer__link-list a {
+  color: inherit;
+  text-decoration: none;
+  white-space: nowrap;
+}
+
+@media screen and (min-width: 760px) {
+  .mdl-mega-footer--heading-checkbox,
+  .mdl-mega-footer__heading-checkbox {
+    display: none;
+
+    & + .mdl-mega-footer--heading:after,
+    & + .mdl-mega-footer__heading:after {
+      content: '';
+    }
+  }
+  .mdl-mega-footer--heading-checkbox:checked,
+  .mdl-mega-footer__heading-checkbox:checked {
+    // WebViews in iOS 9 break the "~" operator, and WebViews in OS X 10.10
+    // break consecutive "+" operators in some cases. Therefore, we need to use
+    // both here to cover all the bases.
+    & ~ .mdl-mega-footer--link-list,
+    & ~ .mdl-mega-footer__link-list,
+    & + .mdl-mega-footer__heading + .mdl-mega-footer__link-list,
+    & + .mdl-mega-footer--heading + .mdl-mega-footer--link-list {
+      display: block;
+    }
+
+    & + .mdl-mega-footer--heading:after,
+    & + .mdl-mega-footer__heading:after {
+      content: '';
+    }
+  }
+}
+
+.mdl-mega-footer--bottom-section,
+.mdl-mega-footer__bottom-section {
+  padding-top: $footer-min-padding;
+  margin-bottom: $footer-min-padding;
+}
+
+.mdl-logo {
+  margin-bottom: $footer-min-padding;
+  color: white;
+}
+
+.mdl-mega-footer--bottom-section .mdl-mega-footer--link-list li,
+.mdl-mega-footer__bottom-section .mdl-mega-footer__link-list li {
+  float: left;
+
+  margin-bottom: 0;
+  margin-right: $footer-min-padding;
+}
+
+
+
+@media screen and (min-width: 760px) {
+  .mdl-logo {
+    float: left;
+
+    margin-bottom: 0;
+    margin-right: $footer-min-padding;
+  }
+}
diff --git a/node_modules/material-design-lite/src/footer/_mini_footer.scss b/node_modules/material-design-lite/src/footer/_mini_footer.scss
new file mode 100644
index 0000000..6a1c8ed
--- /dev/null
+++ b/node_modules/material-design-lite/src/footer/_mini_footer.scss
@@ -0,0 +1,88 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+.mdl-mini-footer {
+  display: flex;
+  flex-flow: row wrap;
+  justify-content: space-between;
+
+  padding: ($padding * 2) $padding;
+
+  color: $footer-color;
+  background-color: $footer-bg-color;
+
+  &:after {
+    content: '';
+    display: block;
+  }
+
+  & .mdl-logo {
+    line-height: $footer-btn-size;
+  }
+}
+
+.mdl-mini-footer--link-list,
+.mdl-mini-footer__link-list {
+  display: flex;
+  flex-flow: row nowrap;
+
+  list-style: none;
+
+  margin: 0;
+  padding: 0;
+
+  & li {
+    margin-bottom: 0;
+    margin-right: $padding;
+
+    @media screen and (min-width: 760px) {
+      line-height: $footer-btn-size;
+    }
+  }
+
+  & a {
+    color: inherit;
+    text-decoration: none;
+    white-space: nowrap;
+  }
+}
+
+.mdl-mini-footer--left-section,
+.mdl-mini-footer__left-section {
+  display: inline-block;
+  order: 0;
+}
+
+.mdl-mini-footer--right-section,
+.mdl-mini-footer__right-section {
+  display: inline-block;
+  order: 1;
+}
+
+.mdl-mini-footer--social-btn,
+.mdl-mini-footer__social-btn {
+  width: $footer-btn-size;
+  height: $footer-btn-size;
+
+  padding: 0;
+  margin: 0;
+
+  background-color: $footer-button-fill-color;
+
+  border: none;
+}
diff --git a/node_modules/material-design-lite/src/footer/snippets/mega-footer.html b/node_modules/material-design-lite/src/footer/snippets/mega-footer.html
new file mode 100644
index 0000000..edd2f7d
--- /dev/null
+++ b/node_modules/material-design-lite/src/footer/snippets/mega-footer.html
@@ -0,0 +1,57 @@
+<footer class="mdl-mega-footer">
+  <div class="mdl-mega-footer__middle-section">
+
+    <div class="mdl-mega-footer__drop-down-section">
+      <input class="mdl-mega-footer__heading-checkbox" type="checkbox" checked>
+      <h1 class="mdl-mega-footer__heading">Features</h1>
+      <ul class="mdl-mega-footer__link-list">
+        <li><a href="#">About</a></li>
+        <li><a href="#">Terms</a></li>
+        <li><a href="#">Partners</a></li>
+        <li><a href="#">Updates</a></li>
+      </ul>
+    </div>
+
+    <div class="mdl-mega-footer__drop-down-section">
+      <input class="mdl-mega-footer__heading-checkbox" type="checkbox" checked>
+      <h1 class="mdl-mega-footer__heading">Details</h1>
+      <ul class="mdl-mega-footer__link-list">
+        <li><a href="#">Specs</a></li>
+        <li><a href="#">Tools</a></li>
+        <li><a href="#">Resources</a></li>
+      </ul>
+    </div>
+
+    <div class="mdl-mega-footer__drop-down-section">
+      <input class="mdl-mega-footer__heading-checkbox" type="checkbox" checked>
+      <h1 class="mdl-mega-footer__heading">Technology</h1>
+      <ul class="mdl-mega-footer__link-list">
+        <li><a href="#">How it works</a></li>
+        <li><a href="#">Patterns</a></li>
+        <li><a href="#">Usage</a></li>
+        <li><a href="#">Products</a></li>
+        <li><a href="#">Contracts</a></li>
+      </ul>
+    </div>
+
+    <div class="mdl-mega-footer__drop-down-section">
+      <input class="mdl-mega-footer__heading-checkbox" type="checkbox" checked>
+      <h1 class="mdl-mega-footer__heading">FAQ</h1>
+      <ul class="mdl-mega-footer__link-list">
+        <li><a href="#">Questions</a></li>
+        <li><a href="#">Answers</a></li>
+        <li><a href="#">Contact us</a></li>
+      </ul>
+    </div>
+
+  </div>
+
+  <div class="mdl-mega-footer__bottom-section">
+    <div class="mdl-logo">Title</div>
+    <ul class="mdl-mega-footer__link-list">
+      <li><a href="#">Help</a></li>
+      <li><a href="#">Privacy &amp; Terms</a></li>
+    </ul>
+  </div>
+
+</footer>
diff --git a/node_modules/material-design-lite/src/footer/snippets/mini-footer.html b/node_modules/material-design-lite/src/footer/snippets/mini-footer.html
new file mode 100644
index 0000000..1d78b27
--- /dev/null
+++ b/node_modules/material-design-lite/src/footer/snippets/mini-footer.html
@@ -0,0 +1,9 @@
+<footer class="mdl-mini-footer">
+  <div class="mdl-mini-footer__left-section">
+    <div class="mdl-logo">Title</div>
+    <ul class="mdl-mini-footer__link-list">
+      <li><a href="#">Help</a></li>
+      <li><a href="#">Privacy &amp; Terms</a></li>
+    </ul>
+  </div>
+</footer>
diff --git a/node_modules/material-design-lite/src/grid/README.md b/node_modules/material-design-lite/src/grid/README.md
new file mode 100644
index 0000000..9b40d8e
--- /dev/null
+++ b/node_modules/material-design-lite/src/grid/README.md
@@ -0,0 +1,122 @@
+## Introduction
+
+The Material Design Lite (MDL) **grid** component is a simplified method for laying out content for multiple screen sizes. It reduces the usual coding burden required to correctly display blocks of content in a variety of display conditions.
+
+The MDL grid is defined and enclosed by a container element. A grid has 12 columns in the desktop screen size, 8 in the tablet size, and 4 in the phone size, each size having predefined margins and gutters. Cells are laid out sequentially in a row, in the order they are defined, with some exceptions:
+
+- If a cell doesn't fit in the row in one of the screen sizes, it flows into the following line.
+- If a cell has a specified column size equal to or larger than the number of columns for the current screen size, it takes up the entirety of its row.
+
+You can set a maximum grid width, after which the grid stays centered with padding on either side, by setting its `max-width` CSS property.
+
+Grids are a fairly new and non-standardized feature in most user interfaces, and provide users with a way to view content in an organized manner that might otherwise be difficult to understand or retain. Their design and use is an important factor in the overall user experience.
+
+### To include an MDL **grid** component:
+
+&nbsp;1. Code a `<div>` element; this is the "outer" container, intended to hold all of the grid's cells. Style the div as desired (colors, font size, etc.).
+```html
+<div>
+</div>
+```
+&nbsp;2. Add the `mdl-grid` MDL class to the div using the `class` attribute.
+```
+<div class="mdl-grid">
+</div>
+```
+&nbsp;3. For each cell, code one "inner" div, including the text to be displayed.
+```html
+<div class="mdl-grid">
+  <div>Content</div>
+  <div>goes</div>
+  <div>here</div>
+</div>
+```
+&nbsp;4. Add the `mdl-cell` class and an `mdl-cell--COLUMN-col` class, where COLUMN specifies the column size for the cell, to the "inner" divs using the `class` attribute.
+```html
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--4-col">Content</div>
+  <div class="mdl-cell mdl-cell--4-col">goes</div>
+  <div class="mdl-cell mdl-cell--4-col">here</div>
+</div>
+```
+&nbsp;5. Optionally add an `mdl-cell--COLUMN-col-DEVICE` class, where COLUMN specifies the column size for the cell on a specific device, and DEVICE specifies the device type.
+```html
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--4-col mdl-cell--8-col-tablet">Content</div>
+  <div class="mdl-cell mdl-cell--4-col mdl-cell--8-col-tablet">goes</div>
+  <div class="mdl-cell mdl-cell--4-col mdl-cell--8-col-tablet">here</div>
+</div>
+```
+
+The grid component is ready for use.
+
+#### Examples
+
+A grid with five cells of column size 1.
+```html
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--1-col">CS 1</div>
+  <div class="mdl-cell mdl-cell--1-col">CS 1</div>
+  <div class="mdl-cell mdl-cell--1-col">CS 1</div>
+  <div class="mdl-cell mdl-cell--1-col">CS 1</div>
+  <div class="mdl-cell mdl-cell--1-col">CS 1</div>
+</div>
+```
+
+A grid with three cells, one of column size 6, one of column size 4, and one of column size 2.
+```html
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--6-col">CS 6</div>
+  <div class="mdl-cell mdl-cell--4-col">CS 4</div>
+  <div class="mdl-cell mdl-cell--2-col">CS 2</div>
+</div>
+```
+
+A grid with three cells of column size 6 that will display as column size 8 on a tablet device.
+```html
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet">CS 6 (8 on tablet)</div>
+  <div class="mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet">CS 6 (8 on tablet)</div>
+  <div class="mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet">CS 6 (8 on tablet)</div>
+</div>
+```
+
+A grid with four cells of column size 2 that will display as column size 4 on a phone device.
+
+```html
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--2-col mdl-cell--4-col-phone">CS 2 (4 on phone)</div>
+  <div class="mdl-cell mdl-cell--2-col mdl-cell--4-col-phone">CS 2 (4 on phone)</div>
+  <div class="mdl-cell mdl-cell--2-col mdl-cell--4-col-phone">CS 2 (4 on phone)</div>
+  <div class="mdl-cell mdl-cell--2-col mdl-cell--4-col-phone">CS 2 (4 on phone)</div>
+</div>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual enhancements and behavioral effects to the grid. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-grid` | Defines a container as an MDL grid component | Required on "outer" div element |
+| `mdl-cell` | Defines a container as an MDL cell | Required on "inner" div elements |
+| `mdl-grid--no-spacing` | Modifies the grid cells to have no margin between them. | Optional on grid container. |
+| `mdl-cell--N-col` | Sets the column size for the cell to N | N is 1-12 inclusive, defaults to 4; optional on "inner" div elements|
+| `mdl-cell--N-col-desktop` | Sets the column size for the cell to N in desktop mode only | N is 1-12 inclusive; optional on "inner" div elements|
+| `mdl-cell--N-col-tablet` | Sets the column size for the cell to N in tablet mode only | N is 1-8 inclusive; optional on "inner" div elements|
+| `mdl-cell--N-col-phone` | Sets the column size for the cell to N in phone mode only | N is 1-4 inclusive; optional on "inner" div elements|
+| `mdl-cell--N-offset` | Adds N columns of whitespace before the cell | N is 1-11 inclusive; optional on "inner" div elements|
+| `mdl-cell--N-offset-desktop` | Adds N columns of whitespace before the cell in desktop mode | N is 1-11 inclusive; optional on "inner" div elements|
+| `mdl-cell--N-offset-tablet` | Adds N columns of whitespace before the cell in tablet mode | N is 1-7 inclusive; optional on "inner" div elements|
+| `mdl-cell--N-offset-phone` | Adds N columns of whitespace before the cell in phone mode | N is 1-3 inclusive; optional on "inner" div elements|
+| `mdl-cell--order-N` | Reorders cell to position N | N is 1-12 inclusive; optional on "inner" div elements|
+| `mdl-cell--order-N-desktop` | Reorders cell to position N when in desktop mode | N is 1-12 inclusive; optional on "inner" div elements|
+| `mdl-cell--order-N-tablet` | Reorders cell to position N when in tablet mode | N is 1-12 inclusive; optional on "inner" div elements|
+| `mdl-cell--order-N-phone` | Reorders cell to position N when in phone mode | N is 1-12 inclusive; optional on "inner" div elements|
+| `mdl-cell--hide-desktop` | Hides the cell when in desktop mode | Optional on "inner" div elements |
+| `mdl-cell--hide-tablet` | Hides the cell when in tablet mode | Optional on "inner" div elements |
+| `mdl-cell--hide-phone` | Hides the cell when in phone mode | Optional on "inner" div elements |
+| `mdl-cell--stretch` | Stretches the cell vertically to fill the parent | Default; optional on "inner" div elements |
+| `mdl-cell--top` | Aligns the cell to the top of the parent | Optional on "inner" div elements |
+| `mdl-cell--middle` | Aligns the cell to the middle of the parent | Optional on "inner" div elements |
+|`mdl-cell--bottom` | Aligns the cell to the bottom of the parent | Optional on "inner" div elements |
diff --git a/node_modules/material-design-lite/src/grid/_grid.scss b/node_modules/material-design-lite/src/grid/_grid.scss
new file mode 100644
index 0000000..d0aab57
--- /dev/null
+++ b/node_modules/material-design-lite/src/grid/_grid.scss
@@ -0,0 +1,231 @@
+/**
+ * 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.
+ */
+
+/*
+* NOTE: Some rules here are applied using duplicate selectors.
+* This is on purpose to increase their specificity when applied.
+* For example: `.mdl-cell--1-col-phone.mdl-cell--1-col-phone`
+*/
+
+@import "../variables";
+
+.mdl-grid {
+  display: flex;
+  flex-flow: row wrap;
+  margin: 0 auto 0 auto;
+  align-items: stretch;
+
+  &.mdl-grid--no-spacing {
+    padding: 0;
+  }
+}
+
+.mdl-cell {
+  box-sizing: border-box;
+}
+
+
+.mdl-cell--top {
+  align-self: flex-start;
+}
+
+.mdl-cell--middle {
+  align-self: center;
+}
+
+.mdl-cell--bottom {
+  align-self: flex-end;
+}
+
+.mdl-cell--stretch {
+  align-self: stretch;
+}
+
+.mdl-grid.mdl-grid--no-spacing > .mdl-cell {
+  margin: 0;
+}
+
+// Define order override classes.
+@for $i from 1 through $grid-max-columns {
+  .mdl-cell--order-#{$i} {
+    order: $i;
+  }
+}
+
+
+// Mixins for width calculation.
+@mixin partial-size($size, $columns, $gutter) {
+  width: calc(#{(($size / $columns) * 100)+"%"} - #{$gutter});
+
+  .mdl-grid--no-spacing > & {
+    width: #{(($size / $columns) * 100)+"%"};
+  }
+}
+
+@mixin full-size($gutter) {
+  @include partial-size(1, 1, $gutter);
+}
+
+@mixin offset-size($size, $columns, $gutter) {
+  margin-left: calc(#{(($size / $columns) * 100)+"%"} + #{$gutter / 2});
+
+  .mdl-grid.mdl-grid--no-spacing > & {
+    margin-left: #{(($size / $columns) * 100)+"%"};
+  }
+}
+
+
+
+////////// Phone //////////
+
+@media (max-width: $grid-tablet-breakpoint - 1) {
+  .mdl-grid {
+    padding: $grid-phone-margin - ($grid-phone-gutter / 2);
+  }
+
+  .mdl-cell {
+    margin: $grid-phone-gutter / 2;
+    @include partial-size($grid-cell-default-columns, $grid-phone-columns,
+        $grid-phone-gutter);
+  }
+
+  .mdl-cell--hide-phone {
+    display: none !important;
+  }
+
+  // Define order override classes.
+  @for $i from 1 through $grid-max-columns {
+    .mdl-cell--order-#{$i}-phone.mdl-cell--order-#{$i}-phone {
+      order: $i;
+    }
+  }
+
+  // Define partial sizes for columnNumber < totalColumns.
+  @for $i from 1 through ($grid-phone-columns - 1) {
+    .mdl-cell--#{$i}-col,
+    .mdl-cell--#{$i}-col-phone.mdl-cell--#{$i}-col-phone {
+      @include partial-size($i, $grid-phone-columns, $grid-phone-gutter);
+    }
+  }
+
+  // Define 100% for everything else.
+  @for $i from $grid-phone-columns through $grid-desktop-columns {
+    .mdl-cell--#{$i}-col,
+    .mdl-cell--#{$i}-col-phone.mdl-cell--#{$i}-col-phone {
+      @include full-size($grid-phone-gutter);
+    }
+  }
+
+  // Define valid phone offsets.
+  @for $i from 1 through ($grid-phone-columns - 1) {
+    .mdl-cell--#{$i}-offset,
+    .mdl-cell--#{$i}-offset-phone.mdl-cell--#{$i}-offset-phone {
+      @include offset-size($i, $grid-phone-columns, $grid-phone-gutter);
+    }
+  }
+}
+
+
+////////// Tablet //////////
+
+@media (min-width: $grid-tablet-breakpoint) and (max-width: $grid-desktop-breakpoint - 1) {
+  .mdl-grid {
+    padding: $grid-tablet-margin - ($grid-tablet-gutter / 2);
+  }
+
+  .mdl-cell {
+    margin: $grid-tablet-gutter / 2;
+    @include partial-size($grid-cell-default-columns, $grid-tablet-columns,
+        $grid-tablet-gutter);
+  }
+
+  .mdl-cell--hide-tablet {
+    display: none !important;
+  }
+
+  // Define order override classes.
+  @for $i from 1 through $grid-max-columns {
+    .mdl-cell--order-#{$i}-tablet.mdl-cell--order-#{$i}-tablet {
+      order: $i;
+    }
+  }
+
+  // Define partial sizes for columnNumber < totalColumns.
+  @for $i from 1 through ($grid-tablet-columns - 1) {
+    .mdl-cell--#{$i}-col,
+    .mdl-cell--#{$i}-col-tablet.mdl-cell--#{$i}-col-tablet {
+      @include partial-size($i, $grid-tablet-columns, $grid-tablet-gutter);
+    }
+  }
+
+  // Define 100% for everything else.
+  @for $i from $grid-tablet-columns through $grid-desktop-columns {
+    .mdl-cell--#{$i}-col,
+    .mdl-cell--#{$i}-col-tablet.mdl-cell--#{$i}-col-tablet {
+      @include full-size($grid-tablet-gutter);
+    }
+  }
+
+  // Define valid tablet offsets.
+  @for $i from 1 through ($grid-tablet-columns - 1) {
+    .mdl-cell--#{$i}-offset,
+    .mdl-cell--#{$i}-offset-tablet.mdl-cell--#{$i}-offset-tablet {
+      @include offset-size($i, $grid-tablet-columns, $grid-tablet-gutter);
+    }
+  }
+}
+
+
+////////// Desktop //////////
+
+@media (min-width: $grid-desktop-breakpoint) {
+  .mdl-grid {
+    padding: $grid-desktop-margin - ($grid-desktop-gutter / 2);
+  }
+
+  .mdl-cell {
+    margin: $grid-desktop-gutter / 2;
+    @include partial-size($grid-cell-default-columns, $grid-desktop-columns,
+        $grid-desktop-gutter);
+  }
+
+  .mdl-cell--hide-desktop {
+    display: none !important;
+  }
+
+  // Define order override classes.
+  @for $i from 1 through $grid-max-columns {
+    .mdl-cell--order-#{$i}-desktop.mdl-cell--order-#{$i}-desktop {
+      order: $i;
+    }
+  }
+
+  // Define partial sizes for all numbers of columns.
+  @for $i from 1 through $grid-desktop-columns {
+    .mdl-cell--#{$i}-col,
+    .mdl-cell--#{$i}-col-desktop.mdl-cell--#{$i}-col-desktop {
+      @include partial-size($i, $grid-desktop-columns, $grid-desktop-gutter);
+    }
+  }
+
+  // Define valid desktop offsets.
+  @for $i from 1 through ($grid-desktop-columns - 1) {
+    .mdl-cell--#{$i}-offset,
+    .mdl-cell--#{$i}-offset-desktop.mdl-cell--#{$i}-offset-desktop {
+      @include offset-size($i, $grid-desktop-columns, $grid-desktop-gutter);
+    }
+  }
+}
diff --git a/node_modules/material-design-lite/src/grid/snippets/codepen-grid.css b/node_modules/material-design-lite/src/grid/snippets/codepen-grid.css
new file mode 100644
index 0000000..b716189
--- /dev/null
+++ b/node_modules/material-design-lite/src/grid/snippets/codepen-grid.css
@@ -0,0 +1,11 @@
+.mdl-cell {
+  box-sizing: border-box;
+  background-color: #BDBDBD;
+  height: 200px;
+  padding-left: 8px;
+  padding-top: 4px;
+  color: white;
+}
+.mdl-grid:first-of-type .mdl-cell {
+  height: 50px;
+}
diff --git a/node_modules/material-design-lite/src/grid/snippets/grid-demo.html b/node_modules/material-design-lite/src/grid/snippets/grid-demo.html
new file mode 100644
index 0000000..88f6040
--- /dev/null
+++ b/node_modules/material-design-lite/src/grid/snippets/grid-demo.html
@@ -0,0 +1,15 @@
+<style>
+.demo-grid .mdl-cell {
+  box-sizing: border-box;
+  background-color: #BDBDBD;
+  height: 200px;
+  padding-left: 8px;
+  padding-top: 4px;
+  color: white;
+}
+.demo-grid .mdl-grid:first-of-type .mdl-cell {
+  height: 50px;
+}
+</style>
+
+{% include "grid.html" %}
diff --git a/node_modules/material-design-lite/src/grid/snippets/grid.html b/node_modules/material-design-lite/src/grid/snippets/grid.html
new file mode 100644
index 0000000..202a091
--- /dev/null
+++ b/node_modules/material-design-lite/src/grid/snippets/grid.html
@@ -0,0 +1,29 @@
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+  <div class="mdl-cell mdl-cell--1-col">1</div>
+</div>
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--4-col">4</div>
+  <div class="mdl-cell mdl-cell--4-col">4</div>
+  <div class="mdl-cell mdl-cell--4-col">4</div>
+</div>
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--6-col">6</div>
+  <div class="mdl-cell mdl-cell--4-col">4</div>
+  <div class="mdl-cell mdl-cell--2-col">2</div>
+</div>
+<div class="mdl-grid">
+  <div class="mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet">6 (8 tablet)</div>
+  <div class="mdl-cell mdl-cell--4-col mdl-cell--6-col-tablet">4 (6 tablet)</div>
+  <div class="mdl-cell mdl-cell--2-col mdl-cell--4-col-phone">2 (4 phone)</div>
+</div>
diff --git a/node_modules/material-design-lite/src/icon-toggle/README.md b/node_modules/material-design-lite/src/icon-toggle/README.md
new file mode 100755
index 0000000..7af700a
--- /dev/null
+++ b/node_modules/material-design-lite/src/icon-toggle/README.md
@@ -0,0 +1,64 @@
+## Introduction
+
+The Material Design Lite (MDL) **icon-toggle** component is an enhanced version of the standard HTML `<input type="checkbox">` element. An icon-toggle consists of a user defined icon that indicates, by visual highlighting, a binary condition that will be set or unset when the user clicks or touches it. Like checkboxes, icon-toggles may appear individually or in groups, and can be selected and deselected individually.
+
+Icon toggles, particularly as a replacement for certain checkboxes, can be a valuable feature in user interfaces, regardless of a site's content or function. Their design and use is therefore an important factor in the overall user experience. See the icon-toggle component's [Material Design specifications page](http://www.google.com/design/spec/components/buttons.html#buttons-other-buttons) for details.
+
+The icon-toggle component can have a more customized visual look than a standard checkbox, and may be initially or programmatically *disabled*.
+
+### To include an MDL **icon-toggle** component:
+
+&nbsp;1. Code a `<label>` element and give it a `for` attribute whose value is the unique id of the icon-toggle it will contain.
+```html
+<label for="icon-toggle-1">
+...
+</label>
+```
+&nbsp;2. Inside the label, code an `<input>` element and give it a `type` attribute whose value is `"checkbox"`. Also give it an `id` attribute whose value matches the label's `for` attribute value.
+```html
+<label for="icon-toggle-1">
+  <input type="checkbox" id="icon-toggle-1">
+</label>
+```
+&nbsp;3. Also inside the label, after the input element, code an `<i>` element containing the icon-toggle's desired icon.
+```html
+<label for="icon-toggle-1">
+  <input type="checkbox" id="icon-toggle-1">
+  <i class="mdl-icon-toggle__label material-icons">format_bold</i>
+</label>
+```
+&nbsp;4. Add one or more MDL classes, separated by spaces, to the label and input elements, using the `class` attribute.
+```html
+<label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect" for="icon-toggle-1">
+  <input type="checkbox" id="icon-toggle-1" class="mdl-icon-toggle__input">
+  <i class="mdl-icon-toggle__label material-icons">format_bold</i>
+</label>
+```
+
+The icon-toggle component is ready for use.
+
+#### Example
+
+An icon-toggle with a ripple click effect.
+
+```html
+<label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect" for="icon-toggle-1">
+  <input type="checkbox" id="icon-toggle-1" class="mdl-icon-toggle__input">
+  <i class="mdl-icon-toggle__label material-icons">format_bold</i>
+</label>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the icon-toggle. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-icon-toggle` | Defines label as an MDL component | Required on label element|
+| `mdl-js-icon-toggle` | Assigns basic MDL behavior to label | Required on label element |
+| `mdl-icon-toggle__input` | Applies basic MDL behavior to icon-toggle | Required on input element (icon-toggle) |
+| `mdl-icon-toggle__label` | Applies basic MDL behavior to caption | Required on i element (icon) |
+| `mdl-js-ripple-effect` | Applies *ripple* click effect | Optional; goes on label element, not input element (icon-toggle) |
+
+>**Note:** Disabled versions of all available input types are provided, and are invoked with the standard HTML boolean attribute `disabled`. `<input type="checkbox" id="icon-toggle-5" class="mdl-icon-toggle__input" disabled>`
+>This attribute may be added or removed programmatically via scripting.
diff --git a/node_modules/material-design-lite/src/icon-toggle/_icon-toggle.scss b/node_modules/material-design-lite/src/icon-toggle/_icon-toggle.scss
new file mode 100644
index 0000000..354f023
--- /dev/null
+++ b/node_modules/material-design-lite/src/icon-toggle/_icon-toggle.scss
@@ -0,0 +1,121 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+.mdl-icon-toggle {
+  position: relative;
+
+  z-index: 1;
+
+  vertical-align: middle;
+
+  display: inline-block;
+  height: $icon-toggle-size;
+  margin: 0;
+  padding: 0;
+}
+
+.mdl-icon-toggle__input {
+  line-height: $icon-toggle-size;
+
+  .mdl-icon-toggle.is-upgraded & {
+    // Hide input element, while still making it respond to focus.
+    position: absolute;
+    width: 0;
+    height: 0;
+    margin: 0;
+    padding: 0;
+    opacity: 0;
+    -ms-appearance: none;
+    -moz-appearance: none;
+    -webkit-appearance: none;
+    appearance: none;
+    border: none;
+  }
+}
+
+.mdl-icon-toggle__label {
+  display: inline-block;
+  position: relative;
+  cursor: pointer;
+  height: $icon-toggle-size;
+  width: $icon-toggle-size;
+  min-width: $icon-toggle-size;
+  color: $icon-toggle-color;
+  border-radius: 50%;
+  padding: 0;
+  margin-left: 0;
+  margin-right: 0;
+  text-align: center;
+  background-color: transparent;
+  will-change: background-color;
+  transition: background-color 0.2s $animation-curve-default,
+  color 0.2s $animation-curve-default;
+
+  &.material-icons {
+    line-height: $icon-toggle-size;
+    font-size: $icon-toggle-font-size;
+  }
+
+  .mdl-icon-toggle.is-checked & {
+    color: $icon-toggle-checked-color;
+  }
+
+  .mdl-icon-toggle.is-disabled & {
+    color: $icon-toggle-disabled-color;
+    cursor: auto;
+    transition: none;
+  }
+
+  .mdl-icon-toggle.is-focused & {
+    background-color: $icon-toggle-focus-color;
+  }
+
+  .mdl-icon-toggle.is-focused.is-checked & {
+    background-color: $icon-toggle-checked-focus-color;
+  }
+}
+
+
+.mdl-icon-toggle__ripple-container {
+  position: absolute;
+  z-index: 2;
+  top: -(($icon-toggle-ripple-size - $icon-toggle-size) / 2);
+  left: -(($icon-toggle-ripple-size - $icon-toggle-size) / 2);
+
+  box-sizing: border-box;
+  width: $icon-toggle-ripple-size;
+  height: $icon-toggle-ripple-size;
+  border-radius: 50%;
+
+  cursor: pointer;
+
+  overflow: hidden;
+  -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
+
+  & .mdl-ripple {
+    background: $icon-toggle-color;
+  }
+
+  .mdl-icon-toggle.is-disabled & {
+    cursor: auto;
+  }
+
+  .mdl-icon-toggle.is-disabled & .mdl-ripple {
+    background: transparent;
+  }
+}
diff --git a/node_modules/material-design-lite/src/icon-toggle/icon-toggle.js b/node_modules/material-design-lite/src/icon-toggle/icon-toggle.js
new file mode 100644
index 0000000..5d5a17c
--- /dev/null
+++ b/node_modules/material-design-lite/src/icon-toggle/icon-toggle.js
@@ -0,0 +1,255 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for icon toggle MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialIconToggle = function MaterialIconToggle(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialIconToggle'] = MaterialIconToggle;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialIconToggle.prototype.Constant_ = {
+    TINY_TIMEOUT: 0.001
+  };
+
+  /**
+   * 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
+   */
+  MaterialIconToggle.prototype.CssClasses_ = {
+    INPUT: 'mdl-icon-toggle__input',
+    JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',
+    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',
+    RIPPLE_CONTAINER: 'mdl-icon-toggle__ripple-container',
+    RIPPLE_CENTER: 'mdl-ripple--center',
+    RIPPLE: 'mdl-ripple',
+    IS_FOCUSED: 'is-focused',
+    IS_DISABLED: 'is-disabled',
+    IS_CHECKED: 'is-checked'
+  };
+
+  /**
+   * Handle change of state.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialIconToggle.prototype.onChange_ = function(event) {
+    this.updateClasses_();
+  };
+
+  /**
+   * Handle focus of element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialIconToggle.prototype.onFocus_ = function(event) {
+    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle lost focus of element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialIconToggle.prototype.onBlur_ = function(event) {
+    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle mouseup.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialIconToggle.prototype.onMouseUp_ = function(event) {
+    this.blur_();
+  };
+
+  /**
+   * Handle class updates.
+   *
+   * @private
+   */
+  MaterialIconToggle.prototype.updateClasses_ = function() {
+    this.checkDisabled();
+    this.checkToggleState();
+  };
+
+  /**
+   * Add blur.
+   *
+   * @private
+   */
+  MaterialIconToggle.prototype.blur_ = function() {
+    // TODO: figure out why there's a focus event being fired after our blur,
+    // so that we can avoid this hack.
+    window.setTimeout(function() {
+      this.inputElement_.blur();
+    }.bind(this), /** @type {number} */ (this.Constant_.TINY_TIMEOUT));
+  };
+
+  // Public methods.
+
+  /**
+   * Check the inputs toggle state and update display.
+   *
+   * @public
+   */
+  MaterialIconToggle.prototype.checkToggleState = function() {
+    if (this.inputElement_.checked) {
+      this.element_.classList.add(this.CssClasses_.IS_CHECKED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_CHECKED);
+    }
+  };
+  MaterialIconToggle.prototype['checkToggleState'] =
+      MaterialIconToggle.prototype.checkToggleState;
+
+  /**
+   * Check the inputs disabled state and update display.
+   *
+   * @public
+   */
+  MaterialIconToggle.prototype.checkDisabled = function() {
+    if (this.inputElement_.disabled) {
+      this.element_.classList.add(this.CssClasses_.IS_DISABLED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);
+    }
+  };
+  MaterialIconToggle.prototype['checkDisabled'] =
+      MaterialIconToggle.prototype.checkDisabled;
+
+  /**
+   * Disable icon toggle.
+   *
+   * @public
+   */
+  MaterialIconToggle.prototype.disable = function() {
+    this.inputElement_.disabled = true;
+    this.updateClasses_();
+  };
+  MaterialIconToggle.prototype['disable'] =
+      MaterialIconToggle.prototype.disable;
+
+  /**
+   * Enable icon toggle.
+   *
+   * @public
+   */
+  MaterialIconToggle.prototype.enable = function() {
+    this.inputElement_.disabled = false;
+    this.updateClasses_();
+  };
+  MaterialIconToggle.prototype['enable'] = MaterialIconToggle.prototype.enable;
+
+  /**
+   * Check icon toggle.
+   *
+   * @public
+   */
+  MaterialIconToggle.prototype.check = function() {
+    this.inputElement_.checked = true;
+    this.updateClasses_();
+  };
+  MaterialIconToggle.prototype['check'] = MaterialIconToggle.prototype.check;
+
+  /**
+   * Uncheck icon toggle.
+   *
+   * @public
+   */
+  MaterialIconToggle.prototype.uncheck = function() {
+    this.inputElement_.checked = false;
+    this.updateClasses_();
+  };
+  MaterialIconToggle.prototype['uncheck'] =
+      MaterialIconToggle.prototype.uncheck;
+
+  /**
+   * Initialize element.
+   */
+  MaterialIconToggle.prototype.init = function() {
+
+    if (this.element_) {
+      this.inputElement_ =
+          this.element_.querySelector('.' + this.CssClasses_.INPUT);
+
+      if (this.element_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {
+        this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);
+        this.rippleContainerElement_ = document.createElement('span');
+        this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CONTAINER);
+        this.rippleContainerElement_.classList.add(this.CssClasses_.JS_RIPPLE_EFFECT);
+        this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);
+        this.boundRippleMouseUp = this.onMouseUp_.bind(this);
+        this.rippleContainerElement_.addEventListener('mouseup', this.boundRippleMouseUp);
+
+        var ripple = document.createElement('span');
+        ripple.classList.add(this.CssClasses_.RIPPLE);
+
+        this.rippleContainerElement_.appendChild(ripple);
+        this.element_.appendChild(this.rippleContainerElement_);
+      }
+
+      this.boundInputOnChange = this.onChange_.bind(this);
+      this.boundInputOnFocus = this.onFocus_.bind(this);
+      this.boundInputOnBlur = this.onBlur_.bind(this);
+      this.boundElementOnMouseUp = this.onMouseUp_.bind(this);
+      this.inputElement_.addEventListener('change', this.boundInputOnChange);
+      this.inputElement_.addEventListener('focus', this.boundInputOnFocus);
+      this.inputElement_.addEventListener('blur', this.boundInputOnBlur);
+      this.element_.addEventListener('mouseup', this.boundElementOnMouseUp);
+
+      this.updateClasses_();
+      this.element_.classList.add('is-upgraded');
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialIconToggle,
+    classAsString: 'MaterialIconToggle',
+    cssClass: 'mdl-js-icon-toggle',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/icon-toggle/snippets/icon-off.html b/node_modules/material-design-lite/src/icon-toggle/snippets/icon-off.html
new file mode 100644
index 0000000..347a490
--- /dev/null
+++ b/node_modules/material-design-lite/src/icon-toggle/snippets/icon-off.html
@@ -0,0 +1,4 @@
+<label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect" for="icon-toggle-2">
+  <input type="checkbox" id="icon-toggle-2" class="mdl-icon-toggle__input">
+  <i class="mdl-icon-toggle__label material-icons">format_italic</i>
+</label>
diff --git a/node_modules/material-design-lite/src/icon-toggle/snippets/icon-on.html b/node_modules/material-design-lite/src/icon-toggle/snippets/icon-on.html
new file mode 100644
index 0000000..23632a3
--- /dev/null
+++ b/node_modules/material-design-lite/src/icon-toggle/snippets/icon-on.html
@@ -0,0 +1,4 @@
+<label class="mdl-icon-toggle mdl-js-icon-toggle mdl-js-ripple-effect" for="icon-toggle-1">
+  <input type="checkbox" id="icon-toggle-1" class="mdl-icon-toggle__input" checked>
+  <i class="mdl-icon-toggle__label material-icons">format_bold</i>
+</label>
diff --git a/node_modules/material-design-lite/src/images/buffer.svg b/node_modules/material-design-lite/src/images/buffer.svg
new file mode 100644
index 0000000..790b160
--- /dev/null
+++ b/node_modules/material-design-lite/src/images/buffer.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<svg width="12" height="4" viewPort="0 0 12 4" version="1.1" xmlns="http://www.w3.org/2000/svg">
+  <ellipse cx="2" cy="2" rx="2" ry="2">
+    <animate attributeName="cx" from="2" to="-10" dur="0.6s" repeatCount="indefinite" />
+  </ellipse>
+  <ellipse cx="14" cy="2" rx="2" ry="2" class="loader">
+    <animate attributeName="cx" from="14" to="2" dur="0.6s" repeatCount="indefinite" />
+  </ellipse>
+</svg>
diff --git a/node_modules/material-design-lite/src/images/tick-mask.svg b/node_modules/material-design-lite/src/images/tick-mask.svg
new file mode 100644
index 0000000..b098920
--- /dev/null
+++ b/node_modules/material-design-lite/src/images/tick-mask.svg
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   viewBox="0 0 1 1"
+   preserveAspectRatio="xMinYMin meet">
+  <defs>
+    <clipPath id="clip">
+      <path
+         d="M 0,0 0,1 1,1 1,0 0,0 z M 0.8534375,0.1671875 0.9596875,0.273125 0.429375,0.8034375 0.323125,0.9096875 0.2171875,0.8034375 0.0403125,0.626875 0.1465625,0.520625 0.323125,0.6975 0.8534375,0.1671875 z"
+         style="fill:#ffffff;fill-opacity:1;stroke:none" />
+    </clipPath>
+    <mask id="mask" maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox">
+      <path
+         d="M 0,0 0,1 1,1 1,0 0,0 z M 0.8534375,0.1671875 0.9596875,0.273125 0.429375,0.8034375 0.323125,0.9096875 0.2171875,0.8034375 0.0403125,0.626875 0.1465625,0.520625 0.323125,0.6975 0.8534375,0.1671875 z"
+         style="fill:#ffffff;fill-opacity:1;stroke:none" />
+    </mask>
+  </defs>
+  <rect
+     width="1"
+     height="1"
+     x="0"
+     y="0"
+     clip-path="url(#clip)"
+     style="fill:#000000;fill-opacity:1;stroke:none" />
+</svg>
diff --git a/node_modules/material-design-lite/src/images/tick.svg b/node_modules/material-design-lite/src/images/tick.svg
new file mode 100644
index 0000000..b3d6ec8
--- /dev/null
+++ b/node_modules/material-design-lite/src/images/tick.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   viewBox="0 0 1 1"
+   preserveAspectRatio="xMinYMin meet">
+  <path
+     d="M 0.04038059,0.6267767 0.14644661,0.52071068 0.42928932,0.80355339 0.3232233,0.90961941 z M 0.21715729,0.80355339 0.85355339,0.16715729 0.95961941,0.2732233 0.3232233,0.90961941 z"
+     id="rect3780"
+     style="fill:#ffffff;fill-opacity:1;stroke:none" />
+</svg>
diff --git a/node_modules/material-design-lite/src/index.html b/node_modules/material-design-lite/src/index.html
new file mode 100644
index 0000000..5b0f88b
--- /dev/null
+++ b/node_modules/material-design-lite/src/index.html
@@ -0,0 +1,209 @@
+<!doctype html>
+<html lang="">
+  <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>Material Design Lite</title>
+
+    <!-- Add to homescreen for Chrome on Android -->
+    <meta name="mobile-web-app-capable" content="yes">
+    <link rel="icon" sizes="192x192" href="images/touch/chrome-touch-icon-192x192.png">
+
+    <!-- Add to homescreen for Safari on iOS -->
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <meta name="apple-mobile-web-app-title" content="Material Design Lite">
+    <link rel="apple-touch-icon-precomposed" href="apple-touch-icon-precomposed.png">
+
+    <!-- Tile icon for Win8 (144x144 + tile color) -->
+    <meta name="msapplication-TileImage" content="images/touch/ms-touch-icon-144x144-precomposed.png">
+    <meta name="msapplication-TileColor" content="#3372DF">
+
+    <!-- SEO: If your mobile URL is different from the desktop URL, add a canonical link to the desktop page https://developers.google.com/webmasters/smartphone-sites/feature-phones -->
+    <!--
+    <link rel="canonical" href="http://www.example.com/">
+    -->
+
+    <!-- Page styles -->
+    <link href='//fonts.googleapis.com/css?family=Roboto:regular,bold,italic,thin,light,bolditalic,black,medium&amp;lang=en' rel='stylesheet' type='text/css'>
+
+    <link rel="stylesheet" href="styleguide.css">
+  </head>
+  <body>
+    <div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-styleguide">
+
+      <div class="mdl-layout__drawer">
+        <span class="mdl-layout-title">Material Design Lite</span>
+        <nav id="main-navigation" class="mdl-navigation">
+        </nav>
+      </div>
+
+      <div class="mdl-layout__content">
+        <div class="styleguide-demo">
+          <h1>Typography</h1>
+          <iframe src="./typography/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>List</h1>
+          <iframe src="./list/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Palette</h1>
+          <iframe src="./palette/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Shadows</h1>
+          <iframe src="./shadow/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Cards</h1>
+          <iframe src="./card/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Animation</h1>
+          <iframe src="./animation/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Button</h1>
+          <iframe src="./button/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Menu</h1>
+          <iframe src="./menu/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Text Field</h1>
+          <iframe src="./textfield/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Radio Buttons</h1>
+          <iframe src="./radio/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Checkbox</h1>
+          <iframe src="./checkbox/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Switch</h1>
+          <iframe src="./switch/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Icon Toggle</h1>
+          <iframe src="./icon-toggle/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Slider</h1>
+          <iframe src="./slider/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Spinner</h1>
+          <iframe src="./spinner/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Progress Bar</h1>
+          <iframe src="./progress/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Layout</h1>
+            <iframe src="./layout/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Content Tabs</h1>
+          <iframe src="./tabs/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Icons</h1>
+          <iframe src="./icons/demo.html" scrolling="no"></iframe>
+        </div>
+
+
+        <div class="styleguide-demo">
+          <h1>Tooltip</h1>
+          <iframe src="./tooltip/demo.html" scrolling="no"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Column Layout</h1>
+            <iframe src="./column-layout/demo.html"></iframe>
+        </div>
+
+        <div class="styleguide-demo">
+          <h1>Footer</h1>
+            <iframe src="./footer/demo.html"></iframe>
+        </div>
+      </div>
+    </div>
+    <!-- build:js scripts/main.min.js -->
+    <script src="mdlComponentHandler.js"></script>
+    <script src="layout/layout.js" async defer></script>
+    <!-- endbuild -->
+
+    <!-- Script to handle sizing the iFrames -->
+    <script>
+      'use strict';
+      var navList = document.getElementById('main-navigation');
+      var totalDemosPendingLoading = 0;
+      sizeDemos();
+
+      function sizeDemos() {
+        var demos = document.querySelectorAll('.styleguide-demo');
+        totalDemosPendingLoading = demos.length;
+        for (var i = 0; i < demos.length; i++) {
+          var demoTitle = demos[i].querySelector('h1').textContent;
+          var anchorLink = 'demo-' + i;
+
+          // Add list item
+          var navAnchor = document.createElement('a');
+          navAnchor.classList.add('mdl-navigation__link');
+          navAnchor.href = '#' + anchorLink;
+          navAnchor.appendChild(document.createTextNode(demoTitle));
+          navList.appendChild(navAnchor);
+
+          var anchor = document.createElement('a');
+          anchor.id = anchorLink;
+          demos[i].insertBefore(anchor , demos[i].querySelector('h1'));
+
+          // Size iframe
+          sizeDemo(demos[i]);
+        }
+      }
+
+      function sizeDemo(rootDemoElement) {
+        var iframe = rootDemoElement.querySelector('iframe');
+        if (iframe === null) {
+          totalDemosPendingLoading--;
+          return;
+        }
+        iframe.onload = function() {
+          var contentHeight = iframe.contentDocument.documentElement.scrollHeight;
+          iframe.style.height = contentHeight + 'px';
+          iframe.classList.add('heightSet');
+          totalDemosPendingLoading--;
+          if (totalDemosPendingLoading <= 0) {
+            document.body.classList.add('demosLoaded');
+          }
+        };
+      }
+    </script>
+  </body>
+</html>
diff --git a/node_modules/material-design-lite/src/layout/README.md b/node_modules/material-design-lite/src/layout/README.md
new file mode 100644
index 0000000..9c8238c
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/README.md
@@ -0,0 +1,340 @@
+## Introduction
+
+The Material Design Lite (MDL) **layout** component is a comprehensive approach to page layout that uses MDL development tenets, allows for efficient use of MDL components, and automatically adapts to different browsers, screen sizes, and devices.
+
+Appropriate and accessible layout is a critical feature of all user interfaces, regardless of a site's content or function. Page design and presentation is therefore an important factor in the overall user experience. See the layout component's [Material Design specifications page](http://www.google.com/design/spec/layout/principles.html) for details.
+
+Use of MDL layout principles simplifies the creation of scalable pages by providing reusable components and encourages consistency across environments by establishing recognizable visual elements, adhering to logical structural grids, and maintaining appropriate spacing across multiple platforms and screen sizes. MDL layout is extremely powerful and dynamic, allowing for great consistency in outward appearance and behavior while maintaining development flexibility and ease of use.
+
+### To include a basic MDL **layout** component:
+
+&nbsp;1. Code a `<div>` element. This is the "outer" div that holds the entire layout.
+```html
+<div>
+</div>
+```
+
+>**Note:** The layout cannot be applied directly on the `<body>` element. Always create a nested `<div>` element.
+
+&nbsp;2. Add MDL classes as indicated, separated by spaces, to the div using the `class` attribute.
+```html
+<div class="mdl-layout mdl-js-layout">
+</div>
+```
+
+&nbsp;3. Inside the div, code a `<header>` element. This holds the header row with navigation links that is displayed on large screens, and the menu icon that opens the navigation drawer for smaller screens. Add the MDL class to the header using the `class` attribute.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+  </header>
+</div>
+```
+
+&nbsp;4. Inside the header, add a `<div>` to produce the menu icon, and include the MDL class as indicated. The div has no content of its own.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+  </header>
+</div>
+```
+
+&nbsp;5. Still inside the header, add another `<div>` to hold the header row's content, and include the MDL class as indicated.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+    <div class="mdl-layout__header-row">
+    </div>
+  </header>
+</div>
+```
+
+&nbsp;6. Inside the header row div, add a span containing the layout title, and include the MDL class as indicated.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Simple Layout</span>
+    </div>
+  </header>
+</div>
+```
+
+&nbsp;7. Following the span, add a `<div>` to align the header's navigation links to the right, and include the MDL class as indicated.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Simple Layout</span>
+      <div class="mdl-layout-spacer"></div>
+    </div>
+  </header>
+</div>
+```
+
+&nbsp;8. Following the spacer div, add a `<nav>` element to contain the header's navigation links, and include the MDL class as indicated. Inside the nav, add one anchor `<a>` element for each header link, and include the MDL class as indicated. This completes the layout's header.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Simple Layout</span>
+      <div class="mdl-layout-spacer"></div>
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="#">Nav link 1</a>
+        <a class="mdl-navigation__link" href="#">Nav link 2</a>
+        <a class="mdl-navigation__link" href="#">Nav link 3</a>
+      </nav>
+    </div>
+  </header>
+</div>
+```
+
+&nbsp;9. Following the header, add a `<div>` element to hold the slide-out drawer's content, and add the MDL class as indicated. The drawer appears automatically on smaller screens, and may be opened with the menu icon on any screen size.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Simple Layout</span>
+      <div class="mdl-layout-spacer"></div>
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="#">Nav link 1</a>
+        <a class="mdl-navigation__link" href="#">Nav link 2</a>
+        <a class="mdl-navigation__link" href="#">Nav link 3</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+  </div>
+</div>
+```
+
+&nbsp;10. Inside the drawer div, add a span containing the layout title (this should match the title in step 5), and include the MDL class as indicated.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Simple Layout</span>
+      <div class="mdl-layout-spacer"></div>
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="#">Nav link 1</a>
+        <a class="mdl-navigation__link" href="#">Nav link 2</a>
+        <a class="mdl-navigation__link" href="#">Nav link 3</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout__title">Simple Layout</span>
+  </div>
+</div>
+```
+
+&nbsp;11. Following the span, add a `<nav>` element to contain the drawer's navigation links, and one anchor `<a>` element for each drawer link (these should match the links in step 7), and include the MDL classes as indicated. This completes the layout's drawer.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Simple Layout</span>
+      <div class="mdl-layout-spacer"></div>
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="#">Nav link 1</a>
+        <a class="mdl-navigation__link" href="#">Nav link 2</a>
+        <a class="mdl-navigation__link" href="#">Nav link 3</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout__title">Simple Layout</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="#">Nav link 1</a>
+      <a class="mdl-navigation__link" href="#">Nav link 2</a>
+      <a class="mdl-navigation__link" href="#">Nav link 3</a>
+    </nav>
+  </div>
+</div>
+```
+
+&nbsp;12. Finally, following the drawer div, add a `<main>` element to hold the layout's primary content, and include the MDL class as indicated. Inside that element, add your desired content.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Simple Layout</span>
+      <div class="mdl-layout-spacer"></div>
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="#">Nav link 1</a>
+        <a class="mdl-navigation__link" href="#">Nav link 2</a>
+        <a class="mdl-navigation__link" href="#">Nav link 3</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout__title">Simple Layout</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="#">Nav link 1</a>
+      <a class="mdl-navigation__link" href="#">Nav link 2</a>
+      <a class="mdl-navigation__link" href="#">Nav link 3</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <p>Content</p>
+    <p>Goes</p>
+    <p>Here</p>
+  </main>
+</div>
+```
+
+The layout component is ready for use.
+
+#### Examples
+
+A layout with a fixed header for larger screens and a collapsible drawer for smaller screens.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout-icon"></div>
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Material Design Lite</span>
+      <div class="mdl-layout-spacer"></div>
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="#">Hello</a>
+        <a class="mdl-navigation__link" href="#">World.</a>
+        <a class="mdl-navigation__link" href="#">How</a>
+        <a class="mdl-navigation__link" href="#">Are</a>
+        <a class="mdl-navigation__link" href="#">You?</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout__title">Material Design Lite</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="#">Hello</a>
+      <a class="mdl-navigation__link" href="#">World.</a>
+      <a class="mdl-navigation__link" href="#">How</a>
+      <a class="mdl-navigation__link" href="#">Are</a>
+      <a class="mdl-navigation__link" href="#">You?</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <div>Content</div>
+  </main>
+</div>
+```
+
+The same layout with a non-fixed header that scrolls with the content.
+```html
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header mdl-layout__header--scroll">
+    <img class="mdl-layout-icon"></img>
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Material Design Lite</span>
+      <div class="mdl-layout-spacer"></div>
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="#">Hello</a>
+        <a class="mdl-navigation__link" href="#">World.</a>
+        <a class="mdl-navigation__link" href="#">How</a>
+        <a class="mdl-navigation__link" href="#">Are</a>
+        <a class="mdl-navigation__link" href="#">You?</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout__title">Material Design Lite</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="#">Hello</a>
+      <a class="mdl-navigation__link" href="#">World.</a>
+      <a class="mdl-navigation__link" href="#">How</a>
+      <a class="mdl-navigation__link" href="#">Are</a>
+      <a class="mdl-navigation__link" href="#">You?</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <div>Content</div>
+  </main>
+</div>
+```
+
+A layout with a fixed drawer that serves as sidebar navigation on larger screens. The drawer collapses and the menu icon is displayed on smaller screens.
+```html
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout__header-row">
+      <span class="mdl-layout__title">Fixed drawer layout demo</span>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout__title">Material Design Lite</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="#">Hello</a>
+      <a class="mdl-navigation__link" href="#">World.</a>
+      <a class="mdl-navigation__link" href="#">How</a>
+      <a class="mdl-navigation__link" href="#">Are</a>
+      <a class="mdl-navigation__link" href="#">You?</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <div>Content</div>
+  </main>
+</div>
+```
+
+A layout with a fixed drawer but no header.
+```html
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer">
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout__title">Material Design Lite</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="#">Hello</a>
+      <a class="mdl-navigation__link" href="#">World.</a>
+      <a class="mdl-navigation__link" href="#">How</a>
+      <a class="mdl-navigation__link" href="#">Are</a>
+      <a class="mdl-navigation__link" href="#">You?</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <div>Content</div>
+  </main>
+</div>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the layout. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-layout` | Defines container as an MDL component | Required on outer div element |
+| `mdl-js-layout` | Assigns basic MDL behavior to layout | Required on outer div element |
+| `mdl-layout__header` | Defines container as an MDL component | Required on header element |
+| `mdl-layout-icon` | Used for adding an application icon. Gets concealed by menu icon if both are visible.  | Goes on optional icon element |
+| `mdl-layout__header-row` | Defines container as MDL header row | Required on header content div |
+| `mdl-layout__title` | Defines layout title text | Required on layout title span |
+| `mdl-layout-spacer` | Used to align elements inside a header or drawer, by growing to fill remaining space. Commonly used for aligning elements to the right. | Goes on optional div following layout title |
+| `mdl-navigation` | Defines container as MDL navigation group | Required on nav element |
+| `mdl-navigation__link` | Defines anchor as MDL navigation link | Required on header and/or drawer anchor elements |
+| `mdl-layout__drawer` | Defines container as MDL layout drawer | Required on drawer div element |
+| `mdl-layout__content` | Defines container as MDL layout content | Required on main element |
+| `mdl-layout__header--scroll` | Makes the header scroll with the content | Optional; goes on header element |
+| `mdl-layout--fixed-drawer` | Makes the drawer always visible and open in larger screens | Optional; goes on outer div element (not drawer div element) |
+| `mdl-layout--fixed-header` | Makes the header always visible, even in small screens | Optional; goes on outer div element |
+| `mdl-layout--no-drawer-button` | Does not display a drawer button | Optional; goes on `mdl-layout` element |
+| `mdl-layout--no-desktop-drawer-button` | Does not display a drawer button in desktop mode | Optional; goes on `mdl-layout` element |
+| `mdl-layout--large-screen-only` | Hides an element on smaller screens | Optional; goes on any descendant of `mdl-layout` |
+| `mdl-layout--small-screen-only` | Hides an element on larger screens | Optional; goes on any descendant of `mdl-layout` |
+| `mdl-layout__header--waterfall` | Allows a "waterfall" effect with multiple header lines | Optional; goes on header element |
+| `mdl-layout__header--waterfall-hide-top` | Hides the top rather than the bottom rows on a waterfall header | Optional; goes on header element. Requires `mdl-layout__header--waterfall` |
+| `mdl-layout__header--transparent` | Makes header transparent (draws on top of layout background) | Optional; goes on header element |
+| `mdl-layout__header--seamed` | Uses a header without a shadow | Optional; goes on header element |
+| `mdl-layout__tab-bar` | Defines container as an MDL tab bar | Required on div element inside header (tabbed layout) |
+| `mdl-layout__tab` | Defines anchor as MDL tab link | Required on tab bar anchor elements |
+| `is-active` | Defines tab as default active tab | Optional; goes on tab bar anchor element and associated tab section element|
+| `mdl-layout__tab-panel` | Defines container as tab content panel | Required on tab section elements |
+| `mdl-layout__tab-manual-switch` | Disables tab switching when clicking on tab separators. Useful for disabling default behavior and setting up your own event listeners. | Optional; goes on tab bar element |
+| `mdl-layout--fixed-tabs` | Uses fixed tabs instead of the default scrollable tabs | Optional; goes on outer div element (not div inside header) |
diff --git a/node_modules/material-design-lite/src/layout/_layout.scss b/node_modules/material-design-lite/src/layout/_layout.scss
new file mode 100644
index 0000000..05a317a
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/_layout.scss
@@ -0,0 +1,662 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+// Navigation classes. Only used here for now, but we may at some point move
+// this to its own component.
+.mdl-navigation {
+  display: flex;
+  flex-wrap: nowrap;
+  box-sizing: border-box;
+}
+
+.mdl-navigation__link {
+  color: $layout-text-color;
+  text-decoration: none;
+  margin: 0;
+  @include typo-body-1(true);
+
+  // Align icons inside link with text
+  & .material-icons {
+    vertical-align: middle;
+  }
+}
+
+// Main layout class.
+.mdl-layout {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  overflow-y: auto;
+  overflow-x: hidden;
+  position: relative;
+  -webkit-overflow-scrolling: touch;
+}
+
+// Utility classes for screen sizes.
+.mdl-layout.is-small-screen .mdl-layout--large-screen-only {
+  display: none;
+}
+
+.mdl-layout:not(.is-small-screen) .mdl-layout--small-screen-only {
+  display: none;
+}
+
+.mdl-layout__container {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+}
+
+
+  // Optional utility classes for formatting special blocks in this component.
+  .mdl-layout__title,
+  .mdl-layout-title {
+    display: block;
+    position: relative;
+
+    @include typo-title();
+    font-weight: 400;
+    box-sizing: border-box;
+  }
+
+  .mdl-layout-spacer {
+    flex-grow: 1;
+  }
+
+
+  // Drawer.
+  .mdl-layout__drawer {
+    display: flex;
+    flex-direction: column;
+    flex-wrap: nowrap;
+
+    width: $layout-drawer-width;
+    height: 100%;
+    max-height: 100%;
+
+    position: absolute;
+    top: 0;
+    left: 0;
+
+    @include shadow-2dp();
+
+    box-sizing: border-box;
+    border-right: 1px solid $layout-drawer-border-color;
+    background: $layout-drawer-bg-color;
+
+    // Transform offscreen.
+    transform: translateX(-$layout-drawer-width - 10px);
+    transform-style: preserve-3d;
+    will-change: transform;
+
+    @include material-animation-default();
+    transition-property: transform;
+
+    color: $layout-text-color;
+
+    overflow: visible;
+    overflow-y: auto;
+
+    z-index: 5;
+
+    &.is-visible {
+      transform: translateX(0);
+      & ~ .mdl-layout__content.mdl-layout__content {
+        overflow: hidden;
+      }
+    }
+
+    & > * {
+      flex-shrink: 0;
+    }
+
+    & > .mdl-layout__title,
+    & > .mdl-layout-title {
+      line-height: $layout-desktop-header-height;
+      padding-left: $layout-header-desktop-indent;
+
+      @media screen and (max-width: $layout-screen-size-threshold) {
+        line-height: $layout-mobile-header-height;
+        padding-left: $layout-header-mobile-indent;
+      }
+    }
+
+    & .mdl-navigation {
+      flex-direction: column;
+      align-items: stretch;
+      padding-top: 16px;
+
+      & .mdl-navigation__link {
+      display: block;
+      flex-shrink: 0;
+      padding: 16px $layout-header-desktop-indent;
+      margin: 0;
+      color: $layout-drawer-navigation-color;
+
+        @media screen and (max-width: $layout-screen-size-threshold) {
+          padding: 16px $layout-header-mobile-indent;
+        }
+
+        &:hover {
+          background-color: $layout-nav-color;
+        }
+
+        &--current {
+            background-color: $layout-drawer-navigation-link-active-background;
+            color: $layout-drawer-navigation-link-active-color;
+        }
+      }
+    }
+
+    @media screen and (min-width: $layout-screen-size-threshold + 1px) {
+      .mdl-layout--fixed-drawer > & {
+        transform: translateX(0);
+      }
+    }
+  }
+
+
+  // Drawer button.
+  // TODO(sgomes): Replace with an icon button when we have that component.
+  .mdl-layout__drawer-button {
+    display: block;
+
+    position: absolute;
+    height: $layout-drawer-button-desktop-size;
+    width: $layout-drawer-button-desktop-size;
+    border: 0;
+
+    flex-shrink: 0;
+
+    overflow: hidden;
+    text-align: center;
+    cursor: pointer;
+    font-size: 26px;
+    line-height: $layout-mobile-header-height;
+    font-family: Helvetica, Arial, sans-serif;
+    margin: ($layout-mobile-header-height - $layout-drawer-button-desktop-size) 12px;
+    top: 0;
+    left: 0;
+    color: $layout-header-text-color;
+
+    z-index: 4;
+
+    .mdl-layout__header & {
+      position: absolute;
+      color: $layout-header-text-color;
+      background-color: inherit;
+
+      @media screen and (max-width: $layout-screen-size-threshold) {
+        margin: 4px;
+      }
+    }
+
+    @media screen and (max-width: $layout-screen-size-threshold) {
+      margin: 4px;
+      color: rgba(0, 0, 0, 0.5);
+    }
+
+    @media screen and (min-width: $layout-screen-size-threshold + 1px) {
+      line-height: 54px;
+
+      .mdl-layout--no-desktop-drawer-button &,
+      .mdl-layout--fixed-drawer > &,
+      .mdl-layout--no-drawer-button & {
+        display: none;
+      }
+    }
+  }
+
+  .mdl-layout__header {
+    display: flex;
+    flex-direction: column;
+    flex-wrap: nowrap;
+    justify-content: flex-start;
+    box-sizing: border-box;
+    flex-shrink: 0;
+
+    width: 100%;
+    margin: 0;
+    padding: 0;
+    border: none;
+    min-height: $layout-desktop-header-height;
+    max-height: 1000px;
+    z-index: 3;
+
+    background-color: $layout-header-bg-color;
+    color: $layout-header-text-color;
+
+    @include shadow-2dp();
+    @include material-animation-default();
+    transition-property: max-height, box-shadow;
+
+    @media screen and (max-width: $layout-screen-size-threshold) {
+      min-height: $layout-mobile-header-height;
+    }
+
+    .mdl-layout--fixed-drawer.is-upgraded:not(.is-small-screen) > & {
+      margin-left: $layout-drawer-width;
+      width: calc(100% - #{$layout-drawer-width});
+    }
+
+    @media screen and (min-width: $layout-screen-size-threshold + 1px) {
+      .mdl-layout--fixed-drawer > & {
+        .mdl-layout__header-row {
+          padding-left: 40px;
+        }
+      }
+    }
+
+    & > .mdl-layout-icon {
+      position: absolute;
+      left: $layout-header-desktop-indent;
+      top: ($layout-desktop-header-height - $layout-header-icon-size) / 2;
+      height: $layout-header-icon-size;
+      width: $layout-header-icon-size;
+      overflow: hidden;
+      z-index: 3;
+      display: block;
+
+      @media screen and (max-width: $layout-screen-size-threshold) {
+        left: $layout-header-mobile-indent;
+        top: ($layout-mobile-header-height - $layout-header-icon-size) / 2;
+      }
+    }
+
+    .mdl-layout.has-drawer & > .mdl-layout-icon {
+      display: none;
+    }
+
+    &.is-compact {
+      max-height: $layout-desktop-header-height;
+
+      @media screen and (max-width: $layout-screen-size-threshold) {
+        max-height: $layout-mobile-header-height;
+      }
+    }
+
+    &.is-compact.has-tabs {
+      height: $layout-desktop-header-height + $layout-tab-bar-height;
+
+      @media screen and (max-width: $layout-screen-size-threshold) {
+        min-height: $layout-mobile-header-height + $layout-tab-bar-height;
+      }
+    }
+
+    @media screen and (max-width: $layout-screen-size-threshold) {
+      & {
+        display: none;
+      }
+
+      .mdl-layout--fixed-header > & {
+        display: flex;
+      }
+    }
+  }
+
+    .mdl-layout__header--transparent.mdl-layout__header--transparent {
+      background-color: transparent;
+      box-shadow: none;
+    }
+
+    .mdl-layout__header--seamed {
+      box-shadow: none;
+    }
+
+    .mdl-layout__header--scroll {
+      box-shadow: none;
+    }
+
+    .mdl-layout__header--waterfall {
+      box-shadow: none;
+      overflow: hidden;
+
+      &.is-casting-shadow {
+        @include shadow-2dp();
+      }
+
+      &.mdl-layout__header--waterfall-hide-top {
+        justify-content: flex-end;
+      }
+    }
+
+    .mdl-layout__header-row {
+      display: flex;
+      flex-direction: row;
+      flex-wrap: nowrap;
+      flex-shrink: 0;
+      box-sizing: border-box;
+      align-self: stretch;
+      align-items: center;
+      height: $layout-header-desktop-row-height;
+      margin: 0;
+      padding: 0 $layout-header-desktop-indent 0 $layout-header-desktop-baseline;
+
+      .mdl-layout--no-drawer-button & {
+        padding-left: $layout-header-desktop-indent;
+      }
+
+      @media screen and (min-width: $layout-screen-size-threshold + 1px) {
+        .mdl-layout--no-desktop-drawer-button & {
+          padding-left: $layout-header-desktop-indent;
+        }
+      }
+
+      @media screen and (max-width: $layout-screen-size-threshold) {
+        height: $layout-header-mobile-row-height;
+        padding: 0 $layout-header-mobile-indent 0 $layout-header-mobile-baseline;
+
+        .mdl-layout--no-drawer-button & {
+          padding-left: $layout-header-mobile-indent;
+        }
+      }
+
+      & > * {
+        flex-shrink: 0;
+      }
+
+      .mdl-layout__header--scroll & {
+        width: 100%;
+      }
+
+      & .mdl-navigation {
+        margin: 0;
+        padding: 0;
+        height: $layout-header-desktop-row-height;
+        flex-direction: row;
+        align-items: center;
+
+        @media screen and (max-width: $layout-screen-size-threshold) {
+          height: $layout-header-mobile-row-height;
+        }
+      }
+
+      & .mdl-navigation__link {
+        display: block;
+        color: $layout-header-text-color;
+        line-height: $layout-header-desktop-row-height;
+        padding: 0 24px;
+
+        @media screen and (max-width: $layout-screen-size-threshold) {
+          line-height: $layout-header-mobile-row-height;
+          padding: 0 $layout-header-mobile-indent;
+        }
+      }
+    }
+
+  // Obfuscator.
+  .mdl-layout__obfuscator {
+    background-color: transparent;
+    position: absolute;
+    top: 0;
+    left: 0;
+    height: 100%;
+    width: 100%;
+    z-index: 4;
+    visibility: hidden;
+    transition-property: background-color;
+    @include material-animation-default();
+
+    &.is-visible {
+      background-color: rgba(0, 0, 0, 0.5);
+      visibility: visible;
+    }
+
+    @supports (pointer-events: auto) {
+      background-color: rgba(0, 0, 0, 0.5);
+      opacity: 0;
+      transition-property: opacity;
+      visibility: visible;
+      pointer-events: none;
+      &.is-visible {
+        pointer-events: auto;
+        opacity: 1;
+      }
+    }
+  }
+
+
+  // Content.
+  .mdl-layout__content {
+    // Fix IE10 bug.
+    -ms-flex: 0 1 auto;
+
+    position: relative;
+    display: inline-block;
+    overflow-y: auto;
+    overflow-x: hidden;
+    flex-grow: 1;
+    z-index: 1;
+    -webkit-overflow-scrolling: touch;
+
+    .mdl-layout--fixed-drawer > & {
+      margin-left: $layout-drawer-width;
+    }
+
+    .mdl-layout__container.has-scrolling-header & {
+      overflow: visible;
+    }
+
+    @media screen and (max-width: $layout-screen-size-threshold) {
+      .mdl-layout--fixed-drawer > & {
+        margin-left: 0;
+      }
+
+      .mdl-layout__container.has-scrolling-header & {
+        overflow-y: auto;
+        overflow-x: hidden;
+      }
+    }
+  }
+
+  // Tabs.
+  .mdl-layout__tab-bar {
+    height: $layout-tab-bar-height * 2;
+    margin: 0;
+    width: calc(100% -
+        #{(($layout-header-desktop-baseline - $layout-tab-desktop-padding) * 2)});
+    padding: 0 0 0
+        ($layout-header-desktop-baseline - $layout-tab-desktop-padding);
+    display: flex;
+    background-color: $layout-header-bg-color;
+    overflow-y: hidden;
+    overflow-x: scroll;
+
+    &::-webkit-scrollbar {
+      display: none;
+    }
+
+    .mdl-layout--no-drawer-button & {
+      padding-left: $layout-header-desktop-indent - $layout-tab-desktop-padding;
+      width: calc(100% -
+          #{(($layout-header-desktop-indent - $layout-tab-desktop-padding) * 2)});
+    }
+
+    @media screen and (min-width: $layout-screen-size-threshold + 1px) {
+      .mdl-layout--no-desktop-drawer-button & {
+        padding-left: $layout-header-desktop-indent - $layout-tab-desktop-padding;
+        width: calc(100% -
+            #{(($layout-header-desktop-indent - $layout-tab-desktop-padding) * 2)});
+      }
+    }
+
+    @media screen and (max-width: $layout-screen-size-threshold) {
+      width: calc(100% -
+          #{($layout-header-mobile-baseline - $layout-tab-mobile-padding)});
+      padding: 0 0 0
+          ($layout-header-mobile-baseline - $layout-tab-mobile-padding);
+
+      .mdl-layout--no-drawer-button & {
+        width: calc(100% -
+            #{(($layout-header-mobile-indent - $layout-tab-mobile-padding) * 2)});
+        padding-left: $layout-header-mobile-indent - $layout-tab-mobile-padding;
+      }
+    }
+
+    .mdl-layout--fixed-tabs & {
+      padding: 0;
+      overflow: hidden;
+      width: 100%;
+    }
+  }
+
+  .mdl-layout__tab-bar-container {
+    position: relative;
+    height: $layout-tab-bar-height;
+    width: 100%;
+    border: none;
+    margin: 0;
+    z-index: 2;
+    flex-grow: 0;
+    flex-shrink: 0;
+    overflow: hidden;
+
+    .mdl-layout__container > & {
+      position: absolute;
+      top: 0;
+      left: 0;
+    }
+  }
+
+  .mdl-layout__tab-bar-button {
+    display: inline-block;
+    position: absolute;
+    top: 0;
+    height: $layout-tab-bar-height;
+    width: $layout-header-desktop-baseline - $layout-tab-desktop-padding;
+    z-index: 4;
+    text-align: center;
+    background-color: $layout-header-bg-color;
+    color: transparent;
+    cursor: pointer;
+    user-select: none;
+
+    .mdl-layout--no-desktop-drawer-button &,
+    .mdl-layout--no-drawer-button & {
+      width: $layout-header-desktop-indent - $layout-tab-desktop-padding;
+
+      & .material-icons {
+        position: relative;
+        left: ($layout-header-desktop-indent - $layout-tab-desktop-padding - 24px) / 2;
+      }
+    }
+
+    @media screen and (max-width: $layout-screen-size-threshold) {
+      width: $layout-header-mobile-baseline - $layout-tab-mobile-padding;
+    }
+
+    .mdl-layout--fixed-tabs & {
+      display: none;
+    }
+
+    & .material-icons {
+      line-height: $layout-tab-bar-height;
+    }
+
+    &.is-active {
+      color: $layout-header-text-color;
+    }
+  }
+
+  .mdl-layout__tab-bar-left-button {
+    left: 0;
+  }
+
+  .mdl-layout__tab-bar-right-button {
+    right: 0;
+  }
+
+  .mdl-layout__tab {
+    margin: 0;
+    border: none;
+    padding: 0 $layout-tab-desktop-padding 0 $layout-tab-desktop-padding;
+
+    float: left;
+    position: relative;
+    display: block;
+    flex-grow: 0;
+    flex-shrink: 0;
+
+    text-decoration: none;
+    height: $layout-tab-bar-height;
+    line-height: $layout-tab-bar-height;
+
+    text-align: center;
+    font-weight: 500;
+    font-size: $layout-tab-font-size;
+    text-transform: uppercase;
+
+    color: $layout-header-tab-text-color;
+    overflow: hidden;
+
+    @media screen and (max-width: $layout-screen-size-threshold) {
+      padding: 0 $layout-tab-mobile-padding 0 $layout-tab-mobile-padding;
+    }
+
+    .mdl-layout--fixed-tabs & {
+      float: none;
+      flex-grow: 1;
+      padding: 0;
+    }
+
+    .mdl-layout.is-upgraded &.is-active {
+      color: $layout-header-text-color;
+    }
+
+    .mdl-layout.is-upgraded &.is-active::after {
+      height: $layout-tab-highlight-thickness;
+      width: 100%;
+      display: block;
+      content: " ";
+      bottom: 0;
+      left: 0;
+      position: absolute;
+      background: $layout-header-tab-highlight;
+      animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;
+      transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);
+    }
+
+    & .mdl-layout__tab-ripple-container {
+      display: block;
+      position: absolute;
+      height: 100%;
+      width: 100%;
+      left: 0;
+      top: 0;
+      z-index: 1;
+      overflow: hidden;
+
+      & .mdl-ripple {
+        background-color: $layout-header-text-color;
+      }
+    }
+  }
+
+  .mdl-layout__tab-panel {
+    display: block;
+
+    .mdl-layout.is-upgraded & {
+      display: none;
+    }
+
+    .mdl-layout.is-upgraded &.is-active {
+      display: block;
+    }
+  }
diff --git a/node_modules/material-design-lite/src/layout/layout.js b/node_modules/material-design-lite/src/layout/layout.js
new file mode 100644
index 0000000..a1cc1dc
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/layout.js
@@ -0,0 +1,574 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Layout MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialLayout = function MaterialLayout(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialLayout'] = MaterialLayout;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialLayout.prototype.Constant_ = {
+    MAX_WIDTH: '(max-width: 1024px)',
+    TAB_SCROLL_PIXELS: 100,
+    RESIZE_TIMEOUT: 100,
+
+    MENU_ICON: '&#xE5D2;',
+    CHEVRON_LEFT: 'chevron_left',
+    CHEVRON_RIGHT: 'chevron_right'
+  };
+
+  /**
+   * Keycodes, for code readability.
+   *
+   * @enum {number}
+   * @private
+   */
+  MaterialLayout.prototype.Keycodes_ = {
+    ENTER: 13,
+    ESCAPE: 27,
+    SPACE: 32
+  };
+
+  /**
+   * Modes.
+   *
+   * @enum {number}
+   * @private
+   */
+  MaterialLayout.prototype.Mode_ = {
+    STANDARD: 0,
+    SEAMED: 1,
+    WATERFALL: 2,
+    SCROLL: 3
+  };
+
+  /**
+   * 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
+   */
+  MaterialLayout.prototype.CssClasses_ = {
+    CONTAINER: 'mdl-layout__container',
+    HEADER: 'mdl-layout__header',
+    DRAWER: 'mdl-layout__drawer',
+    CONTENT: 'mdl-layout__content',
+    DRAWER_BTN: 'mdl-layout__drawer-button',
+
+    ICON: 'material-icons',
+
+    JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',
+    RIPPLE_CONTAINER: 'mdl-layout__tab-ripple-container',
+    RIPPLE: 'mdl-ripple',
+    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',
+
+    HEADER_SEAMED: 'mdl-layout__header--seamed',
+    HEADER_WATERFALL: 'mdl-layout__header--waterfall',
+    HEADER_SCROLL: 'mdl-layout__header--scroll',
+
+    FIXED_HEADER: 'mdl-layout--fixed-header',
+    OBFUSCATOR: 'mdl-layout__obfuscator',
+
+    TAB_BAR: 'mdl-layout__tab-bar',
+    TAB_CONTAINER: 'mdl-layout__tab-bar-container',
+    TAB: 'mdl-layout__tab',
+    TAB_BAR_BUTTON: 'mdl-layout__tab-bar-button',
+    TAB_BAR_LEFT_BUTTON: 'mdl-layout__tab-bar-left-button',
+    TAB_BAR_RIGHT_BUTTON: 'mdl-layout__tab-bar-right-button',
+    TAB_MANUAL_SWITCH: 'mdl-layout__tab-manual-switch',
+    PANEL: 'mdl-layout__tab-panel',
+
+    HAS_DRAWER: 'has-drawer',
+    HAS_TABS: 'has-tabs',
+    HAS_SCROLLING_HEADER: 'has-scrolling-header',
+    CASTING_SHADOW: 'is-casting-shadow',
+    IS_COMPACT: 'is-compact',
+    IS_SMALL_SCREEN: 'is-small-screen',
+    IS_DRAWER_OPEN: 'is-visible',
+    IS_ACTIVE: 'is-active',
+    IS_UPGRADED: 'is-upgraded',
+    IS_ANIMATING: 'is-animating',
+
+    ON_LARGE_SCREEN: 'mdl-layout--large-screen-only',
+    ON_SMALL_SCREEN: 'mdl-layout--small-screen-only'
+
+  };
+
+  /**
+   * Handles scrolling on the content.
+   *
+   * @private
+   */
+  MaterialLayout.prototype.contentScrollHandler_ = function() {
+    if (this.header_.classList.contains(this.CssClasses_.IS_ANIMATING)) {
+      return;
+    }
+
+    var headerVisible =
+        !this.element_.classList.contains(this.CssClasses_.IS_SMALL_SCREEN) ||
+        this.element_.classList.contains(this.CssClasses_.FIXED_HEADER);
+
+    if (this.content_.scrollTop > 0 &&
+        !this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {
+      this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);
+      this.header_.classList.add(this.CssClasses_.IS_COMPACT);
+      if (headerVisible) {
+        this.header_.classList.add(this.CssClasses_.IS_ANIMATING);
+      }
+    } else if (this.content_.scrollTop <= 0 &&
+        this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {
+      this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);
+      this.header_.classList.remove(this.CssClasses_.IS_COMPACT);
+      if (headerVisible) {
+        this.header_.classList.add(this.CssClasses_.IS_ANIMATING);
+      }
+    }
+  };
+
+  /**
+   * Handles a keyboard event on the drawer.
+   *
+   * @param {Event} evt The event that fired.
+   * @private
+   */
+  MaterialLayout.prototype.keyboardEventHandler_ = function(evt) {
+    // Only react when the drawer is open.
+    if (evt.keyCode === this.Keycodes_.ESCAPE &&
+        this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {
+      this.toggleDrawer();
+    }
+  };
+
+  /**
+   * Handles changes in screen size.
+   *
+   * @private
+   */
+  MaterialLayout.prototype.screenSizeHandler_ = function() {
+    if (this.screenSizeMediaQuery_.matches) {
+      this.element_.classList.add(this.CssClasses_.IS_SMALL_SCREEN);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_SMALL_SCREEN);
+      // Collapse drawer (if any) when moving to a large screen size.
+      if (this.drawer_) {
+        this.drawer_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);
+        this.obfuscator_.classList.remove(this.CssClasses_.IS_DRAWER_OPEN);
+      }
+    }
+  };
+
+  /**
+   * Handles events of drawer button.
+   *
+   * @param {Event} evt The event that fired.
+   * @private
+   */
+  MaterialLayout.prototype.drawerToggleHandler_ = function(evt) {
+    if (evt && (evt.type === 'keydown')) {
+      if (evt.keyCode === this.Keycodes_.SPACE || evt.keyCode === this.Keycodes_.ENTER) {
+        // prevent scrolling in drawer nav
+        evt.preventDefault();
+      } else {
+        // prevent other keys
+        return;
+      }
+    }
+
+    this.toggleDrawer();
+  };
+
+  /**
+   * Handles (un)setting the `is-animating` class
+   *
+   * @private
+   */
+  MaterialLayout.prototype.headerTransitionEndHandler_ = function() {
+    this.header_.classList.remove(this.CssClasses_.IS_ANIMATING);
+  };
+
+  /**
+   * Handles expanding the header on click
+   *
+   * @private
+   */
+  MaterialLayout.prototype.headerClickHandler_ = function() {
+    if (this.header_.classList.contains(this.CssClasses_.IS_COMPACT)) {
+      this.header_.classList.remove(this.CssClasses_.IS_COMPACT);
+      this.header_.classList.add(this.CssClasses_.IS_ANIMATING);
+    }
+  };
+
+  /**
+   * Reset tab state, dropping active classes
+   *
+   * @private
+   */
+  MaterialLayout.prototype.resetTabState_ = function(tabBar) {
+    for (var k = 0; k < tabBar.length; k++) {
+      tabBar[k].classList.remove(this.CssClasses_.IS_ACTIVE);
+    }
+  };
+
+  /**
+   * Reset panel state, droping active classes
+   *
+   * @private
+   */
+  MaterialLayout.prototype.resetPanelState_ = function(panels) {
+    for (var j = 0; j < panels.length; j++) {
+      panels[j].classList.remove(this.CssClasses_.IS_ACTIVE);
+    }
+  };
+
+  /**
+  * Toggle drawer state
+  *
+  * @public
+  */
+  MaterialLayout.prototype.toggleDrawer = function() {
+    var drawerButton = this.element_.querySelector('.' + this.CssClasses_.DRAWER_BTN);
+    this.drawer_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);
+    this.obfuscator_.classList.toggle(this.CssClasses_.IS_DRAWER_OPEN);
+
+    // Set accessibility properties.
+    if (this.drawer_.classList.contains(this.CssClasses_.IS_DRAWER_OPEN)) {
+      this.drawer_.setAttribute('aria-hidden', 'false');
+      drawerButton.setAttribute('aria-expanded', 'true');
+    } else {
+      this.drawer_.setAttribute('aria-hidden', 'true');
+      drawerButton.setAttribute('aria-expanded', 'false');
+    }
+  };
+  MaterialLayout.prototype['toggleDrawer'] =
+      MaterialLayout.prototype.toggleDrawer;
+
+  /**
+   * Initialize element.
+   */
+  MaterialLayout.prototype.init = function() {
+    if (this.element_) {
+      var container = document.createElement('div');
+      container.classList.add(this.CssClasses_.CONTAINER);
+
+      var focusedElement = this.element_.querySelector(':focus');
+
+      this.element_.parentElement.insertBefore(container, this.element_);
+      this.element_.parentElement.removeChild(this.element_);
+      container.appendChild(this.element_);
+
+      if (focusedElement) {
+        focusedElement.focus();
+      }
+
+      var directChildren = this.element_.childNodes;
+      var numChildren = directChildren.length;
+      for (var c = 0; c < numChildren; c++) {
+        var child = directChildren[c];
+        if (child.classList &&
+            child.classList.contains(this.CssClasses_.HEADER)) {
+          this.header_ = child;
+        }
+
+        if (child.classList &&
+            child.classList.contains(this.CssClasses_.DRAWER)) {
+          this.drawer_ = child;
+        }
+
+        if (child.classList &&
+            child.classList.contains(this.CssClasses_.CONTENT)) {
+          this.content_ = child;
+        }
+      }
+
+      window.addEventListener('pageshow', function(e) {
+        if (e.persisted) { // when page is loaded from back/forward cache
+          // trigger repaint to let layout scroll in safari
+          this.element_.style.overflowY = 'hidden';
+          requestAnimationFrame(function() {
+            this.element_.style.overflowY = '';
+          }.bind(this));
+        }
+      }.bind(this), false);
+
+      if (this.header_) {
+        this.tabBar_ = this.header_.querySelector('.' + this.CssClasses_.TAB_BAR);
+      }
+
+      var mode = this.Mode_.STANDARD;
+
+      if (this.header_) {
+        if (this.header_.classList.contains(this.CssClasses_.HEADER_SEAMED)) {
+          mode = this.Mode_.SEAMED;
+        } else if (this.header_.classList.contains(
+            this.CssClasses_.HEADER_WATERFALL)) {
+          mode = this.Mode_.WATERFALL;
+          this.header_.addEventListener('transitionend',
+            this.headerTransitionEndHandler_.bind(this));
+          this.header_.addEventListener('click',
+            this.headerClickHandler_.bind(this));
+        } else if (this.header_.classList.contains(
+            this.CssClasses_.HEADER_SCROLL)) {
+          mode = this.Mode_.SCROLL;
+          container.classList.add(this.CssClasses_.HAS_SCROLLING_HEADER);
+        }
+
+        if (mode === this.Mode_.STANDARD) {
+          this.header_.classList.add(this.CssClasses_.CASTING_SHADOW);
+          if (this.tabBar_) {
+            this.tabBar_.classList.add(this.CssClasses_.CASTING_SHADOW);
+          }
+        } else if (mode === this.Mode_.SEAMED || mode === this.Mode_.SCROLL) {
+          this.header_.classList.remove(this.CssClasses_.CASTING_SHADOW);
+          if (this.tabBar_) {
+            this.tabBar_.classList.remove(this.CssClasses_.CASTING_SHADOW);
+          }
+        } else if (mode === this.Mode_.WATERFALL) {
+          // Add and remove shadows depending on scroll position.
+          // Also add/remove auxiliary class for styling of the compact version of
+          // the header.
+          this.content_.addEventListener('scroll',
+              this.contentScrollHandler_.bind(this));
+          this.contentScrollHandler_();
+        }
+      }
+
+      // Add drawer toggling button to our layout, if we have an openable drawer.
+      if (this.drawer_) {
+        var drawerButton = this.element_.querySelector('.' +
+          this.CssClasses_.DRAWER_BTN);
+        if (!drawerButton) {
+          drawerButton = document.createElement('div');
+          drawerButton.setAttribute('aria-expanded', 'false');
+          drawerButton.setAttribute('role', 'button');
+          drawerButton.setAttribute('tabindex', '0');
+          drawerButton.classList.add(this.CssClasses_.DRAWER_BTN);
+
+          var drawerButtonIcon = document.createElement('i');
+          drawerButtonIcon.classList.add(this.CssClasses_.ICON);
+          drawerButtonIcon.innerHTML = this.Constant_.MENU_ICON;
+          drawerButton.appendChild(drawerButtonIcon);
+        }
+
+        if (this.drawer_.classList.contains(this.CssClasses_.ON_LARGE_SCREEN)) {
+          //If drawer has ON_LARGE_SCREEN class then add it to the drawer toggle button as well.
+          drawerButton.classList.add(this.CssClasses_.ON_LARGE_SCREEN);
+        } else if (this.drawer_.classList.contains(this.CssClasses_.ON_SMALL_SCREEN)) {
+          //If drawer has ON_SMALL_SCREEN class then add it to the drawer toggle button as well.
+          drawerButton.classList.add(this.CssClasses_.ON_SMALL_SCREEN);
+        }
+
+        drawerButton.addEventListener('click',
+            this.drawerToggleHandler_.bind(this));
+
+        drawerButton.addEventListener('keydown',
+            this.drawerToggleHandler_.bind(this));
+
+        // Add a class if the layout has a drawer, for altering the left padding.
+        // Adds the HAS_DRAWER to the elements since this.header_ may or may
+        // not be present.
+        this.element_.classList.add(this.CssClasses_.HAS_DRAWER);
+
+        // If we have a fixed header, add the button to the header rather than
+        // the layout.
+        if (this.element_.classList.contains(this.CssClasses_.FIXED_HEADER)) {
+          this.header_.insertBefore(drawerButton, this.header_.firstChild);
+        } else {
+          this.element_.insertBefore(drawerButton, this.content_);
+        }
+
+        var obfuscator = document.createElement('div');
+        obfuscator.classList.add(this.CssClasses_.OBFUSCATOR);
+        this.element_.appendChild(obfuscator);
+        obfuscator.addEventListener('click',
+            this.drawerToggleHandler_.bind(this));
+        this.obfuscator_ = obfuscator;
+
+        this.drawer_.addEventListener('keydown', this.keyboardEventHandler_.bind(this));
+        this.drawer_.setAttribute('aria-hidden', 'true');
+      }
+
+      // Keep an eye on screen size, and add/remove auxiliary class for styling
+      // of small screens.
+      this.screenSizeMediaQuery_ = window.matchMedia(
+          /** @type {string} */ (this.Constant_.MAX_WIDTH));
+      this.screenSizeMediaQuery_.addListener(this.screenSizeHandler_.bind(this));
+      this.screenSizeHandler_();
+
+      // Initialize tabs, if any.
+      if (this.header_ && this.tabBar_) {
+        this.element_.classList.add(this.CssClasses_.HAS_TABS);
+
+        var tabContainer = document.createElement('div');
+        tabContainer.classList.add(this.CssClasses_.TAB_CONTAINER);
+        this.header_.insertBefore(tabContainer, this.tabBar_);
+        this.header_.removeChild(this.tabBar_);
+
+        var leftButton = document.createElement('div');
+        leftButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);
+        leftButton.classList.add(this.CssClasses_.TAB_BAR_LEFT_BUTTON);
+        var leftButtonIcon = document.createElement('i');
+        leftButtonIcon.classList.add(this.CssClasses_.ICON);
+        leftButtonIcon.textContent = this.Constant_.CHEVRON_LEFT;
+        leftButton.appendChild(leftButtonIcon);
+        leftButton.addEventListener('click', function() {
+          this.tabBar_.scrollLeft -= this.Constant_.TAB_SCROLL_PIXELS;
+        }.bind(this));
+
+        var rightButton = document.createElement('div');
+        rightButton.classList.add(this.CssClasses_.TAB_BAR_BUTTON);
+        rightButton.classList.add(this.CssClasses_.TAB_BAR_RIGHT_BUTTON);
+        var rightButtonIcon = document.createElement('i');
+        rightButtonIcon.classList.add(this.CssClasses_.ICON);
+        rightButtonIcon.textContent = this.Constant_.CHEVRON_RIGHT;
+        rightButton.appendChild(rightButtonIcon);
+        rightButton.addEventListener('click', function() {
+          this.tabBar_.scrollLeft += this.Constant_.TAB_SCROLL_PIXELS;
+        }.bind(this));
+
+        tabContainer.appendChild(leftButton);
+        tabContainer.appendChild(this.tabBar_);
+        tabContainer.appendChild(rightButton);
+
+        // Add and remove tab buttons depending on scroll position and total
+        // window size.
+        var tabUpdateHandler = function() {
+          if (this.tabBar_.scrollLeft > 0) {
+            leftButton.classList.add(this.CssClasses_.IS_ACTIVE);
+          } else {
+            leftButton.classList.remove(this.CssClasses_.IS_ACTIVE);
+          }
+
+          if (this.tabBar_.scrollLeft <
+              this.tabBar_.scrollWidth - this.tabBar_.offsetWidth) {
+            rightButton.classList.add(this.CssClasses_.IS_ACTIVE);
+          } else {
+            rightButton.classList.remove(this.CssClasses_.IS_ACTIVE);
+          }
+        }.bind(this);
+
+        this.tabBar_.addEventListener('scroll', tabUpdateHandler);
+        tabUpdateHandler();
+
+        // Update tabs when the window resizes.
+        var windowResizeHandler = function() {
+          // Use timeouts to make sure it doesn't happen too often.
+          if (this.resizeTimeoutId_) {
+            clearTimeout(this.resizeTimeoutId_);
+          }
+          this.resizeTimeoutId_ = setTimeout(function() {
+            tabUpdateHandler();
+            this.resizeTimeoutId_ = null;
+          }.bind(this), /** @type {number} */ (this.Constant_.RESIZE_TIMEOUT));
+        }.bind(this);
+
+        window.addEventListener('resize', windowResizeHandler);
+
+        if (this.tabBar_.classList.contains(this.CssClasses_.JS_RIPPLE_EFFECT)) {
+          this.tabBar_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);
+        }
+
+        // Select element tabs, document panels
+        var tabs = this.tabBar_.querySelectorAll('.' + this.CssClasses_.TAB);
+        var panels = this.content_.querySelectorAll('.' + this.CssClasses_.PANEL);
+
+        // Create new tabs for each tab element
+        for (var i = 0; i < tabs.length; i++) {
+          new MaterialLayoutTab(tabs[i], tabs, panels, this);
+        }
+      }
+
+      this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
+    }
+  };
+
+  /**
+   * Constructor for an individual tab.
+   *
+   * @constructor
+   * @param {HTMLElement} tab The HTML element for the tab.
+   * @param {!Array<HTMLElement>} tabs Array with HTML elements for all tabs.
+   * @param {!Array<HTMLElement>} panels Array with HTML elements for all panels.
+   * @param {MaterialLayout} layout The MaterialLayout object that owns the tab.
+   */
+  function MaterialLayoutTab(tab, tabs, panels, layout) {
+
+    /**
+     * Auxiliary method to programmatically select a tab in the UI.
+     */
+    function selectTab() {
+      var href = tab.href.split('#')[1];
+      var panel = layout.content_.querySelector('#' + href);
+      layout.resetTabState_(tabs);
+      layout.resetPanelState_(panels);
+      tab.classList.add(layout.CssClasses_.IS_ACTIVE);
+      panel.classList.add(layout.CssClasses_.IS_ACTIVE);
+    }
+
+    if (layout.tabBar_.classList.contains(
+        layout.CssClasses_.JS_RIPPLE_EFFECT)) {
+      var rippleContainer = document.createElement('span');
+      rippleContainer.classList.add(layout.CssClasses_.RIPPLE_CONTAINER);
+      rippleContainer.classList.add(layout.CssClasses_.JS_RIPPLE_EFFECT);
+      var ripple = document.createElement('span');
+      ripple.classList.add(layout.CssClasses_.RIPPLE);
+      rippleContainer.appendChild(ripple);
+      tab.appendChild(rippleContainer);
+    }
+
+    if (!layout.tabBar_.classList.contains(
+      layout.CssClasses_.TAB_MANUAL_SWITCH)) {
+      tab.addEventListener('click', function(e) {
+        if (tab.getAttribute('href').charAt(0) === '#') {
+          e.preventDefault();
+          selectTab();
+        }
+      });
+    }
+
+    tab.show = selectTab;
+  }
+  window['MaterialLayoutTab'] = MaterialLayoutTab;
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialLayout,
+    classAsString: 'MaterialLayout',
+    cssClass: 'mdl-js-layout'
+  });
+})();
diff --git a/node_modules/material-design-lite/src/layout/snippets/fixed-drawer-demo.html b/node_modules/material-design-lite/src/layout/snippets/fixed-drawer-demo.html
new file mode 100644
index 0000000..6a975c8
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/fixed-drawer-demo.html
@@ -0,0 +1,15 @@
+<style>
+.demo-layout.demo-layout__fixed-drawer {
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+              0 3px 1px -2px rgba(0, 0, 0, 0.2),
+              0 1px 5px 0 rgba(0, 0, 0, 0.12);
+  width: 100%;
+  position: relative;
+  height: 300px;
+}
+.demo-layout.demo-layout__fixed-drawer .mdl-layout__content {
+  background: white;
+}
+</style>
+
+{% include "fixed-drawer.html" %}
diff --git a/node_modules/material-design-lite/src/layout/snippets/fixed-drawer.html b/node_modules/material-design-lite/src/layout/snippets/fixed-drawer.html
new file mode 100644
index 0000000..d03455e
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/fixed-drawer.html
@@ -0,0 +1,15 @@
+<!-- No header, and the drawer stays open on larger screens (fixed drawer). -->
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer">
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Title</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <div class="page-content"><!-- Your content goes here --></div>
+  </main>
+</div>
diff --git a/node_modules/material-design-lite/src/layout/snippets/fixed-header-demo.html b/node_modules/material-design-lite/src/layout/snippets/fixed-header-demo.html
new file mode 100644
index 0000000..992953a
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/fixed-header-demo.html
@@ -0,0 +1,15 @@
+<style>
+.demo-layout.demo-layout__fixed-header {
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+              0 3px 1px -2px rgba(0, 0, 0, 0.2),
+              0 1px 5px 0 rgba(0, 0, 0, 0.12);
+  width: 100%;
+  position: relative;
+  height: 300px;
+}
+.demo-layout.demo-layout__fixed-header .mdl-layout__content {
+  background: white;
+}
+</style>
+
+{% include "fixed-header.html" %}
diff --git a/node_modules/material-design-lite/src/layout/snippets/fixed-header-drawer-demo.html b/node_modules/material-design-lite/src/layout/snippets/fixed-header-drawer-demo.html
new file mode 100644
index 0000000..389199e
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/fixed-header-drawer-demo.html
@@ -0,0 +1,15 @@
+<style>
+.demo-layout.demo-layout__fixed-header-drawer {
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+              0 3px 1px -2px rgba(0, 0, 0, 0.2),
+              0 1px 5px 0 rgba(0, 0, 0, 0.12);
+  width: 100%;
+  position: relative;
+  height: 300px;
+}
+.demo-layout.demo-layout__fixed-header-drawer.mdl-layout__content {
+  background: white;
+}
+</style>
+
+{% include "fixed-header-drawer.html" %}
diff --git a/node_modules/material-design-lite/src/layout/snippets/fixed-header-drawer.html b/node_modules/material-design-lite/src/layout/snippets/fixed-header-drawer.html
new file mode 100644
index 0000000..9d85c30
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/fixed-header-drawer.html
@@ -0,0 +1,33 @@
+<!-- The drawer is always open in large screens. The header is always shown,
+  even in small screens. -->
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer
+            mdl-layout--fixed-header">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout__header-row">
+      <div class="mdl-layout-spacer"></div>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--expandable
+                  mdl-textfield--floating-label mdl-textfield--align-right">
+        <label class="mdl-button mdl-js-button mdl-button--icon"
+               for="fixed-header-drawer-exp">
+          <i class="material-icons">search</i>
+        </label>
+        <div class="mdl-textfield__expandable-holder">
+          <input class="mdl-textfield__input" type="text" name="sample"
+                 id="fixed-header-drawer-exp">
+        </div>
+      </div>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Title</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <div class="page-content"><!-- Your content goes here --></div>
+  </main>
+</div>
diff --git a/node_modules/material-design-lite/src/layout/snippets/fixed-header.html b/node_modules/material-design-lite/src/layout/snippets/fixed-header.html
new file mode 100644
index 0000000..43ecea3
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/fixed-header.html
@@ -0,0 +1,30 @@
+<!-- Always shows a header, even in smaller screens. -->
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-header">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout__header-row">
+      <!-- Title -->
+      <span class="mdl-layout-title">Title</span>
+      <!-- Add spacer, to align navigation to the right -->
+      <div class="mdl-layout-spacer"></div>
+      <!-- Navigation. We hide it in small screens. -->
+      <nav class="mdl-navigation mdl-layout--large-screen-only">
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Title</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <div class="page-content"><!-- Your content goes here --></div>
+  </main>
+</div>
diff --git a/node_modules/material-design-lite/src/layout/snippets/fixed-tabs-demo.html b/node_modules/material-design-lite/src/layout/snippets/fixed-tabs-demo.html
new file mode 100644
index 0000000..7091a09
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/fixed-tabs-demo.html
@@ -0,0 +1,15 @@
+<style>
+.demo-layout.demo-layout__fixed-tabs {
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+              0 3px 1px -2px rgba(0, 0, 0, 0.2),
+              0 1px 5px 0 rgba(0, 0, 0, 0.12);
+  width: 100%;
+  position: relative;
+  height: 300px;
+}
+.demo-layout.demo-layout__fixed-tabs .mdl-layout__content {
+  background: white;
+}
+</style>
+
+{% include "fixed-tabs.html" %}
diff --git a/node_modules/material-design-lite/src/layout/snippets/fixed-tabs.html b/node_modules/material-design-lite/src/layout/snippets/fixed-tabs.html
new file mode 100644
index 0000000..d9e7521
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/fixed-tabs.html
@@ -0,0 +1,30 @@
+<!-- Simple header with fixed tabs. -->
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-header
+            mdl-layout--fixed-tabs">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout__header-row">
+      <!-- Title -->
+      <span class="mdl-layout-title">Title</span>
+    </div>
+    <!-- Tabs -->
+    <div class="mdl-layout__tab-bar mdl-js-ripple-effect">
+      <a href="#fixed-tab-1" class="mdl-layout__tab is-active">Tab 1</a>
+      <a href="#fixed-tab-2" class="mdl-layout__tab">Tab 2</a>
+      <a href="#fixed-tab-3" class="mdl-layout__tab">Tab 3</a>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Title</span>
+  </div>
+  <main class="mdl-layout__content">
+    <section class="mdl-layout__tab-panel is-active" id="fixed-tab-1">
+      <div class="page-content"><!-- Your content goes here --></div>
+    </section>
+    <section class="mdl-layout__tab-panel" id="fixed-tab-2">
+      <div class="page-content"><!-- Your content goes here --></div>
+    </section>
+    <section class="mdl-layout__tab-panel" id="fixed-tab-3">
+      <div class="page-content"><!-- Your content goes here --></div>
+    </section>
+  </main>
+</div>
diff --git a/node_modules/material-design-lite/src/layout/snippets/scrollable-tabs-demo.html b/node_modules/material-design-lite/src/layout/snippets/scrollable-tabs-demo.html
new file mode 100644
index 0000000..848dcdd
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/scrollable-tabs-demo.html
@@ -0,0 +1,15 @@
+<style>
+.demo-layout.demo-layout__scrollable-tabs {
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+              0 3px 1px -2px rgba(0, 0, 0, 0.2),
+              0 1px 5px 0 rgba(0, 0, 0, 0.12);
+  width: 100%;
+  position: relative;
+  height: 300px;
+}
+.demo-layout.demo-layout__scrollable-tabs .mdl-layout__content {
+  background: white;
+}
+</style>
+
+{% include "scrollable-tabs.html" %}
diff --git a/node_modules/material-design-lite/src/layout/snippets/scrollable-tabs.html b/node_modules/material-design-lite/src/layout/snippets/scrollable-tabs.html
new file mode 100644
index 0000000..822863a
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/scrollable-tabs.html
@@ -0,0 +1,41 @@
+<!-- Simple header with scrollable tabs. -->
+<div class="mdl-layout mdl-js-layout mdl-layout--fixed-header">
+  <header class="mdl-layout__header">
+    <div class="mdl-layout__header-row">
+      <!-- Title -->
+      <span class="mdl-layout-title">Title</span>
+    </div>
+    <!-- Tabs -->
+    <div class="mdl-layout__tab-bar mdl-js-ripple-effect">
+      <a href="#scroll-tab-1" class="mdl-layout__tab is-active">Tab 1</a>
+      <a href="#scroll-tab-2" class="mdl-layout__tab">Tab 2</a>
+      <a href="#scroll-tab-3" class="mdl-layout__tab">Tab 3</a>
+      <a href="#scroll-tab-4" class="mdl-layout__tab">Tab 4</a>
+      <a href="#scroll-tab-5" class="mdl-layout__tab">Tab 5</a>
+      <a href="#scroll-tab-6" class="mdl-layout__tab">Tab 6</a>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Title</span>
+  </div>
+  <main class="mdl-layout__content">
+    <section class="mdl-layout__tab-panel is-active" id="scroll-tab-1">
+      <div class="page-content"><!-- Your content goes here --></div>
+    </section>
+    <section class="mdl-layout__tab-panel" id="scroll-tab-2">
+      <div class="page-content"><!-- Your content goes here --></div>
+    </section>
+    <section class="mdl-layout__tab-panel" id="scroll-tab-3">
+      <div class="page-content"><!-- Your content goes here --></div>
+    </section>
+    <section class="mdl-layout__tab-panel" id="scroll-tab-4">
+      <div class="page-content"><!-- Your content goes here --></div>
+    </section>
+    <section class="mdl-layout__tab-panel" id="scroll-tab-5">
+      <div class="page-content"><!-- Your content goes here --></div>
+    </section>
+    <section class="mdl-layout__tab-panel" id="scroll-tab-6">
+      <div class="page-content"><!-- Your content goes here --></div>
+    </section>
+  </main>
+</div>
diff --git a/node_modules/material-design-lite/src/layout/snippets/scrolling-header-demo.html b/node_modules/material-design-lite/src/layout/snippets/scrolling-header-demo.html
new file mode 100644
index 0000000..7a01533
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/scrolling-header-demo.html
@@ -0,0 +1,16 @@
+<style>
+.demo-layout.demo-layout__scrolling-header {
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+              0 3px 1px -2px rgba(0, 0, 0, 0.2),
+              0 1px 5px 0 rgba(0, 0, 0, 0.12);
+  width: 100%;
+  position: relative;
+  height: 300px;
+}
+.demo-layout.demo-layout__scrolling-header .page-content {
+  height: 600px;
+  background: white;
+}
+</style>
+
+{% include "scrolling-header.html" %}
diff --git a/node_modules/material-design-lite/src/layout/snippets/scrolling-header.html b/node_modules/material-design-lite/src/layout/snippets/scrolling-header.html
new file mode 100644
index 0000000..6d798a7
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/scrolling-header.html
@@ -0,0 +1,31 @@
+<!-- Uses a header that scrolls with the text, rather than staying
+  locked at the top -->
+<div class="mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header mdl-layout__header--scroll">
+    <div class="mdl-layout__header-row">
+      <!-- Title -->
+      <span class="mdl-layout-title">Title</span>
+      <!-- Add spacer, to align navigation to the right -->
+      <div class="mdl-layout-spacer"></div>
+      <!-- Navigation -->
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Title</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <div class="page-content"><!-- Your content goes here --></div>
+  </main>
+</div>
diff --git a/node_modules/material-design-lite/src/layout/snippets/transparent-demo.html b/node_modules/material-design-lite/src/layout/snippets/transparent-demo.html
new file mode 100644
index 0000000..75dc854
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/transparent-demo.html
@@ -0,0 +1,12 @@
+<style>
+.demo-layout.demo-layout__transparent {
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+              0 3px 1px -2px rgba(0, 0, 0, 0.2),
+              0 1px 5px 0 rgba(0, 0, 0, 0.12);
+  width: 100%;
+  position: relative;
+  height: 300px;
+}
+</style>
+
+{% include "transparent.html" %}
diff --git a/node_modules/material-design-lite/src/layout/snippets/transparent.html b/node_modules/material-design-lite/src/layout/snippets/transparent.html
new file mode 100644
index 0000000..752b8b8
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/transparent.html
@@ -0,0 +1,41 @@
+<!-- Uses a transparent header that draws on top of the layout's background -->
+<style>
+.demo-layout-transparent {
+  background: url('../assets/demos/transparent.jpg') center / cover;
+}
+.demo-layout-transparent .mdl-layout__header,
+.demo-layout-transparent .mdl-layout__drawer-button {
+  /* This background is dark, so we set text to white. Use 87% black instead if
+     your background is light. */
+  color: white;
+}
+</style>
+
+<div class="demo-layout-transparent mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header mdl-layout__header--transparent">
+    <div class="mdl-layout__header-row">
+      <!-- Title -->
+      <span class="mdl-layout-title">Title</span>
+      <!-- Add spacer, to align navigation to the right -->
+      <div class="mdl-layout-spacer"></div>
+      <!-- Navigation -->
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Title</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+  </main>
+</div>
diff --git a/node_modules/material-design-lite/src/layout/snippets/waterfall-header-demo.html b/node_modules/material-design-lite/src/layout/snippets/waterfall-header-demo.html
new file mode 100644
index 0000000..15cb494
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/waterfall-header-demo.html
@@ -0,0 +1,16 @@
+<style>
+.demo-layout.demo-layout__waterfall-header {
+  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),
+              0 3px 1px -2px rgba(0, 0, 0, 0.2),
+              0 1px 5px 0 rgba(0, 0, 0, 0.12);
+  width: 100%;
+  position: relative;
+  height: 300px;
+}
+.demo-layout.demo-layout__waterfall-header .page-content {
+  height: 600px;
+  background: white;
+}
+</style>
+
+{% include "waterfall-header.html" %}
diff --git a/node_modules/material-design-lite/src/layout/snippets/waterfall-header.html b/node_modules/material-design-lite/src/layout/snippets/waterfall-header.html
new file mode 100644
index 0000000..0b2e492
--- /dev/null
+++ b/node_modules/material-design-lite/src/layout/snippets/waterfall-header.html
@@ -0,0 +1,51 @@
+<!-- Uses a header that contracts as the page scrolls down. -->
+<style>
+.demo-layout-waterfall .mdl-layout__header-row .mdl-navigation__link:last-of-type  {
+  padding-right: 0;
+}
+</style>
+
+<div class="demo-layout-waterfall mdl-layout mdl-js-layout">
+  <header class="mdl-layout__header mdl-layout__header--waterfall">
+    <!-- Top row, always visible -->
+    <div class="mdl-layout__header-row">
+      <!-- Title -->
+      <span class="mdl-layout-title">Title</span>
+      <div class="mdl-layout-spacer"></div>
+      <div class="mdl-textfield mdl-js-textfield mdl-textfield--expandable
+                  mdl-textfield--floating-label mdl-textfield--align-right">
+        <label class="mdl-button mdl-js-button mdl-button--icon"
+               for="waterfall-exp">
+          <i class="material-icons">search</i>
+        </label>
+        <div class="mdl-textfield__expandable-holder">
+          <input class="mdl-textfield__input" type="text" name="sample"
+                 id="waterfall-exp">
+        </div>
+      </div>
+    </div>
+    <!-- Bottom row, not visible on scroll -->
+    <div class="mdl-layout__header-row">
+      <div class="mdl-layout-spacer"></div>
+      <!-- Navigation -->
+      <nav class="mdl-navigation">
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+        <a class="mdl-navigation__link" href="">Link</a>
+      </nav>
+    </div>
+  </header>
+  <div class="mdl-layout__drawer">
+    <span class="mdl-layout-title">Title</span>
+    <nav class="mdl-navigation">
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+      <a class="mdl-navigation__link" href="">Link</a>
+    </nav>
+  </div>
+  <main class="mdl-layout__content">
+    <div class="page-content"><!-- Your content goes here --></div>
+  </main>
+</div>
diff --git a/node_modules/material-design-lite/src/list/README.md b/node_modules/material-design-lite/src/list/README.md
new file mode 100644
index 0000000..a909990
--- /dev/null
+++ b/node_modules/material-design-lite/src/list/README.md
@@ -0,0 +1,54 @@
+## Introduction
+Lists present multiple line items vertically as a single continuous element. Refer the [Material Design
+Spec](https://www.google.com/design/spec/components/lists.html) to know more about the content options.
+
+### To include the MDL **list** component:
+
+## Create a List with basic items.
+
+&nbsp;1. Code a `<ul>` element with the class `mdl-list`; this is the "outer" container, intended to hold all of the list's content.
+```html
+<ul class='mdl-list'>
+</ul>
+```
+&nbsp;2. Code as many `<li>` elements as required with the class `mdl-list__item`; this is intended to hold all of the **item's** content.
+```html
+<ul class='mdl-list'>
+  <li class="mdl-list__item"></li>
+  <li class="mdl-list__item"></li>
+  <li class="mdl-list__item"></li>
+</ul>
+```
+
+&nbsp;3. Add your content as the children of the `<li>`, with the appropriate content type modification class for example .
+```html
+<ul class='mdl-list'>
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content"></span>
+  </li>
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content"></span>
+  </li>
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content"></span>
+  </li>
+</ul>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual enhancements to the list. The table below lists the available classes and their effects.
+
+| MDL Class        | Effect           | Remark  |
+| ------------- |:-------------:| -----:|
+| .mdl-list | Defines list as an MDL component| - |
+| .mdl-list__item | Defines the List's Items | required |
+| .mdl-list__item--two-line | Defines the List's Items as Two Line | Optional Two Line List Variant |
+| .mdl-list__item--three-line | Defines the List's Items  as a Three Line | Optional Three Line List Variant |
+| .mdl-list__item-primary-content | Defines the primary content sub-division |-|
+| .mdl-list__item-avatar | Defines the avatar sub-division |-|
+| .mdl-list__item-icon | Defines the icon sub-division |-|
+| .mdl-list__item-secondary-content | Defines the secondary content sub-division | requires `.mdl-list__item--two-line` or `.mdl-list__item--three-line` |
+| .mdl-list__item-secondary-info | Defines the information sub-division |requires `.mdl-list__item--two-line` or `.mdl-list__item--three-line` |
+| .mdl-list__item-secondary-action | Defines the Action sub-division | requires `.mdl-list__item--two-line` or `.mdl-list__item--three-line` |
+| .mdl-list__item-text-body | Defines the Text Body sub-division | requires `.mdl-list__item--three-line` |
diff --git a/node_modules/material-design-lite/src/list/_list.scss b/node_modules/material-design-lite/src/list/_list.scss
new file mode 100644
index 0000000..980ef38
--- /dev/null
+++ b/node_modules/material-design-lite/src/list/_list.scss
@@ -0,0 +1,157 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+
+.mdl-list {
+  display: block;
+  padding: $list-border 0;
+  list-style: none;
+}
+
+.mdl-list__item {
+  @include typo-subhead();
+  line-height: 1;
+  display: flex;
+  min-height: $list-min-height;
+  box-sizing: border-box;
+  flex-direction: row;
+  flex-wrap: nowrap;
+  align-items: center;
+  padding: $list-min-padding;
+  cursor: default;
+  color: $list-main-text-text-color;
+  overflow: hidden;
+
+  & .mdl-list__item-primary-content {
+    order: 0;
+    flex-grow: 2;
+    text-decoration: none;
+    box-sizing: border-box;
+    display: flex;
+    align-items: center;
+
+    & .mdl-list__item-icon {
+      margin-right: $list-icon-text-left-distance - $list-icon-size - $list-min-padding;
+    }
+
+    & .mdl-list__item-avatar {
+      margin-right: $list-avatar-text-left-distance - $list-avatar-size - $list-min-padding;
+    }
+  }
+
+  & .mdl-list__item-secondary-content {
+    display: flex;
+    flex-flow: column;
+    align-items: flex-end;
+    margin-left: $list-min-padding;
+
+    & .mdl-list__item-secondary-action label { display: inline; }
+    & .mdl-list__item-secondary-info {
+      @include typo-caption();
+      color: $list-supporting-text-text-color;
+    }
+    & .mdl-list__item-sub-header {
+      padding: 0 0 0 $list-min-padding;
+    }
+  }
+}
+
+.mdl-list__item-icon,
+.mdl-list__item-icon.material-icons {
+  height: $list-icon-size;
+  width: $list-icon-size;
+  font-size: $list-icon-size;
+  box-sizing: border-box;
+  color: $list-icon-color;
+}
+
+.mdl-list__item-avatar,
+.mdl-list__item-avatar.material-icons {
+  height: $list-avatar-size;
+  width: $list-avatar-size;
+  box-sizing: border-box;
+  border-radius: 50%;
+  // Set a background colour in case the user doesn't provide an image.
+  background-color: $list-icon-color;
+  // Set a font size and color in case the user provides a Material Icon.
+  font-size: $list-avatar-size;
+  color: $list-avatar-color;
+}
+
+.mdl-list__item--two-line {
+  height: $list-two-line-height;
+
+  & .mdl-list__item-primary-content {
+    height: $list-two-line-height - $list-min-padding - $list-bottom-padding;
+    line-height: 20px;
+    display: block;
+
+    & .mdl-list__item-avatar{
+      float: left;
+    }
+
+    & .mdl-list__item-icon {
+      float: left;
+      // Icons are aligned to center of text in a two line list.
+      margin-top:
+        ($list-two-line-height - $list-min-padding - $list-bottom-padding -
+         $list-icon-size) / 2;
+    }
+
+    & .mdl-list__item-secondary-content {
+      height: $list-two-line-height - $list-min-padding - $list-bottom-padding;
+    }
+
+    & .mdl-list__item-sub-title {
+      @include typo-body-1();
+      line-height: 18px;
+      color: $list-supporting-text-text-color;
+      display: block;
+      padding: 0;
+    }
+  }
+}
+
+.mdl-list__item--three-line {
+  height: $list-three-line-height;
+
+  & .mdl-list__item-primary-content {
+    height: $list-three-line-height - $list-min-padding - $list-bottom-padding;
+    line-height: 20px;
+    display: block;
+
+    & .mdl-list__item-avatar,
+    & .mdl-list__item-icon {
+      float: left;
+    }
+  }
+
+  & .mdl-list__item-secondary-content {
+    height: $list-three-line-height - $list-min-padding - $list-bottom-padding;
+  }
+
+  & .mdl-list__item-text-body {
+    @include typo-body-1();
+    line-height: 18px;
+    height: $list-three-line-height - $list-min-padding - $list-bottom-padding;
+    color: $list-supporting-text-text-color;
+    display: block;
+    padding: 0;
+  }
+}
diff --git a/node_modules/material-design-lite/src/list/snippets/action.html b/node_modules/material-design-lite/src/list/snippets/action.html
new file mode 100644
index 0000000..62447cb
--- /dev/null
+++ b/node_modules/material-design-lite/src/list/snippets/action.html
@@ -0,0 +1,32 @@
+<!-- List items with avatar and action -->
+<style>
+.demo-list-action {
+  width: 300px;
+}
+</style>
+
+<div class="demo-list-action mdl-list">
+  <div class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons mdl-list__item-avatar">person</i>
+      <span>Bryan Cranston</span>
+    </span>
+    <a class="mdl-list__item-secondary-action" href="#"><i class="material-icons">star</i></a>
+  </div>
+  <div class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons mdl-list__item-avatar">person</i>
+      <span>Aaron Paul</span>
+    </span>
+    <a class="mdl-list__item-secondary-action" href="#"><i class="material-icons">star</i></a>
+  </div>
+  <div class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons mdl-list__item-avatar">person</i>
+      <span>Bob Odenkirk</span>
+    </span>
+    <span class="mdl-list__item-secondary-content">
+      <a class="mdl-list__item-secondary-action" href="#"><i class="material-icons">star</i></a>
+  </span>
+  </div>
+</div>
diff --git a/node_modules/material-design-lite/src/list/snippets/icon.html b/node_modules/material-design-lite/src/list/snippets/icon.html
new file mode 100644
index 0000000..fca89ab
--- /dev/null
+++ b/node_modules/material-design-lite/src/list/snippets/icon.html
@@ -0,0 +1,27 @@
+<!-- Icon List -->
+<style>
+.demo-list-icon {
+  width: 300px;
+}
+</style>
+
+<ul class="demo-list-icon mdl-list">
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+    <i class="material-icons mdl-list__item-icon">person</i>
+    Bryan Cranston
+</span>
+  </li>
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+    <i class="material-icons mdl-list__item-icon">person</i>
+    Aaron Paul
+  </span>
+  </li>
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+    <i class="material-icons mdl-list__item-icon">person</i>
+    Bob Odenkirk
+  </span>
+  </li>
+</ul>
diff --git a/node_modules/material-design-lite/src/list/snippets/list-control.html b/node_modules/material-design-lite/src/list/snippets/list-control.html
new file mode 100644
index 0000000..dbbf312
--- /dev/null
+++ b/node_modules/material-design-lite/src/list/snippets/list-control.html
@@ -0,0 +1,46 @@
+<!-- List with avatar and controls -->
+<style>
+.demo-list-control {
+  width: 300px;
+}
+
+.demo-list-radio {
+  display: inline;
+}
+</style>
+
+<ul class="demo-list-control mdl-list">
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons  mdl-list__item-avatar">person</i>
+      Bryan Cranston
+    </span>
+    <span class="mdl-list__item-secondary-action">
+      <label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect" for="list-checkbox-1">
+        <input type="checkbox" id="list-checkbox-1" class="mdl-checkbox__input" checked />
+      </label>
+    </span>
+  </li>
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons  mdl-list__item-avatar">person</i>
+      Aaron Paul
+    </span>
+    <span class="mdl-list__item-secondary-action">
+      <label class="demo-list-radio mdl-radio mdl-js-radio mdl-js-ripple-effect" for="list-option-1">
+        <input type="radio" id="list-option-1" class="mdl-radio__button" name="options" value="1" checked />
+      </label>
+    </span>
+  </li>
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons  mdl-list__item-avatar">person</i>
+      Bob Odenkirk
+    </span>
+    <span class="mdl-list__item-secondary-action">
+      <label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="list-switch-1">
+        <input type="checkbox" id="list-switch-1" class="mdl-switch__input" checked />
+      </label>
+    </span>
+  </li>
+</ul>
diff --git a/node_modules/material-design-lite/src/list/snippets/list-item.html b/node_modules/material-design-lite/src/list/snippets/list-item.html
new file mode 100644
index 0000000..635e41a
--- /dev/null
+++ b/node_modules/material-design-lite/src/list/snippets/list-item.html
@@ -0,0 +1,24 @@
+<!-- Simple list -->
+<style>
+.demo-list-item {
+  width: 300px;
+}
+</style>
+
+<ul class="demo-list-item mdl-list">
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+      Bryan Cranston
+    </span>
+  </li>
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+      Aaron Paul
+    </span>
+  </li>
+  <li class="mdl-list__item">
+    <span class="mdl-list__item-primary-content">
+      Bob Odenkirk
+    </span>
+  </li>
+</ul>
diff --git a/node_modules/material-design-lite/src/list/snippets/three-line.html b/node_modules/material-design-lite/src/list/snippets/three-line.html
new file mode 100644
index 0000000..2a33d38
--- /dev/null
+++ b/node_modules/material-design-lite/src/list/snippets/three-line.html
@@ -0,0 +1,48 @@
+<!-- Three Line List with secondary info and action -->
+<style>
+.demo-list-three {
+  width: 650px;
+}
+</style>
+
+<ul class="demo-list-three mdl-list">
+  <li class="mdl-list__item mdl-list__item--three-line">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons mdl-list__item-avatar">person</i>
+      <span>Bryan Cranston</span>
+      <span class="mdl-list__item-text-body">
+        Bryan Cranston played the role of Walter in Breaking Bad. He is also known
+        for playing Hal in Malcom in the Middle.
+      </span>
+    </span>
+    <span class="mdl-list__item-secondary-content">
+      <a class="mdl-list__item-secondary-action" href="#"><i class="material-icons">star</i></a>
+    </span>
+  </li>
+  <li class="mdl-list__item mdl-list__item--three-line">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons  mdl-list__item-avatar">person</i>
+      <span>Aaron Paul</span>
+      <span class="mdl-list__item-text-body">
+        Aaron Paul played the role of Jesse in Breaking Bad. He also featured in
+        the "Need For Speed" Movie.
+      </span>
+    </span>
+    <span class="mdl-list__item-secondary-content">
+      <a class="mdl-list__item-secondary-action" href="#"><i class="material-icons">star</i></a>
+    </span>
+  </li>
+  <li class="mdl-list__item mdl-list__item--three-line">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons  mdl-list__item-avatar">person</i>
+      <span>Bob Odenkirk</span>
+      <span class="mdl-list__item-text-body">
+        Bob Odinkrik played the role of Saul in Breaking Bad. Due to public fondness for the
+        character, Bob stars in his own show now, called "Better Call Saul".
+      </span>
+    </span>
+    <span class="mdl-list__item-secondary-content">
+      <a class="mdl-list__item-secondary-action" href="#"><i class="material-icons">star</i></a>
+    </span>
+  </li>
+</ul>
diff --git a/node_modules/material-design-lite/src/list/snippets/two-line.html b/node_modules/material-design-lite/src/list/snippets/two-line.html
new file mode 100644
index 0000000..b130aba
--- /dev/null
+++ b/node_modules/material-design-lite/src/list/snippets/two-line.html
@@ -0,0 +1,40 @@
+<!-- Two Line List with secondary info and action -->
+<style>
+.demo-list-two {
+  width: 300px;
+}
+</style>
+
+<ul class="demo-list-two mdl-list">
+  <li class="mdl-list__item mdl-list__item--two-line">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons mdl-list__item-avatar">person</i>
+      <span>Bryan Cranston</span>
+      <span class="mdl-list__item-sub-title">62 Episodes</span>
+    </span>
+    <span class="mdl-list__item-secondary-content">
+      <span class="mdl-list__item-secondary-info">Actor</span>
+      <a class="mdl-list__item-secondary-action" href="#"><i class="material-icons">star</i></a>
+    </span>
+  </li>
+  <li class="mdl-list__item mdl-list__item--two-line">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons mdl-list__item-avatar">person</i>
+      <span>Aaron Paul</span>
+      <span class="mdl-list__item-sub-title">62 Episodes</span>
+    </span>
+    <span class="mdl-list__item-secondary-content">
+      <a class="mdl-list__item-secondary-action" href="#"><i class="material-icons">star</i></a>
+    </span>
+  </li>
+  <li class="mdl-list__item mdl-list__item--two-line">
+    <span class="mdl-list__item-primary-content">
+      <i class="material-icons mdl-list__item-avatar">person</i>
+      <span>Bob Odenkirk</span>
+      <span class="mdl-list__item-sub-title">62 Episodes</span>
+    </span>
+    <span class="mdl-list__item-secondary-content">
+      <a class="mdl-list__item-secondary-action" href="#"><i class="material-icons">star</i></a>
+    </span>
+  </li>
+</ul>
diff --git a/node_modules/material-design-lite/src/material-design-lite-grid.scss b/node_modules/material-design-lite/src/material-design-lite-grid.scss
new file mode 100644
index 0000000..060dad2
--- /dev/null
+++ b/node_modules/material-design-lite/src/material-design-lite-grid.scss
@@ -0,0 +1,21 @@
+/**
+ * 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.
+ */
+
+/* Material Design Lite Grid*/
+
+@import "variables";
+@import "mixins";
+@import "grid/grid";
\ No newline at end of file
diff --git a/node_modules/material-design-lite/src/material-design-lite.scss b/node_modules/material-design-lite/src/material-design-lite.scss
new file mode 100644
index 0000000..512360e
--- /dev/null
+++ b/node_modules/material-design-lite/src/material-design-lite.scss
@@ -0,0 +1,54 @@
+/**
+ * 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.
+ */
+
+/* Material Design Lite */
+
+// Variables and mixins
+@import "variables";
+@import "mixins";
+
+// Resets and dependencies
+@import "resets/resets";
+@import "typography/typography";
+
+// Components
+@import "palette/palette";
+@import "ripple/ripple";
+@import "animation/animation";
+@import "badge/badge";
+@import "button/button";
+@import "card/card";
+@import "checkbox/checkbox";
+@import "chip/chip";
+@import "data-table/data-table";
+@import "dialog/dialog";
+@import "footer/mega_footer";
+@import "footer/mini_footer";
+@import "icon-toggle/icon-toggle";
+@import "list/list";
+@import "menu/menu";
+@import "progress/progress";
+@import "layout/layout";
+@import "radio/radio";
+@import "slider/slider";
+@import "snackbar/snackbar";
+@import "spinner/spinner";
+@import "switch/switch";
+@import "tabs/tabs";
+@import "textfield/textfield";
+@import "tooltip/tooltip";
+@import "shadow/shadow";
+@import "grid/grid";
diff --git a/node_modules/material-design-lite/src/mdlComponentHandler.js b/node_modules/material-design-lite/src/mdlComponentHandler.js
new file mode 100644
index 0000000..f532a98
--- /dev/null
+++ b/node_modules/material-design-lite/src/mdlComponentHandler.js
@@ -0,0 +1,503 @@
+/**
+ * @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.
+ */
+
+/**
+ * A component handler interface using the revealing module design pattern.
+ * More details on this design pattern here:
+ * https://github.com/jasonmayes/mdl-component-design-pattern
+ *
+ * @author Jason Mayes.
+ */
+/* exported componentHandler */
+
+// Pre-defining the componentHandler interface, for closure documentation and
+// static verification.
+var componentHandler = {
+  /**
+   * Searches existing DOM for elements of our component type and upgrades them
+   * if they have not already been upgraded.
+   *
+   * @param {string=} optJsClass the programatic name of the element class we
+   * need to create a new instance of.
+   * @param {string=} optCssClass the name of the CSS class elements of this
+   * type will have.
+   */
+  upgradeDom: function(optJsClass, optCssClass) {},
+  /**
+   * Upgrades a specific element rather than all in the DOM.
+   *
+   * @param {!Element} element The element we wish to upgrade.
+   * @param {string=} optJsClass Optional name of the class we want to upgrade
+   * the element to.
+   */
+  upgradeElement: function(element, optJsClass) {},
+  /**
+   * Upgrades a specific list of elements rather than all in the DOM.
+   *
+   * @param {!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements
+   * The elements we wish to upgrade.
+   */
+  upgradeElements: function(elements) {},
+  /**
+   * Upgrades all registered components found in the current DOM. This is
+   * automatically called on window load.
+   */
+  upgradeAllRegistered: function() {},
+  /**
+   * Allows user to be alerted to any upgrades that are performed for a given
+   * component type
+   *
+   * @param {string} jsClass The class name of the MDL component we wish
+   * to hook into for any upgrades performed.
+   * @param {function(!HTMLElement)} callback The function to call upon an
+   * upgrade. This function should expect 1 parameter - the HTMLElement which
+   * got upgraded.
+   */
+  registerUpgradedCallback: function(jsClass, callback) {},
+  /**
+   * Registers a class for future use and attempts to upgrade existing DOM.
+   *
+   * @param {componentHandler.ComponentConfigPublic} config the registration configuration
+   */
+  register: function(config) {},
+  /**
+   * Downgrade either a given node, an array of nodes, or a NodeList.
+   *
+   * @param {!Node|!Array<!Node>|!NodeList} nodes
+   */
+  downgradeElements: function(nodes) {}
+};
+
+componentHandler = (function() {
+  'use strict';
+
+  /** @type {!Array<componentHandler.ComponentConfig>} */
+  var registeredComponents_ = [];
+
+  /** @type {!Array<componentHandler.Component>} */
+  var createdComponents_ = [];
+
+  var componentConfigProperty_ = 'mdlComponentConfigInternal_';
+
+  /**
+   * Searches registered components for a class we are interested in using.
+   * Optionally replaces a match with passed object if specified.
+   *
+   * @param {string} name The name of a class we want to use.
+   * @param {componentHandler.ComponentConfig=} optReplace Optional object to replace match with.
+   * @return {!Object|boolean}
+   * @private
+   */
+  function findRegisteredClass_(name, optReplace) {
+    for (var i = 0; i < registeredComponents_.length; i++) {
+      if (registeredComponents_[i].className === name) {
+        if (typeof optReplace !== 'undefined') {
+          registeredComponents_[i] = optReplace;
+        }
+        return registeredComponents_[i];
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Returns an array of the classNames of the upgraded classes on the element.
+   *
+   * @param {!Element} element The element to fetch data from.
+   * @return {!Array<string>}
+   * @private
+   */
+  function getUpgradedListOfElement_(element) {
+    var dataUpgraded = element.getAttribute('data-upgraded');
+    // Use `['']` as default value to conform the `,name,name...` style.
+    return dataUpgraded === null ? [''] : dataUpgraded.split(',');
+  }
+
+  /**
+   * Returns true if the given element has already been upgraded for the given
+   * class.
+   *
+   * @param {!Element} element The element we want to check.
+   * @param {string} jsClass The class to check for.
+   * @returns {boolean}
+   * @private
+   */
+  function isElementUpgraded_(element, jsClass) {
+    var upgradedList = getUpgradedListOfElement_(element);
+    return upgradedList.indexOf(jsClass) !== -1;
+  }
+
+  /**
+   * Create an event object.
+   *
+   * @param {string} eventType The type name of the event.
+   * @param {boolean} bubbles Whether the event should bubble up the DOM.
+   * @param {boolean} cancelable Whether the event can be canceled.
+   * @returns {!Event}
+   */
+  function createEvent_(eventType, bubbles, cancelable) {
+    if ('CustomEvent' in window && typeof window.CustomEvent === 'function') {
+      return new CustomEvent(eventType, {
+        bubbles: bubbles,
+        cancelable: cancelable
+      });
+    } else {
+      var ev = document.createEvent('Events');
+      ev.initEvent(eventType, bubbles, cancelable);
+      return ev;
+    }
+  }
+
+  /**
+   * Searches existing DOM for elements of our component type and upgrades them
+   * if they have not already been upgraded.
+   *
+   * @param {string=} optJsClass the programatic name of the element class we
+   * need to create a new instance of.
+   * @param {string=} optCssClass the name of the CSS class elements of this
+   * type will have.
+   */
+  function upgradeDomInternal(optJsClass, optCssClass) {
+    if (typeof optJsClass === 'undefined' &&
+        typeof optCssClass === 'undefined') {
+      for (var i = 0; i < registeredComponents_.length; i++) {
+        upgradeDomInternal(registeredComponents_[i].className,
+            registeredComponents_[i].cssClass);
+      }
+    } else {
+      var jsClass = /** @type {string} */ (optJsClass);
+      if (typeof optCssClass === 'undefined') {
+        var registeredClass = findRegisteredClass_(jsClass);
+        if (registeredClass) {
+          optCssClass = registeredClass.cssClass;
+        }
+      }
+
+      var elements = document.querySelectorAll('.' + optCssClass);
+      for (var n = 0; n < elements.length; n++) {
+        upgradeElementInternal(elements[n], jsClass);
+      }
+    }
+  }
+
+  /**
+   * Upgrades a specific element rather than all in the DOM.
+   *
+   * @param {!Element} element The element we wish to upgrade.
+   * @param {string=} optJsClass Optional name of the class we want to upgrade
+   * the element to.
+   */
+  function upgradeElementInternal(element, optJsClass) {
+    // Verify argument type.
+    if (!(typeof element === 'object' && element instanceof Element)) {
+      throw new Error('Invalid argument provided to upgrade MDL element.');
+    }
+    // Allow upgrade to be canceled by canceling emitted event.
+    var upgradingEv = createEvent_('mdl-componentupgrading', true, true);
+    element.dispatchEvent(upgradingEv);
+    if (upgradingEv.defaultPrevented) {
+      return;
+    }
+
+    var upgradedList = getUpgradedListOfElement_(element);
+    var classesToUpgrade = [];
+    // If jsClass is not provided scan the registered components to find the
+    // ones matching the element's CSS classList.
+    if (!optJsClass) {
+      var classList = element.classList;
+      registeredComponents_.forEach(function(component) {
+        // Match CSS & Not to be upgraded & Not upgraded.
+        if (classList.contains(component.cssClass) &&
+            classesToUpgrade.indexOf(component) === -1 &&
+            !isElementUpgraded_(element, component.className)) {
+          classesToUpgrade.push(component);
+        }
+      });
+    } else if (!isElementUpgraded_(element, optJsClass)) {
+      classesToUpgrade.push(findRegisteredClass_(optJsClass));
+    }
+
+    // Upgrade the element for each classes.
+    for (var i = 0, n = classesToUpgrade.length, registeredClass; i < n; i++) {
+      registeredClass = classesToUpgrade[i];
+      if (registeredClass) {
+        // Mark element as upgraded.
+        upgradedList.push(registeredClass.className);
+        element.setAttribute('data-upgraded', upgradedList.join(','));
+        var instance = new registeredClass.classConstructor(element);
+        instance[componentConfigProperty_] = registeredClass;
+        createdComponents_.push(instance);
+        // Call any callbacks the user has registered with this component type.
+        for (var j = 0, m = registeredClass.callbacks.length; j < m; j++) {
+          registeredClass.callbacks[j](element);
+        }
+
+        if (registeredClass.widget) {
+          // Assign per element instance for control over API
+          element[registeredClass.className] = instance;
+        }
+      } else {
+        throw new Error(
+          'Unable to find a registered component for the given class.');
+      }
+
+      var upgradedEv = createEvent_('mdl-componentupgraded', true, false);
+      element.dispatchEvent(upgradedEv);
+    }
+  }
+
+  /**
+   * Upgrades a specific list of elements rather than all in the DOM.
+   *
+   * @param {!Element|!Array<!Element>|!NodeList|!HTMLCollection} elements
+   * The elements we wish to upgrade.
+   */
+  function upgradeElementsInternal(elements) {
+    if (!Array.isArray(elements)) {
+      if (elements instanceof Element) {
+        elements = [elements];
+      } else {
+        elements = Array.prototype.slice.call(elements);
+      }
+    }
+    for (var i = 0, n = elements.length, element; i < n; i++) {
+      element = elements[i];
+      if (element instanceof HTMLElement) {
+        upgradeElementInternal(element);
+        if (element.children.length > 0) {
+          upgradeElementsInternal(element.children);
+        }
+      }
+    }
+  }
+
+  /**
+   * Registers a class for future use and attempts to upgrade existing DOM.
+   *
+   * @param {componentHandler.ComponentConfigPublic} config
+   */
+  function registerInternal(config) {
+    // In order to support both Closure-compiled and uncompiled code accessing
+    // this method, we need to allow for both the dot and array syntax for
+    // property access. You'll therefore see the `foo.bar || foo['bar']`
+    // pattern repeated across this method.
+    var widgetMissing = (typeof config.widget === 'undefined' &&
+        typeof config['widget'] === 'undefined');
+    var widget = true;
+
+    if (!widgetMissing) {
+      widget = config.widget || config['widget'];
+    }
+
+    var newConfig = /** @type {componentHandler.ComponentConfig} */ ({
+      classConstructor: config.constructor || config['constructor'],
+      className: config.classAsString || config['classAsString'],
+      cssClass: config.cssClass || config['cssClass'],
+      widget: widget,
+      callbacks: []
+    });
+
+    registeredComponents_.forEach(function(item) {
+      if (item.cssClass === newConfig.cssClass) {
+        throw new Error('The provided cssClass has already been registered: ' + item.cssClass);
+      }
+      if (item.className === newConfig.className) {
+        throw new Error('The provided className has already been registered');
+      }
+    });
+
+    if (config.constructor.prototype
+        .hasOwnProperty(componentConfigProperty_)) {
+      throw new Error(
+          'MDL component classes must not have ' + componentConfigProperty_ +
+          ' defined as a property.');
+    }
+
+    var found = findRegisteredClass_(config.classAsString, newConfig);
+
+    if (!found) {
+      registeredComponents_.push(newConfig);
+    }
+  }
+
+  /**
+   * Allows user to be alerted to any upgrades that are performed for a given
+   * component type
+   *
+   * @param {string} jsClass The class name of the MDL component we wish
+   * to hook into for any upgrades performed.
+   * @param {function(!HTMLElement)} callback The function to call upon an
+   * upgrade. This function should expect 1 parameter - the HTMLElement which
+   * got upgraded.
+   */
+  function registerUpgradedCallbackInternal(jsClass, callback) {
+    var regClass = findRegisteredClass_(jsClass);
+    if (regClass) {
+      regClass.callbacks.push(callback);
+    }
+  }
+
+  /**
+   * Upgrades all registered components found in the current DOM. This is
+   * automatically called on window load.
+   */
+  function upgradeAllRegisteredInternal() {
+    for (var n = 0; n < registeredComponents_.length; n++) {
+      upgradeDomInternal(registeredComponents_[n].className);
+    }
+  }
+
+  /**
+   * Check the component for the downgrade method.
+   * Execute if found.
+   * Remove component from createdComponents list.
+   *
+   * @param {?componentHandler.Component} component
+   */
+  function deconstructComponentInternal(component) {
+    if (component) {
+      var componentIndex = createdComponents_.indexOf(component);
+      createdComponents_.splice(componentIndex, 1);
+
+      var upgrades = component.element_.getAttribute('data-upgraded').split(',');
+      var componentPlace = upgrades.indexOf(component[componentConfigProperty_].classAsString);
+      upgrades.splice(componentPlace, 1);
+      component.element_.setAttribute('data-upgraded', upgrades.join(','));
+
+      var ev = createEvent_('mdl-componentdowngraded', true, false);
+      component.element_.dispatchEvent(ev);
+    }
+  }
+
+  /**
+   * Downgrade either a given node, an array of nodes, or a NodeList.
+   *
+   * @param {!Node|!Array<!Node>|!NodeList} nodes
+   */
+  function downgradeNodesInternal(nodes) {
+    /**
+     * Auxiliary function to downgrade a single node.
+     * @param  {!Node} node the node to be downgraded
+     */
+    var downgradeNode = function(node) {
+      createdComponents_.filter(function(item) {
+        return item.element_ === node;
+      }).forEach(deconstructComponentInternal);
+    };
+    if (nodes instanceof Array || nodes instanceof NodeList) {
+      for (var n = 0; n < nodes.length; n++) {
+        downgradeNode(nodes[n]);
+      }
+    } else if (nodes instanceof Node) {
+      downgradeNode(nodes);
+    } else {
+      throw new Error('Invalid argument provided to downgrade MDL nodes.');
+    }
+  }
+
+  // Now return the functions that should be made public with their publicly
+  // facing names...
+  return {
+    upgradeDom: upgradeDomInternal,
+    upgradeElement: upgradeElementInternal,
+    upgradeElements: upgradeElementsInternal,
+    upgradeAllRegistered: upgradeAllRegisteredInternal,
+    registerUpgradedCallback: registerUpgradedCallbackInternal,
+    register: registerInternal,
+    downgradeElements: downgradeNodesInternal
+  };
+})();
+
+/**
+ * Describes the type of a registered component type managed by
+ * componentHandler. Provided for benefit of the Closure compiler.
+ *
+ * @typedef {{
+ *   constructor: Function,
+ *   classAsString: string,
+ *   cssClass: string,
+ *   widget: (string|boolean|undefined)
+ * }}
+ */
+componentHandler.ComponentConfigPublic;  // jshint ignore:line
+
+/**
+ * Describes the type of a registered component type managed by
+ * componentHandler. Provided for benefit of the Closure compiler.
+ *
+ * @typedef {{
+ *   constructor: !Function,
+ *   className: string,
+ *   cssClass: string,
+ *   widget: (string|boolean),
+ *   callbacks: !Array<function(!HTMLElement)>
+ * }}
+ */
+componentHandler.ComponentConfig;  // jshint ignore:line
+
+/**
+ * Created component (i.e., upgraded element) type as managed by
+ * componentHandler. Provided for benefit of the Closure compiler.
+ *
+ * @typedef {{
+ *   element_: !HTMLElement,
+ *   className: string,
+ *   classAsString: string,
+ *   cssClass: string,
+ *   widget: string
+ * }}
+ */
+componentHandler.Component;  // jshint ignore:line
+
+// Export all symbols, for the benefit of Closure compiler.
+// No effect on uncompiled code.
+componentHandler['upgradeDom'] = componentHandler.upgradeDom;
+componentHandler['upgradeElement'] = componentHandler.upgradeElement;
+componentHandler['upgradeElements'] = componentHandler.upgradeElements;
+componentHandler['upgradeAllRegistered'] =
+    componentHandler.upgradeAllRegistered;
+componentHandler['registerUpgradedCallback'] =
+    componentHandler.registerUpgradedCallback;
+componentHandler['register'] = componentHandler.register;
+componentHandler['downgradeElements'] = componentHandler.downgradeElements;
+window.componentHandler = componentHandler;
+window['componentHandler'] = componentHandler;
+
+window.addEventListener('load', function() {
+  'use strict';
+
+  /**
+   * Performs a "Cutting the mustard" test. If the browser supports the features
+   * tested, adds a mdl-js class to the <html> element. It then upgrades all MDL
+   * components requiring JavaScript.
+   */
+  if ('classList' in document.createElement('div') &&
+      'querySelector' in document &&
+      'addEventListener' in window && Array.prototype.forEach) {
+    document.documentElement.classList.add('mdl-js');
+    componentHandler.upgradeAllRegistered();
+  } else {
+    /**
+     * Dummy function to avoid JS errors.
+     */
+    componentHandler.upgradeElement = function() {};
+    /**
+     * Dummy function to avoid JS errors.
+     */
+    componentHandler.register = function() {};
+  }
+});
diff --git a/node_modules/material-design-lite/src/menu/README.md b/node_modules/material-design-lite/src/menu/README.md
new file mode 100755
index 0000000..42b07c6
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/README.md
@@ -0,0 +1,108 @@
+## Introduction
+
+The Material Design Lite (MDL) **menu** component is a user interface element that allows users to select one of a number of options. The selection typically results in an action initiation, a setting change, or other observable effect. Menu options are always presented in sets of two or more, and options may be programmatically enabled or disabled as required. The menu appears when the user is asked to choose among a series of options, and is usually dismissed after the choice is made.
+
+Menus are an established but non-standardized feature in user interfaces, and allow users to make choices that direct the activity, progress, or characteristics of software. Their design and use is an important factor in the overall user experience. See the menu component's [Material Design specifications page](http://www.google.com/design/spec/components/menus.html) for details.
+
+### To include an MDL **menu** component:
+
+> **Note:** The menu requires a non-static positioned parent element. Positioning options may not work properly if the menu is inside of a statically positioned node.
+
+&nbsp;1. Code a `<button>` element; this is the clickable toggle that will show and hide the menu options. Include an `id` attribute whose value will match the `for` (or `data-mdl-for`) attribute of the unordered list coded in the next step. Inside the button, code a `<i>` or `<span>` element to contain an icon of your choice.
+```html
+<button id="menu1">
+  <i></i>
+</button>
+```
+&nbsp;2. Code a `<ul>` unordered list element; this is the container that holds the options. Include a `for` attribute whose value matches the `id` attribute of the button element.
+```html
+<ul for="menu1">
+</ul>
+```
+&nbsp;3. Inside the unordered list, code one `<li>` element for each option. Include any desired attributes and values, such as an id or event handler, and add a text caption as appropriate.
+```html
+<ul for="menu1">
+  <li>Continue</li>
+  <li>Stop</li>
+  <li>Pause</li>
+</ul>
+```
+&nbsp;4. Add one or more MDL classes, separated by spaces, to the button and span elements using the `class` attribute.
+```html
+<button id="menu1" class="mdl-button mdl-js-button mdl-button--icon">
+  <i class="material-icons">more_vert</i>
+</button>
+```
+&nbsp;5. Add one or more MDL classes, separated by spaces, to the unordered list and the list items using the `class` attribute.
+```html
+<ul class="mdl-menu mdl-js-menu" for="menu1">
+  <li class="mdl-menu__item">Continue</li>
+  <li class="mdl-menu__item">Stop</li>
+  <li class="mdl-menu__item">Pause</li>
+</ul>
+```
+
+The menu component is ready for use.
+
+#### Examples
+
+A menu with three options.
+```html
+<button id="menu-speed" class="mdl-button mdl-js-button mdl-button--icon">
+  <i class="material-icons">more_vert</i>
+</button>
+<ul class="mdl-menu mdl-js-menu" for="menu-speed">
+  <li class="mdl-menu__item">Fast</li>
+  <li class="mdl-menu__item">Medium</li>
+  <li class="mdl-menu__item">Slow</li>
+</ul>
+```
+A menu with three options, with ripple effect on button and option links.
+```html
+<button id="menu-speed" class="mdl-button mdl-js-button mdl-button--icon">
+  <i class="material-icons">more_vert</i>
+</button>
+<ul class="mdl-menu mdl-js-menu mdl-js-ripple-effect" for="menu-speed">
+  <li class="mdl-menu__item">Fast</li>
+  <li class="mdl-menu__item">Medium</li>
+  <li class="mdl-menu__item">Slow</li>
+</ul>
+```
+A menu with three options, the second of which is disabled by default.
+```html
+<button id="menu-speed" class="mdl-button mdl-js-button mdl-button--icon">
+  <i class="material-icons">more_vert</i>
+</button>
+<ul class="mdl-menu mdl-js-menu" for="menu-speed">
+  <li class="mdl-menu__item">Fast</li>
+  <li class="mdl-menu__item" disabled>Medium</li>
+  <li class="mdl-menu__item">Slow</li>
+</ul>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the menu. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-button` | Defines button as an MDL component | Required on button element |
+| `mdl-js-button` | Assigns basic MDL behavior to button | Required on button element |
+| `mdl-button--icon` | Applies *icon* (small plain circular) display effect to button | Required on button element |
+| `material-icons` | Defines span as a material icon | Required on an inline element |
+| `mdl-menu` | Defines an unordered list container as an MDL component | Required on ul element |
+| `mdl-js-menu` | Assigns basic MDL behavior to menu | Required on ul element |
+| `mdl-menu__item` | Defines buttons as MDL menu options and assigns basic MDL behavior | Required on list item elements |
+| `mdl-menu__item--full-bleed-divider` | Modifies an item to have a full bleed divider between it and the next list item. | Optional on list item elements |
+| `mdl-js-ripple-effect` | Applies *ripple* click effect to option links | Optional; goes on unordered list element |
+| `mdl-menu--top-left` | Positions menu above button, aligns left edge of menu with button  | Optional; goes on unordered list element |
+| (none) | Positions menu below button, aligns left edge of menu with button | Default |
+| `mdl-menu--top-right` | Positions menu above button, aligns right edge of menu with button | Optional; goes on unordered list element |
+| `mdl-menu--bottom-right` | Positions menu below button, aligns right edge of menu with button | Optional; goes on unordered list element |
+
+(1) The "more-vert" icon class is used here as an example. Other icons can be used by modifying the class name. For a list of available icons, see [this page](http://google.github.io/web-starter-kit/latest/styleguide/icons/demo.html); hover over an icon to see its class name.
+
+(2) The `i` or `span` element in "button"" element can be used interchangeably.
+
+>**Note:** Disabled versions of the menu options are provided, and are invoked with the standard HTML boolean attribute `disabled` or `data-mdl-disabled`. `<li class="mdl-menu__item" disabled>Medium</li>`
+>This attribute may be added or removed programmatically via scripting.
diff --git a/node_modules/material-design-lite/src/menu/_menu.scss b/node_modules/material-design-lite/src/menu/_menu.scss
new file mode 100644
index 0000000..bb56414
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/_menu.scss
@@ -0,0 +1,200 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-menu__container {
+  display: block;
+  margin: 0;
+  padding: 0;
+  border: none;
+  position: absolute;
+  overflow: visible;
+  height: 0;
+  width: 0;
+  visibility: hidden;
+  z-index: -1;
+
+  &.is-visible,
+  &.is-animating {
+    z-index: 999;
+    visibility: visible;
+  }
+}
+
+.mdl-menu__outline {
+  display: block;
+  background: $default-dropdown-bg-color;
+  margin: 0;
+  padding: 0;
+  border: none;
+  border-radius: 2px;
+  position: absolute;
+  top: 0;
+  left: 0;
+  overflow: hidden;
+  opacity: 0;
+  transform: scale(0);
+  transform-origin: 0 0;
+  @include shadow-2dp();
+  will-change: transform;
+  transition: transform $menu-expand-duration $animation-curve-default,
+      opacity $menu-fade-duration $animation-curve-default;
+  z-index: -1;
+
+  .mdl-menu__container.is-visible & {
+    opacity: 1;
+    transform: scale(1);
+    z-index: 999;
+  }
+
+  &.mdl-menu--bottom-right {
+    transform-origin: 100% 0;
+  }
+
+  &.mdl-menu--top-left {
+    transform-origin: 0 100%;
+  }
+
+  &.mdl-menu--top-right {
+    transform-origin: 100% 100%;
+  }
+}
+
+.mdl-menu {
+  position: absolute;
+  list-style: none;
+  top: 0;
+  left: 0;
+  height: auto;
+  width: auto;
+  min-width: 124px;
+  padding: 8px 0;
+  margin: 0;
+  opacity: 0;
+  clip: rect(0 0 0 0);
+  z-index: -1;
+
+  .mdl-menu__container.is-visible & {
+    opacity: 1;
+    z-index: 999;
+  }
+
+  &.is-animating {
+    transition: opacity $menu-fade-duration $animation-curve-default,
+        clip $menu-expand-duration $animation-curve-default;
+  }
+
+  &.mdl-menu--bottom-right {
+    left: auto;
+    right: 0;
+  }
+
+  &.mdl-menu--top-left {
+    top: auto;
+    bottom: 0;
+  }
+
+  &.mdl-menu--top-right {
+    top: auto;
+    left: auto;
+    bottom: 0;
+    right: 0;
+  }
+
+  &.mdl-menu--unaligned {
+    top: auto;
+    left: auto;
+  }
+}
+
+.mdl-menu__item {
+  display: block;
+  border: none;
+  color: $default-item-text-color;
+  background-color: transparent;
+  text-align: left;
+  margin: 0;
+  padding: 0 16px;
+  outline-color: $default-item-outline-color;
+  position: relative;
+  overflow: hidden;
+  @include typo-body-1();
+  text-decoration: none;
+  cursor: pointer;
+  height: 48px;
+  line-height: 48px;
+  white-space: nowrap;
+  opacity: 0;
+  transition: opacity $menu-fade-duration $animation-curve-default;
+  user-select: none;
+
+  .mdl-menu__container.is-visible & {
+    opacity: 1;
+  }
+
+  &::-moz-focus-inner {
+    border: 0;
+  }
+
+  &--full-bleed-divider {
+    border-bottom: 1px solid $default-item-divider-color;
+  }
+
+  &[disabled], &[data-mdl-disabled] {
+    color: $disabled-item-text-color;
+    background-color: transparent;
+    cursor: auto;
+
+    &:hover {
+      background-color: transparent;
+    }
+
+    &:focus {
+      background-color: transparent;
+    }
+
+    & .mdl-ripple {
+      background: transparent;
+    }
+  }
+
+  &:hover {
+    background-color: $default-item-hover-bg-color;
+  }
+
+  &:focus {
+    outline: none;
+    background-color: $default-item-focus-bg-color;
+  }
+
+  &:active {
+    background-color: $default-item-active-bg-color;
+  }
+}
+
+
+.mdl-menu__item--ripple-container {
+  display: block;
+  height: 100%;
+  left: 0px;
+  position: absolute;
+  top: 0px;
+  width: 100%;
+  z-index: 0;
+  overflow: hidden;
+}
diff --git a/node_modules/material-design-lite/src/menu/menu.js b/node_modules/material-design-lite/src/menu/menu.js
new file mode 100644
index 0000000..de5b3b9
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/menu.js
@@ -0,0 +1,482 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for dropdown MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialMenu = function MaterialMenu(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialMenu'] = MaterialMenu;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialMenu.prototype.Constant_ = {
+    // Total duration of the menu animation.
+    TRANSITION_DURATION_SECONDS: 0.3,
+    // The fraction of the total duration we want to use for menu item animations.
+    TRANSITION_DURATION_FRACTION: 0.8,
+    // How long the menu stays open after choosing an option (so the user can see
+    // the ripple).
+    CLOSE_TIMEOUT: 150
+  };
+
+  /**
+   * Keycodes, for code readability.
+   *
+   * @enum {number}
+   * @private
+   */
+  MaterialMenu.prototype.Keycodes_ = {
+    ENTER: 13,
+    ESCAPE: 27,
+    SPACE: 32,
+    UP_ARROW: 38,
+    DOWN_ARROW: 40
+  };
+
+  /**
+   * 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
+   */
+  MaterialMenu.prototype.CssClasses_ = {
+    CONTAINER: 'mdl-menu__container',
+    OUTLINE: 'mdl-menu__outline',
+    ITEM: 'mdl-menu__item',
+    ITEM_RIPPLE_CONTAINER: 'mdl-menu__item-ripple-container',
+    RIPPLE_EFFECT: 'mdl-js-ripple-effect',
+    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',
+    RIPPLE: 'mdl-ripple',
+    // Statuses
+    IS_UPGRADED: 'is-upgraded',
+    IS_VISIBLE: 'is-visible',
+    IS_ANIMATING: 'is-animating',
+    // Alignment options
+    BOTTOM_LEFT: 'mdl-menu--bottom-left',  // This is the default.
+    BOTTOM_RIGHT: 'mdl-menu--bottom-right',
+    TOP_LEFT: 'mdl-menu--top-left',
+    TOP_RIGHT: 'mdl-menu--top-right',
+    UNALIGNED: 'mdl-menu--unaligned'
+  };
+
+  /**
+   * Initialize element.
+   */
+  MaterialMenu.prototype.init = function() {
+    if (this.element_) {
+      // Create container for the menu.
+      var container = document.createElement('div');
+      container.classList.add(this.CssClasses_.CONTAINER);
+      this.element_.parentElement.insertBefore(container, this.element_);
+      this.element_.parentElement.removeChild(this.element_);
+      container.appendChild(this.element_);
+      this.container_ = container;
+
+      // Create outline for the menu (shadow and background).
+      var outline = document.createElement('div');
+      outline.classList.add(this.CssClasses_.OUTLINE);
+      this.outline_ = outline;
+      container.insertBefore(outline, this.element_);
+
+      // Find the "for" element and bind events to it.
+      var forElId = this.element_.getAttribute('for') ||
+                      this.element_.getAttribute('data-mdl-for');
+      var forEl = null;
+      if (forElId) {
+        forEl = document.getElementById(forElId);
+        if (forEl) {
+          this.forElement_ = forEl;
+          forEl.addEventListener('click', this.handleForClick_.bind(this));
+          forEl.addEventListener('keydown',
+              this.handleForKeyboardEvent_.bind(this));
+        }
+      }
+
+      var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);
+      this.boundItemKeydown_ = this.handleItemKeyboardEvent_.bind(this);
+      this.boundItemClick_ = this.handleItemClick_.bind(this);
+      for (var i = 0; i < items.length; i++) {
+        // Add a listener to each menu item.
+        items[i].addEventListener('click', this.boundItemClick_);
+        // Add a tab index to each menu item.
+        items[i].tabIndex = '-1';
+        // Add a keyboard listener to each menu item.
+        items[i].addEventListener('keydown', this.boundItemKeydown_);
+      }
+
+      // Add ripple classes to each item, if the user has enabled ripples.
+      if (this.element_.classList.contains(this.CssClasses_.RIPPLE_EFFECT)) {
+        this.element_.classList.add(this.CssClasses_.RIPPLE_IGNORE_EVENTS);
+
+        for (i = 0; i < items.length; i++) {
+          var item = items[i];
+
+          var rippleContainer = document.createElement('span');
+          rippleContainer.classList.add(this.CssClasses_.ITEM_RIPPLE_CONTAINER);
+
+          var ripple = document.createElement('span');
+          ripple.classList.add(this.CssClasses_.RIPPLE);
+          rippleContainer.appendChild(ripple);
+
+          item.appendChild(rippleContainer);
+          item.classList.add(this.CssClasses_.RIPPLE_EFFECT);
+        }
+      }
+
+      // Copy alignment classes to the container, so the outline can use them.
+      if (this.element_.classList.contains(this.CssClasses_.BOTTOM_LEFT)) {
+        this.outline_.classList.add(this.CssClasses_.BOTTOM_LEFT);
+      }
+      if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {
+        this.outline_.classList.add(this.CssClasses_.BOTTOM_RIGHT);
+      }
+      if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {
+        this.outline_.classList.add(this.CssClasses_.TOP_LEFT);
+      }
+      if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {
+        this.outline_.classList.add(this.CssClasses_.TOP_RIGHT);
+      }
+      if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {
+        this.outline_.classList.add(this.CssClasses_.UNALIGNED);
+      }
+
+      container.classList.add(this.CssClasses_.IS_UPGRADED);
+    }
+  };
+
+  /**
+   * Handles a click on the "for" element, by positioning the menu and then
+   * toggling it.
+   *
+   * @param {Event} evt The event that fired.
+   * @private
+   */
+  MaterialMenu.prototype.handleForClick_ = function(evt) {
+    if (this.element_ && this.forElement_) {
+      var rect = this.forElement_.getBoundingClientRect();
+      var forRect = this.forElement_.parentElement.getBoundingClientRect();
+
+      if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {
+        // Do not position the menu automatically. Requires the developer to
+        // manually specify position.
+      } else if (this.element_.classList.contains(
+          this.CssClasses_.BOTTOM_RIGHT)) {
+        // Position below the "for" element, aligned to its right.
+        this.container_.style.right = (forRect.right - rect.right) + 'px';
+        this.container_.style.top =
+            this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';
+      } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {
+        // Position above the "for" element, aligned to its left.
+        this.container_.style.left = this.forElement_.offsetLeft + 'px';
+        this.container_.style.bottom = (forRect.bottom - rect.top) + 'px';
+      } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {
+        // Position above the "for" element, aligned to its right.
+        this.container_.style.right = (forRect.right - rect.right) + 'px';
+        this.container_.style.bottom = (forRect.bottom - rect.top) + 'px';
+      } else {
+        // Default: position below the "for" element, aligned to its left.
+        this.container_.style.left = this.forElement_.offsetLeft + 'px';
+        this.container_.style.top =
+            this.forElement_.offsetTop + this.forElement_.offsetHeight + 'px';
+      }
+    }
+
+    this.toggle(evt);
+  };
+
+  /**
+   * Handles a keyboard event on the "for" element.
+   *
+   * @param {Event} evt The event that fired.
+   * @private
+   */
+  MaterialMenu.prototype.handleForKeyboardEvent_ = function(evt) {
+    if (this.element_ && this.container_ && this.forElement_) {
+      var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM +
+        ':not([disabled])');
+
+      if (items && items.length > 0 &&
+          this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {
+        if (evt.keyCode === this.Keycodes_.UP_ARROW) {
+          evt.preventDefault();
+          items[items.length - 1].focus();
+        } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {
+          evt.preventDefault();
+          items[0].focus();
+        }
+      }
+    }
+  };
+
+  /**
+   * Handles a keyboard event on an item.
+   *
+   * @param {Event} evt The event that fired.
+   * @private
+   */
+  MaterialMenu.prototype.handleItemKeyboardEvent_ = function(evt) {
+    if (this.element_ && this.container_) {
+      var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM +
+        ':not([disabled])');
+
+      if (items && items.length > 0 &&
+          this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {
+        var currentIndex = Array.prototype.slice.call(items).indexOf(evt.target);
+
+        if (evt.keyCode === this.Keycodes_.UP_ARROW) {
+          evt.preventDefault();
+          if (currentIndex > 0) {
+            items[currentIndex - 1].focus();
+          } else {
+            items[items.length - 1].focus();
+          }
+        } else if (evt.keyCode === this.Keycodes_.DOWN_ARROW) {
+          evt.preventDefault();
+          if (items.length > currentIndex + 1) {
+            items[currentIndex + 1].focus();
+          } else {
+            items[0].focus();
+          }
+        } else if (evt.keyCode === this.Keycodes_.SPACE ||
+              evt.keyCode === this.Keycodes_.ENTER) {
+          evt.preventDefault();
+          // Send mousedown and mouseup to trigger ripple.
+          var e = new MouseEvent('mousedown');
+          evt.target.dispatchEvent(e);
+          e = new MouseEvent('mouseup');
+          evt.target.dispatchEvent(e);
+          // Send click.
+          evt.target.click();
+        } else if (evt.keyCode === this.Keycodes_.ESCAPE) {
+          evt.preventDefault();
+          this.hide();
+        }
+      }
+    }
+  };
+
+  /**
+   * Handles a click event on an item.
+   *
+   * @param {Event} evt The event that fired.
+   * @private
+   */
+  MaterialMenu.prototype.handleItemClick_ = function(evt) {
+    if (evt.target.hasAttribute('disabled')) {
+      evt.stopPropagation();
+    } else {
+      // Wait some time before closing menu, so the user can see the ripple.
+      this.closing_ = true;
+      window.setTimeout(function(evt) {
+        this.hide();
+        this.closing_ = false;
+      }.bind(this), /** @type {number} */ (this.Constant_.CLOSE_TIMEOUT));
+    }
+  };
+
+  /**
+   * Calculates the initial clip (for opening the menu) or final clip (for closing
+   * it), and applies it. This allows us to animate from or to the correct point,
+   * that is, the point it's aligned to in the "for" element.
+   *
+   * @param {number} height Height of the clip rectangle
+   * @param {number} width Width of the clip rectangle
+   * @private
+   */
+  MaterialMenu.prototype.applyClip_ = function(height, width) {
+    if (this.element_.classList.contains(this.CssClasses_.UNALIGNED)) {
+      // Do not clip.
+      this.element_.style.clip = '';
+    } else if (this.element_.classList.contains(this.CssClasses_.BOTTOM_RIGHT)) {
+      // Clip to the top right corner of the menu.
+      this.element_.style.clip =
+          'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';
+    } else if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT)) {
+      // Clip to the bottom left corner of the menu.
+      this.element_.style.clip =
+          'rect(' + height + 'px 0 ' + height + 'px 0)';
+    } else if (this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {
+      // Clip to the bottom right corner of the menu.
+      this.element_.style.clip = 'rect(' + height + 'px ' + width + 'px ' +
+          height + 'px ' + width + 'px)';
+    } else {
+      // Default: do not clip (same as clipping to the top left corner).
+      this.element_.style.clip = '';
+    }
+  };
+
+  /**
+   * Cleanup function to remove animation listeners.
+   *
+   * @param {Event} evt
+   * @private
+   */
+
+  MaterialMenu.prototype.removeAnimationEndListener_ = function(evt) {
+    evt.target.classList.remove(MaterialMenu.prototype.CssClasses_.IS_ANIMATING);
+  };
+
+  /**
+   * Adds an event listener to clean up after the animation ends.
+   *
+   * @private
+   */
+  MaterialMenu.prototype.addAnimationEndListener_ = function() {
+    this.element_.addEventListener('transitionend', this.removeAnimationEndListener_);
+    this.element_.addEventListener('webkitTransitionEnd', this.removeAnimationEndListener_);
+  };
+
+  /**
+   * Displays the menu.
+   *
+   * @public
+   */
+  MaterialMenu.prototype.show = function(evt) {
+    if (this.element_ && this.container_ && this.outline_) {
+      // Measure the inner element.
+      var height = this.element_.getBoundingClientRect().height;
+      var width = this.element_.getBoundingClientRect().width;
+
+      // Apply the inner element's size to the container and outline.
+      this.container_.style.width = width + 'px';
+      this.container_.style.height = height + 'px';
+      this.outline_.style.width = width + 'px';
+      this.outline_.style.height = height + 'px';
+
+      var transitionDuration = this.Constant_.TRANSITION_DURATION_SECONDS *
+          this.Constant_.TRANSITION_DURATION_FRACTION;
+
+      // Calculate transition delays for individual menu items, so that they fade
+      // in one at a time.
+      var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);
+      for (var i = 0; i < items.length; i++) {
+        var itemDelay = null;
+        if (this.element_.classList.contains(this.CssClasses_.TOP_LEFT) ||
+            this.element_.classList.contains(this.CssClasses_.TOP_RIGHT)) {
+          itemDelay = ((height - items[i].offsetTop - items[i].offsetHeight) /
+              height * transitionDuration) + 's';
+        } else {
+          itemDelay = (items[i].offsetTop / height * transitionDuration) + 's';
+        }
+        items[i].style.transitionDelay = itemDelay;
+      }
+
+      // Apply the initial clip to the text before we start animating.
+      this.applyClip_(height, width);
+
+      // Wait for the next frame, turn on animation, and apply the final clip.
+      // Also make it visible. This triggers the transitions.
+      window.requestAnimationFrame(function() {
+        this.element_.classList.add(this.CssClasses_.IS_ANIMATING);
+        this.element_.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';
+        this.container_.classList.add(this.CssClasses_.IS_VISIBLE);
+      }.bind(this));
+
+      // Clean up after the animation is complete.
+      this.addAnimationEndListener_();
+
+      // Add a click listener to the document, to close the menu.
+      var callback = function(e) {
+        // Check to see if the document is processing the same event that
+        // displayed the menu in the first place. If so, do nothing.
+        // Also check to see if the menu is in the process of closing itself, and
+        // do nothing in that case.
+        // Also check if the clicked element is a menu item
+        // if so, do nothing.
+        if (e !== evt && !this.closing_ && e.target.parentNode !== this.element_) {
+          document.removeEventListener('click', callback);
+          this.hide();
+        }
+      }.bind(this);
+      document.addEventListener('click', callback);
+    }
+  };
+  MaterialMenu.prototype['show'] = MaterialMenu.prototype.show;
+
+  /**
+   * Hides the menu.
+   *
+   * @public
+   */
+  MaterialMenu.prototype.hide = function() {
+    if (this.element_ && this.container_ && this.outline_) {
+      var items = this.element_.querySelectorAll('.' + this.CssClasses_.ITEM);
+
+      // Remove all transition delays; menu items fade out concurrently.
+      for (var i = 0; i < items.length; i++) {
+        items[i].style.removeProperty('transition-delay');
+      }
+
+      // Measure the inner element.
+      var rect = this.element_.getBoundingClientRect();
+      var height = rect.height;
+      var width = rect.width;
+
+      // Turn on animation, and apply the final clip. Also make invisible.
+      // This triggers the transitions.
+      this.element_.classList.add(this.CssClasses_.IS_ANIMATING);
+      this.applyClip_(height, width);
+      this.container_.classList.remove(this.CssClasses_.IS_VISIBLE);
+
+      // Clean up after the animation is complete.
+      this.addAnimationEndListener_();
+    }
+  };
+  MaterialMenu.prototype['hide'] = MaterialMenu.prototype.hide;
+
+  /**
+   * Displays or hides the menu, depending on current state.
+   *
+   * @public
+   */
+  MaterialMenu.prototype.toggle = function(evt) {
+    if (this.container_.classList.contains(this.CssClasses_.IS_VISIBLE)) {
+      this.hide();
+    } else {
+      this.show(evt);
+    }
+  };
+  MaterialMenu.prototype['toggle'] = MaterialMenu.prototype.toggle;
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialMenu,
+    classAsString: 'MaterialMenu',
+    cssClass: 'mdl-js-menu',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/menu/snippets/codepen-lower-buttons.css b/node_modules/material-design-lite/src/menu/snippets/codepen-lower-buttons.css
new file mode 100644
index 0000000..ce22b7c
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/codepen-lower-buttons.css
@@ -0,0 +1,3 @@
+#demo-menu-lower-left {
+  margin-left: 40%;
+}
diff --git a/node_modules/material-design-lite/src/menu/snippets/codepen-top-buttons.css b/node_modules/material-design-lite/src/menu/snippets/codepen-top-buttons.css
new file mode 100644
index 0000000..9cd7e66
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/codepen-top-buttons.css
@@ -0,0 +1,8 @@
+#demo-menu-top-left {
+  margin-left: 40%;
+}
+
+#demo-menu-top-left,
+#demo-menu-top-right {
+  margin-top: 250px;
+}
diff --git a/node_modules/material-design-lite/src/menu/snippets/lower-left-demo.html b/node_modules/material-design-lite/src/menu/snippets/lower-left-demo.html
new file mode 100644
index 0000000..ee3b3fc
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/lower-left-demo.html
@@ -0,0 +1,25 @@
+<style>
+  .demo-menu.demo-menu__lower-left .container {
+    position: relative;
+    width: 200px;
+  }
+  .demo-menu.demo-menu__lower-left .background {
+    background: white;
+    height: 148px;
+    width: 100%;
+  }
+  .demo-menu.demo-menu__lower-left .bar {
+    box-sizing: border-box;
+    background: #3F51B5;
+    color: white;
+    width: 100%;
+    padding: 16px;
+  }
+</style>
+
+<div class="container mdl-shadow--2dp">
+  <div class="bar">
+    {% include "lower-left.html" %}
+  </div>
+  <div class="background"></div>
+</div>
diff --git a/node_modules/material-design-lite/src/menu/snippets/lower-left.html b/node_modules/material-design-lite/src/menu/snippets/lower-left.html
new file mode 100644
index 0000000..71bc922
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/lower-left.html
@@ -0,0 +1,13 @@
+<!-- Left aligned menu below button -->
+<button id="demo-menu-lower-left"
+        class="mdl-button mdl-js-button mdl-button--icon">
+  <i class="material-icons">more_vert</i>
+</button>
+
+<ul class="mdl-menu mdl-menu--bottom-left mdl-js-menu mdl-js-ripple-effect"
+    for="demo-menu-lower-left">
+  <li class="mdl-menu__item">Some Action</li>
+  <li class="mdl-menu__item mdl-menu__item--full-bleed-divider">Another Action</li>
+  <li disabled class="mdl-menu__item">Disabled Action</li>
+  <li class="mdl-menu__item">Yet Another Action</li>
+</ul>
diff --git a/node_modules/material-design-lite/src/menu/snippets/lower-right-demo.html b/node_modules/material-design-lite/src/menu/snippets/lower-right-demo.html
new file mode 100644
index 0000000..d8ad651
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/lower-right-demo.html
@@ -0,0 +1,34 @@
+<style>
+  .demo-menu.demo-menu__lower-right .container {
+    position: relative;
+    width: 200px;
+  }
+  .demo-menu.demo-menu__lower-right .background {
+    background: white;
+    height: 148px;
+    width: 100%;
+  }
+  .demo-menu.demo-menu__lower-right .bar {
+    box-sizing: border-box;
+    position: relative;
+    background: #3F51B5;
+    color: white;
+    height: 64px;
+    width: 100%;
+    padding: 16px;
+  }
+  .demo-menu.demo-menu__lower-right .wrapper {
+    box-sizing: border-box;
+    position: absolute;
+    right: 16px;
+  }
+</style>
+
+<div class="container mdl-shadow--2dp">
+  <div class="bar">
+    <div class="wrapper">
+      {% include "lower-right.html" %}
+    </div>
+  </div>
+  <div class="background"></div>
+</div>
diff --git a/node_modules/material-design-lite/src/menu/snippets/lower-right.html b/node_modules/material-design-lite/src/menu/snippets/lower-right.html
new file mode 100644
index 0000000..1ce8f9c
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/lower-right.html
@@ -0,0 +1,13 @@
+<!-- Right aligned menu below button -->
+<button id="demo-menu-lower-right"
+        class="mdl-button mdl-js-button mdl-button--icon">
+  <i class="material-icons">more_vert</i>
+</button>
+
+<ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect"
+    for="demo-menu-lower-right">
+  <li class="mdl-menu__item">Some Action</li>
+  <li class="mdl-menu__item">Another Action</li>
+  <li disabled class="mdl-menu__item">Disabled Action</li>
+  <li class="mdl-menu__item">Yet Another Action</li>
+</ul>
diff --git a/node_modules/material-design-lite/src/menu/snippets/top-left-demo.html b/node_modules/material-design-lite/src/menu/snippets/top-left-demo.html
new file mode 100644
index 0000000..3ad0e33
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/top-left-demo.html
@@ -0,0 +1,25 @@
+<style>
+  .demo-menu.demo-menu__top-left .container {
+    position: relative;
+    width: 200px;
+  }
+  .demo-menu.demo-menu__top-left .background {
+    background: white;
+    height: 148px;
+    width: 100%;
+  }
+  .demo-menu.demo-menu__top-left .bar {
+    box-sizing: border-box;
+    background: #3F51B5;
+    color: white;
+    width: 100%;
+    padding: 16px;
+  }
+</style>
+
+<div class="container mdl-shadow--2dp">
+  <div class="background"></div>
+  <div class="bar">
+    {% include "top-left.html" %}
+  </div>
+</div>
diff --git a/node_modules/material-design-lite/src/menu/snippets/top-left.html b/node_modules/material-design-lite/src/menu/snippets/top-left.html
new file mode 100644
index 0000000..19a38aa
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/top-left.html
@@ -0,0 +1,13 @@
+<!-- Left aligned menu on top of button  -->
+<button id="demo-menu-top-left"
+        class="mdl-button mdl-js-button mdl-button--icon">
+  <i class="material-icons">more_vert</i>
+</button>
+
+<ul class="mdl-menu mdl-menu--top-left mdl-js-menu mdl-js-ripple-effect"
+    data-mdl-for="demo-menu-top-left">
+  <li class="mdl-menu__item">Some Action</li>
+  <li class="mdl-menu__item">Another Action</li>
+  <li disabled class="mdl-menu__item">Disabled Action</li>
+  <li class="mdl-menu__item">Yet Another Action</li>
+</ul>
diff --git a/node_modules/material-design-lite/src/menu/snippets/top-right-demo.html b/node_modules/material-design-lite/src/menu/snippets/top-right-demo.html
new file mode 100644
index 0000000..6087bff
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/top-right-demo.html
@@ -0,0 +1,34 @@
+<style>
+  .demo-menu.demo-menu__top-right .container {
+    position: relative;
+    width: 200px;
+  }
+  .demo-menu.demo-menu__top-right .background {
+    background: white;
+    height: 148px;
+    width: 100%;
+  }
+  .demo-menu.demo-menu__top-right .bar {
+    box-sizing: border-box;
+    position: relative;
+    background: #3F51B5;
+    color: white;
+    height: 64px;
+    width: 100%;
+    padding: 16px;
+  }
+  .demo-menu.demo-menu__top-right .wrapper {
+    box-sizing: border-box;
+    position: absolute;
+    right: 16px;
+  }
+</style>
+
+<div class="container mdl-shadow--2dp">
+  <div class="background"></div>
+  <div class="bar">
+    <div class="wrapper">
+      {% include "top-right.html" %}
+    </div>
+  </div>
+</div>
diff --git a/node_modules/material-design-lite/src/menu/snippets/top-right.html b/node_modules/material-design-lite/src/menu/snippets/top-right.html
new file mode 100644
index 0000000..803668e
--- /dev/null
+++ b/node_modules/material-design-lite/src/menu/snippets/top-right.html
@@ -0,0 +1,13 @@
+<!-- Right aligned menu on top of button  -->
+<button id="demo-menu-top-right"
+        class="mdl-button mdl-js-button mdl-button--icon">
+  <i class="material-icons">more_vert</i>
+</button>
+
+<ul class="mdl-menu mdl-menu--top-right mdl-js-menu mdl-js-ripple-effect"
+    data-mdl-for="demo-menu-top-right">
+  <li class="mdl-menu__item">Some Action</li>
+  <li class="mdl-menu__item">Another Action</li>
+  <li disabled class="mdl-menu__item">Disabled Action</li>
+  <li class="mdl-menu__item">Yet Another Action</li>
+</ul>
diff --git a/node_modules/material-design-lite/src/palette/_palette.scss b/node_modules/material-design-lite/src/palette/_palette.scss
new file mode 100644
index 0000000..ffbcdf9
--- /dev/null
+++ b/node_modules/material-design-lite/src/palette/_palette.scss
@@ -0,0 +1,2303 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+@if $trim-color-classes == false {
+  // Red
+
+  .mdl-color-text--red {
+    color: unquote("rgb(#{$palette-red-500})") !important;
+  }
+
+  .mdl-color--red {
+    background-color: unquote("rgb(#{$palette-red-500})") !important;
+  }
+
+  .mdl-color-text--red-50 {
+    color: unquote("rgb(#{$palette-red-50})") !important;
+  }
+
+  .mdl-color--red-50 {
+    background-color: unquote("rgb(#{$palette-red-50})") !important;
+  }
+
+  .mdl-color-text--red-100 {
+    color: unquote("rgb(#{$palette-red-100})") !important;
+  }
+
+  .mdl-color--red-100 {
+    background-color: unquote("rgb(#{$palette-red-100})") !important;
+  }
+
+  .mdl-color-text--red-200 {
+    color: unquote("rgb(#{$palette-red-200})") !important;
+  }
+
+  .mdl-color--red-200 {
+    background-color: unquote("rgb(#{$palette-red-200})") !important;
+  }
+
+  .mdl-color-text--red-300 {
+    color: unquote("rgb(#{$palette-red-300})") !important;
+  }
+
+  .mdl-color--red-300 {
+    background-color: unquote("rgb(#{$palette-red-300})") !important;
+  }
+
+  .mdl-color-text--red-400 {
+    color: unquote("rgb(#{$palette-red-400})") !important;
+  }
+
+  .mdl-color--red-400 {
+    background-color: unquote("rgb(#{$palette-red-400})") !important;
+  }
+
+  .mdl-color-text--red-500 {
+    color: unquote("rgb(#{$palette-red-500})") !important;
+  }
+
+  .mdl-color--red-500 {
+    background-color: unquote("rgb(#{$palette-red-500})") !important;
+  }
+
+  .mdl-color-text--red-600 {
+    color: unquote("rgb(#{$palette-red-600})") !important;
+  }
+
+  .mdl-color--red-600 {
+    background-color: unquote("rgb(#{$palette-red-600})") !important;
+  }
+
+  .mdl-color-text--red-700 {
+    color: unquote("rgb(#{$palette-red-700})") !important;
+  }
+
+  .mdl-color--red-700 {
+    background-color: unquote("rgb(#{$palette-red-700})") !important;
+  }
+
+  .mdl-color-text--red-800 {
+    color: unquote("rgb(#{$palette-red-800})") !important;
+  }
+
+  .mdl-color--red-800 {
+    background-color: unquote("rgb(#{$palette-red-800})") !important;
+  }
+
+  .mdl-color-text--red-900 {
+    color: unquote("rgb(#{$palette-red-900})") !important;
+  }
+
+  .mdl-color--red-900 {
+    background-color: unquote("rgb(#{$palette-red-900})") !important;
+  }
+
+  .mdl-color-text--red-A100 {
+    color: unquote("rgb(#{$palette-red-A100})") !important;
+  }
+
+  .mdl-color--red-A100 {
+    background-color: unquote("rgb(#{$palette-red-A100})") !important;
+  }
+
+  .mdl-color-text--red-A200 {
+    color: unquote("rgb(#{$palette-red-A200})") !important;
+  }
+
+  .mdl-color--red-A200 {
+    background-color: unquote("rgb(#{$palette-red-A200})") !important;
+  }
+
+  .mdl-color-text--red-A400 {
+    color: unquote("rgb(#{$palette-red-A400})") !important;
+  }
+
+  .mdl-color--red-A400 {
+    background-color: unquote("rgb(#{$palette-red-A400})") !important;
+  }
+
+  .mdl-color-text--red-A700 {
+    color: unquote("rgb(#{$palette-red-A700})") !important;
+  }
+
+  .mdl-color--red-A700 {
+    background-color: unquote("rgb(#{$palette-red-A700})") !important;
+  }
+
+  // Pink
+
+  .mdl-color-text--pink {
+    color: unquote("rgb(#{$palette-pink-500})") !important;
+  }
+
+  .mdl-color--pink {
+    background-color: unquote("rgb(#{$palette-pink-500})") !important;
+  }
+
+  .mdl-color-text--pink-50 {
+    color: unquote("rgb(#{$palette-pink-50})") !important;
+  }
+
+  .mdl-color--pink-50 {
+    background-color: unquote("rgb(#{$palette-pink-50})") !important;
+  }
+
+  .mdl-color-text--pink-100 {
+    color: unquote("rgb(#{$palette-pink-100})") !important;
+  }
+
+  .mdl-color--pink-100 {
+    background-color: unquote("rgb(#{$palette-pink-100})") !important;
+  }
+
+  .mdl-color-text--pink-200 {
+    color: unquote("rgb(#{$palette-pink-200})") !important;
+  }
+
+  .mdl-color--pink-200 {
+    background-color: unquote("rgb(#{$palette-pink-200})") !important;
+  }
+
+  .mdl-color-text--pink-300 {
+    color: unquote("rgb(#{$palette-pink-300})") !important;
+  }
+
+  .mdl-color--pink-300 {
+    background-color: unquote("rgb(#{$palette-pink-300})") !important;
+  }
+
+  .mdl-color-text--pink-400 {
+    color: unquote("rgb(#{$palette-pink-400})") !important;
+  }
+
+  .mdl-color--pink-400 {
+    background-color: unquote("rgb(#{$palette-pink-400})") !important;
+  }
+
+  .mdl-color-text--pink-500 {
+    color: unquote("rgb(#{$palette-pink-500})") !important;
+  }
+
+  .mdl-color--pink-500 {
+    background-color: unquote("rgb(#{$palette-pink-500})") !important;
+  }
+
+  .mdl-color-text--pink-600 {
+    color: unquote("rgb(#{$palette-pink-600})") !important;
+  }
+
+  .mdl-color--pink-600 {
+    background-color: unquote("rgb(#{$palette-pink-600})") !important;
+  }
+
+  .mdl-color-text--pink-700 {
+    color: unquote("rgb(#{$palette-pink-700})") !important;
+  }
+
+  .mdl-color--pink-700 {
+    background-color: unquote("rgb(#{$palette-pink-700})") !important;
+  }
+
+  .mdl-color-text--pink-800 {
+    color: unquote("rgb(#{$palette-pink-800})") !important;
+  }
+
+  .mdl-color--pink-800 {
+    background-color: unquote("rgb(#{$palette-pink-800})") !important;
+  }
+
+  .mdl-color-text--pink-900 {
+    color: unquote("rgb(#{$palette-pink-900})") !important;
+  }
+
+  .mdl-color--pink-900 {
+    background-color: unquote("rgb(#{$palette-pink-900})") !important;
+  }
+
+  .mdl-color-text--pink-A100 {
+    color: unquote("rgb(#{$palette-pink-A100})") !important;
+  }
+
+  .mdl-color--pink-A100 {
+    background-color: unquote("rgb(#{$palette-pink-A100})") !important;
+  }
+
+  .mdl-color-text--pink-A200 {
+    color: unquote("rgb(#{$palette-pink-A200})") !important;
+  }
+
+  .mdl-color--pink-A200 {
+    background-color: unquote("rgb(#{$palette-pink-A200})") !important;
+  }
+
+  .mdl-color-text--pink-A400 {
+    color: unquote("rgb(#{$palette-pink-A400})") !important;
+  }
+
+  .mdl-color--pink-A400 {
+    background-color: unquote("rgb(#{$palette-pink-A400})") !important;
+  }
+
+  .mdl-color-text--pink-A700 {
+    color: unquote("rgb(#{$palette-pink-A700})") !important;
+  }
+
+  .mdl-color--pink-A700 {
+    background-color: unquote("rgb(#{$palette-pink-A700})") !important;
+  }
+
+  // Purple
+
+  .mdl-color-text--purple {
+    color: unquote("rgb(#{$palette-purple-500})") !important;
+  }
+
+  .mdl-color--purple {
+    background-color: unquote("rgb(#{$palette-purple-500})") !important;
+  }
+
+  .mdl-color-text--purple-50 {
+    color: unquote("rgb(#{$palette-purple-50})") !important;
+  }
+
+  .mdl-color--purple-50 {
+    background-color: unquote("rgb(#{$palette-purple-50})") !important;
+  }
+
+  .mdl-color-text--purple-100 {
+    color: unquote("rgb(#{$palette-purple-100})") !important;
+  }
+
+  .mdl-color--purple-100 {
+    background-color: unquote("rgb(#{$palette-purple-100})") !important;
+  }
+
+  .mdl-color-text--purple-200 {
+    color: unquote("rgb(#{$palette-purple-200})") !important;
+  }
+
+  .mdl-color--purple-200 {
+    background-color: unquote("rgb(#{$palette-purple-200})") !important;
+  }
+
+  .mdl-color-text--purple-300 {
+    color: unquote("rgb(#{$palette-purple-300})") !important;
+  }
+
+  .mdl-color--purple-300 {
+    background-color: unquote("rgb(#{$palette-purple-300})") !important;
+  }
+
+  .mdl-color-text--purple-400 {
+    color: unquote("rgb(#{$palette-purple-400})") !important;
+  }
+
+  .mdl-color--purple-400 {
+    background-color: unquote("rgb(#{$palette-purple-400})") !important;
+  }
+
+  .mdl-color-text--purple-500 {
+    color: unquote("rgb(#{$palette-purple-500})") !important;
+  }
+
+  .mdl-color--purple-500 {
+    background-color: unquote("rgb(#{$palette-purple-500})") !important;
+  }
+
+  .mdl-color-text--purple-600 {
+    color: unquote("rgb(#{$palette-purple-600})") !important;
+  }
+
+  .mdl-color--purple-600 {
+    background-color: unquote("rgb(#{$palette-purple-600})") !important;
+  }
+
+  .mdl-color-text--purple-700 {
+    color: unquote("rgb(#{$palette-purple-700})") !important;
+  }
+
+  .mdl-color--purple-700 {
+    background-color: unquote("rgb(#{$palette-purple-700})") !important;
+  }
+
+  .mdl-color-text--purple-800 {
+    color: unquote("rgb(#{$palette-purple-800})") !important;
+  }
+
+  .mdl-color--purple-800 {
+    background-color: unquote("rgb(#{$palette-purple-800})") !important;
+  }
+
+  .mdl-color-text--purple-900 {
+    color: unquote("rgb(#{$palette-purple-900})") !important;
+  }
+
+  .mdl-color--purple-900 {
+    background-color: unquote("rgb(#{$palette-purple-900})") !important;
+  }
+
+  .mdl-color-text--purple-A100 {
+    color: unquote("rgb(#{$palette-purple-A100})") !important;
+  }
+
+  .mdl-color--purple-A100 {
+    background-color: unquote("rgb(#{$palette-purple-A100})") !important;
+  }
+
+  .mdl-color-text--purple-A200 {
+    color: unquote("rgb(#{$palette-purple-A200})") !important;
+  }
+
+  .mdl-color--purple-A200 {
+    background-color: unquote("rgb(#{$palette-purple-A200})") !important;
+  }
+
+  .mdl-color-text--purple-A400 {
+    color: unquote("rgb(#{$palette-purple-A400})") !important;
+  }
+
+  .mdl-color--purple-A400 {
+    background-color: unquote("rgb(#{$palette-purple-A400})") !important;
+  }
+
+  .mdl-color-text--purple-A700 {
+    color: unquote("rgb(#{$palette-purple-A700})") !important;
+  }
+
+  .mdl-color--purple-A700 {
+    background-color: unquote("rgb(#{$palette-purple-A700})") !important;
+  }
+
+  // Deep Purple.
+
+  .mdl-color-text--deep-purple {
+    color: unquote("rgb(#{$palette-deep-purple-500})") !important;
+  }
+
+  .mdl-color--deep-purple {
+    background-color: unquote("rgb(#{$palette-deep-purple-500})") !important;
+  }
+
+  .mdl-color-text--deep-purple-50 {
+    color: unquote("rgb(#{$palette-deep-purple-50})") !important;
+  }
+
+  .mdl-color--deep-purple-50 {
+    background-color: unquote("rgb(#{$palette-deep-purple-50})") !important;
+  }
+
+  .mdl-color-text--deep-purple-100 {
+    color: unquote("rgb(#{$palette-deep-purple-100})") !important;
+  }
+
+  .mdl-color--deep-purple-100 {
+    background-color: unquote("rgb(#{$palette-deep-purple-100})") !important;
+  }
+
+  .mdl-color-text--deep-purple-200 {
+    color: unquote("rgb(#{$palette-deep-purple-200})") !important;
+  }
+
+  .mdl-color--deep-purple-200 {
+    background-color: unquote("rgb(#{$palette-deep-purple-200})") !important;
+  }
+
+  .mdl-color-text--deep-purple-300 {
+    color: unquote("rgb(#{$palette-deep-purple-300})") !important;
+  }
+
+  .mdl-color--deep-purple-300 {
+    background-color: unquote("rgb(#{$palette-deep-purple-300})") !important;
+  }
+
+  .mdl-color-text--deep-purple-400 {
+    color: unquote("rgb(#{$palette-deep-purple-400})") !important;
+  }
+
+  .mdl-color--deep-purple-400 {
+    background-color: unquote("rgb(#{$palette-deep-purple-400})") !important;
+  }
+
+  .mdl-color-text--deep-purple-500 {
+    color: unquote("rgb(#{$palette-deep-purple-500})") !important;
+  }
+
+  .mdl-color--deep-purple-500 {
+    background-color: unquote("rgb(#{$palette-deep-purple-500})") !important;
+  }
+
+  .mdl-color-text--deep-purple-600 {
+    color: unquote("rgb(#{$palette-deep-purple-600})") !important;
+  }
+
+  .mdl-color--deep-purple-600 {
+    background-color: unquote("rgb(#{$palette-deep-purple-600})") !important;
+  }
+
+  .mdl-color-text--deep-purple-700 {
+    color: unquote("rgb(#{$palette-deep-purple-700})") !important;
+  }
+
+  .mdl-color--deep-purple-700 {
+    background-color: unquote("rgb(#{$palette-deep-purple-700})") !important;
+  }
+
+  .mdl-color-text--deep-purple-800 {
+    color: unquote("rgb(#{$palette-deep-purple-800})") !important;
+  }
+
+  .mdl-color--deep-purple-800 {
+    background-color: unquote("rgb(#{$palette-deep-purple-800})") !important;
+  }
+
+  .mdl-color-text--deep-purple-900 {
+    color: unquote("rgb(#{$palette-deep-purple-900})") !important;
+  }
+
+  .mdl-color--deep-purple-900 {
+    background-color: unquote("rgb(#{$palette-deep-purple-900})") !important;
+  }
+
+  .mdl-color-text--deep-purple-A100 {
+    color: unquote("rgb(#{$palette-deep-purple-A100})") !important;
+  }
+
+  .mdl-color--deep-purple-A100 {
+    background-color: unquote("rgb(#{$palette-deep-purple-A100})") !important;
+  }
+
+  .mdl-color-text--deep-purple-A200 {
+    color: unquote("rgb(#{$palette-deep-purple-A200})") !important;
+  }
+
+  .mdl-color--deep-purple-A200 {
+    background-color: unquote("rgb(#{$palette-deep-purple-A200})") !important;
+  }
+
+  .mdl-color-text--deep-purple-A400 {
+    color: unquote("rgb(#{$palette-deep-purple-A400})") !important;
+  }
+
+  .mdl-color--deep-purple-A400 {
+    background-color: unquote("rgb(#{$palette-deep-purple-A400})") !important;
+  }
+
+  .mdl-color-text--deep-purple-A700 {
+    color: unquote("rgb(#{$palette-deep-purple-A700})") !important;
+  }
+
+  .mdl-color--deep-purple-A700 {
+    background-color: unquote("rgb(#{$palette-deep-purple-A700})") !important;
+  }
+
+  // Indigo
+
+  .mdl-color-text--indigo {
+    color: unquote("rgb(#{$palette-indigo-500})") !important;
+  }
+
+  .mdl-color--indigo {
+    background-color: unquote("rgb(#{$palette-indigo-500})") !important;
+  }
+
+  .mdl-color-text--indigo-50 {
+    color: unquote("rgb(#{$palette-indigo-50})") !important;
+  }
+
+  .mdl-color--indigo-50 {
+    background-color: unquote("rgb(#{$palette-indigo-50})") !important;
+  }
+
+  .mdl-color-text--indigo-100 {
+    color: unquote("rgb(#{$palette-indigo-100})") !important;
+  }
+
+  .mdl-color--indigo-100 {
+    background-color: unquote("rgb(#{$palette-indigo-100})") !important;
+  }
+
+  .mdl-color-text--indigo-200 {
+    color: unquote("rgb(#{$palette-indigo-200})") !important;
+  }
+
+  .mdl-color--indigo-200 {
+    background-color: unquote("rgb(#{$palette-indigo-200})") !important;
+  }
+
+  .mdl-color-text--indigo-300 {
+    color: unquote("rgb(#{$palette-indigo-300})") !important;
+  }
+
+  .mdl-color--indigo-300 {
+    background-color: unquote("rgb(#{$palette-indigo-300})") !important;
+  }
+
+  .mdl-color-text--indigo-400 {
+    color: unquote("rgb(#{$palette-indigo-400})") !important;
+  }
+
+  .mdl-color--indigo-400 {
+    background-color: unquote("rgb(#{$palette-indigo-400})") !important;
+  }
+
+  .mdl-color-text--indigo-500 {
+    color: unquote("rgb(#{$palette-indigo-500})") !important;
+  }
+
+  .mdl-color--indigo-500 {
+    background-color: unquote("rgb(#{$palette-indigo-500})") !important;
+  }
+
+  .mdl-color-text--indigo-600 {
+    color: unquote("rgb(#{$palette-indigo-600})") !important;
+  }
+
+  .mdl-color--indigo-600 {
+    background-color: unquote("rgb(#{$palette-indigo-600})") !important;
+  }
+
+  .mdl-color-text--indigo-700 {
+    color: unquote("rgb(#{$palette-indigo-700})") !important;
+  }
+
+  .mdl-color--indigo-700 {
+    background-color: unquote("rgb(#{$palette-indigo-700})") !important;
+  }
+
+  .mdl-color-text--indigo-800 {
+    color: unquote("rgb(#{$palette-indigo-800})") !important;
+  }
+
+  .mdl-color--indigo-800 {
+    background-color: unquote("rgb(#{$palette-indigo-800})") !important;
+  }
+
+  .mdl-color-text--indigo-900 {
+    color: unquote("rgb(#{$palette-indigo-900})") !important;
+  }
+
+  .mdl-color--indigo-900 {
+    background-color: unquote("rgb(#{$palette-indigo-900})") !important;
+  }
+
+  .mdl-color-text--indigo-A100 {
+    color: unquote("rgb(#{$palette-indigo-A100})") !important;
+  }
+
+  .mdl-color--indigo-A100 {
+    background-color: unquote("rgb(#{$palette-indigo-A100})") !important;
+  }
+
+  .mdl-color-text--indigo-A200 {
+    color: unquote("rgb(#{$palette-indigo-A200})") !important;
+  }
+
+  .mdl-color--indigo-A200 {
+    background-color: unquote("rgb(#{$palette-indigo-A200})") !important;
+  }
+
+  .mdl-color-text--indigo-A400 {
+    color: unquote("rgb(#{$palette-indigo-A400})") !important;
+  }
+
+  .mdl-color--indigo-A400 {
+    background-color: unquote("rgb(#{$palette-indigo-A400})") !important;
+  }
+
+  .mdl-color-text--indigo-A700 {
+    color: unquote("rgb(#{$palette-indigo-A700})") !important;
+  }
+
+  .mdl-color--indigo-A700 {
+    background-color: unquote("rgb(#{$palette-indigo-A700})") !important;
+  }
+
+  // Blue
+
+  .mdl-color-text--blue {
+    color: unquote("rgb(#{$palette-blue-500})") !important;
+  }
+
+  .mdl-color--blue {
+    background-color: unquote("rgb(#{$palette-blue-500})") !important;
+  }
+
+  .mdl-color-text--blue-50 {
+    color: unquote("rgb(#{$palette-blue-50})") !important;
+  }
+
+  .mdl-color--blue-50 {
+    background-color: unquote("rgb(#{$palette-blue-50})") !important;
+  }
+
+  .mdl-color-text--blue-100 {
+    color: unquote("rgb(#{$palette-blue-100})") !important;
+  }
+
+  .mdl-color--blue-100 {
+    background-color: unquote("rgb(#{$palette-blue-100})") !important;
+  }
+
+  .mdl-color-text--blue-200 {
+    color: unquote("rgb(#{$palette-blue-200})") !important;
+  }
+
+  .mdl-color--blue-200 {
+    background-color: unquote("rgb(#{$palette-blue-200})") !important;
+  }
+
+  .mdl-color-text--blue-300 {
+    color: unquote("rgb(#{$palette-blue-300})") !important;
+  }
+
+  .mdl-color--blue-300 {
+    background-color: unquote("rgb(#{$palette-blue-300})") !important;
+  }
+
+  .mdl-color-text--blue-400 {
+    color: unquote("rgb(#{$palette-blue-400})") !important;
+  }
+
+  .mdl-color--blue-400 {
+    background-color: unquote("rgb(#{$palette-blue-400})") !important;
+  }
+
+  .mdl-color-text--blue-500 {
+    color: unquote("rgb(#{$palette-blue-500})") !important;
+  }
+
+  .mdl-color--blue-500 {
+    background-color: unquote("rgb(#{$palette-blue-500})") !important;
+  }
+
+  .mdl-color-text--blue-600 {
+    color: unquote("rgb(#{$palette-blue-600})") !important;
+  }
+
+  .mdl-color--blue-600 {
+    background-color: unquote("rgb(#{$palette-blue-600})") !important;
+  }
+
+  .mdl-color-text--blue-700 {
+    color: unquote("rgb(#{$palette-blue-700})") !important;
+  }
+
+  .mdl-color--blue-700 {
+    background-color: unquote("rgb(#{$palette-blue-700})") !important;
+  }
+
+  .mdl-color-text--blue-800 {
+    color: unquote("rgb(#{$palette-blue-800})") !important;
+  }
+
+  .mdl-color--blue-800 {
+    background-color: unquote("rgb(#{$palette-blue-800})") !important;
+  }
+
+  .mdl-color-text--blue-900 {
+    color: unquote("rgb(#{$palette-blue-900})") !important;
+  }
+
+  .mdl-color--blue-900 {
+    background-color: unquote("rgb(#{$palette-blue-900})") !important;
+  }
+
+  .mdl-color-text--blue-A100 {
+    color: unquote("rgb(#{$palette-blue-A100})") !important;
+  }
+
+  .mdl-color--blue-A100 {
+    background-color: unquote("rgb(#{$palette-blue-A100})") !important;
+  }
+
+  .mdl-color-text--blue-A200 {
+    color: unquote("rgb(#{$palette-blue-A200})") !important;
+  }
+
+  .mdl-color--blue-A200 {
+    background-color: unquote("rgb(#{$palette-blue-A200})") !important;
+  }
+
+  .mdl-color-text--blue-A400 {
+    color: unquote("rgb(#{$palette-blue-A400})") !important;
+  }
+
+  .mdl-color--blue-A400 {
+    background-color: unquote("rgb(#{$palette-blue-A400})") !important;
+  }
+
+  .mdl-color-text--blue-A700 {
+    color: unquote("rgb(#{$palette-blue-A700})") !important;
+  }
+
+  .mdl-color--blue-A700 {
+    background-color: unquote("rgb(#{$palette-blue-A700})") !important;
+  }
+
+  // Light Blue
+
+  .mdl-color-text--light-blue {
+    color: unquote("rgb(#{$palette-light-blue-500})") !important;
+  }
+
+  .mdl-color--light-blue {
+    background-color: unquote("rgb(#{$palette-light-blue-500})") !important;
+  }
+
+  .mdl-color-text--light-blue-50 {
+    color: unquote("rgb(#{$palette-light-blue-50})") !important;
+  }
+
+  .mdl-color--light-blue-50 {
+    background-color: unquote("rgb(#{$palette-light-blue-50})") !important;
+  }
+
+  .mdl-color-text--light-blue-100 {
+    color: unquote("rgb(#{$palette-light-blue-100})") !important;
+  }
+
+  .mdl-color--light-blue-100 {
+    background-color: unquote("rgb(#{$palette-light-blue-100})") !important;
+  }
+
+  .mdl-color-text--light-blue-200 {
+    color: unquote("rgb(#{$palette-light-blue-200})") !important;
+  }
+
+  .mdl-color--light-blue-200 {
+    background-color: unquote("rgb(#{$palette-light-blue-200})") !important;
+  }
+
+  .mdl-color-text--light-blue-300 {
+    color: unquote("rgb(#{$palette-light-blue-300})") !important;
+  }
+
+  .mdl-color--light-blue-300 {
+    background-color: unquote("rgb(#{$palette-light-blue-300})") !important;
+  }
+
+  .mdl-color-text--light-blue-400 {
+    color: unquote("rgb(#{$palette-light-blue-400})") !important;
+  }
+
+  .mdl-color--light-blue-400 {
+    background-color: unquote("rgb(#{$palette-light-blue-400})") !important;
+  }
+
+  .mdl-color-text--light-blue-500 {
+    color: unquote("rgb(#{$palette-light-blue-500})") !important;
+  }
+
+  .mdl-color--light-blue-500 {
+    background-color: unquote("rgb(#{$palette-light-blue-500})") !important;
+  }
+
+  .mdl-color-text--light-blue-600 {
+    color: unquote("rgb(#{$palette-light-blue-600})") !important;
+  }
+
+  .mdl-color--light-blue-600 {
+    background-color: unquote("rgb(#{$palette-light-blue-600})") !important;
+  }
+
+  .mdl-color-text--light-blue-700 {
+    color: unquote("rgb(#{$palette-light-blue-700})") !important;
+  }
+
+  .mdl-color--light-blue-700 {
+    background-color: unquote("rgb(#{$palette-light-blue-700})") !important;
+  }
+
+  .mdl-color-text--light-blue-800 {
+    color: unquote("rgb(#{$palette-light-blue-800})") !important;
+  }
+
+  .mdl-color--light-blue-800 {
+    background-color: unquote("rgb(#{$palette-light-blue-800})") !important;
+  }
+
+  .mdl-color-text--light-blue-900 {
+    color: unquote("rgb(#{$palette-light-blue-900})") !important;
+  }
+
+  .mdl-color--light-blue-900 {
+    background-color: unquote("rgb(#{$palette-light-blue-900})") !important;
+  }
+
+  .mdl-color-text--light-blue-A100 {
+    color: unquote("rgb(#{$palette-light-blue-A100})") !important;
+  }
+
+  .mdl-color--light-blue-A100 {
+    background-color: unquote("rgb(#{$palette-light-blue-A100})") !important;
+  }
+
+  .mdl-color-text--light-blue-A200 {
+    color: unquote("rgb(#{$palette-light-blue-A200})") !important;
+  }
+
+  .mdl-color--light-blue-A200 {
+    background-color: unquote("rgb(#{$palette-light-blue-A200})") !important;
+  }
+
+  .mdl-color-text--light-blue-A400 {
+    color: unquote("rgb(#{$palette-light-blue-A400})") !important;
+  }
+
+  .mdl-color--light-blue-A400 {
+    background-color: unquote("rgb(#{$palette-light-blue-A400})") !important;
+  }
+
+  .mdl-color-text--light-blue-A700 {
+    color: unquote("rgb(#{$palette-light-blue-A700})") !important;
+  }
+
+  .mdl-color--light-blue-A700 {
+    background-color: unquote("rgb(#{$palette-light-blue-A700})") !important;
+  }
+
+  // Cyan
+
+  .mdl-color-text--cyan {
+    color: unquote("rgb(#{$palette-cyan-500})") !important;
+  }
+
+  .mdl-color--cyan {
+    background-color: unquote("rgb(#{$palette-cyan-500})") !important;
+  }
+
+  .mdl-color-text--cyan-50 {
+    color: unquote("rgb(#{$palette-cyan-50})") !important;
+  }
+
+  .mdl-color--cyan-50 {
+    background-color: unquote("rgb(#{$palette-cyan-50})") !important;
+  }
+
+  .mdl-color-text--cyan-100 {
+    color: unquote("rgb(#{$palette-cyan-100})") !important;
+  }
+
+  .mdl-color--cyan-100 {
+    background-color: unquote("rgb(#{$palette-cyan-100})") !important;
+  }
+
+  .mdl-color-text--cyan-200 {
+    color: unquote("rgb(#{$palette-cyan-200})") !important;
+  }
+
+  .mdl-color--cyan-200 {
+    background-color: unquote("rgb(#{$palette-cyan-200})") !important;
+  }
+
+  .mdl-color-text--cyan-300 {
+    color: unquote("rgb(#{$palette-cyan-300})") !important;
+  }
+
+  .mdl-color--cyan-300 {
+    background-color: unquote("rgb(#{$palette-cyan-300})") !important;
+  }
+
+  .mdl-color-text--cyan-400 {
+    color: unquote("rgb(#{$palette-cyan-400})") !important;
+  }
+
+  .mdl-color--cyan-400 {
+    background-color: unquote("rgb(#{$palette-cyan-400})") !important;
+  }
+
+  .mdl-color-text--cyan-500 {
+    color: unquote("rgb(#{$palette-cyan-500})") !important;
+  }
+
+  .mdl-color--cyan-500 {
+    background-color: unquote("rgb(#{$palette-cyan-500})") !important;
+  }
+
+  .mdl-color-text--cyan-600 {
+    color: unquote("rgb(#{$palette-cyan-600})") !important;
+  }
+
+  .mdl-color--cyan-600 {
+    background-color: unquote("rgb(#{$palette-cyan-600})") !important;
+  }
+
+  .mdl-color-text--cyan-700 {
+    color: unquote("rgb(#{$palette-cyan-700})") !important;
+  }
+
+  .mdl-color--cyan-700 {
+    background-color: unquote("rgb(#{$palette-cyan-700})") !important;
+  }
+
+  .mdl-color-text--cyan-800 {
+    color: unquote("rgb(#{$palette-cyan-800})") !important;
+  }
+
+  .mdl-color--cyan-800 {
+    background-color: unquote("rgb(#{$palette-cyan-800})") !important;
+  }
+
+  .mdl-color-text--cyan-900 {
+    color: unquote("rgb(#{$palette-cyan-900})") !important;
+  }
+
+  .mdl-color--cyan-900 {
+    background-color: unquote("rgb(#{$palette-cyan-900})") !important;
+  }
+
+  .mdl-color-text--cyan-A100 {
+    color: unquote("rgb(#{$palette-cyan-A100})") !important;
+  }
+
+  .mdl-color--cyan-A100 {
+    background-color: unquote("rgb(#{$palette-cyan-A100})") !important;
+  }
+
+  .mdl-color-text--cyan-A200 {
+    color: unquote("rgb(#{$palette-cyan-A200})") !important;
+  }
+
+  .mdl-color--cyan-A200 {
+    background-color: unquote("rgb(#{$palette-cyan-A200})") !important;
+  }
+
+  .mdl-color-text--cyan-A400 {
+    color: unquote("rgb(#{$palette-cyan-A400})") !important;
+  }
+
+  .mdl-color--cyan-A400 {
+    background-color: unquote("rgb(#{$palette-cyan-A400})") !important;
+  }
+
+  .mdl-color-text--cyan-A700 {
+    color: unquote("rgb(#{$palette-cyan-A700})") !important;
+  }
+
+  .mdl-color--cyan-A700 {
+    background-color: unquote("rgb(#{$palette-cyan-A700})") !important;
+  }
+
+  // Teal
+
+  .mdl-color-text--teal {
+    color: unquote("rgb(#{$palette-teal-500})") !important;
+  }
+
+  .mdl-color--teal {
+    background-color: unquote("rgb(#{$palette-teal-500})") !important;
+  }
+
+  .mdl-color-text--teal-50 {
+    color: unquote("rgb(#{$palette-teal-50})") !important;
+  }
+
+  .mdl-color--teal-50 {
+    background-color: unquote("rgb(#{$palette-teal-50})") !important;
+  }
+
+  .mdl-color-text--teal-100 {
+    color: unquote("rgb(#{$palette-teal-100})") !important;
+  }
+
+  .mdl-color--teal-100 {
+    background-color: unquote("rgb(#{$palette-teal-100})") !important;
+  }
+
+  .mdl-color-text--teal-200 {
+    color: unquote("rgb(#{$palette-teal-200})") !important;
+  }
+
+  .mdl-color--teal-200 {
+    background-color: unquote("rgb(#{$palette-teal-200})") !important;
+  }
+
+  .mdl-color-text--teal-300 {
+    color: unquote("rgb(#{$palette-teal-300})") !important;
+  }
+
+  .mdl-color--teal-300 {
+    background-color: unquote("rgb(#{$palette-teal-300})") !important;
+  }
+
+  .mdl-color-text--teal-400 {
+    color: unquote("rgb(#{$palette-teal-400})") !important;
+  }
+
+  .mdl-color--teal-400 {
+    background-color: unquote("rgb(#{$palette-teal-400})") !important;
+  }
+
+  .mdl-color-text--teal-500 {
+    color: unquote("rgb(#{$palette-teal-500})") !important;
+  }
+
+  .mdl-color--teal-500 {
+    background-color: unquote("rgb(#{$palette-teal-500})") !important;
+  }
+
+  .mdl-color-text--teal-600 {
+    color: unquote("rgb(#{$palette-teal-600})") !important;
+  }
+
+  .mdl-color--teal-600 {
+    background-color: unquote("rgb(#{$palette-teal-600})") !important;
+  }
+
+  .mdl-color-text--teal-700 {
+    color: unquote("rgb(#{$palette-teal-700})") !important;
+  }
+
+  .mdl-color--teal-700 {
+    background-color: unquote("rgb(#{$palette-teal-700})") !important;
+  }
+
+  .mdl-color-text--teal-800 {
+    color: unquote("rgb(#{$palette-teal-800})") !important;
+  }
+
+  .mdl-color--teal-800 {
+    background-color: unquote("rgb(#{$palette-teal-800})") !important;
+  }
+
+  .mdl-color-text--teal-900 {
+    color: unquote("rgb(#{$palette-teal-900})") !important;
+  }
+
+  .mdl-color--teal-900 {
+    background-color: unquote("rgb(#{$palette-teal-900})") !important;
+  }
+
+  .mdl-color-text--teal-A100 {
+    color: unquote("rgb(#{$palette-teal-A100})") !important;
+  }
+
+  .mdl-color--teal-A100 {
+    background-color: unquote("rgb(#{$palette-teal-A100})") !important;
+  }
+
+  .mdl-color-text--teal-A200 {
+    color: unquote("rgb(#{$palette-teal-A200})") !important;
+  }
+
+  .mdl-color--teal-A200 {
+    background-color: unquote("rgb(#{$palette-teal-A200})") !important;
+  }
+
+  .mdl-color-text--teal-A400 {
+    color: unquote("rgb(#{$palette-teal-A400})") !important;
+  }
+
+  .mdl-color--teal-A400 {
+    background-color: unquote("rgb(#{$palette-teal-A400})") !important;
+  }
+
+  .mdl-color-text--teal-A700 {
+    color: unquote("rgb(#{$palette-teal-A700})") !important;
+  }
+
+  .mdl-color--teal-A700 {
+    background-color: unquote("rgb(#{$palette-teal-A700})") !important;
+  }
+
+  // Green
+
+  .mdl-color-text--green {
+    color: unquote("rgb(#{$palette-green-500})") !important;
+  }
+
+  .mdl-color--green {
+    background-color: unquote("rgb(#{$palette-green-500})") !important;
+  }
+
+  .mdl-color-text--green-50 {
+    color: unquote("rgb(#{$palette-green-50})") !important;
+  }
+
+  .mdl-color--green-50 {
+    background-color: unquote("rgb(#{$palette-green-50})") !important;
+  }
+
+  .mdl-color-text--green-100 {
+    color: unquote("rgb(#{$palette-green-100})") !important;
+  }
+
+  .mdl-color--green-100 {
+    background-color: unquote("rgb(#{$palette-green-100})") !important;
+  }
+
+  .mdl-color-text--green-200 {
+    color: unquote("rgb(#{$palette-green-200})") !important;
+  }
+
+  .mdl-color--green-200 {
+    background-color: unquote("rgb(#{$palette-green-200})") !important;
+  }
+
+  .mdl-color-text--green-300 {
+    color: unquote("rgb(#{$palette-green-300})") !important;
+  }
+
+  .mdl-color--green-300 {
+    background-color: unquote("rgb(#{$palette-green-300})") !important;
+  }
+
+  .mdl-color-text--green-400 {
+    color: unquote("rgb(#{$palette-green-400})") !important;
+  }
+
+  .mdl-color--green-400 {
+    background-color: unquote("rgb(#{$palette-green-400})") !important;
+  }
+
+  .mdl-color-text--green-500 {
+    color: unquote("rgb(#{$palette-green-500})") !important;
+  }
+
+  .mdl-color--green-500 {
+    background-color: unquote("rgb(#{$palette-green-500})") !important;
+  }
+
+  .mdl-color-text--green-600 {
+    color: unquote("rgb(#{$palette-green-600})") !important;
+  }
+
+  .mdl-color--green-600 {
+    background-color: unquote("rgb(#{$palette-green-600})") !important;
+  }
+
+  .mdl-color-text--green-700 {
+    color: unquote("rgb(#{$palette-green-700})") !important;
+  }
+
+  .mdl-color--green-700 {
+    background-color: unquote("rgb(#{$palette-green-700})") !important;
+  }
+
+  .mdl-color-text--green-800 {
+    color: unquote("rgb(#{$palette-green-800})") !important;
+  }
+
+  .mdl-color--green-800 {
+    background-color: unquote("rgb(#{$palette-green-800})") !important;
+  }
+
+  .mdl-color-text--green-900 {
+    color: unquote("rgb(#{$palette-green-900})") !important;
+  }
+
+  .mdl-color--green-900 {
+    background-color: unquote("rgb(#{$palette-green-900})") !important;
+  }
+
+  .mdl-color-text--green-A100 {
+    color: unquote("rgb(#{$palette-green-A100})") !important;
+  }
+
+  .mdl-color--green-A100 {
+    background-color: unquote("rgb(#{$palette-green-A100})") !important;
+  }
+
+  .mdl-color-text--green-A200 {
+    color: unquote("rgb(#{$palette-green-A200})") !important;
+  }
+
+  .mdl-color--green-A200 {
+    background-color: unquote("rgb(#{$palette-green-A200})") !important;
+  }
+
+  .mdl-color-text--green-A400 {
+    color: unquote("rgb(#{$palette-green-A400})") !important;
+  }
+
+  .mdl-color--green-A400 {
+    background-color: unquote("rgb(#{$palette-green-A400})") !important;
+  }
+
+  .mdl-color-text--green-A700 {
+    color: unquote("rgb(#{$palette-green-A700})") !important;
+  }
+
+  .mdl-color--green-A700 {
+    background-color: unquote("rgb(#{$palette-green-A700})") !important;
+  }
+
+  // Light Green
+
+  .mdl-color-text--light-green {
+    color: unquote("rgb(#{$palette-light-green-500})") !important;
+  }
+
+  .mdl-color--light-green {
+    background-color: unquote("rgb(#{$palette-light-green-500})") !important;
+  }
+
+  .mdl-color-text--light-green-50 {
+    color: unquote("rgb(#{$palette-light-green-50})") !important;
+  }
+
+  .mdl-color--light-green-50 {
+    background-color: unquote("rgb(#{$palette-light-green-50})") !important;
+  }
+
+  .mdl-color-text--light-green-100 {
+    color: unquote("rgb(#{$palette-light-green-100})") !important;
+  }
+
+  .mdl-color--light-green-100 {
+    background-color: unquote("rgb(#{$palette-light-green-100})") !important;
+  }
+
+  .mdl-color-text--light-green-200 {
+    color: unquote("rgb(#{$palette-light-green-200})") !important;
+  }
+
+  .mdl-color--light-green-200 {
+    background-color: unquote("rgb(#{$palette-light-green-200})") !important;
+  }
+
+  .mdl-color-text--light-green-300 {
+    color: unquote("rgb(#{$palette-light-green-300})") !important;
+  }
+
+  .mdl-color--light-green-300 {
+    background-color: unquote("rgb(#{$palette-light-green-300})") !important;
+  }
+
+  .mdl-color-text--light-green-400 {
+    color: unquote("rgb(#{$palette-light-green-400})") !important;
+  }
+
+  .mdl-color--light-green-400 {
+    background-color: unquote("rgb(#{$palette-light-green-400})") !important;
+  }
+
+  .mdl-color-text--light-green-500 {
+    color: unquote("rgb(#{$palette-light-green-500})") !important;
+  }
+
+  .mdl-color--light-green-500 {
+    background-color: unquote("rgb(#{$palette-light-green-500})") !important;
+  }
+
+  .mdl-color-text--light-green-600 {
+    color: unquote("rgb(#{$palette-light-green-600})") !important;
+  }
+
+  .mdl-color--light-green-600 {
+    background-color: unquote("rgb(#{$palette-light-green-600})") !important;
+  }
+
+  .mdl-color-text--light-green-700 {
+    color: unquote("rgb(#{$palette-light-green-700})") !important;
+  }
+
+  .mdl-color--light-green-700 {
+    background-color: unquote("rgb(#{$palette-light-green-700})") !important;
+  }
+
+  .mdl-color-text--light-green-800 {
+    color: unquote("rgb(#{$palette-light-green-800})") !important;
+  }
+
+  .mdl-color--light-green-800 {
+    background-color: unquote("rgb(#{$palette-light-green-800})") !important;
+  }
+
+  .mdl-color-text--light-green-900 {
+    color: unquote("rgb(#{$palette-light-green-900})") !important;
+  }
+
+  .mdl-color--light-green-900 {
+    background-color: unquote("rgb(#{$palette-light-green-900})") !important;
+  }
+
+  .mdl-color-text--light-green-A100 {
+    color: unquote("rgb(#{$palette-light-green-A100})") !important;
+  }
+
+  .mdl-color--light-green-A100 {
+    background-color: unquote("rgb(#{$palette-light-green-A100})") !important;
+  }
+
+  .mdl-color-text--light-green-A200 {
+    color: unquote("rgb(#{$palette-light-green-A200})") !important;
+  }
+
+  .mdl-color--light-green-A200 {
+    background-color: unquote("rgb(#{$palette-light-green-A200})") !important;
+  }
+
+  .mdl-color-text--light-green-A400 {
+    color: unquote("rgb(#{$palette-light-green-A400})") !important;
+  }
+
+  .mdl-color--light-green-A400 {
+    background-color: unquote("rgb(#{$palette-light-green-A400})") !important;
+  }
+
+  .mdl-color-text--light-green-A700 {
+    color: unquote("rgb(#{$palette-light-green-A700})") !important;
+  }
+
+  .mdl-color--light-green-A700 {
+    background-color: unquote("rgb(#{$palette-light-green-A700})") !important;
+  }
+
+  // Lime
+
+  .mdl-color-text--lime {
+    color: unquote("rgb(#{$palette-lime-500})") !important;
+  }
+
+  .mdl-color--lime {
+    background-color: unquote("rgb(#{$palette-lime-500})") !important;
+  }
+
+  .mdl-color-text--lime-50 {
+    color: unquote("rgb(#{$palette-lime-50})") !important;
+  }
+
+  .mdl-color--lime-50 {
+    background-color: unquote("rgb(#{$palette-lime-50})") !important;
+  }
+
+  .mdl-color-text--lime-100 {
+    color: unquote("rgb(#{$palette-lime-100})") !important;
+  }
+
+  .mdl-color--lime-100 {
+    background-color: unquote("rgb(#{$palette-lime-100})") !important;
+  }
+
+  .mdl-color-text--lime-200 {
+    color: unquote("rgb(#{$palette-lime-200})") !important;
+  }
+
+  .mdl-color--lime-200 {
+    background-color: unquote("rgb(#{$palette-lime-200})") !important;
+  }
+
+  .mdl-color-text--lime-300 {
+    color: unquote("rgb(#{$palette-lime-300})") !important;
+  }
+
+  .mdl-color--lime-300 {
+    background-color: unquote("rgb(#{$palette-lime-300})") !important;
+  }
+
+  .mdl-color-text--lime-400 {
+    color: unquote("rgb(#{$palette-lime-400})") !important;
+  }
+
+  .mdl-color--lime-400 {
+    background-color: unquote("rgb(#{$palette-lime-400})") !important;
+  }
+
+  .mdl-color-text--lime-500 {
+    color: unquote("rgb(#{$palette-lime-500})") !important;
+  }
+
+  .mdl-color--lime-500 {
+    background-color: unquote("rgb(#{$palette-lime-500})") !important;
+  }
+
+  .mdl-color-text--lime-600 {
+    color: unquote("rgb(#{$palette-lime-600})") !important;
+  }
+
+  .mdl-color--lime-600 {
+    background-color: unquote("rgb(#{$palette-lime-600})") !important;
+  }
+
+  .mdl-color-text--lime-700 {
+    color: unquote("rgb(#{$palette-lime-700})") !important;
+  }
+
+  .mdl-color--lime-700 {
+    background-color: unquote("rgb(#{$palette-lime-700})") !important;
+  }
+
+  .mdl-color-text--lime-800 {
+    color: unquote("rgb(#{$palette-lime-800})") !important;
+  }
+
+  .mdl-color--lime-800 {
+    background-color: unquote("rgb(#{$palette-lime-800})") !important;
+  }
+
+  .mdl-color-text--lime-900 {
+    color: unquote("rgb(#{$palette-lime-900})") !important;
+  }
+
+  .mdl-color--lime-900 {
+    background-color: unquote("rgb(#{$palette-lime-900})") !important;
+  }
+
+  .mdl-color-text--lime-A100 {
+    color: unquote("rgb(#{$palette-lime-A100})") !important;
+  }
+
+  .mdl-color--lime-A100 {
+    background-color: unquote("rgb(#{$palette-lime-A100})") !important;
+  }
+
+  .mdl-color-text--lime-A200 {
+    color: unquote("rgb(#{$palette-lime-A200})") !important;
+  }
+
+  .mdl-color--lime-A200 {
+    background-color: unquote("rgb(#{$palette-lime-A200})") !important;
+  }
+
+  .mdl-color-text--lime-A400 {
+    color: unquote("rgb(#{$palette-lime-A400})") !important;
+  }
+
+  .mdl-color--lime-A400 {
+    background-color: unquote("rgb(#{$palette-lime-A400})") !important;
+  }
+
+  .mdl-color-text--lime-A700 {
+    color: unquote("rgb(#{$palette-lime-A700})") !important;
+  }
+
+  .mdl-color--lime-A700 {
+    background-color: unquote("rgb(#{$palette-lime-A700})") !important;
+  }
+
+  // Yellow
+
+  .mdl-color-text--yellow {
+    color: unquote("rgb(#{$palette-yellow-500})") !important;
+  }
+
+  .mdl-color--yellow {
+    background-color: unquote("rgb(#{$palette-yellow-500})") !important;
+  }
+
+  .mdl-color-text--yellow-50 {
+    color: unquote("rgb(#{$palette-yellow-50})") !important;
+  }
+
+  .mdl-color--yellow-50 {
+    background-color: unquote("rgb(#{$palette-yellow-50})") !important;
+  }
+
+  .mdl-color-text--yellow-100 {
+    color: unquote("rgb(#{$palette-yellow-100})") !important;
+  }
+
+  .mdl-color--yellow-100 {
+    background-color: unquote("rgb(#{$palette-yellow-100})") !important;
+  }
+
+  .mdl-color-text--yellow-200 {
+    color: unquote("rgb(#{$palette-yellow-200})") !important;
+  }
+
+  .mdl-color--yellow-200 {
+    background-color: unquote("rgb(#{$palette-yellow-200})") !important;
+  }
+
+  .mdl-color-text--yellow-300 {
+    color: unquote("rgb(#{$palette-yellow-300})") !important;
+  }
+
+  .mdl-color--yellow-300 {
+    background-color: unquote("rgb(#{$palette-yellow-300})") !important;
+  }
+
+  .mdl-color-text--yellow-400 {
+    color: unquote("rgb(#{$palette-yellow-400})") !important;
+  }
+
+  .mdl-color--yellow-400 {
+    background-color: unquote("rgb(#{$palette-yellow-400})") !important;
+  }
+
+  .mdl-color-text--yellow-500 {
+    color: unquote("rgb(#{$palette-yellow-500})") !important;
+  }
+
+  .mdl-color--yellow-500 {
+    background-color: unquote("rgb(#{$palette-yellow-500})") !important;
+  }
+
+  .mdl-color-text--yellow-600 {
+    color: unquote("rgb(#{$palette-yellow-600})") !important;
+  }
+
+  .mdl-color--yellow-600 {
+    background-color: unquote("rgb(#{$palette-yellow-600})") !important;
+  }
+
+  .mdl-color-text--yellow-700 {
+    color: unquote("rgb(#{$palette-yellow-700})") !important;
+  }
+
+  .mdl-color--yellow-700 {
+    background-color: unquote("rgb(#{$palette-yellow-700})") !important;
+  }
+
+  .mdl-color-text--yellow-800 {
+    color: unquote("rgb(#{$palette-yellow-800})") !important;
+  }
+
+  .mdl-color--yellow-800 {
+    background-color: unquote("rgb(#{$palette-yellow-800})") !important;
+  }
+
+  .mdl-color-text--yellow-900 {
+    color: unquote("rgb(#{$palette-yellow-900})") !important;
+  }
+
+  .mdl-color--yellow-900 {
+    background-color: unquote("rgb(#{$palette-yellow-900})") !important;
+  }
+
+  .mdl-color-text--yellow-A100 {
+    color: unquote("rgb(#{$palette-yellow-A100})") !important;
+  }
+
+  .mdl-color--yellow-A100 {
+    background-color: unquote("rgb(#{$palette-yellow-A100})") !important;
+  }
+
+  .mdl-color-text--yellow-A200 {
+    color: unquote("rgb(#{$palette-yellow-A200})") !important;
+  }
+
+  .mdl-color--yellow-A200 {
+    background-color: unquote("rgb(#{$palette-yellow-A200})") !important;
+  }
+
+  .mdl-color-text--yellow-A400 {
+    color: unquote("rgb(#{$palette-yellow-A400})") !important;
+  }
+
+  .mdl-color--yellow-A400 {
+    background-color: unquote("rgb(#{$palette-yellow-A400})") !important;
+  }
+
+  .mdl-color-text--yellow-A700 {
+    color: unquote("rgb(#{$palette-yellow-A700})") !important;
+  }
+
+  .mdl-color--yellow-A700 {
+    background-color: unquote("rgb(#{$palette-yellow-A700})") !important;
+  }
+
+  // Amber
+
+  .mdl-color-text--amber {
+    color: unquote("rgb(#{$palette-amber-500})") !important;
+  }
+
+  .mdl-color--amber {
+    background-color: unquote("rgb(#{$palette-amber-500})") !important;
+  }
+
+  .mdl-color-text--amber-50 {
+    color: unquote("rgb(#{$palette-amber-50})") !important;
+  }
+
+  .mdl-color--amber-50 {
+    background-color: unquote("rgb(#{$palette-amber-50})") !important;
+  }
+
+  .mdl-color-text--amber-100 {
+    color: unquote("rgb(#{$palette-amber-100})") !important;
+  }
+
+  .mdl-color--amber-100 {
+    background-color: unquote("rgb(#{$palette-amber-100})") !important;
+  }
+
+  .mdl-color-text--amber-200 {
+    color: unquote("rgb(#{$palette-amber-200})") !important;
+  }
+
+  .mdl-color--amber-200 {
+    background-color: unquote("rgb(#{$palette-amber-200})") !important;
+  }
+
+  .mdl-color-text--amber-300 {
+    color: unquote("rgb(#{$palette-amber-300})") !important;
+  }
+
+  .mdl-color--amber-300 {
+    background-color: unquote("rgb(#{$palette-amber-300})") !important;
+  }
+
+  .mdl-color-text--amber-400 {
+    color: unquote("rgb(#{$palette-amber-400})") !important;
+  }
+
+  .mdl-color--amber-400 {
+    background-color: unquote("rgb(#{$palette-amber-400})") !important;
+  }
+
+  .mdl-color-text--amber-500 {
+    color: unquote("rgb(#{$palette-amber-500})") !important;
+  }
+
+  .mdl-color--amber-500 {
+    background-color: unquote("rgb(#{$palette-amber-500})") !important;
+  }
+
+  .mdl-color-text--amber-600 {
+    color: unquote("rgb(#{$palette-amber-600})") !important;
+  }
+
+  .mdl-color--amber-600 {
+    background-color: unquote("rgb(#{$palette-amber-600})") !important;
+  }
+
+  .mdl-color-text--amber-700 {
+    color: unquote("rgb(#{$palette-amber-700})") !important;
+  }
+
+  .mdl-color--amber-700 {
+    background-color: unquote("rgb(#{$palette-amber-700})") !important;
+  }
+
+  .mdl-color-text--amber-800 {
+    color: unquote("rgb(#{$palette-amber-800})") !important;
+  }
+
+  .mdl-color--amber-800 {
+    background-color: unquote("rgb(#{$palette-amber-800})") !important;
+  }
+
+  .mdl-color-text--amber-900 {
+    color: unquote("rgb(#{$palette-amber-900})") !important;
+  }
+
+  .mdl-color--amber-900 {
+    background-color: unquote("rgb(#{$palette-amber-900})") !important;
+  }
+
+  .mdl-color-text--amber-A100 {
+    color: unquote("rgb(#{$palette-amber-A100})") !important;
+  }
+
+  .mdl-color--amber-A100 {
+    background-color: unquote("rgb(#{$palette-amber-A100})") !important;
+  }
+
+  .mdl-color-text--amber-A200 {
+    color: unquote("rgb(#{$palette-amber-A200})") !important;
+  }
+
+  .mdl-color--amber-A200 {
+    background-color: unquote("rgb(#{$palette-amber-A200})") !important;
+  }
+
+  .mdl-color-text--amber-A400 {
+    color: unquote("rgb(#{$palette-amber-A400})") !important;
+  }
+
+  .mdl-color--amber-A400 {
+    background-color: unquote("rgb(#{$palette-amber-A400})") !important;
+  }
+
+  .mdl-color-text--amber-A700 {
+    color: unquote("rgb(#{$palette-amber-A700})") !important;
+  }
+
+  .mdl-color--amber-A700 {
+    background-color: unquote("rgb(#{$palette-amber-A700})") !important;
+  }
+
+  // Orange
+
+  .mdl-color-text--orange {
+    color: unquote("rgb(#{$palette-orange-500})") !important;
+  }
+
+  .mdl-color--orange {
+    background-color: unquote("rgb(#{$palette-orange-500})") !important;
+  }
+
+  .mdl-color-text--orange-50 {
+    color: unquote("rgb(#{$palette-orange-50})") !important;
+  }
+
+  .mdl-color--orange-50 {
+    background-color: unquote("rgb(#{$palette-orange-50})") !important;
+  }
+
+  .mdl-color-text--orange-100 {
+    color: unquote("rgb(#{$palette-orange-100})") !important;
+  }
+
+  .mdl-color--orange-100 {
+    background-color: unquote("rgb(#{$palette-orange-100})") !important;
+  }
+
+  .mdl-color-text--orange-200 {
+    color: unquote("rgb(#{$palette-orange-200})") !important;
+  }
+
+  .mdl-color--orange-200 {
+    background-color: unquote("rgb(#{$palette-orange-200})") !important;
+  }
+
+  .mdl-color-text--orange-300 {
+    color: unquote("rgb(#{$palette-orange-300})") !important;
+  }
+
+  .mdl-color--orange-300 {
+    background-color: unquote("rgb(#{$palette-orange-300})") !important;
+  }
+
+  .mdl-color-text--orange-400 {
+    color: unquote("rgb(#{$palette-orange-400})") !important;
+  }
+
+  .mdl-color--orange-400 {
+    background-color: unquote("rgb(#{$palette-orange-400})") !important;
+  }
+
+  .mdl-color-text--orange-500 {
+    color: unquote("rgb(#{$palette-orange-500})") !important;
+  }
+
+  .mdl-color--orange-500 {
+    background-color: unquote("rgb(#{$palette-orange-500})") !important;
+  }
+
+  .mdl-color-text--orange-600 {
+    color: unquote("rgb(#{$palette-orange-600})") !important;
+  }
+
+  .mdl-color--orange-600 {
+    background-color: unquote("rgb(#{$palette-orange-600})") !important;
+  }
+
+  .mdl-color-text--orange-700 {
+    color: unquote("rgb(#{$palette-orange-700})") !important;
+  }
+
+  .mdl-color--orange-700 {
+    background-color: unquote("rgb(#{$palette-orange-700})") !important;
+  }
+
+  .mdl-color-text--orange-800 {
+    color: unquote("rgb(#{$palette-orange-800})") !important;
+  }
+
+  .mdl-color--orange-800 {
+    background-color: unquote("rgb(#{$palette-orange-800})") !important;
+  }
+
+  .mdl-color-text--orange-900 {
+    color: unquote("rgb(#{$palette-orange-900})") !important;
+  }
+
+  .mdl-color--orange-900 {
+    background-color: unquote("rgb(#{$palette-orange-900})") !important;
+  }
+
+  .mdl-color-text--orange-A100 {
+    color: unquote("rgb(#{$palette-orange-A100})") !important;
+  }
+
+  .mdl-color--orange-A100 {
+    background-color: unquote("rgb(#{$palette-orange-A100})") !important;
+  }
+
+  .mdl-color-text--orange-A200 {
+    color: unquote("rgb(#{$palette-orange-A200})") !important;
+  }
+
+  .mdl-color--orange-A200 {
+    background-color: unquote("rgb(#{$palette-orange-A200})") !important;
+  }
+
+  .mdl-color-text--orange-A400 {
+    color: unquote("rgb(#{$palette-orange-A400})") !important;
+  }
+
+  .mdl-color--orange-A400 {
+    background-color: unquote("rgb(#{$palette-orange-A400})") !important;
+  }
+
+  .mdl-color-text--orange-A700 {
+    color: unquote("rgb(#{$palette-orange-A700})") !important;
+  }
+
+  .mdl-color--orange-A700 {
+    background-color: unquote("rgb(#{$palette-orange-A700})") !important;
+  }
+
+  // Deep Orange
+
+  .mdl-color-text--deep-orange {
+    color: unquote("rgb(#{$palette-deep-orange-500})") !important;
+  }
+
+  .mdl-color--deep-orange {
+    background-color: unquote("rgb(#{$palette-deep-orange-500})") !important;
+  }
+
+  .mdl-color-text--deep-orange-50 {
+    color: unquote("rgb(#{$palette-deep-orange-50})") !important;
+  }
+
+  .mdl-color--deep-orange-50 {
+    background-color: unquote("rgb(#{$palette-deep-orange-50})") !important;
+  }
+
+  .mdl-color-text--deep-orange-100 {
+    color: unquote("rgb(#{$palette-deep-orange-100})") !important;
+  }
+
+  .mdl-color--deep-orange-100 {
+    background-color: unquote("rgb(#{$palette-deep-orange-100})") !important;
+  }
+
+  .mdl-color-text--deep-orange-200 {
+    color: unquote("rgb(#{$palette-deep-orange-200})") !important;
+  }
+
+  .mdl-color--deep-orange-200 {
+    background-color: unquote("rgb(#{$palette-deep-orange-200})") !important;
+  }
+
+  .mdl-color-text--deep-orange-300 {
+    color: unquote("rgb(#{$palette-deep-orange-300})") !important;
+  }
+
+  .mdl-color--deep-orange-300 {
+    background-color: unquote("rgb(#{$palette-deep-orange-300})") !important;
+  }
+
+  .mdl-color-text--deep-orange-400 {
+    color: unquote("rgb(#{$palette-deep-orange-400})") !important;
+  }
+
+  .mdl-color--deep-orange-400 {
+    background-color: unquote("rgb(#{$palette-deep-orange-400})") !important;
+  }
+
+  .mdl-color-text--deep-orange-500 {
+    color: unquote("rgb(#{$palette-deep-orange-500})") !important;
+  }
+
+  .mdl-color--deep-orange-500 {
+    background-color: unquote("rgb(#{$palette-deep-orange-500})") !important;
+  }
+
+  .mdl-color-text--deep-orange-600 {
+    color: unquote("rgb(#{$palette-deep-orange-600})") !important;
+  }
+
+  .mdl-color--deep-orange-600 {
+    background-color: unquote("rgb(#{$palette-deep-orange-600})") !important;
+  }
+
+  .mdl-color-text--deep-orange-700 {
+    color: unquote("rgb(#{$palette-deep-orange-700})") !important;
+  }
+
+  .mdl-color--deep-orange-700 {
+    background-color: unquote("rgb(#{$palette-deep-orange-700})") !important;
+  }
+
+  .mdl-color-text--deep-orange-800 {
+    color: unquote("rgb(#{$palette-deep-orange-800})") !important;
+  }
+
+  .mdl-color--deep-orange-800 {
+    background-color: unquote("rgb(#{$palette-deep-orange-800})") !important;
+  }
+
+  .mdl-color-text--deep-orange-900 {
+    color: unquote("rgb(#{$palette-deep-orange-900})") !important;
+  }
+
+  .mdl-color--deep-orange-900 {
+    background-color: unquote("rgb(#{$palette-deep-orange-900})") !important;
+  }
+
+  .mdl-color-text--deep-orange-A100 {
+    color: unquote("rgb(#{$palette-deep-orange-A100})") !important;
+  }
+
+  .mdl-color--deep-orange-A100 {
+    background-color: unquote("rgb(#{$palette-deep-orange-A100})") !important;
+  }
+
+  .mdl-color-text--deep-orange-A200 {
+    color: unquote("rgb(#{$palette-deep-orange-A200})") !important;
+  }
+
+  .mdl-color--deep-orange-A200 {
+    background-color: unquote("rgb(#{$palette-deep-orange-A200})") !important;
+  }
+
+  .mdl-color-text--deep-orange-A400 {
+    color: unquote("rgb(#{$palette-deep-orange-A400})") !important;
+  }
+
+  .mdl-color--deep-orange-A400 {
+    background-color: unquote("rgb(#{$palette-deep-orange-A400})") !important;
+  }
+
+  .mdl-color-text--deep-orange-A700 {
+    color: unquote("rgb(#{$palette-deep-orange-A700})") !important;
+  }
+
+  .mdl-color--deep-orange-A700 {
+    background-color: unquote("rgb(#{$palette-deep-orange-A700})") !important;
+  }
+
+  // Brown
+
+  .mdl-color-text--brown {
+    color: unquote("rgb(#{$palette-brown-500})") !important;
+  }
+
+  .mdl-color--brown {
+    background-color: unquote("rgb(#{$palette-brown-500})") !important;
+  }
+
+  .mdl-color-text--brown-50 {
+    color: unquote("rgb(#{$palette-brown-50})") !important;
+  }
+
+  .mdl-color--brown-50 {
+    background-color: unquote("rgb(#{$palette-brown-50})") !important;
+  }
+
+  .mdl-color-text--brown-100 {
+    color: unquote("rgb(#{$palette-brown-100})") !important;
+  }
+
+  .mdl-color--brown-100 {
+    background-color: unquote("rgb(#{$palette-brown-100})") !important;
+  }
+
+  .mdl-color-text--brown-200 {
+    color: unquote("rgb(#{$palette-brown-200})") !important;
+  }
+
+  .mdl-color--brown-200 {
+    background-color: unquote("rgb(#{$palette-brown-200})") !important;
+  }
+
+  .mdl-color-text--brown-300 {
+    color: unquote("rgb(#{$palette-brown-300})") !important;
+  }
+
+  .mdl-color--brown-300 {
+    background-color: unquote("rgb(#{$palette-brown-300})") !important;
+  }
+
+  .mdl-color-text--brown-400 {
+    color: unquote("rgb(#{$palette-brown-400})") !important;
+  }
+
+  .mdl-color--brown-400 {
+    background-color: unquote("rgb(#{$palette-brown-400})") !important;
+  }
+
+  .mdl-color-text--brown-500 {
+    color: unquote("rgb(#{$palette-brown-500})") !important;
+  }
+
+  .mdl-color--brown-500 {
+    background-color: unquote("rgb(#{$palette-brown-500})") !important;
+  }
+
+  .mdl-color-text--brown-600 {
+    color: unquote("rgb(#{$palette-brown-600})") !important;
+  }
+
+  .mdl-color--brown-600 {
+    background-color: unquote("rgb(#{$palette-brown-600})") !important;
+  }
+
+  .mdl-color-text--brown-700 {
+    color: unquote("rgb(#{$palette-brown-700})") !important;
+  }
+
+  .mdl-color--brown-700 {
+    background-color: unquote("rgb(#{$palette-brown-700})") !important;
+  }
+
+  .mdl-color-text--brown-800 {
+    color: unquote("rgb(#{$palette-brown-800})") !important;
+  }
+
+  .mdl-color--brown-800 {
+    background-color: unquote("rgb(#{$palette-brown-800})") !important;
+  }
+
+  .mdl-color-text--brown-900 {
+    color: unquote("rgb(#{$palette-brown-900})") !important;
+  }
+
+  .mdl-color--brown-900 {
+    background-color: unquote("rgb(#{$palette-brown-900})") !important;
+  }
+
+  // Grey
+
+  .mdl-color-text--grey {
+    color: unquote("rgb(#{$palette-grey-500})") !important;
+  }
+
+  .mdl-color--grey {
+    background-color: unquote("rgb(#{$palette-grey-500})") !important;
+  }
+
+  .mdl-color-text--grey-50 {
+    color: unquote("rgb(#{$palette-grey-50})") !important;
+  }
+
+  .mdl-color--grey-50 {
+    background-color: unquote("rgb(#{$palette-grey-50})") !important;
+  }
+
+  .mdl-color-text--grey-100 {
+    color: unquote("rgb(#{$palette-grey-100})") !important;
+  }
+
+  .mdl-color--grey-100 {
+    background-color: unquote("rgb(#{$palette-grey-100})") !important;
+  }
+
+  .mdl-color-text--grey-200 {
+    color: unquote("rgb(#{$palette-grey-200})") !important;
+  }
+
+  .mdl-color--grey-200 {
+    background-color: unquote("rgb(#{$palette-grey-200})") !important;
+  }
+
+  .mdl-color-text--grey-300 {
+    color: unquote("rgb(#{$palette-grey-300})") !important;
+  }
+
+  .mdl-color--grey-300 {
+    background-color: unquote("rgb(#{$palette-grey-300})") !important;
+  }
+
+  .mdl-color-text--grey-400 {
+    color: unquote("rgb(#{$palette-grey-400})") !important;
+  }
+
+  .mdl-color--grey-400 {
+    background-color: unquote("rgb(#{$palette-grey-400})") !important;
+  }
+
+  .mdl-color-text--grey-500 {
+    color: unquote("rgb(#{$palette-grey-500})") !important;
+  }
+
+  .mdl-color--grey-500 {
+    background-color: unquote("rgb(#{$palette-grey-500})") !important;
+  }
+
+  .mdl-color-text--grey-600 {
+    color: unquote("rgb(#{$palette-grey-600})") !important;
+  }
+
+  .mdl-color--grey-600 {
+    background-color: unquote("rgb(#{$palette-grey-600})") !important;
+  }
+
+  .mdl-color-text--grey-700 {
+    color: unquote("rgb(#{$palette-grey-700})") !important;
+  }
+
+  .mdl-color--grey-700 {
+    background-color: unquote("rgb(#{$palette-grey-700})") !important;
+  }
+
+  .mdl-color-text--grey-800 {
+    color: unquote("rgb(#{$palette-grey-800})") !important;
+  }
+
+  .mdl-color--grey-800 {
+    background-color: unquote("rgb(#{$palette-grey-800})") !important;
+  }
+
+  .mdl-color-text--grey-900 {
+    color: unquote("rgb(#{$palette-grey-900})") !important;
+  }
+
+  .mdl-color--grey-900 {
+    background-color: unquote("rgb(#{$palette-grey-900})") !important;
+  }
+
+  // Blue Grey
+
+  .mdl-color-text--blue-grey {
+    color: unquote("rgb(#{$palette-blue-grey-500})") !important;
+  }
+
+  .mdl-color--blue-grey {
+    background-color: unquote("rgb(#{$palette-blue-grey-500})") !important;
+  }
+
+  .mdl-color-text--blue-grey-50 {
+    color: unquote("rgb(#{$palette-blue-grey-50})") !important;
+  }
+
+  .mdl-color--blue-grey-50 {
+    background-color: unquote("rgb(#{$palette-blue-grey-50})") !important;
+  }
+
+  .mdl-color-text--blue-grey-100 {
+    color: unquote("rgb(#{$palette-blue-grey-100})") !important;
+  }
+
+  .mdl-color--blue-grey-100 {
+    background-color: unquote("rgb(#{$palette-blue-grey-100})") !important;
+  }
+
+  .mdl-color-text--blue-grey-200 {
+    color: unquote("rgb(#{$palette-blue-grey-200})") !important;
+  }
+
+  .mdl-color--blue-grey-200 {
+    background-color: unquote("rgb(#{$palette-blue-grey-200})") !important;
+  }
+
+  .mdl-color-text--blue-grey-300 {
+    color: unquote("rgb(#{$palette-blue-grey-300})") !important;
+  }
+
+  .mdl-color--blue-grey-300 {
+    background-color: unquote("rgb(#{$palette-blue-grey-300})") !important;
+  }
+
+  .mdl-color-text--blue-grey-400 {
+    color: unquote("rgb(#{$palette-blue-grey-400})") !important;
+  }
+
+  .mdl-color--blue-grey-400 {
+    background-color: unquote("rgb(#{$palette-blue-grey-400})") !important;
+  }
+
+  .mdl-color-text--blue-grey-500 {
+    color: unquote("rgb(#{$palette-blue-grey-500})") !important;
+  }
+
+  .mdl-color--blue-grey-500 {
+    background-color: unquote("rgb(#{$palette-blue-grey-500})") !important;
+  }
+
+  .mdl-color-text--blue-grey-600 {
+    color: unquote("rgb(#{$palette-blue-grey-600})") !important;
+  }
+
+  .mdl-color--blue-grey-600 {
+    background-color: unquote("rgb(#{$palette-blue-grey-600})") !important;
+  }
+
+  .mdl-color-text--blue-grey-700 {
+    color: unquote("rgb(#{$palette-blue-grey-700})") !important;
+  }
+
+  .mdl-color--blue-grey-700 {
+    background-color: unquote("rgb(#{$palette-blue-grey-700})") !important;
+  }
+
+  .mdl-color-text--blue-grey-800 {
+    color: unquote("rgb(#{$palette-blue-grey-800})") !important;
+  }
+
+  .mdl-color--blue-grey-800 {
+    background-color: unquote("rgb(#{$palette-blue-grey-800})") !important;
+  }
+
+  .mdl-color-text--blue-grey-900 {
+    color: unquote("rgb(#{$palette-blue-grey-900})") !important;
+  }
+
+  .mdl-color--blue-grey-900 {
+    background-color: unquote("rgb(#{$palette-blue-grey-900})") !important;
+  }
+
+  // Black
+
+  .mdl-color--black {
+    background-color: unquote("rgb(#{$color-black})") !important;
+  }
+
+  .mdl-color-text--black {
+    color: unquote("rgb(#{$color-black})") !important;
+  }
+
+  // White
+
+  .mdl-color--white {
+    background-color: unquote("rgb(#{$color-white})") !important;
+  }
+
+  .mdl-color-text--white {
+    color: unquote("rgb(#{$color-white})") !important;
+  }
+}
+
+// Primary and accent
+
+.mdl-color--primary {
+  background-color: unquote("rgb(#{$color-primary})") !important;
+}
+
+.mdl-color--primary-contrast {
+  background-color: unquote("rgb(#{$color-primary-contrast})") !important;
+}
+
+.mdl-color--primary-dark {
+  background-color: unquote("rgb(#{$color-primary-dark})") !important;
+}
+
+.mdl-color--accent {
+  background-color: unquote("rgb(#{$color-accent})") !important;
+}
+
+.mdl-color--accent-contrast {
+  background-color: unquote("rgb(#{$color-accent-contrast})") !important;
+}
+
+.mdl-color-text--primary {
+  color: unquote("rgb(#{$color-primary})") !important;
+}
+
+.mdl-color-text--primary-contrast {
+  color: unquote("rgb(#{$color-primary-contrast})") !important;
+}
+
+.mdl-color-text--primary-dark {
+  color: unquote("rgb(#{$color-primary-dark})") !important;
+}
+
+.mdl-color-text--accent {
+  color: unquote("rgb(#{$color-accent})") !important;
+}
+
+.mdl-color-text--accent-contrast {
+  color: unquote("rgb(#{$color-accent-contrast})") !important;
+}
diff --git a/node_modules/material-design-lite/src/palette/demo.css b/node_modules/material-design-lite/src/palette/demo.css
new file mode 100644
index 0000000..8370558
--- /dev/null
+++ b/node_modules/material-design-lite/src/palette/demo.css
@@ -0,0 +1,55 @@
+/**
+ * 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-page--palette.demo-preview-block {
+  display: inline-block;
+}
+
+.demo-palette {
+  margin-top: 15px;
+  width: 360px;
+  float: left;
+}
+
+@media screen and (max-width: 360px ) {
+  .demo-palette {
+    width: 272px;
+  }
+}
+
+.demo-palette-color, .demo-palette-heading {
+  max-width: 300px;
+  padding: 15px;
+  color: white;
+}
+
+.demo-palette .demo-palette--dark-text,
+.demo-palette-heading.demo-palette--dark-text .demo-palette-name {
+  color: #000;
+}
+
+.demo-palette-name {
+  padding: 0 0 60px 0;
+}
+
+.demo-palette-single {
+  padding: 15px 15px 25px;
+}
+
+.demo-palette-single .demo-palette-name {
+  padding: 0;
+  float: left;
+}
diff --git a/node_modules/material-design-lite/src/palette/demo.html b/node_modules/material-design-lite/src/palette/demo.html
new file mode 100644
index 0000000..9cf40c5
--- /dev/null
+++ b/node_modules/material-design-lite/src/palette/demo.html
@@ -0,0 +1,417 @@
+    <div class="demo-preview-block demo-page--palette">
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--red-500">
+          <div class="demo-palette-name">Red</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--red-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--red-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--red-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--red-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--red-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--red-500">500</div>
+        <div class="demo-palette-color mdl-color--red-600">600</div>
+        <div class="demo-palette-color mdl-color--red-700">700</div>
+        <div class="demo-palette-color mdl-color--red-800">800</div>
+        <div class="demo-palette-color mdl-color--red-900">900</div>
+        <div class="demo-palette-color mdl-color--red-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--red-A200">A200</div>
+        <div class="demo-palette-color mdl-color--red-A400">A400</div>
+        <div class="demo-palette-color mdl-color--red-A700">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--pink-500">
+          <div class="demo-palette-name">Pink</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--pink-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--pink-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--pink-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--pink-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--pink-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--pink-500">500</div>
+        <div class="demo-palette-color mdl-color--pink-600">600</div>
+        <div class="demo-palette-color mdl-color--pink-700">700</div>
+        <div class="demo-palette-color mdl-color--pink-800">800</div>
+        <div class="demo-palette-color mdl-color--pink-900">900</div>
+        <div class="demo-palette-color mdl-color--pink-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--pink-A200">A200</div>
+        <div class="demo-palette-color mdl-color--pink-A400">A400</div>
+        <div class="demo-palette-color mdl-color--pink-A700">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--purple-500">
+          <div class="demo-palette-name">Purple</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--purple-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--purple-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--purple-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--purple-300">300</div>
+        <div class="demo-palette-color mdl-color--purple-400">400</div>
+        <div class="demo-palette-color mdl-color--purple-500">500</div>
+        <div class="demo-palette-color mdl-color--purple-600">600</div>
+        <div class="demo-palette-color mdl-color--purple-700">700</div>
+        <div class="demo-palette-color mdl-color--purple-800">800</div>
+        <div class="demo-palette-color mdl-color--purple-900">900</div>
+        <div class="demo-palette-color mdl-color--purple-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--purple-A200">A200</div>
+        <div class="demo-palette-color mdl-color--purple-A400">A400</div>
+        <div class="demo-palette-color mdl-color--purple-A700">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--deep-purple-500">
+          <div class="demo-palette-name">Deep Purple</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--deep-purple-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--deep-purple-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--deep-purple-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--deep-purple-300">300</div>
+        <div class="demo-palette-color mdl-color--deep-purple-400">400</div>
+        <div class="demo-palette-color mdl-color--deep-purple-500">500</div>
+        <div class="demo-palette-color mdl-color--deep-purple-600">600</div>
+        <div class="demo-palette-color mdl-color--deep-purple-700">700</div>
+        <div class="demo-palette-color mdl-color--deep-purple-800">800</div>
+        <div class="demo-palette-color mdl-color--deep-purple-900">900</div>
+        <div class="demo-palette-color mdl-color--deep-purple-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--deep-purple-A200">A200</div>
+        <div class="demo-palette-color mdl-color--deep-purple-A400">A400</div>
+        <div class="demo-palette-color mdl-color--deep-purple-A700">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--indigo-500">
+          <div class="demo-palette-name">Indigo</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--indigo-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--indigo-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--indigo-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--indigo-300">300</div>
+        <div class="demo-palette-color mdl-color--indigo-400">400</div>
+        <div class="demo-palette-color mdl-color--indigo-500">500</div>
+        <div class="demo-palette-color mdl-color--indigo-600">600</div>
+        <div class="demo-palette-color mdl-color--indigo-700">700</div>
+        <div class="demo-palette-color mdl-color--indigo-800">800</div>
+        <div class="demo-palette-color mdl-color--indigo-900">900</div>
+        <div class="demo-palette-color mdl-color--indigo-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--indigo-A200">A200</div>
+        <div class="demo-palette-color mdl-color--indigo-A400">A400</div>
+        <div class="demo-palette-color mdl-color--indigo-A700">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--blue-500">
+          <div class="demo-palette-name">Blue</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--blue-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--blue-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--blue-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--blue-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--blue-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--blue-500">500</div>
+        <div class="demo-palette-color mdl-color--blue-600">600</div>
+        <div class="demo-palette-color mdl-color--blue-700">700</div>
+        <div class="demo-palette-color mdl-color--blue-800">800</div>
+        <div class="demo-palette-color mdl-color--blue-900">900</div>
+        <div class="demo-palette-color mdl-color--blue-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--blue-A200">A200</div>
+        <div class="demo-palette-color mdl-color--blue-A400">A400</div>
+        <div class="demo-palette-color mdl-color--blue-A700">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--light-blue-500">
+          <div class="demo-palette-name">Light Blue</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--light-blue-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--light-blue-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--light-blue-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--light-blue-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--light-blue-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--light-blue-500">500</div>
+        <div class="demo-palette-color mdl-color--light-blue-600">600</div>
+        <div class="demo-palette-color mdl-color--light-blue-700">700</div>
+        <div class="demo-palette-color mdl-color--light-blue-800">800</div>
+        <div class="demo-palette-color mdl-color--light-blue-900">900</div>
+        <div class="demo-palette-color mdl-color--light-blue-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--light-blue-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--light-blue-A400 demo-palette--dark-text">A400</div>
+        <div class="demo-palette-color mdl-color--light-blue-A700">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--cyan-500">
+          <div class="demo-palette-name">Cyan</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--cyan-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--cyan-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--cyan-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--cyan-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--cyan-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--cyan-500">500</div>
+        <div class="demo-palette-color mdl-color--cyan-600">600</div>
+        <div class="demo-palette-color mdl-color--cyan-700">700</div>
+        <div class="demo-palette-color mdl-color--cyan-800">800</div>
+        <div class="demo-palette-color mdl-color--cyan-900">900</div>
+        <div class="demo-palette-color mdl-color--cyan-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--cyan-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--cyan-A400 demo-palette--dark-text">A400</div>
+        <div class="demo-palette-color mdl-color--cyan-A700 demo-palette--dark-text">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--teal-500">
+          <div class="demo-palette-name">Teal</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--teal-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--teal-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--teal-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--teal-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--teal-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--teal-500">500</div>
+        <div class="demo-palette-color mdl-color--teal-600">600</div>
+        <div class="demo-palette-color mdl-color--teal-700">700</div>
+        <div class="demo-palette-color mdl-color--teal-800">800</div>
+        <div class="demo-palette-color mdl-color--teal-900">900</div>
+        <div class="demo-palette-color mdl-color--teal-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--teal-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--teal-A400 demo-palette--dark-text">A400</div>
+        <div class="demo-palette-color mdl-color--teal-A700 demo-palette--dark-text">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--green-500">
+          <div class="demo-palette-name">Green</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--green-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--green-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--green-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--green-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--green-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--green-500">500</div>
+        <div class="demo-palette-color mdl-color--green-600">600</div>
+        <div class="demo-palette-color mdl-color--green-700">700</div>
+        <div class="demo-palette-color mdl-color--green-800">800</div>
+        <div class="demo-palette-color mdl-color--green-900">900</div>
+        <div class="demo-palette-color mdl-color--green-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--green-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--green-A400 demo-palette--dark-text">A400</div>
+        <div class="demo-palette-color mdl-color--green-A700 demo-palette--dark-text">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--light-green-500">
+          <div class="demo-palette-name">Light Green</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--light-green-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--light-green-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--light-green-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--light-green-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--light-green-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--light-green-500 demo-palette--dark-text">500</div>
+        <div class="demo-palette-color mdl-color--light-green-600 demo-palette--dark-text">600</div>
+        <div class="demo-palette-color mdl-color--light-green-700 demo-palette--dark-text">700</div>
+        <div class="demo-palette-color mdl-color--light-green-800">800</div>
+        <div class="demo-palette-color mdl-color--light-green-900">900</div>
+        <div class="demo-palette-color mdl-color--light-green-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--light-green-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--light-green-A400 demo-palette--dark-text">A400</div>
+        <div class="demo-palette-color mdl-color--light-green-A700 demo-palette--dark-text">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--lime-500 demo-palette--dark-text">
+          <div class="demo-palette-name">Lime</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--lime-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--lime-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--lime-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--lime-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--lime-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--lime-500 demo-palette--dark-text">500</div>
+        <div class="demo-palette-color mdl-color--lime-600 demo-palette--dark-text">600</div>
+        <div class="demo-palette-color mdl-color--lime-700 demo-palette--dark-text">700</div>
+        <div class="demo-palette-color mdl-color--lime-800 demo-palette--dark-text">800</div>
+        <div class="demo-palette-color mdl-color--lime-900">900</div>
+        <div class="demo-palette-color mdl-color--lime-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--lime-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--lime-A400 demo-palette--dark-text">A400</div>
+        <div class="demo-palette-color mdl-color--lime-A700 demo-palette--dark-text">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--yellow-500 demo-palette--dark-text">
+          <div class="demo-palette-name">Yellow</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--yellow-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--yellow-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--yellow-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--yellow-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--yellow-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--yellow-500 demo-palette--dark-text">500</div>
+        <div class="demo-palette-color mdl-color--yellow-600 demo-palette--dark-text">600</div>
+        <div class="demo-palette-color mdl-color--yellow-700 demo-palette--dark-text">700</div>
+        <div class="demo-palette-color mdl-color--yellow-800 demo-palette--dark-text">800</div>
+        <div class="demo-palette-color mdl-color--yellow-900 demo-palette--dark-text">900</div>
+        <div class="demo-palette-color mdl-color--yellow-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--yellow-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--yellow-A400 demo-palette--dark-text">A400</div>
+        <div class="demo-palette-color mdl-color--yellow-A700 demo-palette--dark-text">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--amber-500 demo-palette--dark-text">
+          <div class="demo-palette-name">Amber</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--amber-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--amber-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--amber-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--amber-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--amber-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--amber-500 demo-palette--dark-text">500</div>
+        <div class="demo-palette-color mdl-color--amber-600 demo-palette--dark-text">600</div>
+        <div class="demo-palette-color mdl-color--amber-700 demo-palette--dark-text">700</div>
+        <div class="demo-palette-color mdl-color--amber-800 demo-palette--dark-text">800</div>
+        <div class="demo-palette-color mdl-color--amber-900 demo-palette--dark-text">900</div>
+        <div class="demo-palette-color mdl-color--amber-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--amber-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--amber-A400 demo-palette--dark-text">A400</div>
+        <div class="demo-palette-color mdl-color--amber-A700 demo-palette--dark-text">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--orange-500 demo-palette--dark-text">
+          <div class="demo-palette-name">Orange</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--orange-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--orange-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--orange-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--orange-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--orange-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--orange-500 demo-palette--dark-text">500</div>
+        <div class="demo-palette-color mdl-color--orange-600 demo-palette--dark-text">600</div>
+        <div class="demo-palette-color mdl-color--orange-700 demo-palette--dark-text">700</div>
+        <div class="demo-palette-color mdl-color--orange-800">800</div>
+        <div class="demo-palette-color mdl-color--orange-900">900</div>
+        <div class="demo-palette-color mdl-color--orange-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--orange-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--orange-A400 demo-palette--dark-text">A400</div>
+        <div class="demo-palette-color mdl-color--orange-A700 demo-palette--dark-text">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--deep-orange-500">
+          <div class="demo-palette-name">Deep Orange</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--deep-orange-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--deep-orange-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--deep-orange-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--deep-orange-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--deep-orange-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--deep-orange-500">500</div>
+        <div class="demo-palette-color mdl-color--deep-orange-600">600</div>
+        <div class="demo-palette-color mdl-color--deep-orange-700">700</div>
+        <div class="demo-palette-color mdl-color--deep-orange-800">800</div>
+        <div class="demo-palette-color mdl-color--deep-orange-900">900</div>
+        <div class="demo-palette-color mdl-color--deep-orange-A100 demo-palette--dark-text">A100</div>
+        <div class="demo-palette-color mdl-color--deep-orange-A200 demo-palette--dark-text">A200</div>
+        <div class="demo-palette-color mdl-color--deep-orange-A400">A400</div>
+        <div class="demo-palette-color mdl-color--deep-orange-A700">A700</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--brown-500">
+          <div class="demo-palette-name">Brown</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--brown-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--brown-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--brown-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--brown-300">300</div>
+        <div class="demo-palette-color mdl-color--brown-400">400</div>
+        <div class="demo-palette-color mdl-color--brown-500">500</div>
+        <div class="demo-palette-color mdl-color--brown-600">600</div>
+        <div class="demo-palette-color mdl-color--brown-700">700</div>
+        <div class="demo-palette-color mdl-color--brown-800">800</div>
+        <div class="demo-palette-color mdl-color--brown-900">900</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--grey-500 demo-palette--dark-text">
+          <div class="demo-palette-name">Grey</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--grey-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--grey-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--grey-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--grey-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--grey-400 demo-palette--dark-text">400</div>
+        <div class="demo-palette-color mdl-color--grey-500 demo-palette--dark-text">500</div>
+        <div class="demo-palette-color mdl-color--grey-600">600</div>
+        <div class="demo-palette-color mdl-color--grey-700">700</div>
+        <div class="demo-palette-color mdl-color--grey-800">800</div>
+        <div class="demo-palette-color mdl-color--grey-900">900</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading mdl-color--blue-grey-500">
+          <div class="demo-palette-name">Blue Grey</div>
+
+          500
+        </div>
+        <div class="demo-palette-color mdl-color--blue-grey-50 demo-palette--dark-text">50</div>
+        <div class="demo-palette-color mdl-color--blue-grey-100 demo-palette--dark-text">100</div>
+        <div class="demo-palette-color mdl-color--blue-grey-200 demo-palette--dark-text">200</div>
+        <div class="demo-palette-color mdl-color--blue-grey-300 demo-palette--dark-text">300</div>
+        <div class="demo-palette-color mdl-color--blue-grey-400">400</div>
+        <div class="demo-palette-color mdl-color--blue-grey-500">500</div>
+        <div class="demo-palette-color mdl-color--blue-grey-600">600</div>
+        <div class="demo-palette-color mdl-color--blue-grey-700">700</div>
+        <div class="demo-palette-color mdl-color--blue-grey-800">800</div>
+        <div class="demo-palette-color mdl-color--blue-grey-900">900</div>
+      </div>
+
+      <div class="demo-palette">
+        <div class="demo-palette-heading demo-palette-single mdl-color--black">
+          <div class="demo-palette-name">Black</div>
+        </div>
+        <div class="demo-palette-heading demo-palette-single mdl-color--white demo-palette--dark-text">
+          <div class="demo-palette-name">White</div>
+        </div>
+      </div>
+
+    </div>
diff --git a/node_modules/material-design-lite/src/progress/README.md b/node_modules/material-design-lite/src/progress/README.md
new file mode 100755
index 0000000..0fe18f0
--- /dev/null
+++ b/node_modules/material-design-lite/src/progress/README.md
@@ -0,0 +1,42 @@
+## Introduction
+
+The Material Design Lite (MDL) **progress** component is a visual indicator of background activity in a web page or application. A progress indicator consists of a (typically) horizontal bar containing some animation that conveys a sense of motion. While some progress devices indicate an approximate or specific percentage of completion, the MDL progress component simply communicates the fact that an activity is ongoing and is not yet complete.
+
+Progress indicators are an established but non-standardized feature in user interfaces, and provide users with a visual clue to an application's status. Their design and use is therefore an important factor in the overall user experience. See the progress component's [Material Design specifications page](http://www.google.com/design/spec/components/progress-activity.html) for details.
+
+### To include an MDL **progress** component:
+
+&nbsp;1. Code a `<div>` element. Include any desired attributes and values, such as an id or width &mdash; typically done using external CSS rather than the inline `style` attribute as shown here.
+```html
+<div id="prog1" style="width:250px"></div>
+```
+&nbsp;2. Add one or more MDL classes, separated by spaces, to the div using the `class` attribute.
+```html
+<div id="prog1" style="width:250px" class="mdl-js-progress"></div>
+```
+
+The progress component is ready for use.
+
+#### Examples
+
+A static (non-animated) progress indicator.
+```html
+<div id="progstatic" style="width:250px" class="mdl-js-progress"></div>
+```
+
+An active (animated) progress indicator.
+```html
+<div id="progactive" style="width:200px" class="mdl-js-progress
+ mdl-progress--indeterminate"></div>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the progress indicator. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-js-progress` | Assigns basic MDL behavior to progress indicator | Required |
+| `mdl-progress--indeterminate` | Applies animation effect | Optional |
+
+> Note: `mdl-progress__intermediate` does exist within the codebase. It is deprecated since the name is not in BEM alignment. It will be removed in 2.0.
diff --git a/node_modules/material-design-lite/src/progress/_progress.scss b/node_modules/material-design-lite/src/progress/_progress.scss
new file mode 100644
index 0000000..3d384a8
--- /dev/null
+++ b/node_modules/material-design-lite/src/progress/_progress.scss
@@ -0,0 +1,120 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+.mdl-progress {
+  display: block;
+  position: relative;
+  height: $bar-height;
+  width: 500px;
+  max-width: 100%;
+}
+
+.mdl-progress > .bar {
+  display: block;
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  width: 0%;
+  transition: width 0.2s $animation-curve-default;
+}
+
+.mdl-progress > .progressbar {
+  background-color: $progress-main-color;
+  z-index: 1;
+  left: 0;
+}
+
+.mdl-progress > .bufferbar {
+  background-image: linear-gradient(to right, $progress-secondary-color, $progress-secondary-color),
+    linear-gradient(to right, $progress-main-color, $progress-main-color);
+  z-index: 0;
+  left: 0;
+}
+
+.mdl-progress > .auxbar {
+  right: 0;
+}
+
+// Webkit only
+@supports (-webkit-appearance:none) {
+  .mdl-progress:not(.mdl-progress--indeterminate):not(.mdl-progress--indeterminate) > .auxbar,
+  .mdl-progress:not(.mdl-progress__indeterminate):not(.mdl-progress__indeterminate) > .auxbar {
+    background-image: linear-gradient(to right, $progress-secondary-color, $progress-secondary-color),
+      linear-gradient(to right, $progress-main-color, $progress-main-color);
+    mask: url('#{$progress-image-path}/buffer.svg?embed');
+  }
+}
+
+.mdl-progress:not(.mdl-progress--indeterminate) > .auxbar,
+.mdl-progress:not(.mdl-progress__indeterminate) > .auxbar {
+  background-image: linear-gradient(to right, $progress-fallback-buffer-color, $progress-fallback-buffer-color),
+    linear-gradient(to right, $progress-main-color, $progress-main-color);
+}
+
+.mdl-progress.mdl-progress--indeterminate > .bar1,
+.mdl-progress.mdl-progress__indeterminate > .bar1 {
+  background-color: $progress-main-color;
+  animation-name: indeterminate1;
+  animation-duration: 2s;
+  animation-iteration-count: infinite;
+  animation-timing-function: linear;
+}
+
+.mdl-progress.mdl-progress--indeterminate > .bar3,
+.mdl-progress.mdl-progress__indeterminate > .bar3 {
+  background-image: none;
+  background-color: $progress-main-color;
+  animation-name: indeterminate2;
+  animation-duration: 2s;
+  animation-iteration-count: infinite;
+  animation-timing-function: linear;
+}
+
+@keyframes indeterminate1 {
+  0% {
+    left: 0%;
+    width: 0%;
+  }
+  50% {
+    left: 25%;
+    width: 75%;
+  }
+  75% {
+    left: 100%;
+    width: 0%;
+  }
+}
+
+@keyframes indeterminate2 {
+  0% {
+    left: 0%;
+    width: 0%;
+  }
+  50% {
+    left: 0%;
+    width: 0%;
+  }
+  75% {
+    left: 0%;
+    width: 25%;
+  }
+  100% {
+    left: 100%;
+    width: 0%;
+  }
+}
diff --git a/node_modules/material-design-lite/src/progress/progress.js b/node_modules/material-design-lite/src/progress/progress.js
new file mode 100644
index 0000000..442e2d6
--- /dev/null
+++ b/node_modules/material-design-lite/src/progress/progress.js
@@ -0,0 +1,123 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Progress MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialProgress = function MaterialProgress(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialProgress'] = MaterialProgress;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialProgress.prototype.Constant_ = {
+  };
+
+  /**
+   * 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
+   */
+  MaterialProgress.prototype.CssClasses_ = {
+    INDETERMINATE_CLASS: 'mdl-progress__indeterminate'
+  };
+
+  /**
+   * Set the current progress of the progressbar.
+   *
+   * @param {number} p Percentage of the progress (0-100)
+   * @public
+   */
+  MaterialProgress.prototype.setProgress = function(p) {
+    if (this.element_.classList.contains(this.CssClasses_.INDETERMINATE_CLASS)) {
+      return;
+    }
+
+    this.progressbar_.style.width = p + '%';
+  };
+  MaterialProgress.prototype['setProgress'] =
+      MaterialProgress.prototype.setProgress;
+
+  /**
+   * Set the current progress of the buffer.
+   *
+   * @param {number} p Percentage of the buffer (0-100)
+   * @public
+   */
+  MaterialProgress.prototype.setBuffer = function(p) {
+    this.bufferbar_.style.width = p + '%';
+    this.auxbar_.style.width = (100 - p) + '%';
+  };
+  MaterialProgress.prototype['setBuffer'] =
+      MaterialProgress.prototype.setBuffer;
+
+  /**
+   * Initialize element.
+   */
+  MaterialProgress.prototype.init = function() {
+    if (this.element_) {
+      var el = document.createElement('div');
+      el.className = 'progressbar bar bar1';
+      this.element_.appendChild(el);
+      this.progressbar_ = el;
+
+      el = document.createElement('div');
+      el.className = 'bufferbar bar bar2';
+      this.element_.appendChild(el);
+      this.bufferbar_ = el;
+
+      el = document.createElement('div');
+      el.className = 'auxbar bar bar3';
+      this.element_.appendChild(el);
+      this.auxbar_ = el;
+
+      this.progressbar_.style.width = '0%';
+      this.bufferbar_.style.width = '100%';
+      this.auxbar_.style.width = '0%';
+
+      this.element_.classList.add('is-upgraded');
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialProgress,
+    classAsString: 'MaterialProgress',
+    cssClass: 'mdl-js-progress',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/progress/snippets/progress-buffering-demo.html b/node_modules/material-design-lite/src/progress/snippets/progress-buffering-demo.html
new file mode 100644
index 0000000..1fa26ac
--- /dev/null
+++ b/node_modules/material-design-lite/src/progress/snippets/progress-buffering-demo.html
@@ -0,0 +1,8 @@
+<style>
+  .demo-progress__progress-buffering .mdl-progress {
+    width: 50vw;
+    max-width: 260px;
+  }
+</style>
+
+{% include "progress-buffering.html" %}
diff --git a/node_modules/material-design-lite/src/progress/snippets/progress-buffering.html b/node_modules/material-design-lite/src/progress/snippets/progress-buffering.html
new file mode 100644
index 0000000..79d5166
--- /dev/null
+++ b/node_modules/material-design-lite/src/progress/snippets/progress-buffering.html
@@ -0,0 +1,8 @@
+<!-- MDL Progress Bar with Buffering -->
+<div id="p3" class="mdl-progress mdl-js-progress"></div>
+<script>
+  document.querySelector('#p3').addEventListener('mdl-componentupgraded', function() {
+    this.MaterialProgress.setProgress(33);
+    this.MaterialProgress.setBuffer(87);
+  });
+</script>
diff --git a/node_modules/material-design-lite/src/progress/snippets/progress-default-demo.html b/node_modules/material-design-lite/src/progress/snippets/progress-default-demo.html
new file mode 100644
index 0000000..cd73609
--- /dev/null
+++ b/node_modules/material-design-lite/src/progress/snippets/progress-default-demo.html
@@ -0,0 +1,7 @@
+<style>
+  .demo-progress__progress-default .mdl-progress {
+    width: 50vw;
+    max-width: 260px;
+  }
+</style>
+{% include "progress-default.html" %}
diff --git a/node_modules/material-design-lite/src/progress/snippets/progress-default.html b/node_modules/material-design-lite/src/progress/snippets/progress-default.html
new file mode 100644
index 0000000..79d5c38
--- /dev/null
+++ b/node_modules/material-design-lite/src/progress/snippets/progress-default.html
@@ -0,0 +1,7 @@
+<!-- Simple MDL Progress Bar -->
+<div id="p1" class="mdl-progress mdl-js-progress"></div>
+<script>
+  document.querySelector('#p1').addEventListener('mdl-componentupgraded', function() {
+    this.MaterialProgress.setProgress(44);
+  });
+</script>
diff --git a/node_modules/material-design-lite/src/progress/snippets/progress-indeterminate-demo.html b/node_modules/material-design-lite/src/progress/snippets/progress-indeterminate-demo.html
new file mode 100644
index 0000000..8360d5b
--- /dev/null
+++ b/node_modules/material-design-lite/src/progress/snippets/progress-indeterminate-demo.html
@@ -0,0 +1,7 @@
+<style>
+  .demo-progress__progress-indeterminate .mdl-progress {
+    width: 50vw;
+    max-width: 260px;
+  }
+</style>
+{% include "progress-indeterminate.html" %}
diff --git a/node_modules/material-design-lite/src/progress/snippets/progress-indeterminate.html b/node_modules/material-design-lite/src/progress/snippets/progress-indeterminate.html
new file mode 100644
index 0000000..e0e21c7
--- /dev/null
+++ b/node_modules/material-design-lite/src/progress/snippets/progress-indeterminate.html
@@ -0,0 +1,2 @@
+<!-- MDL Progress Bar with Indeterminate Progress -->
+<div id="p2" class="mdl-progress mdl-js-progress mdl-progress__indeterminate"></div>
diff --git a/node_modules/material-design-lite/src/radio/README.md b/node_modules/material-design-lite/src/radio/README.md
new file mode 100755
index 0000000..c7781bc
--- /dev/null
+++ b/node_modules/material-design-lite/src/radio/README.md
@@ -0,0 +1,76 @@
+## Introduction
+
+The Material Design Lite (MDL) **radio** component is an enhanced version of the standard HTML `<input type="radio">`, or "radio button" element. A radio button consists of a small circle and, typically, text that clearly communicates a condition that will be set when the user clicks or touches it. Radio buttons always appear in groups of two or more and, while they can be individually selected, can only be deselected by selecting a different radio button in the same group (which deselects all other radio buttons in the group). The MDL radio component allows you to add display and click effects.
+
+Radio buttons are a common feature of most user interfaces, regardless of a site's content or function. Their design and use is therefore an important factor in the overall user experience. See the radio component's [Material Design specifications page](https://www.google.com/design/spec/components/selection-controls.html#selection-controls-radio-button) for details.
+
+The enhanced radio component has a more vivid visual look than a standard radio button, and may be initially or programmatically *disabled*.
+
+### To include an MDL **radio** component:
+
+&nbsp;1. Code a `<label>` element and give it a `for` attribute whose value is the unique id of the radio button it will contain. The `for` attribute is optional when the `<input>` element is contained inside the `<label>` element, but is recommended for clarity.
+```html
+<label for="radio1">
+...
+</label>
+```
+&nbsp;2. Inside the label, code an `<input>` element and give it a `type` attribute whose value is `"radio"`. Also give it an `id` attribute whose value matches the label's `for` attribute value, and a `name` attribute whose value identifies the radio button group. Optionally, give it a `value` attribute whose value provides some information about the radio button for scripting purposes.
+```html
+<label for="radio1">
+  <input type="radio" id="radio1" name="flash" value="on">
+</label>
+```
+&nbsp;3. Also inside the label, after the radio button, code a `<span>` element containing the radio button's text caption.
+```html
+<label for="radio1">
+  <input type="radio" id="radio1" name="flash" value="on">
+  <span>Always on</span>
+</label>
+```
+&nbsp;4. Add one or more MDL classes, separated by spaces, to the label, checkbox, and caption using the `class` attribute.
+```html
+<label for="radio1" class="mdl-radio mdl-js-radio">
+  <input type="radio" id="radio1" name="flash" value="on" class="mdl-radio__button">
+  <span class="mdl-radio__label">Always on</span>
+</label>
+```
+&nbsp;5. Repeat steps 1 through 4 for the other radio components in the group. For each one:
+* on the `label` element, specify a unique `for` attribute value
+* on the `input` element, specify an `id` attribute value that matches its `label` element's `for` attribute value
+* on the `input` element, specify the same `name` attribute value for all radio components in the group
+* optionally, on the `input` element, specify a unique `value` attribute value
+
+The radio components are ready for use.
+
+#### Example
+
+A group of radio buttons to control a camera's flash setting.
+```html
+<label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="flash1">
+  <input checked class="mdl-radio__button" id="flash1" name="flash" type="radio"
+   value="on">
+  <span class="mdl-radio__label">Always on</span>
+</label>
+<label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="flash2">
+  <input class="mdl-radio__button" id="flash2" name="flash" type="radio" value="off">
+  <span class="mdl-radio__label">Always off</span>
+</label>
+<label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="flash3">
+  <input class="mdl-radio__button" id="flash3" name="flash" type="radio" value="auto">
+  <span class="mdl-radio__label">Automatic</span>
+</label>
+```
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the radio button. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-radio` | Defines label as an MDL component | Required on label element|
+| `mdl-js-radio` | Assigns basic MDL behavior to label | Required on label element |
+| `mdl-radio__button` | Applies basic MDL behavior to radio | Required on input element (radio button) |
+| `mdl-radio__label` | Applies basic MDL behavior to caption | Required on span element (caption) |
+| `mdl-js-ripple-effect` | Applies *ripple* click effect | Optional; goes on label element, not input element (radio button) |
+
+>**Note:** Disabled versions of all the available radio button types are provided, and are invoked with the standard HTML boolean attribute `disabled`. `<input type="radio" id="radio5" name="flash" class="mdl-radio__button" disabled>`
+>This attribute may be added or removed programmatically via scripting.
diff --git a/node_modules/material-design-lite/src/radio/_radio.scss b/node_modules/material-design-lite/src/radio/_radio.scss
new file mode 100644
index 0000000..e226826
--- /dev/null
+++ b/node_modules/material-design-lite/src/radio/_radio.scss
@@ -0,0 +1,163 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-radio {
+  position: relative;
+
+  font-size: $radio-label-font-size;
+  line-height: $radio-label-height;
+
+  display: inline-block;
+
+  vertical-align: middle;
+
+  box-sizing: border-box;
+  height: $radio-label-height;
+  margin: 0;
+  padding-left: 0;
+
+  &.is-upgraded {
+    padding-left: $radio-button-size + $radio-padding;
+  }
+}
+
+.mdl-radio__button {
+  line-height: $radio-label-height;
+
+  .mdl-radio.is-upgraded & {
+    // Hide input element, while still making it respond to focus.
+    position: absolute;
+    width: 0;
+    height: 0;
+    margin: 0;
+    padding: 0;
+    opacity: 0;
+    -ms-appearance: none;
+    -moz-appearance: none;
+    -webkit-appearance: none;
+    appearance: none;
+    border: none;
+  }
+}
+
+.mdl-radio__outer-circle {
+  position: absolute;
+  top: $radio-top-offset;
+  left: 0;
+
+  display: inline-block;
+
+  box-sizing: border-box;
+  width: $radio-button-size;
+  height: $radio-button-size;
+  margin: 0;
+
+  cursor: pointer;
+
+  border: 2px solid $radio-off-color;
+  border-radius: 50%;
+
+  z-index: 2;
+
+  .mdl-radio.is-checked & {
+    border: 2px solid $radio-color;
+  }
+
+  fieldset[disabled] .mdl-radio,
+  .mdl-radio.is-disabled & {
+    border: 2px solid $radio-disabled-color;
+    cursor: auto;
+  }
+}
+
+.mdl-radio__inner-circle {
+  position: absolute;
+  z-index: 1;
+  margin: 0;
+  top: $radio-top-offset + $radio-inner-margin;
+  left: $radio-inner-margin;
+
+  box-sizing: border-box;
+  width: $radio-button-size - ($radio-inner-margin * 2);
+  height: $radio-button-size - ($radio-inner-margin * 2);
+
+  cursor: pointer;
+
+  @include material-animation-default(0.28s);
+  transition-property: transform;
+  transform: scale(0, 0);
+
+  border-radius: 50%;
+  background: $radio-color;
+
+  .mdl-radio.is-checked & {
+    transform: scale(1, 1);
+  }
+
+  fieldset[disabled] .mdl-radio &,
+  .mdl-radio.is-disabled & {
+    background: $radio-disabled-color;
+    cursor: auto;
+  }
+
+  .mdl-radio.is-focused & {
+    box-shadow: 0 0 0px 10px rgba(0, 0, 0, 0.1);
+  }
+}
+
+.mdl-radio__label {
+  cursor: pointer;
+
+  fieldset[disabled] .mdl-radio &,
+  .mdl-radio.is-disabled & {
+    color: $radio-disabled-color;
+    cursor: auto;
+  }
+}
+
+.mdl-radio__ripple-container {
+  position: absolute;
+  z-index: 2;
+  top: -(($radio-ripple-size - $radio-label-height) / 2);
+  left: -(($radio-ripple-size - $radio-button-size) / 2);
+
+  box-sizing: border-box;
+  width: $radio-ripple-size;
+  height: $radio-ripple-size;
+  border-radius: 50%;
+
+  cursor: pointer;
+
+  overflow: hidden;
+  -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
+
+  & .mdl-ripple {
+    background: $radio-color;
+  }
+
+  fieldset[disabled] .mdl-radio &,
+  .mdl-radio.is-disabled & {
+    cursor: auto;
+  }
+
+  fieldset[disabled] .mdl-radio & .mdl-ripple,
+  .mdl-radio.is-disabled & .mdl-ripple {
+    background: transparent;
+  }
+}
diff --git a/node_modules/material-design-lite/src/radio/radio.js b/node_modules/material-design-lite/src/radio/radio.js
new file mode 100644
index 0000000..63c1819
--- /dev/null
+++ b/node_modules/material-design-lite/src/radio/radio.js
@@ -0,0 +1,281 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Radio MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialRadio = function MaterialRadio(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialRadio'] = MaterialRadio;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialRadio.prototype.Constant_ = {
+    TINY_TIMEOUT: 0.001
+  };
+
+  /**
+   * 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
+   */
+  MaterialRadio.prototype.CssClasses_ = {
+    IS_FOCUSED: 'is-focused',
+    IS_DISABLED: 'is-disabled',
+    IS_CHECKED: 'is-checked',
+    IS_UPGRADED: 'is-upgraded',
+    JS_RADIO: 'mdl-js-radio',
+    RADIO_BTN: 'mdl-radio__button',
+    RADIO_OUTER_CIRCLE: 'mdl-radio__outer-circle',
+    RADIO_INNER_CIRCLE: 'mdl-radio__inner-circle',
+    RIPPLE_EFFECT: 'mdl-js-ripple-effect',
+    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',
+    RIPPLE_CONTAINER: 'mdl-radio__ripple-container',
+    RIPPLE_CENTER: 'mdl-ripple--center',
+    RIPPLE: 'mdl-ripple'
+  };
+
+  /**
+   * Handle change of state.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialRadio.prototype.onChange_ = function(event) {
+    // Since other radio buttons don't get change events, we need to look for
+    // them to update their classes.
+    var radios = document.getElementsByClassName(this.CssClasses_.JS_RADIO);
+    for (var i = 0; i < radios.length; i++) {
+      var button = radios[i].querySelector('.' + this.CssClasses_.RADIO_BTN);
+      // Different name == different group, so no point updating those.
+      if (button.getAttribute('name') === this.btnElement_.getAttribute('name')) {
+        if (typeof radios[i]['MaterialRadio'] !== 'undefined') {
+          radios[i]['MaterialRadio'].updateClasses_();
+        }
+      }
+    }
+  };
+
+  /**
+   * Handle focus.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialRadio.prototype.onFocus_ = function(event) {
+    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle lost focus.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialRadio.prototype.onBlur_ = function(event) {
+    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle mouseup.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialRadio.prototype.onMouseup_ = function(event) {
+    this.blur_();
+  };
+
+  /**
+   * Update classes.
+   *
+   * @private
+   */
+  MaterialRadio.prototype.updateClasses_ = function() {
+    this.checkDisabled();
+    this.checkToggleState();
+  };
+
+  /**
+   * Add blur.
+   *
+   * @private
+   */
+  MaterialRadio.prototype.blur_ = function() {
+
+    // TODO: figure out why there's a focus event being fired after our blur,
+    // so that we can avoid this hack.
+    window.setTimeout(function() {
+      this.btnElement_.blur();
+    }.bind(this), /** @type {number} */ (this.Constant_.TINY_TIMEOUT));
+  };
+
+  // Public methods.
+
+  /**
+   * Check the components disabled state.
+   *
+   * @public
+   */
+  MaterialRadio.prototype.checkDisabled = function() {
+    if (this.btnElement_.disabled) {
+      this.element_.classList.add(this.CssClasses_.IS_DISABLED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);
+    }
+  };
+  MaterialRadio.prototype['checkDisabled'] =
+      MaterialRadio.prototype.checkDisabled;
+
+  /**
+   * Check the components toggled state.
+   *
+   * @public
+   */
+  MaterialRadio.prototype.checkToggleState = function() {
+    if (this.btnElement_.checked) {
+      this.element_.classList.add(this.CssClasses_.IS_CHECKED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_CHECKED);
+    }
+  };
+  MaterialRadio.prototype['checkToggleState'] =
+      MaterialRadio.prototype.checkToggleState;
+
+  /**
+   * Disable radio.
+   *
+   * @public
+   */
+  MaterialRadio.prototype.disable = function() {
+    this.btnElement_.disabled = true;
+    this.updateClasses_();
+  };
+  MaterialRadio.prototype['disable'] = MaterialRadio.prototype.disable;
+
+  /**
+   * Enable radio.
+   *
+   * @public
+   */
+  MaterialRadio.prototype.enable = function() {
+    this.btnElement_.disabled = false;
+    this.updateClasses_();
+  };
+  MaterialRadio.prototype['enable'] = MaterialRadio.prototype.enable;
+
+  /**
+   * Check radio.
+   *
+   * @public
+   */
+  MaterialRadio.prototype.check = function() {
+    this.btnElement_.checked = true;
+    this.onChange_(null);
+  };
+  MaterialRadio.prototype['check'] = MaterialRadio.prototype.check;
+
+  /**
+   * Uncheck radio.
+   *
+   * @public
+   */
+  MaterialRadio.prototype.uncheck = function() {
+    this.btnElement_.checked = false;
+    this.onChange_(null);
+  };
+  MaterialRadio.prototype['uncheck'] = MaterialRadio.prototype.uncheck;
+
+  /**
+   * Initialize element.
+   */
+  MaterialRadio.prototype.init = function() {
+    if (this.element_) {
+      this.btnElement_ = this.element_.querySelector('.' +
+          this.CssClasses_.RADIO_BTN);
+
+      this.boundChangeHandler_ = this.onChange_.bind(this);
+      this.boundFocusHandler_ = this.onChange_.bind(this);
+      this.boundBlurHandler_ = this.onBlur_.bind(this);
+      this.boundMouseUpHandler_ = this.onMouseup_.bind(this);
+
+      var outerCircle = document.createElement('span');
+      outerCircle.classList.add(this.CssClasses_.RADIO_OUTER_CIRCLE);
+
+      var innerCircle = document.createElement('span');
+      innerCircle.classList.add(this.CssClasses_.RADIO_INNER_CIRCLE);
+
+      this.element_.appendChild(outerCircle);
+      this.element_.appendChild(innerCircle);
+
+      var rippleContainer;
+      if (this.element_.classList.contains(
+          this.CssClasses_.RIPPLE_EFFECT)) {
+        this.element_.classList.add(
+            this.CssClasses_.RIPPLE_IGNORE_EVENTS);
+        rippleContainer = document.createElement('span');
+        rippleContainer.classList.add(
+            this.CssClasses_.RIPPLE_CONTAINER);
+        rippleContainer.classList.add(this.CssClasses_.RIPPLE_EFFECT);
+        rippleContainer.classList.add(this.CssClasses_.RIPPLE_CENTER);
+        rippleContainer.addEventListener('mouseup', this.boundMouseUpHandler_);
+
+        var ripple = document.createElement('span');
+        ripple.classList.add(this.CssClasses_.RIPPLE);
+
+        rippleContainer.appendChild(ripple);
+        this.element_.appendChild(rippleContainer);
+      }
+
+      this.btnElement_.addEventListener('change', this.boundChangeHandler_);
+      this.btnElement_.addEventListener('focus', this.boundFocusHandler_);
+      this.btnElement_.addEventListener('blur', this.boundBlurHandler_);
+      this.element_.addEventListener('mouseup', this.boundMouseUpHandler_);
+
+      this.updateClasses_();
+      this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialRadio,
+    classAsString: 'MaterialRadio',
+    cssClass: 'mdl-js-radio',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/radio/snippets/radio-off.html b/node_modules/material-design-lite/src/radio/snippets/radio-off.html
new file mode 100644
index 0000000..db347e6
--- /dev/null
+++ b/node_modules/material-design-lite/src/radio/snippets/radio-off.html
@@ -0,0 +1,4 @@
+<label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="option-2">
+  <input type="radio" id="option-2" class="mdl-radio__button" name="options" value="2">
+  <span class="mdl-radio__label">Second</span>
+</label>
diff --git a/node_modules/material-design-lite/src/radio/snippets/radio-on.html b/node_modules/material-design-lite/src/radio/snippets/radio-on.html
new file mode 100644
index 0000000..223f2c6
--- /dev/null
+++ b/node_modules/material-design-lite/src/radio/snippets/radio-on.html
@@ -0,0 +1,4 @@
+<label class="mdl-radio mdl-js-radio mdl-js-ripple-effect" for="option-1">
+  <input type="radio" id="option-1" class="mdl-radio__button" name="options" value="1" checked>
+  <span class="mdl-radio__label">First</span>
+</label>
diff --git a/node_modules/material-design-lite/src/resets/_h5bp.scss b/node_modules/material-design-lite/src/resets/_h5bp.scss
new file mode 100644
index 0000000..e42fe3e
--- /dev/null
+++ b/node_modules/material-design-lite/src/resets/_h5bp.scss
@@ -0,0 +1,289 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+/*
+ * What follows is the result of much research on cross-browser styling.
+ * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
+ * Kroc Camen, and the H5BP dev community and team.
+ */
+
+/* ==========================================================================
+   Base styles: opinionated defaults
+   ========================================================================== */
+
+html {
+    color: $text-color-primary;
+    font-size: 1em;
+    line-height: 1.4;
+}
+
+/*
+ * Remove text-shadow in selection highlight:
+ * https://twitter.com/miketaylr/status/12228805301
+ *
+ * These selection rule sets have to be separate.
+ * Customize the background color to match your design.
+ */
+
+::selection {
+    background: #b3d4fc;
+    text-shadow: none;
+}
+
+/*
+ * A better looking default horizontal rule
+ */
+
+hr {
+    display: block;
+    height: 1px;
+    border: 0;
+    border-top: 1px solid #ccc;
+    margin: 1em 0;
+    padding: 0;
+}
+
+/*
+ * Remove the gap between audio, canvas, iframes,
+ * images, videos and the bottom of their containers:
+ * https://github.com/h5bp/html5-boilerplate/issues/440
+ */
+
+audio,
+canvas,
+iframe,
+img,
+svg,
+video {
+    vertical-align: middle;
+}
+
+/*
+ * Remove default fieldset styles.
+ */
+
+fieldset {
+    border: 0;
+    margin: 0;
+    padding: 0;
+}
+
+/*
+ * Allow only vertical resizing of textareas.
+ */
+
+textarea {
+    resize: vertical;
+}
+
+/* ==========================================================================
+   Browser Upgrade Prompt
+   ========================================================================== */
+
+.browserupgrade {
+    margin: 0.2em 0;
+    background: #ccc;
+    color: #000;
+    padding: 0.2em 0;
+}
+
+/* ==========================================================================
+   Author's custom styles
+   ========================================================================== */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* ==========================================================================
+   Helper classes
+   ========================================================================== */
+
+/*
+ * Hide visually and from screen readers:
+ */
+
+.hidden {
+    display: none !important;
+}
+
+/*
+ * Hide only visually, but have it available for screen readers:
+ * http://snook.ca/archives/html_and_css/hiding-content-for-accessibility
+ */
+
+.visuallyhidden {
+    border: 0;
+    clip: rect(0 0 0 0);
+    height: 1px;
+    margin: -1px;
+    overflow: hidden;
+    padding: 0;
+    position: absolute;
+    width: 1px;
+}
+
+/*
+ * Extends the .visuallyhidden class to allow the element
+ * to be focusable when navigated to via the keyboard:
+ * https://www.drupal.org/node/897638
+ */
+
+.visuallyhidden.focusable:active,
+.visuallyhidden.focusable:focus {
+    clip: auto;
+    height: auto;
+    margin: 0;
+    overflow: visible;
+    position: static;
+    width: auto;
+}
+
+/*
+ * Hide visually and from screen readers, but maintain layout
+ */
+
+.invisible {
+    visibility: hidden;
+}
+
+/*
+ * Clearfix: contain floats
+ *
+ * For modern browsers
+ * 1. The space content is one way to avoid an Opera bug when the
+ *    `contenteditable` attribute is included anywhere else in the document.
+ *    Otherwise it causes space to appear at the top and bottom of elements
+ *    that receive the `clearfix` class.
+ * 2. The use of `table` rather than `block` is only necessary if using
+ *    `:before` to contain the top-margins of child elements.
+ */
+
+.clearfix:before,
+.clearfix:after {
+    content: " "; /* 1 */
+    display: table; /* 2 */
+}
+
+.clearfix:after {
+    clear: both;
+}
+
+/* ==========================================================================
+   EXAMPLE Media Queries for Responsive Design.
+   These examples override the primary ('mobile first') styles.
+   Modify as content requires.
+   ========================================================================== */
+
+@media only screen and (min-width: 35em) {
+    /* Style adjustments for viewports that meet the condition */
+}
+
+@media print,
+       (min-resolution: 1.25dppx),
+       (min-resolution: 120dpi) {
+    /* Style adjustments for high resolution devices */
+}
+
+/* ==========================================================================
+   Print styles.
+   Inlined to avoid the additional HTTP request:
+   http://www.phpied.com/delay-loading-your-print-css/
+   ========================================================================== */
+
+@media print {
+    *,
+    *:before,
+    *:after,
+    *:first-letter {
+        background: transparent !important;
+        color: #000 !important; /* Black prints faster: http://www.sanbeiji.com/archives/953 */
+        box-shadow: none !important;
+    }
+
+    a,
+    a:visited {
+        text-decoration: underline;
+    }
+
+    a[href]:after {
+        content: " (" attr(href) ")";
+    }
+
+    abbr[title]:after {
+        content: " (" attr(title) ")";
+    }
+
+    /*
+     * Don't show links that are fragment identifiers,
+     * or use the `javascript:` pseudo protocol
+     */
+
+    a[href^="#"]:after,
+    a[href^="javascript:"]:after {
+        content: "";
+    }
+
+    pre,
+    blockquote {
+        border: 1px solid #999;
+        page-break-inside: avoid;
+    }
+
+    /*
+     * Printing Tables:
+     * http://css-discuss.incutio.com/wiki/Printing_Tables
+     */
+
+    thead {
+        display: table-header-group;
+    }
+
+    tr,
+    img {
+        page-break-inside: avoid;
+    }
+
+    img {
+        max-width: 100% !important;
+    }
+
+    p,
+    h2,
+    h3 {
+        orphans: 3;
+        widows: 3;
+    }
+
+    h2,
+    h3 {
+        page-break-after: avoid;
+    }
+}
diff --git a/node_modules/material-design-lite/src/resets/_mobile.scss b/node_modules/material-design-lite/src/resets/_mobile.scss
new file mode 100644
index 0000000..efa20dd
--- /dev/null
+++ b/node_modules/material-design-lite/src/resets/_mobile.scss
@@ -0,0 +1,25 @@
+/**
+ * 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.
+ */
+
+
+/* Remove the unwanted box around FAB buttons */
+/* More info: http://goo.gl/IPwKi */
+a, .mdl-accordion, .mdl-button, .mdl-card, .mdl-checkbox, .mdl-dropdown-menu,
+.mdl-icon-toggle, .mdl-item, .mdl-radio, .mdl-slider, .mdl-switch, .mdl-tabs__tab {
+
+    -webkit-tap-highlight-color: transparent;
+    -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+}
diff --git a/node_modules/material-design-lite/src/resets/_resets.scss b/node_modules/material-design-lite/src/resets/_resets.scss
new file mode 100644
index 0000000..dba3d0e
--- /dev/null
+++ b/node_modules/material-design-lite/src/resets/_resets.scss
@@ -0,0 +1,55 @@
+/**
+ * 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.
+ */
+
+@import "h5bp";
+@import "mobile";
+
+/*
+ * Make html take up the entire screen
+ * Then set touch-action to avoid touch delay on mobile IE
+ */
+html {
+  width: 100%;
+  height: 100%;
+  -ms-touch-action: manipulation;
+  touch-action: manipulation;
+}
+
+/*
+* Make body take up the entire screen
+* Remove body margin so layout containers don't cause extra overflow.
+*/
+body {
+  width: 100%;
+  min-height: 100%;
+  margin: 0;
+}
+
+/*
+ * Main display reset for IE support.
+ * Source: http://weblog.west-wind.com/posts/2015/Jan/12/main-HTML5-Tag-not-working-in-Internet-Explorer-91011
+ */
+main {
+  display: block;
+}
+
+/*
+* Apply no display to elements with the hidden attribute.
+* IE 9 and 10 support.
+*/
+*[hidden] {
+  display: none !important;
+}
diff --git a/node_modules/material-design-lite/src/ripple/_ripple.scss b/node_modules/material-design-lite/src/ripple/_ripple.scss
new file mode 100644
index 0000000..cbf86eb
--- /dev/null
+++ b/node_modules/material-design-lite/src/ripple/_ripple.scss
@@ -0,0 +1,42 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+.mdl-ripple {
+  background       : $ripple-bg-color;
+  border-radius    : 50%;
+  height           : 50px;
+  left             : 0;
+  opacity          : 0;
+  pointer-events   : none;
+  position         : absolute;
+  top              : 0;
+  transform        : translate(-50%, -50%);
+  width            : 50px;
+  overflow         : hidden;
+
+  &.is-animating {
+    transition: transform 0.3s $animation-curve-linear-out-slow-in,
+    width 0.3s $animation-curve-linear-out-slow-in,
+    height 0.3s $animation-curve-linear-out-slow-in,
+    opacity 0.6s $animation-curve-linear-out-slow-in;
+  }
+
+  &.is-visible {
+    opacity: 0.3;
+  }
+}
diff --git a/node_modules/material-design-lite/src/ripple/ripple.js b/node_modules/material-design-lite/src/ripple/ripple.js
new file mode 100644
index 0000000..eaf30f4
--- /dev/null
+++ b/node_modules/material-design-lite/src/ripple/ripple.js
@@ -0,0 +1,260 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Ripple MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialRipple = function MaterialRipple(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialRipple'] = MaterialRipple;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialRipple.prototype.Constant_ = {
+    INITIAL_SCALE: 'scale(0.0001, 0.0001)',
+    INITIAL_SIZE: '1px',
+    INITIAL_OPACITY: '0.4',
+    FINAL_OPACITY: '0',
+    FINAL_SCALE: ''
+  };
+
+  /**
+   * 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
+   */
+  MaterialRipple.prototype.CssClasses_ = {
+    RIPPLE_CENTER: 'mdl-ripple--center',
+    RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',
+    RIPPLE: 'mdl-ripple',
+    IS_ANIMATING: 'is-animating',
+    IS_VISIBLE: 'is-visible'
+  };
+
+  /**
+   * Handle mouse / finger down on element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialRipple.prototype.downHandler_ = function(event) {
+    if (!this.rippleElement_.style.width && !this.rippleElement_.style.height) {
+      var rect = this.element_.getBoundingClientRect();
+      this.boundHeight = rect.height;
+      this.boundWidth = rect.width;
+      this.rippleSize_ = Math.sqrt(rect.width * rect.width +
+          rect.height * rect.height) * 2 + 2;
+      this.rippleElement_.style.width = this.rippleSize_ + 'px';
+      this.rippleElement_.style.height = this.rippleSize_ + 'px';
+    }
+
+    this.rippleElement_.classList.add(this.CssClasses_.IS_VISIBLE);
+
+    if (event.type === 'mousedown' && this.ignoringMouseDown_) {
+      this.ignoringMouseDown_ = false;
+    } else {
+      if (event.type === 'touchstart') {
+        this.ignoringMouseDown_ = true;
+      }
+      var frameCount = this.getFrameCount();
+      if (frameCount > 0) {
+        return;
+      }
+      this.setFrameCount(1);
+      var bound = event.currentTarget.getBoundingClientRect();
+      var x;
+      var y;
+      // Check if we are handling a keyboard click.
+      if (event.clientX === 0 && event.clientY === 0) {
+        x = Math.round(bound.width / 2);
+        y = Math.round(bound.height / 2);
+      } else {
+        var clientX = event.clientX !== undefined ? event.clientX : event.touches[0].clientX;
+        var clientY = event.clientY !== undefined ? event.clientY : event.touches[0].clientY;
+        x = Math.round(clientX - bound.left);
+        y = Math.round(clientY - bound.top);
+      }
+      this.setRippleXY(x, y);
+      this.setRippleStyles(true);
+      window.requestAnimationFrame(this.animFrameHandler.bind(this));
+    }
+  };
+
+  /**
+   * Handle mouse / finger up on element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialRipple.prototype.upHandler_ = function(event) {
+    // Don't fire for the artificial "mouseup" generated by a double-click.
+    if (event && event.detail !== 2) {
+      // Allow a repaint to occur before removing this class, so the animation
+      // shows for tap events, which seem to trigger a mouseup too soon after
+      // mousedown.
+      window.setTimeout(function() {
+        this.rippleElement_.classList.remove(this.CssClasses_.IS_VISIBLE);
+      }.bind(this), 0);
+    }
+  };
+
+  /**
+   * Initialize element.
+   */
+  MaterialRipple.prototype.init = function() {
+    if (this.element_) {
+      var recentering =
+          this.element_.classList.contains(this.CssClasses_.RIPPLE_CENTER);
+      if (!this.element_.classList.contains(
+          this.CssClasses_.RIPPLE_EFFECT_IGNORE_EVENTS)) {
+        this.rippleElement_ = this.element_.querySelector('.' +
+            this.CssClasses_.RIPPLE);
+        this.frameCount_ = 0;
+        this.rippleSize_ = 0;
+        this.x_ = 0;
+        this.y_ = 0;
+
+        // Touch start produces a compat mouse down event, which would cause a
+        // second ripples. To avoid that, we use this property to ignore the first
+        // mouse down after a touch start.
+        this.ignoringMouseDown_ = false;
+
+        this.boundDownHandler = this.downHandler_.bind(this);
+        this.element_.addEventListener('mousedown',
+          this.boundDownHandler);
+        this.element_.addEventListener('touchstart',
+            this.boundDownHandler);
+
+        this.boundUpHandler = this.upHandler_.bind(this);
+        this.element_.addEventListener('mouseup', this.boundUpHandler);
+        this.element_.addEventListener('mouseleave', this.boundUpHandler);
+        this.element_.addEventListener('touchend', this.boundUpHandler);
+        this.element_.addEventListener('blur', this.boundUpHandler);
+
+        /**
+         * Getter for frameCount_.
+         * @return {number} the frame count.
+         */
+        this.getFrameCount = function() {
+          return this.frameCount_;
+        };
+
+        /**
+         * Setter for frameCount_.
+         * @param {number} fC the frame count.
+         */
+        this.setFrameCount = function(fC) {
+          this.frameCount_ = fC;
+        };
+
+        /**
+         * Getter for rippleElement_.
+         * @return {Element} the ripple element.
+         */
+        this.getRippleElement = function() {
+          return this.rippleElement_;
+        };
+
+        /**
+         * Sets the ripple X and Y coordinates.
+         * @param  {number} newX the new X coordinate
+         * @param  {number} newY the new Y coordinate
+         */
+        this.setRippleXY = function(newX, newY) {
+          this.x_ = newX;
+          this.y_ = newY;
+        };
+
+        /**
+         * Sets the ripple styles.
+         * @param  {boolean} start whether or not this is the start frame.
+         */
+        this.setRippleStyles = function(start) {
+          if (this.rippleElement_ !== null) {
+            var transformString;
+            var scale;
+            var size;
+            var offset = 'translate(' + this.x_ + 'px, ' + this.y_ + 'px)';
+
+            if (start) {
+              scale = this.Constant_.INITIAL_SCALE;
+              size = this.Constant_.INITIAL_SIZE;
+            } else {
+              scale = this.Constant_.FINAL_SCALE;
+              size = this.rippleSize_ + 'px';
+              if (recentering) {
+                offset = 'translate(' + this.boundWidth / 2 + 'px, ' +
+                  this.boundHeight / 2 + 'px)';
+              }
+            }
+
+            transformString = 'translate(-50%, -50%) ' + offset + scale;
+
+            this.rippleElement_.style.webkitTransform = transformString;
+            this.rippleElement_.style.msTransform = transformString;
+            this.rippleElement_.style.transform = transformString;
+
+            if (start) {
+              this.rippleElement_.classList.remove(this.CssClasses_.IS_ANIMATING);
+            } else {
+              this.rippleElement_.classList.add(this.CssClasses_.IS_ANIMATING);
+            }
+          }
+        };
+
+        /**
+         * Handles an animation frame.
+         */
+        this.animFrameHandler = function() {
+          if (this.frameCount_-- > 0) {
+            window.requestAnimationFrame(this.animFrameHandler.bind(this));
+          } else {
+            this.setRippleStyles(false);
+          }
+        };
+      }
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialRipple,
+    classAsString: 'MaterialRipple',
+    cssClass: 'mdl-js-ripple-effect',
+    widget: false
+  });
+})();
diff --git a/node_modules/material-design-lite/src/shadow/README.md b/node_modules/material-design-lite/src/shadow/README.md
new file mode 100644
index 0000000..58b558f
--- /dev/null
+++ b/node_modules/material-design-lite/src/shadow/README.md
@@ -0,0 +1,51 @@
+## Introduction
+
+The Material Design Lite (MDL) **shadow** is not a component in the same sense as an MDL card, menu, or textbox; it is a visual effect that can be assigned to a user interface element. The effect simulates a three-dimensional positioning of the element, as though it is slightly raised above the surface it rests upon &mdash; a positive *z-axis* value, in user interface terms. The shadow starts at the edges of the element and gradually fades outward, providing a realistic 3-D effect.
+
+Shadows are a convenient and intuitive means of distinguishing an element from its surroundings. A shadow can draw the user's eye to an object and emphasize the object's importance, uniqueness, or immediacy.
+
+Shadows are a well-established feature in user interfaces, and provide users with a visual clue to an object's intended use or value. Their design and use is an important factor in the overall user experience.
+
+### To include an MDL **shadow** effect:
+
+&nbsp;1. Code an element, such as a `<div>`, that is to receive the shadow effect; size and style it as desired, and add any required content.
+```html
+<div>
+Some content
+</div>
+```
+&nbsp;2. Add an MDL shadow class to the element using the `class` attribute.
+```html
+<div class="mdl-shadow--4dp">
+Some content
+</div>
+```
+
+The shadowed component is ready for use.
+
+#### Examples
+
+A div with a user-specified class and a small shadow.
+
+```html
+<div class="my-shadow-card mdl-shadow--2dp">Small shadow</div>
+```
+
+A div with a user-specified class and a medium-large shadow.
+
+```html
+<div class="my-shadow-card mdl-shadow--6dp">Medium-large shadow</div>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual shadows to the element. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-shadow--2dp` | Assigns a small shadow to the object | Optional; if omitted, no shadow is present |
+| `mdl-shadow--3dp` | Assigns a medium-small shadow to the object | Optional; if omitted, no shadow is present |
+| `mdl-shadow--4dp` | Assigns a medium shadow to the object | Optional; if omitted, no shadow is present |
+| `mdl-shadow--6dp` | Assigns a medium-large shadow to the object | Optional; if omitted, no shadow is present |
+| `mdl-shadow--8dp` | Assigns a large shadow to the object | Optional; if omitted, no shadow is present |
+| `mdl-shadow--16dp` | Assigns an extra-large shadow to the object | Optional; if omitted, no shadow is present|
diff --git a/node_modules/material-design-lite/src/shadow/_shadow.scss b/node_modules/material-design-lite/src/shadow/_shadow.scss
new file mode 100644
index 0000000..708f921
--- /dev/null
+++ b/node_modules/material-design-lite/src/shadow/_shadow.scss
@@ -0,0 +1,46 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-shadow--2dp {
+  @include shadow-2dp();
+}
+
+.mdl-shadow--3dp {
+  @include shadow-3dp();
+}
+
+.mdl-shadow--4dp {
+  @include shadow-4dp();
+}
+
+.mdl-shadow--6dp {
+  @include shadow-6dp();
+}
+
+.mdl-shadow--8dp {
+  @include shadow-8dp();
+}
+
+.mdl-shadow--16dp {
+  @include shadow-16dp();
+}
+
+.mdl-shadow--24dp {
+  @include shadow-24dp();
+}
diff --git a/node_modules/material-design-lite/src/shadow/demo.css b/node_modules/material-design-lite/src/shadow/demo.css
new file mode 100644
index 0000000..6addeed
--- /dev/null
+++ b/node_modules/material-design-lite/src/shadow/demo.css
@@ -0,0 +1,43 @@
+/**
+ * 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-page--shadow .demo-preview-block {
+  height: 100px;
+}
+
+.demo-shadow-card {
+  background-color: #fff;
+  border-radius: 2px;
+  display: block;
+  height: 72px;
+  margin-bottom: 20px;
+  margin-right: 32px;
+  padding: 10px;
+  text-align: center;
+  float: left;
+  color: #9E9E9E;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  transition-property: opacity, transform;
+  width: 72px;
+}
+
+@media screen and (max-width: 360px ) {
+  .demo-shadow-card {
+    width: 27px;
+  }
+}
diff --git a/node_modules/material-design-lite/src/shadow/demo.html b/node_modules/material-design-lite/src/shadow/demo.html
new file mode 100644
index 0000000..2b09571
--- /dev/null
+++ b/node_modules/material-design-lite/src/shadow/demo.html
@@ -0,0 +1,8 @@
+  <div class="demo-preview-block demo-page--shadow">
+    <div class="demo-shadow-card mdl-shadow--2dp">2dp</div>
+    <div class="demo-shadow-card mdl-shadow--3dp">3dp</div>
+    <div class="demo-shadow-card mdl-shadow--4dp">4dp</div>
+    <div class="demo-shadow-card mdl-shadow--6dp">6dp</div>
+    <div class="demo-shadow-card mdl-shadow--8dp">8dp</div>
+    <div class="demo-shadow-card mdl-shadow--16dp">16dp</div>
+  </div>
diff --git a/node_modules/material-design-lite/src/slider/README.md b/node_modules/material-design-lite/src/slider/README.md
new file mode 100755
index 0000000..383c816
--- /dev/null
+++ b/node_modules/material-design-lite/src/slider/README.md
@@ -0,0 +1,60 @@
+## Introduction
+
+The Material Design Lite (MDL) **slider** component is an enhanced version of the new HTML5 `<input type="range">` element. A slider consists of a horizontal line upon which sits a small, movable disc (the *thumb*) and, typically, text that clearly communicates a value that will be set when the user moves it.
+
+Sliders are a fairly new feature in user interfaces, and allow users to choose a value from a predetermined range by moving the thumb through the range (lower values to the left, higher values to the right). Their design and use is an important factor in the overall user experience. See the slider component's [Material Design specifications page](http://www.google.com/design/spec/components/sliders.html) for details.
+
+The enhanced slider component may be initially or programmatically *disabled*.
+
+### To include an MDL **slider** component:
+
+&nbsp;1. Code a `<p>` paragraph element and style it as desired. Include a CSS `width` property (directly or via a CSS class), which determines the slider's size.
+```html
+<p style="width:300px">
+...
+</p>
+```
+&nbsp;2. Inside the paragraph container, code an `<input>` element and give it a `type` attribute whose value is `"range"`. Also give it an `id` attribute to make it available for scripting, and `min` and `max` attributes whose values specify the slider's range. Give it a `value` attribute whose value sets the initial thumb position (optional; if omitted, defaults to 50% of the maximum), and a `step` attribute whose value specifies the increment by which the thumb moves (also optional; if omitted, defaults to 1). Finally, give it an event handler to be executed when the user changes the slider's value.
+```html
+<p style="width:300px">
+  <input type="range" id="s1" min="0" max="10" value="4" step="2">
+</p>
+```
+&nbsp;3. Add one or more MDL classes, separated by spaces, to the slider using the `class` attribute.
+```html
+<p style="width:300px">
+  <input class="mdl-slider mdl-js-slider" type="range" id="s1" min="0" max="10" value="4" step="2">
+</p>
+```
+
+The slider component is ready for use.
+
+#### Example
+
+A slider that controls volume.
+```html
+<p style="width:300px">
+<input class="mdl-slider mdl-js-slider" type="range" id="s1" min="0" max="10" value="4" step="2">
+</p>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the slider. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-slider` | Defines input element as an MDL component | Required |
+| `mdl-js-slider` | Assigns basic MDL behavior to input element | Required |
+
+>**Note:** A disabled version of the slider is provided, and is invoked with the standard HTML boolean attribute `disabled`. `<input class="mdl-slider mdl-js-slider" type="range" id="s1" min="0" max="10" value="4" step="2" disabled>`
+>This attribute may be added or removed programmatically via scripting.
+
+>**Note:** Although the *value* attribute is used to set a slider's initial value, it should not be used
+to modify the value programmatically; instead, use the MDL `change()` method. For example, assuming
+that *slider1* is a slider object and *newvalue* is a variable containing the desired value, do not
+use `slider1.value = newvalue`; instead, use `slider1.MaterialSlider.change(newvalue)`.
+
+## License
+
+Copyright Google, 2015. Licensed under an Apache-2 license.
diff --git a/node_modules/material-design-lite/src/slider/_slider.scss b/node_modules/material-design-lite/src/slider/_slider.scss
new file mode 100644
index 0000000..3255901
--- /dev/null
+++ b/node_modules/material-design-lite/src/slider/_slider.scss
@@ -0,0 +1,397 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+// Some CSS magic to target only IE.
+_:-ms-input-placeholder, :root .mdl-slider.mdl-slider.is-upgraded {
+  -ms-appearance: none;
+  // The thumb can't overflow the track or the rest of the control in IE, so we
+  // need to make it tall enough to contain the largest version of the thumb.
+  height: 32px;
+  margin: 0;
+}
+
+// Slider component (styled input[type=range]).
+.mdl-slider {
+  width: calc(100% - 40px);
+  margin: 0 20px;
+
+  &.is-upgraded {
+    -webkit-appearance: none;
+    -moz-appearance: none;
+    appearance: none;
+    height: 2px;
+    background: transparent;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    user-select: none;
+    outline: 0;
+    padding: 0;
+    color: $range-color;
+    align-self: center;
+    z-index: 1;
+    cursor: pointer;
+
+
+    // Disable default focus on Firefox.
+    &::-moz-focus-outer {
+      border: 0;
+    }
+
+    // Disable tooltip on IE.
+    &::-ms-tooltip {
+      display: none;
+    }
+
+
+    /**************************** Tracks ****************************/
+    &::-webkit-slider-runnable-track {
+      background: transparent;
+    }
+
+    &::-moz-range-track {
+      background: transparent;
+      border: none;
+    }
+
+    &::-ms-track {
+      background: none;
+      color: transparent;
+      height: 2px;
+      width: 100%;
+      border: none;
+    }
+
+    &::-ms-fill-lower {
+      padding: 0;
+      // Margin on -ms-track doesn't work right, so we use gradients on the
+      // fills.
+      background: linear-gradient(to right,
+      transparent,
+      transparent 16px,
+      $range-color 16px,
+      $range-color 0);
+    }
+
+    &::-ms-fill-upper {
+      padding: 0;
+      // Margin on -ms-track doesn't work right, so we use gradients on the
+      // fills.
+      background: linear-gradient(to left,
+      transparent,
+      transparent 16px,
+      $range-bg-color 16px,
+      $range-bg-color 0);
+    }
+
+
+    /**************************** Thumbs ****************************/
+    &::-webkit-slider-thumb {
+      -webkit-appearance: none;
+      width: 12px;
+      height: 12px;
+      box-sizing: border-box;
+      border-radius: 50%;
+      background: $range-color;
+      border: none;
+      transition: transform 0.18s $animation-curve-default,
+      border 0.18s $animation-curve-default,
+      box-shadow 0.18s $animation-curve-default,
+      background 0.28s $animation-curve-default;
+    }
+
+    &::-moz-range-thumb {
+      -moz-appearance: none;
+      width: 12px;
+      height: 12px;
+      box-sizing: border-box;
+      border-radius: 50%;
+      background-image: none;
+      background: $range-color;
+      border: none;
+      // -moz-range-thumb doesn't currently support transitions.
+    }
+
+    &:focus:not(:active)::-webkit-slider-thumb {
+      box-shadow: 0 0 0 10px $range-faded-color;
+    }
+
+    &:focus:not(:active)::-moz-range-thumb {
+      box-shadow: 0 0 0 10px $range-faded-color;
+    }
+
+    &:active::-webkit-slider-thumb {
+      background-image: none;
+      background: $range-color;
+      transform: scale(1.5);
+    }
+
+    &:active::-moz-range-thumb {
+      background-image: none;
+      background: $range-color;
+      transform: scale(1.5);
+    }
+
+    &::-ms-thumb {
+      width: 32px;
+      height: 32px;
+      border: none;
+      border-radius: 50%;
+      background: $range-color;
+      transform: scale(0.375);
+      // -ms-thumb doesn't currently support transitions, but leaving this here
+      // in case support ever gets added.
+      transition: transform 0.18s $animation-curve-default,
+      background 0.28s $animation-curve-default;
+    }
+
+    &:focus:not(:active)::-ms-thumb {
+      background: radial-gradient(circle closest-side,
+      $range-color 0%,
+      $range-color 37.5%,
+      $range-faded-color 37.5%,
+      $range-faded-color 100%);
+      transform: scale(1);
+    }
+
+    &:active::-ms-thumb {
+      background: $range-color;
+      transform: scale(0.5625);
+    }
+
+
+    /**************************** 0-value ****************************/
+    &.is-lowest-value::-webkit-slider-thumb {
+      border: 2px solid $range-bg-color;
+      background: transparent;
+    }
+
+    &.is-lowest-value::-moz-range-thumb {
+      border: 2px solid $range-bg-color;
+      background: transparent;
+    }
+
+    &.is-lowest-value +
+        .mdl-slider__background-flex > .mdl-slider__background-upper {
+      left: 6px;
+    }
+
+    &.is-lowest-value:focus:not(:active)::-webkit-slider-thumb {
+      box-shadow: 0 0 0 10px $range-bg-focus-color;
+      background: $range-bg-focus-color;
+    }
+
+    &.is-lowest-value:focus:not(:active)::-moz-range-thumb {
+      box-shadow: 0 0 0 10px $range-bg-focus-color;
+      background: $range-bg-focus-color;
+    }
+
+    &.is-lowest-value:active::-webkit-slider-thumb {
+      border: 1.6px solid $range-bg-color;
+      transform: scale(1.5);
+    }
+
+    &.is-lowest-value:active +
+        .mdl-slider__background-flex > .mdl-slider__background-upper {
+      left: 9px;
+    }
+
+    &.is-lowest-value:active::-moz-range-thumb {
+      border: 1.5px solid $range-bg-color;
+      transform: scale(1.5);
+    }
+
+    &.is-lowest-value::-ms-thumb {
+      background: radial-gradient(circle closest-side,
+      transparent 0%,
+      transparent 66.67%,
+      $range-bg-color 66.67%,
+      $range-bg-color 100%);
+    }
+
+    &.is-lowest-value:focus:not(:active)::-ms-thumb {
+      background: radial-gradient(circle closest-side,
+      $range-bg-focus-color 0%,
+      $range-bg-focus-color 25%,
+      $range-bg-color 25%,
+      $range-bg-color 37.5%,
+      $range-bg-focus-color 37.5%,
+      $range-bg-focus-color 100%);
+      transform: scale(1);
+    }
+
+    &.is-lowest-value:active::-ms-thumb {
+      transform: scale(0.5625);
+      background: radial-gradient(circle closest-side,
+      transparent 0%,
+      transparent 77.78%,
+      $range-bg-color 77.78%,
+      $range-bg-color 100%);
+    }
+
+    &.is-lowest-value::-ms-fill-lower {
+      background: transparent;
+    }
+
+    &.is-lowest-value::-ms-fill-upper {
+      margin-left: 6px;
+    }
+
+    &.is-lowest-value:active::-ms-fill-upper {
+      margin-left: 9px;
+    }
+
+    /**************************** Disabled ****************************/
+
+    &:disabled:focus::-webkit-slider-thumb,
+    &:disabled:active::-webkit-slider-thumb,
+    &:disabled::-webkit-slider-thumb {
+      transform: scale(0.667);
+      background: $range-bg-color;
+    }
+
+    &:disabled:focus::-moz-range-thumb,
+    &:disabled:active::-moz-range-thumb,
+    &:disabled::-moz-range-thumb {
+      transform: scale(0.667);
+      background: $range-bg-color;
+    }
+
+    &:disabled +
+        .mdl-slider__background-flex > .mdl-slider__background-lower {
+      background-color: $range-bg-color;
+      left: -6px;
+    }
+
+    &:disabled +
+        .mdl-slider__background-flex > .mdl-slider__background-upper {
+      left: 6px;
+    }
+
+    &.is-lowest-value:disabled:focus::-webkit-slider-thumb,
+    &.is-lowest-value:disabled:active::-webkit-slider-thumb,
+    &.is-lowest-value:disabled::-webkit-slider-thumb {
+      border: 3px solid $range-bg-color;
+      background: transparent;
+      transform: scale(0.667);
+    }
+
+    &.is-lowest-value:disabled:focus::-moz-range-thumb,
+    &.is-lowest-value:disabled:active::-moz-range-thumb,
+    &.is-lowest-value:disabled::-moz-range-thumb {
+      border: 3px solid $range-bg-color;
+      background: transparent;
+      transform: scale(0.667);
+    }
+
+    &.is-lowest-value:disabled:active +
+        .mdl-slider__background-flex > .mdl-slider__background-upper {
+      left: 6px;
+    }
+
+    &:disabled:focus::-ms-thumb,
+    &:disabled:active::-ms-thumb,
+    &:disabled::-ms-thumb {
+      transform: scale(0.25);
+      background: $range-bg-color;
+    }
+
+    &.is-lowest-value:disabled:focus::-ms-thumb,
+    &.is-lowest-value:disabled:active::-ms-thumb,
+    &.is-lowest-value:disabled::-ms-thumb {
+      transform: scale(0.25);
+      background: radial-gradient(circle closest-side,
+      transparent 0%,
+      transparent 50%,
+      $range-bg-color 50%,
+      $range-bg-color 100%);
+    }
+
+    &:disabled::-ms-fill-lower {
+      margin-right: 6px;
+      background: linear-gradient(to right,
+      transparent,
+      transparent 25px,
+      $range-bg-color 25px,
+      $range-bg-color 0);
+    }
+
+    &:disabled::-ms-fill-upper {
+      margin-left: 6px;
+    }
+
+    &.is-lowest-value:disabled:active::-ms-fill-upper {
+      margin-left: 6px;
+    }
+  }
+}
+
+  // Since we need to specify a height of 32px in IE, we add a class here for a
+  // container that brings it back to a reasonable height.
+  .mdl-slider__ie-container {
+    height: 18px;
+    overflow: visible;
+    border: none;
+    margin: none;
+    padding: none;
+  }
+
+  // We use a set of divs behind the track to style it in all non-IE browsers.
+  // This one contains both the background and the slider.
+  .mdl-slider__container {
+    height: 18px;
+    position: relative;
+    background: none;
+    display: flex;
+    flex-direction: row;
+  }
+
+  // This one sets up a flex box for the styled upper and lower portions of the
+  // the slider track.
+  .mdl-slider__background-flex {
+    background: transparent;
+    position: absolute;
+    height: 2px;
+    width: calc(100% - 52px);
+    top: 50%;
+    left: 0;
+    margin: 0 26px;
+    display: flex;
+    overflow: hidden;
+    border: 0;
+    padding: 0;
+    transform: translate(0, -1px);
+  }
+
+  // This one styles the lower part of the slider track.
+  .mdl-slider__background-lower {
+    background: $range-color;
+    flex: 0;
+    position: relative;
+    border: 0;
+    padding: 0;
+  }
+
+  // This one styles the upper part of the slider track.
+  .mdl-slider__background-upper {
+    background: $range-bg-color;
+    flex: 0;
+    position: relative;
+    border: 0;
+    padding: 0;
+    transition: left 0.18s $animation-curve-default
+  }
diff --git a/node_modules/material-design-lite/src/slider/slider.js b/node_modules/material-design-lite/src/slider/slider.js
new file mode 100644
index 0000000..b34b8b6
--- /dev/null
+++ b/node_modules/material-design-lite/src/slider/slider.js
@@ -0,0 +1,244 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Slider MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialSlider = function MaterialSlider(element) {
+    this.element_ = element;
+    // Browser feature detection.
+    this.isIE_ = window.navigator.msPointerEnabled;
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialSlider'] = MaterialSlider;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialSlider.prototype.Constant_ = {
+    // None for now.
+  };
+
+  /**
+   * 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
+   */
+  MaterialSlider.prototype.CssClasses_ = {
+    IE_CONTAINER: 'mdl-slider__ie-container',
+    SLIDER_CONTAINER: 'mdl-slider__container',
+    BACKGROUND_FLEX: 'mdl-slider__background-flex',
+    BACKGROUND_LOWER: 'mdl-slider__background-lower',
+    BACKGROUND_UPPER: 'mdl-slider__background-upper',
+    IS_LOWEST_VALUE: 'is-lowest-value',
+    IS_UPGRADED: 'is-upgraded'
+  };
+
+  /**
+   * Handle input on element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialSlider.prototype.onInput_ = function(event) {
+    this.updateValueStyles_();
+  };
+
+  /**
+   * Handle change on element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialSlider.prototype.onChange_ = function(event) {
+    this.updateValueStyles_();
+  };
+
+  /**
+   * Handle mouseup on element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialSlider.prototype.onMouseUp_ = function(event) {
+    event.target.blur();
+  };
+
+  /**
+   * Handle mousedown on container element.
+   * This handler is purpose is to not require the use to click
+   * exactly on the 2px slider element, as FireFox seems to be very
+   * strict about this.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   * @suppress {missingProperties}
+   */
+  MaterialSlider.prototype.onContainerMouseDown_ = function(event) {
+    // If this click is not on the parent element (but rather some child)
+    // ignore. It may still bubble up.
+    if (event.target !== this.element_.parentElement) {
+      return;
+    }
+
+    // Discard the original event and create a new event that
+    // is on the slider element.
+    event.preventDefault();
+    var newEvent = new MouseEvent('mousedown', {
+      target: event.target,
+      buttons: event.buttons,
+      clientX: event.clientX,
+      clientY: this.element_.getBoundingClientRect().y
+    });
+    this.element_.dispatchEvent(newEvent);
+  };
+
+  /**
+   * Handle updating of values.
+   *
+   * @private
+   */
+  MaterialSlider.prototype.updateValueStyles_ = function() {
+    // Calculate and apply percentages to div structure behind slider.
+    var fraction = (this.element_.value - this.element_.min) /
+        (this.element_.max - this.element_.min);
+
+    if (fraction === 0) {
+      this.element_.classList.add(this.CssClasses_.IS_LOWEST_VALUE);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_LOWEST_VALUE);
+    }
+
+    if (!this.isIE_) {
+      this.backgroundLower_.style.flex = fraction;
+      this.backgroundLower_.style.webkitFlex = fraction;
+      this.backgroundUpper_.style.flex = 1 - fraction;
+      this.backgroundUpper_.style.webkitFlex = 1 - fraction;
+    }
+  };
+
+  // Public methods.
+
+  /**
+   * Disable slider.
+   *
+   * @public
+   */
+  MaterialSlider.prototype.disable = function() {
+    this.element_.disabled = true;
+  };
+  MaterialSlider.prototype['disable'] = MaterialSlider.prototype.disable;
+
+  /**
+   * Enable slider.
+   *
+   * @public
+   */
+  MaterialSlider.prototype.enable = function() {
+
+    this.element_.disabled = false;
+  };
+  MaterialSlider.prototype['enable'] = MaterialSlider.prototype.enable;
+
+  /**
+   * Update slider value.
+   *
+   * @param {number} value The value to which to set the control (optional).
+   * @public
+   */
+  MaterialSlider.prototype.change = function(value) {
+
+    if (typeof value !== 'undefined') {
+      this.element_.value = value;
+    }
+    this.updateValueStyles_();
+  };
+  MaterialSlider.prototype['change'] = MaterialSlider.prototype.change;
+
+  /**
+   * Initialize element.
+   */
+  MaterialSlider.prototype.init = function() {
+
+    if (this.element_) {
+      if (this.isIE_) {
+        // Since we need to specify a very large height in IE due to
+        // implementation limitations, we add a parent here that trims it down to
+        // a reasonable size.
+        var containerIE = document.createElement('div');
+        containerIE.classList.add(this.CssClasses_.IE_CONTAINER);
+        this.element_.parentElement.insertBefore(containerIE, this.element_);
+        this.element_.parentElement.removeChild(this.element_);
+        containerIE.appendChild(this.element_);
+      } else {
+        // For non-IE browsers, we need a div structure that sits behind the
+        // slider and allows us to style the left and right sides of it with
+        // different colors.
+        var container = document.createElement('div');
+        container.classList.add(this.CssClasses_.SLIDER_CONTAINER);
+        this.element_.parentElement.insertBefore(container, this.element_);
+        this.element_.parentElement.removeChild(this.element_);
+        container.appendChild(this.element_);
+        var backgroundFlex = document.createElement('div');
+        backgroundFlex.classList.add(this.CssClasses_.BACKGROUND_FLEX);
+        container.appendChild(backgroundFlex);
+        this.backgroundLower_ = document.createElement('div');
+        this.backgroundLower_.classList.add(this.CssClasses_.BACKGROUND_LOWER);
+        backgroundFlex.appendChild(this.backgroundLower_);
+        this.backgroundUpper_ = document.createElement('div');
+        this.backgroundUpper_.classList.add(this.CssClasses_.BACKGROUND_UPPER);
+        backgroundFlex.appendChild(this.backgroundUpper_);
+      }
+
+      this.boundInputHandler = this.onInput_.bind(this);
+      this.boundChangeHandler = this.onChange_.bind(this);
+      this.boundMouseUpHandler = this.onMouseUp_.bind(this);
+      this.boundContainerMouseDownHandler = this.onContainerMouseDown_.bind(this);
+      this.element_.addEventListener('input', this.boundInputHandler);
+      this.element_.addEventListener('change', this.boundChangeHandler);
+      this.element_.addEventListener('mouseup', this.boundMouseUpHandler);
+      this.element_.parentElement.addEventListener('mousedown', this.boundContainerMouseDownHandler);
+
+      this.updateValueStyles_();
+      this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialSlider,
+    classAsString: 'MaterialSlider',
+    cssClass: 'mdl-js-slider',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/slider/snippets/demo.html b/node_modules/material-design-lite/src/slider/snippets/demo.html
new file mode 100644
index 0000000..c7975d7
--- /dev/null
+++ b/node_modules/material-design-lite/src/slider/snippets/demo.html
@@ -0,0 +1,10 @@
+  <div class="demo-preview-block">
+    <p>
+      <input class="mdl-slider mdl-js-slider" type="range"
+        min="0" max="100" value="0" tabindex="0">
+    </p>
+    <p>
+      <input class="mdl-slider mdl-js-slider" type="range"
+        min="0" max="100" value="10" tabindex="0">
+    </p>
+  </div>
diff --git a/node_modules/material-design-lite/src/slider/snippets/slider-default-demo.html b/node_modules/material-design-lite/src/slider/snippets/slider-default-demo.html
new file mode 100644
index 0000000..53cce0e
--- /dev/null
+++ b/node_modules/material-design-lite/src/slider/snippets/slider-default-demo.html
@@ -0,0 +1,7 @@
+<style>
+  .demo-slider__slider-default .mdl-slider {
+    width: 30vw;
+    max-width: 260px;
+  }
+</style>
+{% include "slider-default.html" %}
diff --git a/node_modules/material-design-lite/src/slider/snippets/slider-default.html b/node_modules/material-design-lite/src/slider/snippets/slider-default.html
new file mode 100644
index 0000000..c0fd976
--- /dev/null
+++ b/node_modules/material-design-lite/src/slider/snippets/slider-default.html
@@ -0,0 +1,3 @@
+<!-- Default Slider -->
+<input class="mdl-slider mdl-js-slider" type="range"
+  min="0" max="100" value="0" tabindex="0">
diff --git a/node_modules/material-design-lite/src/slider/snippets/slider-starting-value-demo.html b/node_modules/material-design-lite/src/slider/snippets/slider-starting-value-demo.html
new file mode 100644
index 0000000..f3378c5
--- /dev/null
+++ b/node_modules/material-design-lite/src/slider/snippets/slider-starting-value-demo.html
@@ -0,0 +1,8 @@
+<style>
+  .demo-slider__slider-starting-value .mdl-slider {
+    width: 30vw;
+    max-width: 260px;
+  }
+</style>
+
+{% include "slider-starting-value.html" %}
diff --git a/node_modules/material-design-lite/src/slider/snippets/slider-starting-value.html b/node_modules/material-design-lite/src/slider/snippets/slider-starting-value.html
new file mode 100644
index 0000000..80f97b9
--- /dev/null
+++ b/node_modules/material-design-lite/src/slider/snippets/slider-starting-value.html
@@ -0,0 +1,3 @@
+<!-- Slider with Starting Value -->
+<input class="mdl-slider mdl-js-slider" type="range"
+  min="0" max="100" value="25" tabindex="0">
diff --git a/node_modules/material-design-lite/src/snackbar/README.md b/node_modules/material-design-lite/src/snackbar/README.md
new file mode 100644
index 0000000..4bace84
--- /dev/null
+++ b/node_modules/material-design-lite/src/snackbar/README.md
@@ -0,0 +1,102 @@
+## Introduction
+
+The Material Design Lite (MDL) **snackbar** component is a container used to notify a user of an operation's status.
+It displays at the bottom of the screen.
+A snackbar may contain an action button to execute a command for the user.
+Actions should undo the committed action or retry it if it failed for example.
+Actions should not be to close the snackbar.
+By not providing an action, the snackbar becomes a **toast** component.
+
+## Basic Usage:
+
+Start a snackbar with a container div element.
+On that container define the `mdl-js-snackbar` and `mdl-snackbar` classes.
+It is also beneficial to add the aria live and atomic values to this container.
+
+Within the container create a container element for the message.
+This element should have the class `mdl-snackbar__text`.
+Leave this element empty!
+Text is added when the snackbar is called to be shown.
+
+Second in the container, add a button element.
+This element should have the class `mdl-snackbar__action`.
+It is recommended to set the type to button to make sure no forms get submitted by accident.
+Leave the text content empty here as well!
+Do not directly apply any event handlers.
+
+You now have complete markup for the snackbar to function.
+All that is left is within your JavaScript to call the `showSnackbar` method on the snackbar container.
+This takes a [plain object](#data-object) to configure the snackbar content appropriately.
+You may call it multiple consecutive times and messages will stack.
+
+## Examples
+
+All snackbars should be shown through the same element.
+
+#### Markup:
+
+```html
+<div aria-live="assertive" aria-atomic="true" aria-relevant="text" class="mdl-snackbar mdl-js-snackbar">
+    <div class="mdl-snackbar__text"></div>
+    <button type="button" class="mdl-snackbar__action"></button>
+</div>
+```
+
+> Note: In this example there are a few aria attributes for accessibility. Please modify these as-needed for your site.
+
+### Snackbar
+
+```javascript
+var notification = document.querySelector('.mdl-js-snackbar');
+var data = {
+  message: 'Message Sent',
+  actionHandler: function(event) {},
+  actionText: 'Undo',
+  timeout: 10000
+};
+notification.MaterialSnackbar.showSnackbar(data);
+```
+
+### Toast
+
+```javascript
+var notification = document.querySelector('.mdl-js-snackbar');
+notification.MaterialSnackbar.showSnackbar(
+  {
+    message: 'Image Uploaded'
+  }
+);
+```
+
+## CSS Classes
+
+### Blocks
+
+| MDL Class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-snackbar` | Defines the container of the snackbar component. | Required on snackbar container |
+
+### Elements
+
+| MDL Class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-snackbar__text` | Defines the element containing the text of the snackbar. | Required |
+| `mdl-snackbar__action` | Defines the element that triggers the action of a snackbar. | Required |
+
+### Modifiers
+
+| MDL Class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-snackbar--active` | Marks the snackbar as active which causes it to display. | Required when active. Controlled in JavaScript |
+
+## Data Object
+
+The Snackbar components `showSnackbar` method takes an object for snackbar data.
+The table below shows the properties and their usage.
+
+| Property | Effect | Remarks | Type |
+|-----------|--------|---------|---------|
+| message   | The text message to display. | Required | String |
+| timeout   | The amount of time in milliseconds to show the snackbar. | Optional (default 2750) | Integer |
+| actionHandler | The function to execute when the action is clicked. | Optional | Function |
+| actionText | The text to display for the action button. | Required if actionHandler is set |  String. |
diff --git a/node_modules/material-design-lite/src/snackbar/_snackbar.scss b/node_modules/material-design-lite/src/snackbar/_snackbar.scss
new file mode 100644
index 0000000..ac97598
--- /dev/null
+++ b/node_modules/material-design-lite/src/snackbar/_snackbar.scss
@@ -0,0 +1,89 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-snackbar {
+  position: fixed;
+  bottom: 0;
+  left: 50%;
+  cursor: default;
+  background-color: $snackbar-background-color;
+  z-index: 3;
+  display: block;
+  display: flex;
+  justify-content: space-between;
+  font-family: $preferred_font;
+  will-change: transform;
+  transform: translate(0, 80px);
+  transition: transform 0.25s $animation-curve-fast-out-linear-in;
+  pointer-events: none;
+  @media(max-width: $snackbar-tablet-breakpoint - 1) {
+    width: 100%;
+    left: 0;
+    min-height: 48px;
+    max-height: 80px;
+  }
+  @media(min-width: $snackbar-tablet-breakpoint) {
+    min-width: 288px;
+    max-width: 568px;
+    border-radius: 2px;
+    transform: translate(-50%, 80px);
+  }
+  &--active {
+    transform: translate(0, 0);
+    pointer-events: auto;
+    transition: transform 0.25s $animation-curve-linear-out-slow-in;
+
+    @media(min-width: $snackbar-tablet-breakpoint) {
+      transform: translate(-50%, 0);
+    }
+  }
+
+  &__text {
+    padding: 14px 12px 14px 24px;
+    vertical-align: middle;
+    color: white;
+    float: left;
+  }
+
+  &__action {
+    background: transparent;
+    border: none;
+    color: $snackbar-action-color;
+    float: right;
+    text-transform: uppercase;
+    padding: 14px 24px 14px 12px;
+    @include typo-button();
+    overflow: hidden;
+    outline: none;
+    opacity: 0;
+    pointer-events: none;
+    cursor: pointer;
+    text-decoration: none;
+    text-align: center;
+    align-self: center;
+
+    &::-moz-focus-inner {
+      border: 0;
+    }
+    &:not([aria-hidden]) {
+      opacity: 1;
+      pointer-events: auto;
+    }
+  }
+}
diff --git a/node_modules/material-design-lite/src/snackbar/snackbar.js b/node_modules/material-design-lite/src/snackbar/snackbar.js
new file mode 100644
index 0000000..7a855ab
--- /dev/null
+++ b/node_modules/material-design-lite/src/snackbar/snackbar.js
@@ -0,0 +1,189 @@
+/**
+ * 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.
+ */
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Snackbar MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialSnackbar = function MaterialSnackbar(element) {
+    this.element_ = element;
+    this.textElement_ = this.element_.querySelector('.' + this.cssClasses_.MESSAGE);
+    this.actionElement_ = this.element_.querySelector('.' + this.cssClasses_.ACTION);
+    if (!this.textElement_) {
+      throw new Error('There must be a message element for a snackbar.');
+    }
+    if (!this.actionElement_) {
+      throw new Error('There must be an action element for a snackbar.');
+    }
+    this.active = false;
+    this.actionHandler_ = undefined;
+    this.message_ = undefined;
+    this.actionText_ = undefined;
+    this.queuedNotifications_ = [];
+    this.setActionHidden_(true);
+  };
+  window['MaterialSnackbar'] = MaterialSnackbar;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialSnackbar.prototype.Constant_ = {
+    // The duration of the snackbar show/hide animation, in ms.
+    ANIMATION_LENGTH: 250
+  };
+
+  /**
+   * 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
+   */
+  MaterialSnackbar.prototype.cssClasses_ = {
+    SNACKBAR: 'mdl-snackbar',
+    MESSAGE: 'mdl-snackbar__text',
+    ACTION: 'mdl-snackbar__action',
+    ACTIVE: 'mdl-snackbar--active'
+  };
+
+  /**
+   * Display the snackbar.
+   *
+   * @private
+   */
+  MaterialSnackbar.prototype.displaySnackbar_ = function() {
+    this.element_.setAttribute('aria-hidden', 'true');
+
+    if (this.actionHandler_) {
+      this.actionElement_.textContent = this.actionText_;
+      this.actionElement_.addEventListener('click', this.actionHandler_);
+      this.setActionHidden_(false);
+    }
+
+    this.textElement_.textContent = this.message_;
+    this.element_.classList.add(this.cssClasses_.ACTIVE);
+    this.element_.setAttribute('aria-hidden', 'false');
+    setTimeout(this.cleanup_.bind(this), this.timeout_);
+
+  };
+
+  /**
+   * Show the snackbar.
+   *
+   * @param {Object} data The data for the notification.
+   * @public
+   */
+  MaterialSnackbar.prototype.showSnackbar = function(data) {
+    if (data === undefined) {
+      throw new Error(
+        'Please provide a data object with at least a message to display.');
+    }
+    if (data['message'] === undefined) {
+      throw new Error('Please provide a message to be displayed.');
+    }
+    if (data['actionHandler'] && !data['actionText']) {
+      throw new Error('Please provide action text with the handler.');
+    }
+    if (this.active) {
+      this.queuedNotifications_.push(data);
+    } else {
+      this.active = true;
+      this.message_ = data['message'];
+      if (data['timeout']) {
+        this.timeout_ = data['timeout'];
+      } else {
+        this.timeout_ = 2750;
+      }
+      if (data['actionHandler']) {
+        this.actionHandler_ = data['actionHandler'];
+      }
+      if (data['actionText']) {
+        this.actionText_ = data['actionText'];
+      }
+      this.displaySnackbar_();
+    }
+  };
+  MaterialSnackbar.prototype['showSnackbar'] = MaterialSnackbar.prototype.showSnackbar;
+
+  /**
+   * Check if the queue has items within it.
+   * If it does, display the next entry.
+   *
+   * @private
+   */
+  MaterialSnackbar.prototype.checkQueue_ = function() {
+    if (this.queuedNotifications_.length > 0) {
+      this.showSnackbar(this.queuedNotifications_.shift());
+    }
+  };
+
+  /**
+   * Cleanup the snackbar event listeners and accessiblity attributes.
+   *
+   * @private
+   */
+  MaterialSnackbar.prototype.cleanup_ = function() {
+    this.element_.classList.remove(this.cssClasses_.ACTIVE);
+    setTimeout(function() {
+      this.element_.setAttribute('aria-hidden', 'true');
+      this.textElement_.textContent = '';
+      if (!Boolean(this.actionElement_.getAttribute('aria-hidden'))) {
+        this.setActionHidden_(true);
+        this.actionElement_.textContent = '';
+        this.actionElement_.removeEventListener('click', this.actionHandler_);
+      }
+      this.actionHandler_ = undefined;
+      this.message_ = undefined;
+      this.actionText_ = undefined;
+      this.active = false;
+      this.checkQueue_();
+    }.bind(this), /** @type {number} */ (this.Constant_.ANIMATION_LENGTH));
+  };
+
+  /**
+   * Set the action handler hidden state.
+   *
+   * @param {boolean} value
+   * @private
+   */
+  MaterialSnackbar.prototype.setActionHidden_ = function(value) {
+    if (value) {
+      this.actionElement_.setAttribute('aria-hidden', 'true');
+    } else {
+      this.actionElement_.removeAttribute('aria-hidden');
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialSnackbar,
+    classAsString: 'MaterialSnackbar',
+    cssClass: 'mdl-js-snackbar',
+    widget: true
+  });
+
+})();
diff --git a/node_modules/material-design-lite/src/snackbar/snippets/snackbar.html b/node_modules/material-design-lite/src/snackbar/snippets/snackbar.html
new file mode 100644
index 0000000..6e07fee
--- /dev/null
+++ b/node_modules/material-design-lite/src/snackbar/snippets/snackbar.html
@@ -0,0 +1,27 @@
+<button id="demo-show-snackbar" class="mdl-button mdl-js-button mdl-button--raised" type="button">Show Snackbar</button>
+<div id="demo-snackbar-example" class="mdl-js-snackbar mdl-snackbar">
+  <div class="mdl-snackbar__text"></div>
+  <button class="mdl-snackbar__action" type="button"></button>
+</div>
+<script>
+(function() {
+  'use strict';
+  var snackbarContainer = document.querySelector('#demo-snackbar-example');
+  var showSnackbarButton = document.querySelector('#demo-show-snackbar');
+  var handler = function(event) {
+    showSnackbarButton.style.backgroundColor = '';
+  };
+  showSnackbarButton.addEventListener('click', function() {
+    'use strict';
+    showSnackbarButton.style.backgroundColor = '#' +
+        Math.floor(Math.random() * 0xFFFFFF).toString(16);
+    var data = {
+      message: 'Button color changed.',
+      timeout: 2000,
+      actionHandler: handler,
+      actionText: 'Undo'
+    };
+    snackbarContainer.MaterialSnackbar.showSnackbar(data);
+  });
+}());
+</script>
diff --git a/node_modules/material-design-lite/src/snackbar/snippets/toast.html b/node_modules/material-design-lite/src/snackbar/snippets/toast.html
new file mode 100644
index 0000000..6505692
--- /dev/null
+++ b/node_modules/material-design-lite/src/snackbar/snippets/toast.html
@@ -0,0 +1,18 @@
+<button id="demo-show-toast" class="mdl-button mdl-js-button mdl-button--raised" type="button">Show Toast</button>
+<div id="demo-toast-example" class="mdl-js-snackbar mdl-snackbar">
+  <div class="mdl-snackbar__text"></div>
+  <button class="mdl-snackbar__action" type="button"></button>
+</div>
+<script>
+(function() {
+  'use strict';
+  window['counter'] = 0;
+  var snackbarContainer = document.querySelector('#demo-toast-example');
+  var showToastButton = document.querySelector('#demo-show-toast');
+  showToastButton.addEventListener('click', function() {
+    'use strict';
+    var data = {message: 'Example Message # ' + ++counter};
+    snackbarContainer.MaterialSnackbar.showSnackbar(data);
+  });
+}());
+</script>
diff --git a/node_modules/material-design-lite/src/spinner/README.md b/node_modules/material-design-lite/src/spinner/README.md
new file mode 100755
index 0000000..1da695c
--- /dev/null
+++ b/node_modules/material-design-lite/src/spinner/README.md
@@ -0,0 +1,48 @@
+## Introduction
+
+The Material Design Lite (MDL) **spinner** component is an enhanced replacement for the classic "wait cursor" (which varies significantly among hardware and software versions) and indicates that there is an ongoing process, the results of which are not yet available. A spinner consists of an open circle that changes colors as it animates in a clockwise direction, and clearly communicates that a process has been started but not completed.
+
+A spinner performs no action itself, either by its display nor when the user clicks or touches it, and does not indicate a process's specific progress or degree of completion. The MDL spinner component provides various types of spinners, and allows you to add display effects.
+
+Spinners are a fairly new feature of most user interfaces, and provide users with a consistent visual cue about ongoing activity, regardless of hardware device,  operating system, or browser environment. Their design and use is an important factor in the overall user experience.
+
+### To include an MDL **spinner** component:
+
+&nbsp;1. Code an element, such as a `<div>`, `<p>`, or `<span>`, to contain the spinner; the element should have no content of its own.
+```html
+<div></div>
+```
+&nbsp;2. Add one or more MDL classes, separated by spaces, to the container using the `class` attribute.
+```html
+<div class="mdl-spinner mdl-js-spinner is-active"></div>
+```
+
+The spinner component is ready for use.
+
+#### Examples
+
+A default spinner in a div.
+
+```html
+<div class="mdl-spinner mdl-js-spinner is-active"></div>
+```
+
+A single-color spinner in a paragraph.
+
+```html
+<p class="mdl-spinner mdl-js-spinner mdl-spinner--single-color is-active"></p>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual enhancements to the spinner. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-spinner` | Defines the container as an MDL spinner component | Required |
+| `mdl-js-spinner` | Assigns basic MDL behavior to spinner | Required |
+| `is-active` | Makes the spinner visible and animated | Optional |
+| `mdl-spinner--single-color` | Uses a single (primary palette) color instead of changing colors | Optional
+
+>**Note:** There is no specific *disabled* version of a spinner; the presence or absence of the `is-active` class determines whether the spinner is visible. For example, this spinner is inactive and invisible: `<div class="mdl-spinner mdl-js-spinner"></div>`
+>This attribute may be added or removed programmatically via scripting.
diff --git a/node_modules/material-design-lite/src/spinner/_spinner.scss b/node_modules/material-design-lite/src/spinner/_spinner.scss
new file mode 100644
index 0000000..602e597
--- /dev/null
+++ b/node_modules/material-design-lite/src/spinner/_spinner.scss
@@ -0,0 +1,256 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+
+.mdl-spinner {
+  display: inline-block;
+  position: relative;
+  width: $spinner-size;
+  height: $spinner-size;
+
+  &:not(.is-upgraded).is-active:after {
+    content: "Loading...";
+  }
+
+  &.is-upgraded.is-active {
+    animation: mdl-spinner__container-rotate $spinner-duration linear infinite;
+  }
+}
+
+@keyframes mdl-spinner__container-rotate {
+  to { transform: rotate(360deg) }
+}
+
+.mdl-spinner__layer {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  opacity: 0;
+}
+
+.mdl-spinner__layer-1 {
+  border-color: $spinner-color-1;
+
+  .mdl-spinner--single-color & {
+    border-color: $spinner-single-color;
+  }
+
+  .mdl-spinner.is-active & {
+    animation:
+        mdl-spinner__fill-unfill-rotate (4 * $spinner-arc-time)
+            $animation-curve-fast-out-slow-in infinite both,
+        mdl-spinner__layer-1-fade-in-out (4 * $spinner-arc-time)
+            $animation-curve-fast-out-slow-in infinite both;
+  }
+}
+
+.mdl-spinner__layer-2 {
+  border-color: $spinner-color-2;
+
+  .mdl-spinner--single-color & {
+    border-color: $spinner-single-color;
+  }
+
+  .mdl-spinner.is-active & {
+    animation:
+        mdl-spinner__fill-unfill-rotate (4 * $spinner-arc-time)
+            $animation-curve-fast-out-slow-in infinite both,
+        mdl-spinner__layer-2-fade-in-out (4 * $spinner-arc-time)
+            $animation-curve-fast-out-slow-in infinite both;
+  }
+}
+
+.mdl-spinner__layer-3 {
+  border-color: $spinner-color-3;
+
+  .mdl-spinner--single-color & {
+    border-color: $spinner-single-color;
+  }
+
+  .mdl-spinner.is-active & {
+    animation:
+        mdl-spinner__fill-unfill-rotate (4 * $spinner-arc-time)
+            $animation-curve-fast-out-slow-in infinite both,
+        mdl-spinner__layer-3-fade-in-out (4 * $spinner-arc-time)
+            $animation-curve-fast-out-slow-in infinite both;
+  }
+}
+
+.mdl-spinner__layer-4 {
+  border-color: $spinner-color-4;
+
+  .mdl-spinner--single-color & {
+    border-color: $spinner-single-color;
+  }
+
+  .mdl-spinner.is-active & {
+    animation:
+        mdl-spinner__fill-unfill-rotate (4 * $spinner-arc-time)
+            $animation-curve-fast-out-slow-in infinite both,
+        mdl-spinner__layer-4-fade-in-out (4 * $spinner-arc-time)
+            $animation-curve-fast-out-slow-in infinite both;
+  }
+}
+
+@keyframes mdl-spinner__fill-unfill-rotate {
+  12.5% { transform: rotate(0.5 * $spinner-arc-size);  }
+  25%   { transform: rotate($spinner-arc-size);  }
+  37.5% { transform: rotate(1.5 * $spinner-arc-size);  }
+  50%   { transform: rotate(2 * $spinner-arc-size);  }
+  62.5% { transform: rotate(2.5 * $spinner-arc-size);  }
+  75%   { transform: rotate(3 * $spinner-arc-size);  }
+  87.5% { transform: rotate(3.5 * $spinner-arc-size); }
+  to    { transform: rotate(4 * $spinner-arc-size); }
+}
+
+/**
+* HACK: Even though the intention is to have the current .mdl-spinner__layer-N
+* at `opacity: 1`, we set it to `opacity: 0.99` instead since this forces Chrome
+* to do proper subpixel rendering for the elements being animated. This is
+* especially visible in Chrome 39 on Ubuntu 14.04. See:
+*
+* - https://github.com/Polymer/paper-spinner/issues/9
+* - https://code.google.com/p/chromium/issues/detail?id=436255
+*/
+@keyframes mdl-spinner__layer-1-fade-in-out {
+  from { opacity: 0.99; }
+  25% { opacity: 0.99; }
+  26% { opacity: 0; }
+  89% { opacity: 0; }
+  90% { opacity: 0.99; }
+  100% { opacity: 0.99; }
+}
+
+@keyframes mdl-spinner__layer-2-fade-in-out {
+  from { opacity: 0; }
+  15% { opacity: 0; }
+  25% { opacity: 0.99; }
+  50% { opacity: 0.99; }
+  51% { opacity: 0; }
+}
+
+@keyframes mdl-spinner__layer-3-fade-in-out {
+  from { opacity: 0; }
+  40% { opacity: 0; }
+  50% { opacity: 0.99; }
+  75% { opacity: 0.99; }
+  76% { opacity: 0; }
+}
+
+@keyframes mdl-spinner__layer-4-fade-in-out {
+  from { opacity: 0; }
+  65% { opacity: 0; }
+  75% { opacity: 0.99; }
+  90% { opacity: 0.99; }
+  100% { opacity: 0; }
+}
+
+/**
+* Patch the gap that appear between the two adjacent
+* div.mdl-spinner__circle-clipper while the spinner is rotating
+* (appears on Chrome 38, Safari 7.1, and IE 11).
+*
+* Update: the gap no longer appears on Chrome when .mdl-spinner__layer-N's
+* opacity is 0.99, but still does on Safari and IE.
+*/
+.mdl-spinner__gap-patch {
+  position: absolute;
+  box-sizing: border-box;
+  top: 0;
+  left: 45%;
+  width: 10%;
+  height: 100%;
+  overflow: hidden;
+  border-color: inherit;
+
+  & .mdl-spinner__circle {
+    width: 1000%;
+    left: -450%;
+  }
+}
+
+.mdl-spinner__circle-clipper {
+  display: inline-block;
+  position: relative;
+  width: 50%;
+  height: 100%;
+  overflow: hidden;
+  border-color: inherit;
+
+  &.mdl-spinner__left {
+    float: left;
+  }
+
+  &.mdl-spinner__right {
+    float: right;
+  }
+
+  & .mdl-spinner__circle {
+    width: 200%;
+  }
+}
+
+.mdl-spinner__circle {
+  box-sizing: border-box;
+  height: 100%;
+  border-width: $spinner-stroke-width;
+  border-style: solid;
+  border-color: inherit;
+  border-bottom-color: transparent !important;
+  border-radius: 50%;
+  animation: none;
+
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+
+  .mdl-spinner__left & {
+    border-right-color: transparent !important;
+    transform: rotate(129deg);
+
+    .mdl-spinner.is-active & {
+      animation: mdl-spinner__left-spin $spinner-arc-time
+          $animation-curve-fast-out-slow-in infinite both;
+    }
+  }
+
+  .mdl-spinner__right & {
+    left: -100%;
+    border-left-color: transparent !important;
+    transform: rotate(-129deg);
+
+    .mdl-spinner.is-active & {
+      animation: mdl-spinner__right-spin $spinner-arc-time
+          $animation-curve-fast-out-slow-in infinite both;
+    }
+  }
+}
+
+@keyframes mdl-spinner__left-spin {
+  from { transform: rotate(130deg); }
+  50% { transform: rotate(-5deg); }
+  to { transform: rotate(130deg); }
+}
+
+@keyframes mdl-spinner__right-spin {
+  from { transform: rotate(-130deg); }
+  50% { transform: rotate(5deg); }
+  to { transform: rotate(-130deg); }
+}
diff --git a/node_modules/material-design-lite/src/spinner/snippets/spinner-default.html b/node_modules/material-design-lite/src/spinner/snippets/spinner-default.html
new file mode 100644
index 0000000..26961c8
--- /dev/null
+++ b/node_modules/material-design-lite/src/spinner/snippets/spinner-default.html
@@ -0,0 +1,2 @@
+<!-- MDL Spinner Component -->
+<div class="mdl-spinner mdl-js-spinner is-active"></div>
diff --git a/node_modules/material-design-lite/src/spinner/snippets/spinner-single-color.html b/node_modules/material-design-lite/src/spinner/snippets/spinner-single-color.html
new file mode 100644
index 0000000..083abdf
--- /dev/null
+++ b/node_modules/material-design-lite/src/spinner/snippets/spinner-single-color.html
@@ -0,0 +1,2 @@
+<!-- MDL Spinner Component with Single Color -->
+<div class="mdl-spinner mdl-spinner--single-color mdl-js-spinner is-active"></div>
diff --git a/node_modules/material-design-lite/src/spinner/spinner.js b/node_modules/material-design-lite/src/spinner/spinner.js
new file mode 100644
index 0000000..8159fb3
--- /dev/null
+++ b/node_modules/material-design-lite/src/spinner/spinner.js
@@ -0,0 +1,147 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Spinner 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.
+   * @constructor
+   */
+  var MaterialSpinner = function MaterialSpinner(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialSpinner'] = MaterialSpinner;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialSpinner.prototype.Constant_ = {
+    MDL_SPINNER_LAYER_COUNT: 4
+  };
+
+  /**
+   * 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
+   */
+  MaterialSpinner.prototype.CssClasses_ = {
+    MDL_SPINNER_LAYER: 'mdl-spinner__layer',
+    MDL_SPINNER_CIRCLE_CLIPPER: 'mdl-spinner__circle-clipper',
+    MDL_SPINNER_CIRCLE: 'mdl-spinner__circle',
+    MDL_SPINNER_GAP_PATCH: 'mdl-spinner__gap-patch',
+    MDL_SPINNER_LEFT: 'mdl-spinner__left',
+    MDL_SPINNER_RIGHT: 'mdl-spinner__right'
+  };
+
+  /**
+   * Auxiliary method to create a spinner layer.
+   *
+   * @param {number} index Index of the layer to be created.
+   * @public
+   */
+  MaterialSpinner.prototype.createLayer = function(index) {
+    var layer = document.createElement('div');
+    layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER);
+    layer.classList.add(this.CssClasses_.MDL_SPINNER_LAYER + '-' + index);
+
+    var leftClipper = document.createElement('div');
+    leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);
+    leftClipper.classList.add(this.CssClasses_.MDL_SPINNER_LEFT);
+
+    var gapPatch = document.createElement('div');
+    gapPatch.classList.add(this.CssClasses_.MDL_SPINNER_GAP_PATCH);
+
+    var rightClipper = document.createElement('div');
+    rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE_CLIPPER);
+    rightClipper.classList.add(this.CssClasses_.MDL_SPINNER_RIGHT);
+
+    var circleOwners = [leftClipper, gapPatch, rightClipper];
+
+    for (var i = 0; i < circleOwners.length; i++) {
+      var circle = document.createElement('div');
+      circle.classList.add(this.CssClasses_.MDL_SPINNER_CIRCLE);
+      circleOwners[i].appendChild(circle);
+    }
+
+    layer.appendChild(leftClipper);
+    layer.appendChild(gapPatch);
+    layer.appendChild(rightClipper);
+
+    this.element_.appendChild(layer);
+  };
+  MaterialSpinner.prototype['createLayer'] =
+      MaterialSpinner.prototype.createLayer;
+
+  /**
+   * Stops the spinner animation.
+   * Public method for users who need to stop the spinner for any reason.
+   *
+   * @public
+   */
+  MaterialSpinner.prototype.stop = function() {
+    this.element_.classList.remove('is-active');
+  };
+  MaterialSpinner.prototype['stop'] = MaterialSpinner.prototype.stop;
+
+  /**
+   * Starts the spinner animation.
+   * Public method for users who need to manually start the spinner for any reason
+   * (instead of just adding the 'is-active' class to their markup).
+   *
+   * @public
+   */
+  MaterialSpinner.prototype.start = function() {
+    this.element_.classList.add('is-active');
+  };
+  MaterialSpinner.prototype['start'] = MaterialSpinner.prototype.start;
+
+  /**
+   * Initialize element.
+   */
+  MaterialSpinner.prototype.init = function() {
+    if (this.element_) {
+      for (var i = 1; i <= this.Constant_.MDL_SPINNER_LAYER_COUNT; i++) {
+        this.createLayer(i);
+      }
+
+      this.element_.classList.add('is-upgraded');
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialSpinner,
+    classAsString: 'MaterialSpinner',
+    cssClass: 'mdl-js-spinner',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/styleguide.scss b/node_modules/material-design-lite/src/styleguide.scss
new file mode 100644
index 0000000..ee418fb
--- /dev/null
+++ b/node_modules/material-design-lite/src/styleguide.scss
@@ -0,0 +1,101 @@
+/**
+ * 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.
+ */
+
+@import "material-design-lite";
+
+$padding: 24px;
+
+body {
+  margin: 0px;
+}
+
+.styleguide-demo h1 {
+  margin: ($padding * 2) $padding 0 $padding;
+}
+
+.styleguide-demo h1:after {
+  content: '';
+
+  display: block;
+  width: 100%;
+
+  border-bottom: 1px solid rgba(0,0,0,0.5);
+  margin-top: $padding;
+}
+
+.styleguide-demo {
+  opacity: 0;
+
+  transition: opacity 0.6s ease;
+}
+
+.styleguide-masthead {
+  height: 256px;
+  background: unquote("rgb(#{nth($palette-grey, 10)})");
+  padding: 115px 16px 0;
+}
+
+.styleguide-container {
+  position: relative;
+  max-width: 960px;
+  width: 100%;
+}
+
+.styleguide-title {
+  color: #fff;
+  bottom: auto;
+  position: relative;
+  font-size: 56px;
+  font-weight: 300;
+  line-height: 1;
+  letter-spacing: -0.02em;
+
+  &:after {
+    border-bottom: 0px;
+  }
+
+  span {
+    font-weight: 300;
+  }
+}
+
+.mdl-styleguide .mdl-layout__drawer .mdl-navigation__link {
+  padding: 10px 24px;
+}
+
+.demosLoaded .styleguide-demo {
+  opacity: 1;
+}
+
+iframe {
+  display: block;
+
+  width: 100%;
+
+  border: none;
+}
+
+iframe.heightSet {
+  overflow: hidden;
+}
+
+.demo-wrapper {
+  margin: $padding;
+
+  iframe {
+    border: 1px solid rgba(0,0,0,0.5);
+  }
+}
diff --git a/node_modules/material-design-lite/src/switch/README.md b/node_modules/material-design-lite/src/switch/README.md
new file mode 100755
index 0000000..566c212
--- /dev/null
+++ b/node_modules/material-design-lite/src/switch/README.md
@@ -0,0 +1,64 @@
+## Introduction
+
+The Material Design Lite (MDL) **switch** component is an enhanced version of the standard HTML `<input type="checkbox">` element. A switch consists of a short horizontal "track" with a prominent circular state indicator and, typically, text that clearly communicates a binary condition that will be set or unset when the user clicks or touches it. Like checkboxes, switches may appear individually or in groups, and can be selected and deselected individually. However, switches provide a more intuitive visual representation of their state: left/gray for *off*, right/colored for *on*. The MDL switch component allows you to add both display and click effects.
+
+Switches, particularly as a replacement for certain checkboxes, can be a valuable feature in user interfaces, regardless of a site's content or function. Their design and use is therefore an important factor in the overall user experience. See the switch component's [Material Design specifications page](http://www.google.com/design/spec/components/selection-controls.html#selection-controls-switch) for details.
+
+The enhanced switch component has a more vivid visual look than a standard checkbox, and may be initially or programmatically *disabled*.
+
+### To include an MDL **switch** component:
+
+&nbsp;1. Code a `<label>` element and give it a `for` attribute whose value is the unique id of the switch it will contain.
+```html
+<label for="switch1">
+...
+</label>
+```
+&nbsp;2. Inside the label, code an `<input>` element and give it a `type` attribute whose value is `"checkbox"`. Also give it an `id` attribute whose value matches the label's `for` attribute value.
+```html
+<label for="switch1">
+  <input type="checkbox" id="switch1">
+</label>
+```
+&nbsp;3. Also inside the label, after the checkbox, code a `<span>` element containing the switch's text caption.
+```html
+<label for="switch1">
+  <input type="checkbox" id="switch1">
+  <span>Sound off/on</span>
+</label>
+```
+&nbsp;4. Add one or more MDL classes, separated by spaces, to the label, switch, and caption using the `class` attribute.
+```html
+<label for="switch1" class="mdl-switch mdl-js-switch">
+  <input type="checkbox" id="switch1" class="mdl-switch__input">
+  <span class="mdl-switch__label">Sound off/on</span>
+</label>
+```
+
+The switch component is ready for use.
+
+#### Example
+
+A switch with a ripple click effect.
+
+```html
+<label for="switch1" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
+  <input type="checkbox" id="switch1" class="mdl-switch__input">
+  <span class="mdl-switch__label">Sound off/on</span>
+</label>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the switch. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-switch` | Defines label as an MDL component | Required on label element|
+| `mdl-js-switch` | Assigns basic MDL behavior to label | Required on label element |
+| `mdl-switch__input` | Applies basic MDL behavior to switch | Required on input element (switch) |
+| `mdl-switch__label` | Applies basic MDL behavior to caption | Required on span element (caption) |
+| `mdl-js-ripple-effect` | Applies *ripple* click effect | Optional; goes on label element, not input element (switch) |
+
+>**Note:** Disabled versions of all available switch types are provided, and are invoked with the standard HTML boolean attribute `disabled`. `<input type="checkbox" id="switch5" class="mdl-switch__input" disabled>`
+>This attribute may be added or removed programmatically via scripting.
diff --git a/node_modules/material-design-lite/src/switch/_switch.scss b/node_modules/material-design-lite/src/switch/_switch.scss
new file mode 100644
index 0000000..9cd726f
--- /dev/null
+++ b/node_modules/material-design-lite/src/switch/_switch.scss
@@ -0,0 +1,203 @@
+/**
+ * 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.
+ */
+
+
+@import "../variables";
+@import "../mixins";
+
+.mdl-switch {
+  position: relative;
+
+  z-index: 1;
+
+  vertical-align: middle;
+
+  display: inline-block;
+
+  box-sizing: border-box;
+  width: 100%;
+  height: $switch-label-height;
+  margin: 0;
+  padding: 0;
+
+  overflow: visible;
+
+  &.is-upgraded {
+    padding-left: $switch-track-length - 8px;
+  }
+
+  // avoids blue box around switch
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+.mdl-switch__input {
+  line-height: $switch-label-height;
+
+  .mdl-switch.is-upgraded & {
+    // Hide input element, while still making it respond to focus.
+    position: absolute;
+    width: 0;
+    height: 0;
+    margin: 0;
+    padding: 0;
+    opacity: 0;
+    -ms-appearance: none;
+    -moz-appearance: none;
+    -webkit-appearance: none;
+    appearance: none;
+    border: none;
+  }
+}
+
+.mdl-switch__track {
+  background: $switch-off-track-color;
+  position: absolute;
+  left: 0;
+  top: $switch-track-top;
+  height: $switch-track-height;
+  width: $switch-track-length;
+  border-radius: $switch-track-height;
+
+  cursor: pointer;
+
+  .mdl-switch.is-checked & {
+    background: $switch-track-color;
+  }
+
+  fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled & {
+    background: $switch-disabled-track-color;
+    cursor: auto;
+  }
+}
+
+.mdl-switch__thumb {
+  background: $switch-off-thumb-color;
+  position: absolute;
+  left: 0;
+  top: $switch-thumb-top;
+  height: $switch-thumb-size;
+  width: $switch-thumb-size;
+  border-radius: 50%;
+
+  cursor: pointer;
+
+  @include shadow-2dp();
+
+  @include material-animation-default(0.28s);
+  transition-property: left;
+
+  .mdl-switch.is-checked & {
+    background: $switch-thumb-color;
+    left: $switch-track-length - $switch-thumb-size;
+
+    @include shadow-3dp();
+  }
+
+  fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled & {
+    background: $switch-disabled-thumb-color;
+    cursor: auto;
+  }
+}
+
+.mdl-switch__focus-helper {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+
+  transform: translate(-$switch-helper-size / 2, -$switch-helper-size / 2);
+
+  display: inline-block;
+
+  box-sizing: border-box;
+  width: $switch-helper-size;
+  height: $switch-helper-size;
+  border-radius: 50%;
+
+  background-color: transparent;
+
+  .mdl-switch.is-focused & {
+    box-shadow: 0 0 0px (($switch-ripple-size - $switch-helper-size) / 2)
+        rgba(0, 0, 0, 0.1);
+    background-color: rgba(0, 0, 0, 0.1);
+  }
+
+  .mdl-switch.is-focused.is-checked & {
+    box-shadow: 0 0 0px (($switch-ripple-size - $switch-helper-size) / 2)
+        $switch-faded-color;
+    background-color: $switch-faded-color;
+  }
+}
+
+.mdl-switch__label {
+  position: relative;
+  cursor: pointer;
+  font-size: $switch-label-font-size;
+  line-height: $switch-label-height;
+  margin: 0;
+  left: 24px;
+
+  fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled & {
+    color: $switch-disabled-thumb-color;
+    cursor: auto;
+  }
+}
+
+.mdl-switch__ripple-container {
+  position: absolute;
+  z-index: 2;
+  top: -($switch-ripple-size - $switch-label-height) / 2;
+  left: $switch-thumb-size / 2 - $switch-ripple-size / 2;
+
+  box-sizing: border-box;
+  width: $switch-ripple-size;
+  height: $switch-ripple-size;
+  border-radius: 50%;
+
+  cursor: pointer;
+
+  overflow: hidden;
+  -webkit-mask-image: -webkit-radial-gradient(circle, white, black);
+
+  transition-duration: 0.40s;
+  transition-timing-function: step-end;
+  transition-property: left;
+
+  & .mdl-ripple {
+    background: $switch-color;
+  }
+
+  fieldset[disabled] .mdl-switch,
+  .mdl-switch.is-disabled & {
+    cursor: auto;
+  }
+
+  fieldset[disabled] .mdl-switch & .mdl-ripple,
+  .mdl-switch.is-disabled & .mdl-ripple {
+    background: transparent;
+  }
+
+  .mdl-switch.is-checked & {
+    left: $switch-track-length - $switch-ripple-size / 2 -
+        $switch-thumb-size / 2;
+  }
+}
diff --git a/node_modules/material-design-lite/src/switch/snippets/switch-off.html b/node_modules/material-design-lite/src/switch/snippets/switch-off.html
new file mode 100644
index 0000000..08f2c76
--- /dev/null
+++ b/node_modules/material-design-lite/src/switch/snippets/switch-off.html
@@ -0,0 +1,4 @@
+<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="switch-2">
+  <input type="checkbox" id="switch-2" class="mdl-switch__input">
+  <span class="mdl-switch__label"></span>
+</label>
diff --git a/node_modules/material-design-lite/src/switch/snippets/switch-on.html b/node_modules/material-design-lite/src/switch/snippets/switch-on.html
new file mode 100644
index 0000000..cc44cee
--- /dev/null
+++ b/node_modules/material-design-lite/src/switch/snippets/switch-on.html
@@ -0,0 +1,4 @@
+<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect" for="switch-1">
+  <input type="checkbox" id="switch-1" class="mdl-switch__input" checked>
+  <span class="mdl-switch__label"></span>
+</label>
diff --git a/node_modules/material-design-lite/src/switch/switch.js b/node_modules/material-design-lite/src/switch/switch.js
new file mode 100644
index 0000000..e71a591
--- /dev/null
+++ b/node_modules/material-design-lite/src/switch/switch.js
@@ -0,0 +1,273 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Checkbox MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialSwitch = function MaterialSwitch(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialSwitch'] = MaterialSwitch;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialSwitch.prototype.Constant_ = {
+    TINY_TIMEOUT: 0.001
+  };
+
+  /**
+   * 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
+   */
+  MaterialSwitch.prototype.CssClasses_ = {
+    INPUT: 'mdl-switch__input',
+    TRACK: 'mdl-switch__track',
+    THUMB: 'mdl-switch__thumb',
+    FOCUS_HELPER: 'mdl-switch__focus-helper',
+    RIPPLE_EFFECT: 'mdl-js-ripple-effect',
+    RIPPLE_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events',
+    RIPPLE_CONTAINER: 'mdl-switch__ripple-container',
+    RIPPLE_CENTER: 'mdl-ripple--center',
+    RIPPLE: 'mdl-ripple',
+    IS_FOCUSED: 'is-focused',
+    IS_DISABLED: 'is-disabled',
+    IS_CHECKED: 'is-checked'
+  };
+
+  /**
+   * Handle change of state.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialSwitch.prototype.onChange_ = function(event) {
+    this.updateClasses_();
+  };
+
+  /**
+   * Handle focus of element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialSwitch.prototype.onFocus_ = function(event) {
+    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle lost focus of element.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialSwitch.prototype.onBlur_ = function(event) {
+    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle mouseup.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialSwitch.prototype.onMouseUp_ = function(event) {
+    this.blur_();
+  };
+
+  /**
+   * Handle class updates.
+   *
+   * @private
+   */
+  MaterialSwitch.prototype.updateClasses_ = function() {
+    this.checkDisabled();
+    this.checkToggleState();
+  };
+
+  /**
+   * Add blur.
+   *
+   * @private
+   */
+  MaterialSwitch.prototype.blur_ = function() {
+    // TODO: figure out why there's a focus event being fired after our blur,
+    // so that we can avoid this hack.
+    window.setTimeout(function() {
+      this.inputElement_.blur();
+    }.bind(this), /** @type {number} */ (this.Constant_.TINY_TIMEOUT));
+  };
+
+  // Public methods.
+
+  /**
+   * Check the components disabled state.
+   *
+   * @public
+   */
+  MaterialSwitch.prototype.checkDisabled = function() {
+    if (this.inputElement_.disabled) {
+      this.element_.classList.add(this.CssClasses_.IS_DISABLED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);
+    }
+  };
+  MaterialSwitch.prototype['checkDisabled'] =
+      MaterialSwitch.prototype.checkDisabled;
+
+  /**
+   * Check the components toggled state.
+   *
+   * @public
+   */
+  MaterialSwitch.prototype.checkToggleState = function() {
+    if (this.inputElement_.checked) {
+      this.element_.classList.add(this.CssClasses_.IS_CHECKED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_CHECKED);
+    }
+  };
+  MaterialSwitch.prototype['checkToggleState'] =
+      MaterialSwitch.prototype.checkToggleState;
+
+  /**
+   * Disable switch.
+   *
+   * @public
+   */
+  MaterialSwitch.prototype.disable = function() {
+    this.inputElement_.disabled = true;
+    this.updateClasses_();
+  };
+  MaterialSwitch.prototype['disable'] = MaterialSwitch.prototype.disable;
+
+  /**
+   * Enable switch.
+   *
+   * @public
+   */
+  MaterialSwitch.prototype.enable = function() {
+    this.inputElement_.disabled = false;
+    this.updateClasses_();
+  };
+  MaterialSwitch.prototype['enable'] = MaterialSwitch.prototype.enable;
+
+  /**
+   * Activate switch.
+   *
+   * @public
+   */
+  MaterialSwitch.prototype.on = function() {
+    this.inputElement_.checked = true;
+    this.updateClasses_();
+  };
+  MaterialSwitch.prototype['on'] = MaterialSwitch.prototype.on;
+
+  /**
+   * Deactivate switch.
+   *
+   * @public
+   */
+  MaterialSwitch.prototype.off = function() {
+    this.inputElement_.checked = false;
+    this.updateClasses_();
+  };
+  MaterialSwitch.prototype['off'] = MaterialSwitch.prototype.off;
+
+  /**
+   * Initialize element.
+   */
+  MaterialSwitch.prototype.init = function() {
+    if (this.element_) {
+      this.inputElement_ = this.element_.querySelector('.' +
+          this.CssClasses_.INPUT);
+
+      var track = document.createElement('div');
+      track.classList.add(this.CssClasses_.TRACK);
+
+      var thumb = document.createElement('div');
+      thumb.classList.add(this.CssClasses_.THUMB);
+
+      var focusHelper = document.createElement('span');
+      focusHelper.classList.add(this.CssClasses_.FOCUS_HELPER);
+
+      thumb.appendChild(focusHelper);
+
+      this.element_.appendChild(track);
+      this.element_.appendChild(thumb);
+
+      this.boundMouseUpHandler = this.onMouseUp_.bind(this);
+
+      if (this.element_.classList.contains(
+          this.CssClasses_.RIPPLE_EFFECT)) {
+        this.element_.classList.add(
+            this.CssClasses_.RIPPLE_IGNORE_EVENTS);
+        this.rippleContainerElement_ = document.createElement('span');
+        this.rippleContainerElement_.classList.add(
+            this.CssClasses_.RIPPLE_CONTAINER);
+        this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_EFFECT);
+        this.rippleContainerElement_.classList.add(this.CssClasses_.RIPPLE_CENTER);
+        this.rippleContainerElement_.addEventListener('mouseup', this.boundMouseUpHandler);
+
+        var ripple = document.createElement('span');
+        ripple.classList.add(this.CssClasses_.RIPPLE);
+
+        this.rippleContainerElement_.appendChild(ripple);
+        this.element_.appendChild(this.rippleContainerElement_);
+      }
+
+      this.boundChangeHandler = this.onChange_.bind(this);
+      this.boundFocusHandler = this.onFocus_.bind(this);
+      this.boundBlurHandler = this.onBlur_.bind(this);
+
+      this.inputElement_.addEventListener('change', this.boundChangeHandler);
+      this.inputElement_.addEventListener('focus', this.boundFocusHandler);
+      this.inputElement_.addEventListener('blur', this.boundBlurHandler);
+      this.element_.addEventListener('mouseup', this.boundMouseUpHandler);
+
+      this.updateClasses_();
+      this.element_.classList.add('is-upgraded');
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialSwitch,
+    classAsString: 'MaterialSwitch',
+    cssClass: 'mdl-js-switch',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/tabs/README.md b/node_modules/material-design-lite/src/tabs/README.md
new file mode 100755
index 0000000..c3f37c6
--- /dev/null
+++ b/node_modules/material-design-lite/src/tabs/README.md
@@ -0,0 +1,150 @@
+## Introduction
+
+The Material Design Lite (MDL) **tab** component is a user interface element that allows different content blocks to share the same screen space in a mutually exclusive manner. Tabs are always presented in sets of two or more, and they make it easy to explore and switch among different views or functional aspects of an app, or to browse categorized data sets individually. Tabs serve as "headings" for their respective content; the *active* tab &mdash; the one whose content is currently displayed &mdash; is always visually distinguished from the others so the user knows which heading the current content belongs to.
+
+Tabs are an established but non-standardized feature in user interfaces, and allow users to view different, but often related, blocks of content (often called *panels*). Tabs save screen real estate and provide intuitive and logical access to data while reducing navigation and associated user confusion. Their design and use is an important factor in the overall user experience. See the tab component's [Material Design specifications page](http://www.google.com/design/spec/components/tabs.html) for details.
+
+### To include a set of MDL **tab** components:
+
+&nbsp;1. Code a `<div>` element; this is the "outer" div, intended to contain all of the tabs and their content.
+```html
+<div>
+</div>
+```
+&nbsp;2. Inside the "outer" div, code one "inner" div for the tabs themselves, and one for each tab's content, all siblings. That is, for three content tabs, you would code four "inner" divs.
+```html
+<div>
+  <div>
+  ...
+  </div>
+  <div>
+  ...
+  </div>
+  <div>
+  ...
+  </div>
+  <div>
+  ...
+  </div>
+</div>
+```
+&nbsp;3. Inside the first "inner" div (the tabs), code one anchor `<a>` (link) tag for each tab. Include `href` attributes with values to match the tabs' `id` attribute values, and some brief link text. On the remaining "inner" divs (the content), code `id` attributes whose values match the links' `href`s.
+```html
+<div>
+  <div>
+    <a href="#tab1">Tab One</a>
+    <a href="#tab2">Tab Two</a>
+    <a href="#tab3">Tab Three</a>
+  </div>
+  <div id="tab1">
+  ...
+  </div>
+  <div id="tab2">
+  ...
+  </div>
+  <div id="tab3">
+  ...
+  </div>
+</div>
+```
+&nbsp;4. Inside the remaining "inner" divs, code the content you intend to display in each panel; use standard HTML tags to structure the content as desired.
+```html
+<div>
+  <div>
+    <a href="#tab1">Tab One</a>
+    <a href="#tab2">Tab Two</a>
+    <a href="#tab3">Tab Three</a>
+  </div>
+  <div id="tab1">
+    <p>First tab's content.</p>
+  </div>
+  <div id="tab2">
+    <p>Second tab's content.</p>
+  </div>
+  <div id="tab3">
+    <p>Third tab's content.</p>
+  </div>
+</div>
+```
+&nbsp;5. Add one or more MDL classes, separated by spaces, to the "outer" and "inner" divs using the `class` attribute; be sure to include the `is-active` class on the tab you want to be displayed by default.
+```html
+<div class="mdl-tabs mdl-js-tabs">
+  <div class="mdl-tabs__tab-bar">
+    <a href="#tab1" class="mdl-tabs__tab">Tab One</a>
+    <a href="#tab2" class="mdl-tabs__tab">Tab Two</a>
+    <a href="#tab3" class="mdl-tabs__tab">Tab Three</a>
+  </div>
+  <div class="mdl-tabs__panel is-active" id="tab1">
+    <p>First tab's content.</p>
+  </div>
+  <div class="mdl-tabs__panel" id="tab2">
+    <p>Second tab's content.</p>
+  </div>
+  <div class="mdl-tabs__panel" id="tab3">
+    <p>Third tab's content.</p>
+  </div>
+</div>
+```
+
+The tab components are ready for use.
+
+#### Example
+
+Three tabs, with ripple effect on tab links.
+
+```html
+<div class="mdl-tabs mdl-js-tabs mdl-js-ripple-effect">
+  <div class="mdl-tabs__tab-bar">
+    <a href="#about-panel" class="mdl-tabs__tab is-active">About the Beatles</a>
+    <a href="#members-panel" class="mdl-tabs__tab">Members</a>
+    <a href="#albums-panel" class="mdl-tabs__tab">Discography</a>
+  </div>
+  <div class="mdl-tabs__panel is-active" id="about-panel">
+    <p><b>The Beatles</b> were a four-piece musical group from Liverpool, England.
+    Formed in 1960, their career spanned just over a decade, yet they are widely
+    regarded as the most influential band in history.</p>
+    <p>Their songs are among the best-loved music of all time. It is said that every
+    minute of every day, a radio station somewhere is playing a Beatles song.</p>
+  </div>
+  <div class="mdl-tabs__panel" id="members-panel">
+    <p>The Beatles' members were:</p>
+    <ul>
+      <li>John Lennon (1940-1980)</li>
+      <li>Paul McCartney (1942-)</li>
+      <li>George Harrison (1943-2001)</li>
+      <li>Ringo Starr (1940-)</li>
+    </ul>
+  </div>
+  <div class="mdl-tabs__panel" id="albums-panel">
+    <p>The Beatles' original UK LPs, in order of release:</p>
+    <ol>
+      <li>Please Please Me (1963)</li>
+      <li>With the Beatles (1963)</li>
+      <li>A Hard Day's Night (1964)</li>
+      <li>Beatles for Sale (1964)</li>
+      <li>Help! (1965)</li>
+      <li>Rubber Soul (1965)</li>
+      <li>Revolver (1966)</li>
+      <li>Sgt. Pepper's Lonely Hearts Club Band (1967)</li>
+      <li>The Beatles ("The White Album", 1968)</li>
+      <li>Yellow Submarine (1969)</li>
+      <li>Abbey Road (1969)</li>
+      <li>Let It Be (1970)</li>
+    </ol>
+  </div>
+</div>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the tabs. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-tabs` | Defines a tabs container as an MDL component | Required on "outer" div element |
+| `mdl-js-tabs` | Assigns basic MDL behavior to tabs container | Required on "outer" div element|
+| `mdl-js-ripple-effect` | Applies *ripple* click effect to tab links | Optional; goes on "outer" div element|
+| `mdl-tabs__tab-bar` | Defines a container as an MDL tabs link bar | Required on first "inner" div element |
+| `mdl-tabs__tab` | Defines an anchor (link) as an MDL tab activator | Required on all links in first "inner" div element |
+| `is-active` | Defines a tab as the default display tab | Required on one (and only one) of the "inner" div (tab) elements |
+| `mdl-tabs__panel` | Defines a container as tab content | Required on each of the "inner" div (tab) elements |
diff --git a/node_modules/material-design-lite/src/tabs/_tabs.scss b/node_modules/material-design-lite/src/tabs/_tabs.scss
new file mode 100644
index 0000000..a9ec51d
--- /dev/null
+++ b/node_modules/material-design-lite/src/tabs/_tabs.scss
@@ -0,0 +1,114 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+
+.mdl-tabs {
+  display: block;
+  width: 100%;
+}
+
+.mdl-tabs__tab-bar {
+    display         : flex;
+    flex-direction  : row;
+    justify-content : center; // ⇾
+    align-content   : space-between; // ||
+    align-items     : flex-start; // ↓
+
+    height          : 48px;
+    padding         : 0 0 0 0;
+    margin          : 0;
+    border-bottom   : 1px solid $tab-border-color;
+}
+
+.mdl-tabs__tab {
+  margin: 0;
+  border: none;
+  padding: 0 24px 0 24px;
+
+  float: left;
+  position: relative;
+  display: block;
+
+  text-decoration: none;
+  height: 48px;
+  line-height: 48px;
+
+  text-align: center;
+  font-weight: 500;
+  font-size: $layout-tab-font-size;
+  text-transform: uppercase;
+
+  color: $tab-text-color;
+  overflow: hidden;
+
+  .mdl-tabs.is-upgraded &.is-active {
+    color: $tab-active-text-color;
+  }
+
+  .mdl-tabs.is-upgraded &.is-active:after {
+    height: 2px;
+    width: 100%;
+    display: block;
+    content: " ";
+    bottom: 0px;
+    left: 0px;
+    position: absolute;
+    background: $tab-highlight-color;
+    animation: border-expand 0.2s cubic-bezier(0.4, 0.0, 0.4, 1) 0.01s alternate forwards;
+    transition: all 1s cubic-bezier(0.4, 0.0, 1, 1);
+  }
+
+  & .mdl-tabs__ripple-container {
+    display: block;
+    position: absolute;
+    height: 100%;
+    width: 100%;
+    left: 0px;
+    top: 0px;
+    z-index: 1;
+    overflow: hidden;
+
+    & .mdl-ripple {
+      background: $tab-highlight-color;
+    }
+  }
+}
+
+.mdl-tabs__panel {
+  display: block;
+
+  .mdl-tabs.is-upgraded & {
+    display: none;
+  }
+
+  .mdl-tabs.is-upgraded &.is-active {
+    display: block;
+  }
+}
+
+@keyframes border-expand {
+  0% {
+    opacity: 0;
+    width: 0;
+  }
+
+  100% {
+    opacity: 1;
+    width: 100%;
+  }
+}
diff --git a/node_modules/material-design-lite/src/tabs/snippets/tabs.html b/node_modules/material-design-lite/src/tabs/snippets/tabs.html
new file mode 100644
index 0000000..ec88207
--- /dev/null
+++ b/node_modules/material-design-lite/src/tabs/snippets/tabs.html
@@ -0,0 +1,33 @@
+<div class="mdl-tabs mdl-js-tabs mdl-js-ripple-effect">
+  <div class="mdl-tabs__tab-bar">
+      <a href="#starks-panel" class="mdl-tabs__tab is-active">Starks</a>
+      <a href="#lannisters-panel" class="mdl-tabs__tab">Lannisters</a>
+      <a href="#targaryens-panel" class="mdl-tabs__tab">Targaryens</a>
+  </div>
+
+  <div class="mdl-tabs__panel is-active" id="starks-panel">
+    <ul>
+      <li>Eddard</li>
+      <li>Catelyn</li>
+      <li>Robb</li>
+      <li>Sansa</li>
+      <li>Brandon</li>
+      <li>Arya</li>
+      <li>Rickon</li>
+    </ul>
+  </div>
+  <div class="mdl-tabs__panel" id="lannisters-panel">
+    <ul>
+      <li>Tywin</li>
+      <li>Cersei</li>
+      <li>Jamie</li>
+      <li>Tyrion</li>
+    </ul>
+  </div>
+  <div class="mdl-tabs__panel" id="targaryens-panel">
+    <ul>
+      <li>Viserys</li>
+      <li>Daenerys</li>
+    </ul>
+  </div>
+</div>
diff --git a/node_modules/material-design-lite/src/tabs/tabs.js b/node_modules/material-design-lite/src/tabs/tabs.js
new file mode 100644
index 0000000..110997b
--- /dev/null
+++ b/node_modules/material-design-lite/src/tabs/tabs.js
@@ -0,0 +1,164 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Tabs MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {Element} element The element that will be upgraded.
+   */
+  var MaterialTabs = function MaterialTabs(element) {
+    // Stores the HTML element.
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialTabs'] = MaterialTabs;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string}
+   * @private
+   */
+  MaterialTabs.prototype.Constant_ = {
+    // None at the moment.
+  };
+
+  /**
+   * 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
+   */
+  MaterialTabs.prototype.CssClasses_ = {
+    TAB_CLASS: 'mdl-tabs__tab',
+    PANEL_CLASS: 'mdl-tabs__panel',
+    ACTIVE_CLASS: 'is-active',
+    UPGRADED_CLASS: 'is-upgraded',
+
+    MDL_JS_RIPPLE_EFFECT: 'mdl-js-ripple-effect',
+    MDL_RIPPLE_CONTAINER: 'mdl-tabs__ripple-container',
+    MDL_RIPPLE: 'mdl-ripple',
+    MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS: 'mdl-js-ripple-effect--ignore-events'
+  };
+
+  /**
+   * Handle clicks to a tabs component
+   *
+   * @private
+   */
+  MaterialTabs.prototype.initTabs_ = function() {
+    if (this.element_.classList.contains(this.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {
+      this.element_.classList.add(
+        this.CssClasses_.MDL_JS_RIPPLE_EFFECT_IGNORE_EVENTS);
+    }
+
+    // Select element tabs, document panels
+    this.tabs_ = this.element_.querySelectorAll('.' + this.CssClasses_.TAB_CLASS);
+    this.panels_ =
+        this.element_.querySelectorAll('.' + this.CssClasses_.PANEL_CLASS);
+
+    // Create new tabs for each tab element
+    for (var i = 0; i < this.tabs_.length; i++) {
+      new MaterialTab(this.tabs_[i], this);
+    }
+
+    this.element_.classList.add(this.CssClasses_.UPGRADED_CLASS);
+  };
+
+  /**
+   * Reset tab state, dropping active classes
+   *
+   * @private
+   */
+  MaterialTabs.prototype.resetTabState_ = function() {
+    for (var k = 0; k < this.tabs_.length; k++) {
+      this.tabs_[k].classList.remove(this.CssClasses_.ACTIVE_CLASS);
+    }
+  };
+
+  /**
+   * Reset panel state, droping active classes
+   *
+   * @private
+   */
+  MaterialTabs.prototype.resetPanelState_ = function() {
+    for (var j = 0; j < this.panels_.length; j++) {
+      this.panels_[j].classList.remove(this.CssClasses_.ACTIVE_CLASS);
+    }
+  };
+
+  /**
+   * Initialize element.
+   */
+  MaterialTabs.prototype.init = function() {
+    if (this.element_) {
+      this.initTabs_();
+    }
+  };
+
+  /**
+   * Constructor for an individual tab.
+   *
+   * @constructor
+   * @param {Element} tab The HTML element for the tab.
+   * @param {MaterialTabs} ctx The MaterialTabs object that owns the tab.
+   */
+  function MaterialTab(tab, ctx) {
+    if (tab) {
+      if (ctx.element_.classList.contains(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT)) {
+        var rippleContainer = document.createElement('span');
+        rippleContainer.classList.add(ctx.CssClasses_.MDL_RIPPLE_CONTAINER);
+        rippleContainer.classList.add(ctx.CssClasses_.MDL_JS_RIPPLE_EFFECT);
+        var ripple = document.createElement('span');
+        ripple.classList.add(ctx.CssClasses_.MDL_RIPPLE);
+        rippleContainer.appendChild(ripple);
+        tab.appendChild(rippleContainer);
+      }
+
+      tab.addEventListener('click', function(e) {
+        if (tab.getAttribute('href').charAt(0) === '#') {
+          e.preventDefault();
+          var href = tab.href.split('#')[1];
+          var panel = ctx.element_.querySelector('#' + href);
+          ctx.resetTabState_();
+          ctx.resetPanelState_();
+          tab.classList.add(ctx.CssClasses_.ACTIVE_CLASS);
+          panel.classList.add(ctx.CssClasses_.ACTIVE_CLASS);
+        }
+      });
+
+    }
+  }
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialTabs,
+    classAsString: 'MaterialTabs',
+    cssClass: 'mdl-js-tabs'
+  });
+})();
diff --git a/node_modules/material-design-lite/src/template.scss b/node_modules/material-design-lite/src/template.scss
new file mode 100644
index 0000000..4515a80
--- /dev/null
+++ b/node_modules/material-design-lite/src/template.scss
@@ -0,0 +1,21 @@
+/**
+ * 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.
+ */
+
+/* Material Design Lite */
+
+$styleguide-generate-template: true;
+
+@import "styleguide";
diff --git a/node_modules/material-design-lite/src/textfield/README.md b/node_modules/material-design-lite/src/textfield/README.md
new file mode 100755
index 0000000..7ca9d7a
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/README.md
@@ -0,0 +1,259 @@
+## Introduction
+
+The Material Design Lite (MDL) **text field** component is an enhanced version of the standard HTML `<input type="text">` and `<input type="textarea">` elements. A text field consists of a horizontal line indicating where keyboard input can occur and, typically, text that clearly communicates the intended contents of the text field. The MDL text field component provides various types of text fields, and allows you to add both display and click effects.
+
+Text fields are a common feature of most user interfaces, regardless of a site's content or function. Their design and use is therefore an important factor in the overall user experience. See the text field component's [Material Design specifications page](http://www.google.com/design/spec/components/text-fields.html) for details.
+
+The enhanced text field component has a more vivid visual look than a standard text field, and may be initially or programmatically *disabled*.
+There are three main types of text fields in the text field component, each with its own basic coding requirements. The types are *single-line*, *multi-line*, and *expandable*.
+
+### To include a *single-line* MDL **text field** component:
+
+&nbsp;1. Code a `<div>` element to hold the text field.
+```html
+<div>
+...
+</div>
+```
+&nbsp;2. Inside the div, code an `<input>` element with a `type` attribute of `"text"` (the text field), and an `id` attribute of your choice.
+```html
+<div>
+  <input type="text" id="user">
+</div>
+```
+&nbsp;3. Also inside the div, after the text field, code a `<label>` element with a `for` attribute whose value matches the `input` element's `id` value, and a short string to be used as the field's placeholder text.
+```html
+<div>
+  <input type="text" id="user">
+  <label for="user">User name</label>
+</div>
+```
+&nbsp;4. Optionally, add a `pattern` attribute and value to the `<input>` element (see the [W3C HTML5 forms specification](http://www.w3.org/TR/html5/forms.html#the-pattern-attribute) for details) and an associated error message in a `<span>` element following the `<label>`.
+```html
+<div>
+  <input type="text" id="user" pattern="[A-Z,a-z, ]*">
+  <label for="user">User name</label>
+  <span>Letters and spaces only</span>
+</div>
+```
+&nbsp;5. Add one or more MDL classes, separated by spaces, to the div container, text field, field label, and error message using the `class` attribute.
+```html
+<div class="mdl-textfield mdl-js-textfield">
+  <input class="mdl-textfield__input" type="text" id="user" pattern="[A-Z,a-z, ]*">
+  <label class="mdl-textfield__label" for="user">User name</label>
+  <span class="mdl-textfield__error">Letters and spaces only</span>
+</div>
+```
+The single-line text field component is ready for use.
+
+#### Examples
+
+Single-line text field with a standard label.
+```html
+<div class="mdl-textfield mdl-js-textfield">
+  <input class="mdl-textfield__input" type="text" id="fname">
+  <label class="mdl-textfield__label" for="fname">First name</label>
+</div>
+```
+
+Single-line text field with a floating label.
+```html
+<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+  <input class="mdl-textfield__input" type="text" id="addr1">
+  <label class="mdl-textfield__label" for="addr1">Address line 1</label>
+</div>
+```
+
+Single-line text field with a standard label, pattern matching, and error message.
+```html
+<div class="mdl-textfield mdl-js-textfield">
+  <input class="mdl-textfield__input" type="text" pattern="[0-9]*" id="phone">
+  <label class="mdl-textfield__label" for="phone">Phone</label>
+  <span class="mdl-textfield__error">Digits only</span>
+</div>
+```
+
+### To include a *multi-line* MDL **text field** component:
+
+&nbsp;1. Code a `<div>` element to hold the text field.
+```html
+<div>
+...
+</div>
+```
+&nbsp;2. Inside the div, code a `<textarea>` element with a `type` attribute of `"text"` (the multi-line text field), and an `id` attribute of your choice. Include a `rows` attribute with a value of `"1"` (this attribute sets the number of *concurrently visible* input rows).
+```html
+<div>
+  <textarea type="text" rows="1" id="address"></textarea>
+</div>
+```
+&nbsp;3. Also inside the div, after the text field, code a `<label>` element with a `for` attribute whose value matches the `<textarea>` element's `id` value, and a short string to be used as the field's placeholder text.
+```html
+<div>
+  <textarea type="text" rows="1" id="address"></textarea>
+  <label for="address">Full address</label>
+</div>
+```
+&nbsp;4. Add one or more MDL classes, separated by spaces, to the div container, text field, and field label using the `class` attribute.
+```html
+<div class="mdl-textfield mdl-js-textfield">
+  <textarea class="mdl-textfield__input" type="text" rows="1" id="address"></textarea>
+  <label class="mdl-textfield__label" for="address">Full address</label>
+</div>
+```
+
+The multi-line text field component is ready for use.
+
+#### Examples
+
+Multi-line text field with one visible input line.
+```html
+<div class="mdl-textfield mdl-js-textfield">
+  <textarea class="mdl-textfield__input" type="text" rows="1" id="schools"></textarea>
+  <label class="mdl-textfield__label" for="schools">Schools attended</label>
+</div>
+```
+
+Multi-line text field with one visible input line and floating label.
+```html
+<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+  <textarea class="mdl-textfield__input" type="text" rows= "1" id="schools"></textarea>
+  <label class="mdl-textfield__label" for="schools">Schools attended</label>
+</div>
+```
+
+Multi-line text field with multiple visible input lines and a maximum number of lines.
+```html
+<div class="mdl-textfield mdl-js-textfield">
+  <textarea class="mdl-textfield__input" type="text" rows="3" maxrows="6"
+   id="schools"></textarea>
+  <label class="mdl-textfield__label" for="schools">Schools attended (max. 6)</label>
+</div>
+```
+
+### To include an *expandable* MDL **text field** component:
+
+&nbsp;1. Code an "outer" `<div>` element to hold the expandable text field.
+```html
+<div>
+...
+</div>
+```
+&nbsp;2. Inside the div, code a `<label>` element with a `for` attribute whose value will match the `<input>` element's `id` value (to be coded in step 5).
+```html
+<div>
+  <label for="expando1">
+  ...
+  </label>
+</div>
+```
+&nbsp;3. Inside the label, code a `<span>` element; the span should be empty, and should be the label's only content. This element will contain the expandable text field's icon.
+```html
+<div>
+  <label for="expando1">
+    <span></span>
+  </label>
+</div>
+```
+&nbsp;4. Still inside the "outer" div, after the label containing the span, code an "inner" (nested) `<div>` element.
+```html
+<div>
+  <label for="expando1">
+    <span></span>
+  </label>
+  <div>
+  ...
+  </div>
+</div>
+```
+&nbsp;5. Inside the "inner" div, code an `<input>` element with a `type` attribute of `"text"` (the text field), and an `id` attribute whose value matches that of the `for` attribute in step 2.
+```html
+<div>
+  <label for="expando1">
+    <span></span>
+  </label>
+  <div>
+    <input type="text" id="expando1">
+  </div>
+</div>
+```
+&nbsp;6. Still inside the "inner" div, after the text field, code a `<label>` element with a `for` attribute whose value also matches the `<input>` element's `id` value (coded in step 5), and a short string to be used as the field's placeholder text.
+```html
+<div>
+  <label for="expando1">
+    <span></span>
+  </label>
+  <div>
+    <input type="text" id="expando1">
+    <label for="expando1">Expandable text field</label>
+  </div>
+</div>
+```
+&nbsp;7. Add one or more MDL classes, separated by spaces, to the "outer" div container, label, and span, and to the "inner" div container, text field, and field label using the `class` attribute.
+```html
+<div class="mdl-textfield mdl-js-textfield mdl-textfield--expandable">
+  <label class="mdl-button mdl-js-button mdl-button--icon" for="expando1">
+    <i class="material-icons">search</i>
+  </label>
+  <div class="mdl-textfield__expandable-holder">
+    <input class="mdl-textfield__input" type="text" id="expando1">
+    <label class="mdl-textfield__label" for="expando1">Expandable text field</label>
+  </div>
+</div>
+```
+
+The expandable text field component is ready for use. It will expand when the icon (the empty `<span>`) is clicked or gains focus.
+
+#### Examples
+
+Expandable text field with a standard label.
+```html
+<div class="mdl-textfield mdl-js-textfield mdl-textfield--expandable">
+  <label class="mdl-button mdl-js-button mdl-button--icon" for="search-expandable">
+    <i class="material-icons">search</i>
+  </label>
+  <div class="mdl-textfield__expandable-holder">
+    <input class="mdl-textfield__input" type="text" id="search-expandable">
+    <label class="mdl-textfield__label" for="search-expandable">Search text</label>
+  </div>
+</div>
+```
+
+Expandable text field with a floating label.
+```html
+<div class="mdl-textfield mdl-js-textfield mdl-textfield--expandable
+ mdl-textfield--floating-label">
+  <label class="mdl-button mdl-js-button mdl-button--icon" for="search-expandable2">
+    <i class="material-icons">search</i>
+  </label>
+  <div class="mdl-textfield__expandable-holder">
+    <input class="mdl-textfield__input" type="text" id="search-expandable2">
+    <label class="mdl-textfield__label" for="search-expandable2">
+      Enter search text below
+    </label>
+  </div>
+</div>
+```
+## Configuration options
+
+The MDL CSS classes apply various predefined visual and behavioral enhancements to the text field. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-textfield` | Defines container as an MDL component | Required on "outer" div element|
+| `mdl-js-textfield` | Assigns basic MDL behavior to input | Required on "outer" div element |
+| `mdl-textfield__input` | Defines element as textfield input | Required on input or textarea element |
+| `mdl-textfield__label` | Defines element as textfield label | Required on label element for input or textarea elements |
+| `mdl-textfield--floating-label` | Applies *floating label* effect | Optional; goes on "outer" div element |
+| `mdl-textfield__error` | Defines span as an MDL error message | Optional; goes on span element for MDL input element with *pattern*|
+| `mdl-textfield--expandable` | Defines a div as an MDL expandable text field container | For expandable input fields, required on "outer" div element |
+| `mdl-button` | Defines label as an MDL icon button | For expandable input fields, required on "outer" div's label element |
+| `mdl-js-button` | Assigns basic behavior to icon container | For expandable input fields, required on "outer" div's label element |
+| `mdl-button--icon` | Defines label as an MDL icon container | For expandable input fields, required on "outer" div's label element |
+| `mdl-input__expandable-holder` | Defines a container as an MDL component | For expandable input fields, required on "inner" div element |
+| `is-invalid` | Defines the textfield as invalid on initial load. | Optional on `mdl-textfield` element |
+
+(1) The "search" icon is used here as an example. Other icons can be used by modifying the text. For a list of available icons, see [this page](https://www.google.com/design/icons).
+
+>**Note:** Disabled versions of each text field type are provided, and are invoked with the standard HTML boolean attribute `disabled`. `<input class="mdl-textfield mdl-js-textfield" type="text" disabled>`
+>This attribute may be added or removed programmatically via scripting.
diff --git a/node_modules/material-design-lite/src/textfield/_textfield.scss b/node_modules/material-design-lite/src/textfield/_textfield.scss
new file mode 100644
index 0000000..b2b1d60
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/_textfield.scss
@@ -0,0 +1,223 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+// The container for the whole component.
+.mdl-textfield {
+  position: relative;
+  font-size: $input-text-font-size;
+  display: inline-block;
+  box-sizing: border-box;
+  width: 300px;
+  max-width: 100%;
+  margin: 0;
+  padding: $input-text-vertical-spacing 0;
+
+  // Align buttons, if used.
+  & .mdl-button {
+    position: absolute;
+    bottom: $input-text-vertical-spacing;
+  }
+}
+
+// Optional class to align right.
+.mdl-textfield--align-right {
+  text-align: right;
+}
+
+// Optional class to display at full width.
+.mdl-textfield--full-width {
+  width: 100%;
+}
+
+// Optional class to make the text field expandable.
+.mdl-textfield--expandable {
+  min-width: $input-text-button-size;
+  width: auto;
+  min-height: $input-text-button-size;
+  
+  // Align icon button
+  .mdl-button--icon {
+    top: $input-text-expandable-icon-top;
+  }
+}
+
+// Styling for the input element.
+.mdl-textfield__input {
+  border: none;
+  border-bottom: 1px solid $input-text-bottom-border-color;
+  display: block;
+  font-size: $input-text-font-size;
+  font-family: $performance_font;
+  margin: 0;
+  padding: $input-text-padding 0;
+  width: $input-text-width;
+  background: none;
+  text-align: left;
+  color: inherit;
+
+  &[type="number"] {
+    -moz-appearance: textfield;
+  }
+
+  &[type="number"]::-webkit-inner-spin-button,
+  &[type="number"]::-webkit-outer-spin-button {
+    -webkit-appearance: none;
+    margin: 0;
+  }
+
+  .mdl-textfield.is-focused & {
+    outline: none;
+  }
+
+  .mdl-textfield.is-invalid & {
+    border-color: $input-text-error-color;
+    box-shadow: none;
+  }
+
+  fieldset[disabled] .mdl-textfield &,
+  .mdl-textfield.is-disabled & {
+    background-color: transparent;
+    border-bottom: 1px dotted $input-text-disabled-color;
+    color: $input-text-disabled-text-color;
+  }
+}
+
+.mdl-textfield textarea.mdl-textfield__input {
+  display: block;
+}
+
+// Styling for the label / floating label.
+.mdl-textfield__label {
+  bottom: 0;
+  color: $input-text-label-color;
+  font-size: $input-text-font-size;
+  left: 0;
+  right: 0;
+  pointer-events: none;
+  position: absolute;
+  display: block;
+  top: ($input-text-padding + $input-text-vertical-spacing);
+  width: 100%;
+  overflow: hidden;
+  white-space: nowrap;
+  text-align: left;
+
+  .mdl-textfield.is-dirty &,
+  .mdl-textfield.has-placeholder & {
+    visibility: hidden;
+  }
+
+  // Floating Label
+  .mdl-textfield--floating-label & {
+    @include material-animation-default();
+  }
+
+  .mdl-textfield--floating-label.has-placeholder & {
+    transition: none;
+  }
+
+  fieldset[disabled] .mdl-textfield &,
+  .mdl-textfield.is-disabled.is-disabled & {
+    color: $input-text-disabled-text-color;
+  }
+
+  .mdl-textfield--floating-label.is-focused &,
+  .mdl-textfield--floating-label.is-dirty &,
+  .mdl-textfield--floating-label.has-placeholder & {
+    color: $input-text-highlight-color;
+    font-size : $input-text-floating-label-fontsize;
+    top: $input-text-vertical-spacing - ($input-text-floating-label-fontsize + $input-text-padding);
+    visibility: visible;
+  }
+
+  .mdl-textfield--floating-label.is-focused .mdl-textfield__expandable-holder &,
+  .mdl-textfield--floating-label.is-dirty .mdl-textfield__expandable-holder &,
+  .mdl-textfield--floating-label.has-placeholder .mdl-textfield__expandable-holder & {
+    top: -($input-text-floating-label-fontsize + $input-text-padding);
+  }
+
+  .mdl-textfield--floating-label.is-invalid & {
+    color: $input-text-error-color;
+    font-size: $input-text-floating-label-fontsize;
+  }
+
+  // The after label is the colored underline for the TextField.
+  &:after {
+    background-color: $input-text-highlight-color;
+    bottom: $input-text-vertical-spacing;
+    content: '';
+    height: 2px;
+    left: 45%;
+    position: absolute;
+    @include material-animation-default();
+    visibility: hidden;
+    width: 10px;
+  }
+
+  .mdl-textfield.is-focused &:after {
+    left: 0;
+    visibility: visible;
+    width: 100%;
+  }
+
+  .mdl-textfield.is-invalid &:after {
+    background-color: $input-text-error-color;
+  }
+}
+
+// TextField Error.
+.mdl-textfield__error {
+  color: $input-text-error-color;
+  position: absolute;
+  font-size: $input-text-floating-label-fontsize;
+  margin-top: 3px;
+  visibility: hidden;
+  display: block;
+
+  .mdl-textfield.is-invalid & {
+    visibility: visible;
+  }
+}
+
+// Expandable Holder.
+.mdl-textfield__expandable-holder {
+  display: inline-block;
+  position: relative;
+  margin-left: $input-text-button-size;
+
+  @include material-animation-default();
+  display: inline-block;
+
+  // Safari (possibly others) need to be convinced that this field is actually
+  // visible, otherwise it cannot be tabbed to nor focused via a <label>.
+  // TODO: In some cases (Retina displays), this is big enough to render the
+  // inner element :(
+  max-width: 0.1px;
+
+  .mdl-textfield.is-focused &, .mdl-textfield.is-dirty & {
+    // This is an unfortunate hack. Animating between widths in percent (%)
+    // in many browsers (Chrome, Firefox) only animates the inner visual style
+    // of the input - the outer bounding box still 'jumps'.
+    // Thus assume a sensible maximum, and animate to/from that value.
+    max-width: 600px;
+  }
+  .mdl-textfield__label:after {
+    bottom: 0;
+  }
+}
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-expanding-demo.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-expanding-demo.html
new file mode 100644
index 0000000..02c49b1
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-expanding-demo.html
@@ -0,0 +1,7 @@
+<style>
+  .demo-textfield__textfield-expanding .mdl-textfield {
+    width: 100px;
+  }
+</style>
+
+{% include "textfield-expanding.html" %}
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-expanding.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-expanding.html
new file mode 100644
index 0000000..53453e4
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-expanding.html
@@ -0,0 +1,12 @@
+<!-- Expandable Textfield -->
+<form action="#">
+  <div class="mdl-textfield mdl-js-textfield mdl-textfield--expandable">
+    <label class="mdl-button mdl-js-button mdl-button--icon" for="sample6">
+      <i class="material-icons">search</i>
+    </label>
+    <div class="mdl-textfield__expandable-holder">
+      <input class="mdl-textfield__input" type="text" id="sample6">
+      <label class="mdl-textfield__label" for="sample-expandable">Expandable Input</label>
+    </div>
+  </div>
+</form>
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-numeric-demo.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-numeric-demo.html
new file mode 100644
index 0000000..38676e6
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-numeric-demo.html
@@ -0,0 +1,7 @@
+<style>
+  .demo-textfield__textfield-floating-numeric .mdl-textfield {
+    width: 100px;
+  }
+</style>
+
+{% include "textfield-floating-numeric.html" %}
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-numeric.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-numeric.html
new file mode 100644
index 0000000..a08e55a
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-numeric.html
@@ -0,0 +1,8 @@
+<!-- Numeric Textfield with Floating Label -->
+<form action="#">
+  <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+    <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" id="sample4">
+    <label class="mdl-textfield__label" for="sample4">Number...</label>
+    <span class="mdl-textfield__error">Input is not a number!</span>
+  </div>
+</form>
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-text-demo.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-text-demo.html
new file mode 100644
index 0000000..b85cadf
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-text-demo.html
@@ -0,0 +1,7 @@
+<style>
+  .demo-textfield__textfield-floating-text .mdl-textfield {
+    width: 100px;
+  }
+</style>
+
+{% include "textfield-floating-text.html" %}
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-text.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-text.html
new file mode 100644
index 0000000..c2708b9
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-floating-text.html
@@ -0,0 +1,8 @@
+<!-- Textfield with Floating Label -->
+
+<form action="#">
+  <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
+    <input class="mdl-textfield__input" type="text" id="sample3">
+    <label class="mdl-textfield__label" for="sample3">Text...</label>
+  </div>
+</form>
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-multi-line-demo.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-multi-line-demo.html
new file mode 100644
index 0000000..2771004
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-multi-line-demo.html
@@ -0,0 +1,7 @@
+<style>
+  .demo-textfield__textfield-multi-line .mdl-textfield {
+    width: 100px;
+  }
+</style>
+
+{% include "textfield-multi-line.html" %}
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-multi-line.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-multi-line.html
new file mode 100644
index 0000000..97acdfb
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-multi-line.html
@@ -0,0 +1,7 @@
+<!-- Floating Multiline Textfield -->
+<form action="#">
+  <div class="mdl-textfield mdl-js-textfield">
+    <textarea class="mdl-textfield__input" type="text" rows= "3" id="sample5" ></textarea>
+    <label class="mdl-textfield__label" for="sample5">Text lines...</label>
+  </div>
+</form>
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-numeric-demo.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-numeric-demo.html
new file mode 100644
index 0000000..b66bedb
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-numeric-demo.html
@@ -0,0 +1,7 @@
+<style>
+  .demo-textfield__textfield-numeric .mdl-textfield {
+    width: 100px;
+  }
+</style>
+
+{% include "textfield-numeric.html" %}
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-numeric.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-numeric.html
new file mode 100644
index 0000000..2c87b7e
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-numeric.html
@@ -0,0 +1,8 @@
+<!-- Numeric Textfield -->
+<form action="#">
+  <div class="mdl-textfield mdl-js-textfield">
+    <input class="mdl-textfield__input" type="text" pattern="-?[0-9]*(\.[0-9]+)?" id="sample2">
+    <label class="mdl-textfield__label" for="sample2">Number...</label>
+    <span class="mdl-textfield__error">Input is not a number!</span>
+  </div>
+</form>
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-text-demo.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-text-demo.html
new file mode 100644
index 0000000..da0ccd7
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-text-demo.html
@@ -0,0 +1,7 @@
+<style>
+  .demo-textfield__textfield-text .mdl-textfield {
+    width: 100px;
+  }
+</style>
+
+{% include "textfield-text.html" %}
diff --git a/node_modules/material-design-lite/src/textfield/snippets/textfield-text.html b/node_modules/material-design-lite/src/textfield/snippets/textfield-text.html
new file mode 100644
index 0000000..e93667e
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/snippets/textfield-text.html
@@ -0,0 +1,7 @@
+<!-- Simple Textfield -->
+<form action="#">
+  <div class="mdl-textfield mdl-js-textfield">
+    <input class="mdl-textfield__input" type="text" id="sample1">
+    <label class="mdl-textfield__label" for="sample1">Text...</label>
+  </div>
+</form>
diff --git a/node_modules/material-design-lite/src/textfield/textfield.js b/node_modules/material-design-lite/src/textfield/textfield.js
new file mode 100644
index 0000000..23883f3
--- /dev/null
+++ b/node_modules/material-design-lite/src/textfield/textfield.js
@@ -0,0 +1,284 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Textfield MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialTextfield = function MaterialTextfield(element) {
+    this.element_ = element;
+    this.maxRows = this.Constant_.NO_MAX_ROWS;
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialTextfield'] = MaterialTextfield;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialTextfield.prototype.Constant_ = {
+    NO_MAX_ROWS: -1,
+    MAX_ROWS_ATTRIBUTE: 'maxrows'
+  };
+
+  /**
+   * 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
+   */
+  MaterialTextfield.prototype.CssClasses_ = {
+    LABEL: 'mdl-textfield__label',
+    INPUT: 'mdl-textfield__input',
+    IS_DIRTY: 'is-dirty',
+    IS_FOCUSED: 'is-focused',
+    IS_DISABLED: 'is-disabled',
+    IS_INVALID: 'is-invalid',
+    IS_UPGRADED: 'is-upgraded',
+    HAS_PLACEHOLDER: 'has-placeholder'
+  };
+
+  /**
+   * Handle input being entered.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialTextfield.prototype.onKeyDown_ = function(event) {
+    var currentRowCount = event.target.value.split('\n').length;
+    if (event.keyCode === 13) {
+      if (currentRowCount >= this.maxRows) {
+        event.preventDefault();
+      }
+    }
+  };
+
+  /**
+   * Handle focus.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialTextfield.prototype.onFocus_ = function(event) {
+    this.element_.classList.add(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle lost focus.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialTextfield.prototype.onBlur_ = function(event) {
+    this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);
+  };
+
+  /**
+   * Handle reset event from out side.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialTextfield.prototype.onReset_ = function(event) {
+    this.updateClasses_();
+  };
+
+  /**
+   * Handle class updates.
+   *
+   * @private
+   */
+  MaterialTextfield.prototype.updateClasses_ = function() {
+    this.checkDisabled();
+    this.checkValidity();
+    this.checkDirty();
+    this.checkFocus();
+  };
+
+  // Public methods.
+
+  /**
+   * Check the disabled state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialTextfield.prototype.checkDisabled = function() {
+    if (this.input_.disabled) {
+      this.element_.classList.add(this.CssClasses_.IS_DISABLED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_DISABLED);
+    }
+  };
+  MaterialTextfield.prototype['checkDisabled'] =
+      MaterialTextfield.prototype.checkDisabled;
+
+  /**
+  * Check the focus state and update field accordingly.
+  *
+  * @public
+  */
+  MaterialTextfield.prototype.checkFocus = function() {
+    if (Boolean(this.element_.querySelector(':focus'))) {
+      this.element_.classList.add(this.CssClasses_.IS_FOCUSED);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_FOCUSED);
+    }
+  };
+  MaterialTextfield.prototype['checkFocus'] =
+    MaterialTextfield.prototype.checkFocus;
+
+  /**
+   * Check the validity state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialTextfield.prototype.checkValidity = function() {
+    if (this.input_.validity) {
+      if (this.input_.validity.valid) {
+        this.element_.classList.remove(this.CssClasses_.IS_INVALID);
+      } else {
+        this.element_.classList.add(this.CssClasses_.IS_INVALID);
+      }
+    }
+  };
+  MaterialTextfield.prototype['checkValidity'] =
+      MaterialTextfield.prototype.checkValidity;
+
+  /**
+   * Check the dirty state and update field accordingly.
+   *
+   * @public
+   */
+  MaterialTextfield.prototype.checkDirty = function() {
+    if (this.input_.value && this.input_.value.length > 0) {
+      this.element_.classList.add(this.CssClasses_.IS_DIRTY);
+    } else {
+      this.element_.classList.remove(this.CssClasses_.IS_DIRTY);
+    }
+  };
+  MaterialTextfield.prototype['checkDirty'] =
+      MaterialTextfield.prototype.checkDirty;
+
+  /**
+   * Disable text field.
+   *
+   * @public
+   */
+  MaterialTextfield.prototype.disable = function() {
+    this.input_.disabled = true;
+    this.updateClasses_();
+  };
+  MaterialTextfield.prototype['disable'] = MaterialTextfield.prototype.disable;
+
+  /**
+   * Enable text field.
+   *
+   * @public
+   */
+  MaterialTextfield.prototype.enable = function() {
+    this.input_.disabled = false;
+    this.updateClasses_();
+  };
+  MaterialTextfield.prototype['enable'] = MaterialTextfield.prototype.enable;
+
+  /**
+   * Update text field value.
+   *
+   * @param {string} value The value to which to set the control (optional).
+   * @public
+   */
+  MaterialTextfield.prototype.change = function(value) {
+
+    this.input_.value = value || '';
+    this.updateClasses_();
+  };
+  MaterialTextfield.prototype['change'] = MaterialTextfield.prototype.change;
+
+  /**
+   * Initialize element.
+   */
+  MaterialTextfield.prototype.init = function() {
+
+    if (this.element_) {
+      this.label_ = this.element_.querySelector('.' + this.CssClasses_.LABEL);
+      this.input_ = this.element_.querySelector('.' + this.CssClasses_.INPUT);
+
+      if (this.input_) {
+        if (this.input_.hasAttribute(
+              /** @type {string} */ (this.Constant_.MAX_ROWS_ATTRIBUTE))) {
+          this.maxRows = parseInt(this.input_.getAttribute(
+              /** @type {string} */ (this.Constant_.MAX_ROWS_ATTRIBUTE)), 10);
+          if (isNaN(this.maxRows)) {
+            this.maxRows = this.Constant_.NO_MAX_ROWS;
+          }
+        }
+
+        if (this.input_.hasAttribute('placeholder')) {
+          this.element_.classList.add(this.CssClasses_.HAS_PLACEHOLDER);
+        }
+
+        this.boundUpdateClassesHandler = this.updateClasses_.bind(this);
+        this.boundFocusHandler = this.onFocus_.bind(this);
+        this.boundBlurHandler = this.onBlur_.bind(this);
+        this.boundResetHandler = this.onReset_.bind(this);
+        this.input_.addEventListener('input', this.boundUpdateClassesHandler);
+        this.input_.addEventListener('focus', this.boundFocusHandler);
+        this.input_.addEventListener('blur', this.boundBlurHandler);
+        this.input_.addEventListener('reset', this.boundResetHandler);
+
+        if (this.maxRows !== this.Constant_.NO_MAX_ROWS) {
+          // TODO: This should handle pasting multi line text.
+          // Currently doesn't.
+          this.boundKeyDownHandler = this.onKeyDown_.bind(this);
+          this.input_.addEventListener('keydown', this.boundKeyDownHandler);
+        }
+        var invalid = this.element_.classList
+          .contains(this.CssClasses_.IS_INVALID);
+        this.updateClasses_();
+        this.element_.classList.add(this.CssClasses_.IS_UPGRADED);
+        if (invalid) {
+          this.element_.classList.add(this.CssClasses_.IS_INVALID);
+        }
+        if (this.input_.hasAttribute('autofocus')) {
+          this.element_.focus();
+          this.checkFocus();
+        }
+      }
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialTextfield,
+    classAsString: 'MaterialTextfield',
+    cssClass: 'mdl-js-textfield',
+    widget: true
+  });
+})();
diff --git a/node_modules/material-design-lite/src/third_party/rAF.js b/node_modules/material-design-lite/src/third_party/rAF.js
new file mode 100644
index 0000000..863f561
--- /dev/null
+++ b/node_modules/material-design-lite/src/third_party/rAF.js
@@ -0,0 +1,50 @@
+// Source: https://github.com/darius/requestAnimationFrame/blob/master/requestAnimationFrame.js
+// Adapted from https://gist.github.com/paulirish/1579671 which derived from
+// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
+// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
+
+// requestAnimationFrame polyfill by Erik Möller.
+// Fixes from Paul Irish, Tino Zijdel, Andrew Mao, Klemen Slavič, Darius Bacon
+
+// MIT license
+
+(function() {
+  'use strict';
+
+  if (!Date.now) {
+    /**
+     * Date.now polyfill.
+     * @return {number} the current Date
+     */
+    Date.now = function() { return new Date().getTime(); };
+    Date['now'] = Date.now;
+  }
+
+  var vendors = ['webkit', 'moz'];
+  for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) {
+    var vp = vendors[i];
+    window.requestAnimationFrame = window[vp + 'RequestAnimationFrame'];
+    window.cancelAnimationFrame = (window[vp + 'CancelAnimationFrame'] ||
+        window[vp + 'CancelRequestAnimationFrame']);
+    window['requestAnimationFrame'] = window.requestAnimationFrame;
+    window['cancelAnimationFrame'] = window.cancelAnimationFrame;
+  }
+
+  if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) {
+    var lastTime = 0;
+    /**
+     * requestAnimationFrame polyfill.
+     * @param  {!Function} callback the callback function.
+     */
+    window.requestAnimationFrame = function(callback) {
+      var now = Date.now();
+      var nextTime = Math.max(lastTime + 16, now);
+      return setTimeout(function() { callback(lastTime = nextTime); },
+                        nextTime - now);
+    };
+    window.cancelAnimationFrame = clearTimeout;
+    window['requestAnimationFrame'] = window.requestAnimationFrame;
+    window['cancelAnimationFrame'] = window.cancelAnimationFrame;
+  }
+
+})();
diff --git a/node_modules/material-design-lite/src/tooltip/README.md b/node_modules/material-design-lite/src/tooltip/README.md
new file mode 100755
index 0000000..db61294
--- /dev/null
+++ b/node_modules/material-design-lite/src/tooltip/README.md
@@ -0,0 +1,70 @@
+## Introduction
+
+The Material Design Lite (MDL) **tooltip** component is an enhanced version of the standard HTML tooltip as produced by the `title` attribute. A tooltip consists of text and/or an image that clearly communicates additional information about an element when the user hovers over or, in a touch-based UI, touches the element. The MDL tooltip component is pre-styled (colors, fonts, and other settings are contained in *material.min.css*) to provide a vivid, attractive visual element that displays related but typically non-essential content, e.g., a definition, clarification, or brief instruction.
+
+Tooltips are a ubiquitous feature of most user interfaces, regardless of a site's content or function. Their design and use is an important factor in the overall user experience. See the tooltip component's [Material Design specifications page](http://www.google.com/design/spec/components/tooltips.html) for details.
+
+### To include an MDL **tooltip** component:
+
+&nbsp;1. Code an element, such as a `<div>`, `<p>`, or `<span>`, and style it as desired; this will be the tooltip's target. Include an `id` attribute and unique value to link the container to its tooltip.
+```html
+<p id="tt1">HTML</p>
+```
+&nbsp;2. Following the target element, code a second element, such as a `<div>`, `<p>`, or `<span>`; this will be the tooltip itself. Include a `for` (or `data-mdl-for`) attribute whose value matches that of the target's `id`.
+```html
+<p id="tt1">HTML</p>
+<span for="tt1">HyperText Markup Language</span>
+```
+&nbsp;3. Add one or more MDL classes, separated by spaces, to the tooltip element using the `class` attribute.
+```html
+<p id="tt1">HTML</p>
+<span for="tt1" class="mdl-tooltip">HyperText Markup Language</span>
+```
+
+The tooltip component is ready for use.
+
+#### Examples
+
+A target with a simple text tooltip.
+```html
+<p>HTML is related to but different from <span id="xml"><i>XML</i></span>.</p>
+<span class="mdl-tooltip" for="xml">eXtensible Markup Language</span>
+```
+
+A target with "rich" (containing HTML markup) tooltip text.
+```html
+<p>HTML is related to but different from <span id="xml"><i>XML</i></span>.</p>
+<span class="mdl-tooltip" for="xml">e<b>X</b>tensible <b>M</b>arkup <b>L</b>anguage</span>
+```
+
+A target with a long text tooltip that automatically wraps.
+```html
+<p>HTML is related to but different from <span id="xml"><i>XML</i></span>.</p>
+<span class="mdl-tooltip" for="xml">XML is an acronym for eXtensible Markup Language</span>
+```
+
+A target with tooltip text in a larger font size.
+```html
+<p>HTML is related to but different from <span id="xml"><i>XML</i></span>.</p>
+<span class="mdl-tooltip mdl-tooltip--large" for="xml">eXtensible Markup Language</span>
+```
+
+A target with a tooltip containing both an image and text.
+```html
+<p>HTML is related to but different from <span id="xml"><i>XML</i></span>.</p>
+<span class="mdl-tooltip" for="xml">
+<img src="xml-logo-small.png" width="20" height="10"> eXtensible Markup Language</span>
+```
+
+## Configuration options
+
+The MDL CSS classes apply various predefined visual enhancements to the tooltip. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-tooltip` | Defines a container as an MDL tooltip | Required on tooltip container element |
+| `mdl-tooltip--large` | Applies large-font effect | Optional; goes on tooltip container element |
+| `mdl-tooltip--left` | Positions the tooltip to the left of the target | Optional; goes on tooltip container element |
+| `mdl-tooltip--right` | Positions the tooltip to the right of the target | Optional; goes on tooltip container element |
+| `mdl-tooltip--top` | Positions the tooltip to the top of the target | Optional; goes on tooltip container element |
+| `mdl-tooltip--bottom` | Positions the tooltip to the bottom of the target | Optional; goes on tooltip container element |
diff --git a/node_modules/material-design-lite/src/tooltip/_tooltip.scss b/node_modules/material-design-lite/src/tooltip/_tooltip.scss
new file mode 100644
index 0000000..bec1cd5
--- /dev/null
+++ b/node_modules/material-design-lite/src/tooltip/_tooltip.scss
@@ -0,0 +1,65 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+
+.mdl-tooltip {
+  transform: scale(0);
+  transform-origin: top center;
+  z-index: 999;
+  background: $tooltip-background-color;
+  border-radius: 2px;
+  color: $tooltip-text-color;
+  display: inline-block;
+  font-size: $tooltip-font-size;
+  font-weight: 500;
+  line-height: 14px;
+  max-width: 170px;
+  position: fixed;
+  top: -500px;
+  left: -500px;
+  padding: 8px;
+  text-align: center;
+}
+.mdl-tooltip.is-active {
+  animation: pulse 200ms $animation-curve-linear-out-slow-in forwards;
+}
+
+.mdl-tooltip--large {
+  line-height: 14px;
+  font-size: $tooltip-font-size-large;
+  padding: 16px;
+}
+
+@keyframes pulse {
+  0% {
+    transform: scale(0);
+    opacity: 0;
+  }
+  50% {
+    // Fixes a weird bug with the interaction between Safari and the result of
+    // the SASS compilation for the animation.
+    // Essentially, we need to make sure that "50%" and "100%" don't get merged
+    // into a single "50%, 100%" entry, so we need to avoid them having any
+    // matching properties.
+    transform: scale(0.99);
+  }
+  100% {
+    transform: scale(1);
+    opacity: 1;
+    visibility: visible;
+  }
+}
diff --git a/node_modules/material-design-lite/src/tooltip/snippets/tooltip-large.html b/node_modules/material-design-lite/src/tooltip/snippets/tooltip-large.html
new file mode 100644
index 0000000..6d55dc1
--- /dev/null
+++ b/node_modules/material-design-lite/src/tooltip/snippets/tooltip-large.html
@@ -0,0 +1,5 @@
+<!-- Large Tooltip -->
+<div id="tt2" class="icon material-icons">print</div>
+<div class="mdl-tooltip mdl-tooltip--large" for="tt2">
+Print
+</div>
diff --git a/node_modules/material-design-lite/src/tooltip/snippets/tooltip-multiline.html b/node_modules/material-design-lite/src/tooltip/snippets/tooltip-multiline.html
new file mode 100644
index 0000000..7bc555b
--- /dev/null
+++ b/node_modules/material-design-lite/src/tooltip/snippets/tooltip-multiline.html
@@ -0,0 +1,5 @@
+<!-- Multiline Tooltip -->
+<div id="tt4" class="icon material-icons">share</div>
+<div class="mdl-tooltip" for="tt4">
+Share your content<br>via social media
+</div>
diff --git a/node_modules/material-design-lite/src/tooltip/snippets/tooltip-rich.html b/node_modules/material-design-lite/src/tooltip/snippets/tooltip-rich.html
new file mode 100644
index 0000000..dab28f5
--- /dev/null
+++ b/node_modules/material-design-lite/src/tooltip/snippets/tooltip-rich.html
@@ -0,0 +1,5 @@
+<!-- Rich Tooltip -->
+<div id="tt3" class="icon material-icons">cloud_upload</div>
+<div class="mdl-tooltip" data-mdl-for="tt3">
+Upload <strong>file.zip</strong>
+</div>
diff --git a/node_modules/material-design-lite/src/tooltip/snippets/tooltip-simple.html b/node_modules/material-design-lite/src/tooltip/snippets/tooltip-simple.html
new file mode 100644
index 0000000..78ba6fc
--- /dev/null
+++ b/node_modules/material-design-lite/src/tooltip/snippets/tooltip-simple.html
@@ -0,0 +1,5 @@
+<!-- Simple Tooltip -->
+<div id="tt1" class="icon material-icons">add</div>
+<div class="mdl-tooltip" data-mdl-for="tt1">
+Follow
+</div>
diff --git a/node_modules/material-design-lite/src/tooltip/tooltip.js b/node_modules/material-design-lite/src/tooltip/tooltip.js
new file mode 100644
index 0000000..bfdacca
--- /dev/null
+++ b/node_modules/material-design-lite/src/tooltip/tooltip.js
@@ -0,0 +1,154 @@
+/**
+ * @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.
+ */
+
+(function() {
+  'use strict';
+
+  /**
+   * Class constructor for Tooltip MDL component.
+   * Implements MDL component design pattern defined at:
+   * https://github.com/jasonmayes/mdl-component-design-pattern
+   *
+   * @constructor
+   * @param {HTMLElement} element The element that will be upgraded.
+   */
+  var MaterialTooltip = function MaterialTooltip(element) {
+    this.element_ = element;
+
+    // Initialize instance.
+    this.init();
+  };
+  window['MaterialTooltip'] = MaterialTooltip;
+
+  /**
+   * Store constants in one place so they can be updated easily.
+   *
+   * @enum {string | number}
+   * @private
+   */
+  MaterialTooltip.prototype.Constant_ = {
+    // None for now.
+  };
+
+  /**
+   * 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
+   */
+  MaterialTooltip.prototype.CssClasses_ = {
+    IS_ACTIVE: 'is-active',
+    BOTTOM: 'mdl-tooltip--bottom',
+    LEFT: 'mdl-tooltip--left',
+    RIGHT: 'mdl-tooltip--right',
+    TOP: 'mdl-tooltip--top'
+  };
+
+  /**
+   * Handle mouseenter for tooltip.
+   *
+   * @param {Event} event The event that fired.
+   * @private
+   */
+  MaterialTooltip.prototype.handleMouseEnter_ = function(event) {
+    var props = event.target.getBoundingClientRect();
+    var left = props.left + (props.width / 2);
+    var top = props.top + (props.height / 2);
+    var marginLeft = -1 * (this.element_.offsetWidth / 2);
+    var marginTop = -1 * (this.element_.offsetHeight / 2);
+
+    if (this.element_.classList.contains(this.CssClasses_.LEFT) || this.element_.classList.contains(this.CssClasses_.RIGHT)) {
+      left = (props.width / 2);
+      if (top + marginTop < 0) {
+        this.element_.style.top = '0';
+        this.element_.style.marginTop = '0';
+      } else {
+        this.element_.style.top = top + 'px';
+        this.element_.style.marginTop = marginTop + 'px';
+      }
+    } else {
+      if (left + marginLeft < 0) {
+        this.element_.style.left = '0';
+        this.element_.style.marginLeft = '0';
+      } else {
+        this.element_.style.left = left + 'px';
+        this.element_.style.marginLeft = marginLeft + 'px';
+      }
+    }
+
+    if (this.element_.classList.contains(this.CssClasses_.TOP)) {
+      this.element_.style.top = props.top - this.element_.offsetHeight - 10 + 'px';
+    } else if (this.element_.classList.contains(this.CssClasses_.RIGHT)) {
+      this.element_.style.left = props.left + props.width + 10 + 'px';
+    } else if (this.element_.classList.contains(this.CssClasses_.LEFT)) {
+      this.element_.style.left = props.left - this.element_.offsetWidth - 10 + 'px';
+    } else {
+      this.element_.style.top = props.top + props.height + 10 + 'px';
+    }
+
+    this.element_.classList.add(this.CssClasses_.IS_ACTIVE);
+  };
+
+  /**
+   * Hide tooltip on mouseleave or scroll
+   *
+   * @private
+   */
+  MaterialTooltip.prototype.hideTooltip_ = function() {
+    this.element_.classList.remove(this.CssClasses_.IS_ACTIVE);
+  };
+
+  /**
+   * Initialize element.
+   */
+  MaterialTooltip.prototype.init = function() {
+
+    if (this.element_) {
+      var forElId = this.element_.getAttribute('for') ||
+          this.element_.getAttribute('data-mdl-for');
+
+      if (forElId) {
+        this.forElement_ = document.getElementById(forElId);
+      }
+
+      if (this.forElement_) {
+        // It's left here because it prevents accidental text selection on Android
+        if (!this.forElement_.hasAttribute('tabindex')) {
+          this.forElement_.setAttribute('tabindex', '0');
+        }
+
+        this.boundMouseEnterHandler = this.handleMouseEnter_.bind(this);
+        this.boundMouseLeaveAndScrollHandler = this.hideTooltip_.bind(this);
+        this.forElement_.addEventListener('mouseenter', this.boundMouseEnterHandler, false);
+        this.forElement_.addEventListener('touchend', this.boundMouseEnterHandler, false);
+        this.forElement_.addEventListener('mouseleave', this.boundMouseLeaveAndScrollHandler, false);
+        window.addEventListener('scroll', this.boundMouseLeaveAndScrollHandler, true);
+        window.addEventListener('touchstart', this.boundMouseLeaveAndScrollHandler);
+      }
+    }
+  };
+
+  // The component registers itself. It can assume componentHandler is available
+  // in the global scope.
+  componentHandler.register({
+    constructor: MaterialTooltip,
+    classAsString: 'MaterialTooltip',
+    cssClass: 'mdl-tooltip'
+  });
+})();
diff --git a/node_modules/material-design-lite/src/typography/README.md b/node_modules/material-design-lite/src/typography/README.md
new file mode 100755
index 0000000..d382fc3
--- /dev/null
+++ b/node_modules/material-design-lite/src/typography/README.md
@@ -0,0 +1,106 @@
+## Introduction
+
+The Material Design Lite (MDL) **typography** component is a comprehensive approach to standardizing the use of typefaces in applications and page displays. MDL typography elements are intended to replace the myriad fonts used by developers (which vary significantly in appearance) and provide a robust, uniform library of text styles from which developers can choose.
+
+The "Roboto" typeface is the standard for MDL display; it can easily be integrated into a web page using the CSS3 `@font-face` rule. However, Roboto is most simply accessed and included using a single standard HTML `<link>` element, which can be obtained at [this Google fonts page](http://www.google.com/fonts#UsePlace:use/Collection:Roboto).
+
+Because of the many possible variations in font display characteristics in HTML and CSS, MDL typography aims to provide simple and intuitive styles that use the Roboto font and produce visually attractive and internally consistent text results. See the typography component's [Material Design specifications page](http://www.google.com/design/spec/style/typography.html) for details.
+
+## Basic use
+
+Include a link to the Google stylesheet that accesses the font and its desired variations.
+
+```html
+<head>
+<link
+ href='http://fonts.googleapis.com/css?family=Roboto:400,400italic,500,500italic,700,700italic'
+ rel='stylesheet' type='text/css'>
+...
+</head>
+```
+
+### To include an MDL **typography** component:
+
+&nbsp;1. Code any element (`<div>`,`<p>`,`<span>`, etc.) that can contain text, including whatever content is appropriate.
+```html
+<p>This is a standard paragraph.</p>
+```
+&nbsp;2. Add one or more MDL classes, separated by spaces, to the element using the `class` attribute.
+```html
+<p class="mdl-typography--body-1">This is a standard paragraph.</p>
+```
+
+The typography component is ready for use.
+
+#### Examples
+
+A "headline" paragraph.
+
+```html
+<p class="mdl-typography--headline">Regular 24px</p>
+```
+
+A "title" paragraph.
+```html
+<p class="mdl-typography--title">Medium 20px</p>
+```
+
+A "caption" span.
+```html
+<span class="mdl-typography--caption">Regular 12px</span>
+```
+
+A "button" span.
+```html
+<span class="mdl-typography--button">Medium (All Caps) 14px</span>
+```
+A "display 1" table cell.
+```html
+<td class="mdl-typography--display-1">Regular 34px</td>
+```
+A "body-1" paragraph, also uppercased.
+```html
+<p class="mdl-typography--body-1 mdl-typography--text-uppercase">
+ This is a standard paragraph, but uppercased.
+</p>
+```
+
+>**Note:** Because the Roboto font is intended to apply to the entire page, standard "unclassed" HTML elements (e.g., heading levels, divs, paragraphs, spans, tables, etc. with no `class` attribute) and text modifiers (e.g., strong, em, small, etc.) will use Roboto, while also retaining their inherent and/or inherited characteristics.
+>
+>Also note that MDL typography provides some automatic adjustments based on its display environment. For example, the `body-1` style renders at 14px on a mobile device, but 13px on a desktop. You need not do anything to activate these self-modifiers; they are built into the MDL styles.
+
+## Configuration options
+
+The MDL CSS classes specify the style to use. The table below lists the available classes and their effects.
+
+| MDL class | Effect | Remarks |
+|-----------|--------|---------|
+| `mdl-typography--body-1` | Regular 14px (Device), Regular 13px (Desktop) | Optional |
+| `mdl-typography--body-1-force-preferred-font` | Regular 14px (Device), Regular 13px (Desktop) | Optional |
+| `mdl-typography--body-2` | Medium 14px (Device), Medium 13px (Desktop) | Optional |
+| `mdl-typography--body-2` | mdl-typography-body-2 | Optional |
+| `mdl-typography--body-2-color-contrast` | Body with color contrast | Optional |
+| `mdl-typography--body-2-force-preferred-font` | Medium 14px (Device), Medium 13px (Desktop) | Optional |
+| `mdl-typography--button` | Medium (All Caps) 14px | Optional |
+| `mdl-typography--caption` | Regular 12px | Optional |
+| `mdl-typography--caption-color-contrast` | Caption with color contrast | Optional |
+| `mdl-typography--display-1` | Regular 34px | Optional |
+| `mdl-typography--display-1-color-contrast` | Display with color contrast | Optional |
+| `mdl-typography--display-2` | Regular 45px | Optional |
+| `mdl-typography--display-3` | Regular 56px | Optional |
+| `mdl-typography--display-4` | Light 112px | Optional |
+| `mdl-typography--headline` | Regular 24px | Optional |
+| `mdl-typography--menu` | Medium 14px (Device), Medium 13px (Desktop) | Optional |
+| `mdl-typography--subhead` | Regular 16px (Device), Regular 15px (Desktop) | Optional |
+| `mdl-typography--subhead-color-contrast` | Subhead with color contrast | Optional |
+| `mdl-typography--table-striped` | Striped table| Optional |
+| `mdl-typography--text-capitalize` | Capitalized text | Optional |
+| `mdl-typography--text-center` | Center aligned text | Optional |
+| `mdl-typography--text-justify` | Justified text | Optional |
+| `mdl-typography--text-left` | Left aligned text | Optional |
+| `mdl-typography--text-lowercase` | Lowercased text | Optional |
+| `mdl-typography--text-nowrap` | No wrap text | Optional |
+| `mdl-typography--text-right` | Right aligned text | Optional |
+| `mdl-typography--text-uppercase` | Uppercased text | Optional |
+| `mdl-typography--title` | Medium 20px | Optional |
+| `mdl-typography--title-color-contrast` | Title with color contrast | Optional |
diff --git a/node_modules/material-design-lite/src/typography/_typography.scss b/node_modules/material-design-lite/src/typography/_typography.scss
new file mode 100644
index 0000000..3b0e889
--- /dev/null
+++ b/node_modules/material-design-lite/src/typography/_typography.scss
@@ -0,0 +1,301 @@
+/**
+ * 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.
+ */
+
+@import "../variables";
+@import "../mixins";
+
+@if $target-elements-directly == true {
+  html, body {
+    font-family: $performance_font;
+    font-size: 14px;
+    font-weight: 400;
+    line-height: 20px;
+  }
+
+  h1, h2, h3, h4, h5, h6, p {
+    margin: 0;
+    padding: 0;
+  }
+
+  /**
+  * Styles for HTML elements
+  */
+
+  h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {
+    @include typo-display-3($colorContrast: true);
+
+    font-size: 0.6em;
+  }
+
+  h1 {
+    @include typo-display-3;
+
+    margin-top: 24px;
+    margin-bottom: 24px;
+  }
+
+  h2 {
+    @include typo-display-2;
+
+    margin-top: 24px;
+    margin-bottom: 24px;
+  }
+
+  h3 {
+    @include typo-display-1;
+
+    margin-top: 24px;
+    margin-bottom: 24px;
+  }
+
+  h4 {
+    @include typo-headline;
+
+    margin-top: 24px;
+    margin-bottom: 16px;
+  }
+
+  h5 {
+    @include typo-title;
+
+    margin-top: 24px;
+    margin-bottom: 16px;
+  }
+
+  h6 {
+    @include typo-subhead;
+
+    margin-top: 24px;
+    margin-bottom: 16px;
+  }
+
+  p {
+    @include typo-body-1;
+
+    margin-bottom: 16px;
+  }
+
+  a {
+    color: $text-link-color;
+    font-weight: 500;
+  }
+
+  blockquote {
+    @include typo-blockquote;
+  }
+
+  mark {
+    background-color: #f4ff81;
+  }
+
+  dt {
+    font-weight: 700;
+  }
+
+  address {
+    @include typo-caption;
+
+    font-style: normal;
+  }
+
+  ul, ol {
+    @include typo-body-1;
+  }
+}
+
+/**
+ * Class Name Styles
+ */
+
+.mdl-typography--display-4 {
+  @include typo-display-4;
+}
+
+.mdl-typography--display-4-color-contrast {
+  @include typo-display-4($colorContrast: true);
+}
+
+.mdl-typography--display-3 {
+  @include typo-display-3;
+}
+
+.mdl-typography--display-3-color-contrast {
+  @include typo-display-3($colorContrast: true);
+}
+
+.mdl-typography--display-2 {
+  @include typo-display-2;
+}
+
+.mdl-typography--display-2-color-contrast {
+  @include typo-display-2($colorContrast: true);
+}
+
+.mdl-typography--display-1 {
+  @include typo-display-1;
+}
+
+.mdl-typography--display-1-color-contrast {
+  @include typo-display-1($colorContrast: true);
+}
+
+.mdl-typography--headline {
+  @include typo-headline;
+}
+
+.mdl-typography--headline-color-contrast {
+  @include typo-headline($colorContrast: true);
+}
+
+.mdl-typography--title {
+  @include typo-title;
+}
+
+.mdl-typography--title-color-contrast {
+  @include typo-title($colorContrast: true);
+}
+
+.mdl-typography--subhead {
+  @include typo-subhead;
+}
+
+.mdl-typography--subhead-color-contrast {
+  @include typo-subhead($colorContrast: true);
+}
+
+.mdl-typography--body-2 {
+  @include typo-body-2;
+}
+
+.mdl-typography--body-2-color-contrast {
+  @include typo-body-2($colorContrast: true);
+}
+
+.mdl-typography--body-1 {
+  @include typo-body-1;
+}
+
+.mdl-typography--body-1-color-contrast {
+  @include typo-body-1($colorContrast: true);
+}
+
+.mdl-typography--body-2-force-preferred-font {
+  @include typo-body-2($usePreferred: true);
+}
+
+.mdl-typography--body-2-force-preferred-font-color-contrast {
+  @include typo-body-2($colorContrast: true, $usePreferred: true);
+}
+
+.mdl-typography--body-1-force-preferred-font {
+  @include typo-body-1($usePreferred: true);
+}
+
+.mdl-typography--body-1-force-preferred-font-color-contrast {
+  @include typo-body-1($colorContrast: true, $usePreferred: true);
+}
+
+.mdl-typography--caption {
+  @include typo-caption;
+}
+
+.mdl-typography--caption-force-preferred-font {
+  @include typo-caption($usePreferred: true);
+}
+
+.mdl-typography--caption-color-contrast {
+  @include typo-caption($colorContrast: true);
+}
+
+.mdl-typography--caption-force-preferred-font-color-contrast {
+  @include typo-caption($colorContrast: true, $usePreferred: true);
+}
+
+.mdl-typography--menu {
+  @include typo-menu;
+}
+
+.mdl-typography--menu-color-contrast {
+  @include typo-menu($colorContrast: true);
+}
+
+.mdl-typography--button {
+  @include typo-button;
+}
+
+.mdl-typography--button-color-contrast {
+  @include typo-button($colorContrast: true);
+}
+
+.mdl-typography--text-left {
+  text-align: left;
+}
+
+.mdl-typography--text-right {
+  text-align: right;
+}
+
+.mdl-typography--text-center {
+  text-align: center;
+}
+
+.mdl-typography--text-justify {
+  text-align: justify;
+}
+
+.mdl-typography--text-nowrap {
+  white-space: nowrap;
+}
+
+.mdl-typography--text-lowercase {
+  text-transform: lowercase;
+}
+
+.mdl-typography--text-uppercase {
+  text-transform: uppercase;
+}
+
+.mdl-typography--text-capitalize {
+  text-transform: capitalize;
+}
+
+.mdl-typography--font-thin {
+  font-weight: 200 !important;
+}
+
+.mdl-typography--font-light {
+  font-weight: 300 !important;
+}
+
+.mdl-typography--font-regular {
+  font-weight: 400 !important;
+}
+
+.mdl-typography--font-medium {
+  font-weight: 500 !important;
+}
+
+.mdl-typography--font-bold {
+  font-weight: 700 !important;
+}
+
+.mdl-typography--font-black {
+  font-weight: 900 !important;
+}
+
+.material-icons {
+  @include typo-icon;
+}
diff --git a/node_modules/material-design-lite/src/typography/demo.css b/node_modules/material-design-lite/src/typography/demo.css
new file mode 100644
index 0000000..d1ae151
--- /dev/null
+++ b/node_modules/material-design-lite/src/typography/demo.css
@@ -0,0 +1,57 @@
+/**
+ * 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-page--typography {
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.demo-page--typography table th {
+  padding-right: 80px;
+
+  vertical-align: top;
+  text-align: left;
+}
+
+.demo-typography--white {
+  background-color: white;
+  color: black;
+}
+
+.demo-typography--black {
+  background-color: black;
+  color: white;
+}
+
+.demo-typography--white,
+.demo-typography--black,
+.demo-typography--img-1,
+.demo-typography--img-2 {
+  width: 360px;
+  height: 272px;
+
+  padding: 16px;
+  box-sizing: border-box;
+}
+
+.demo-typography--img-1 {
+  background-image: url(../demo-images/img-1.png);
+  color: white;
+}
+
+.demo-typography--img-2 {
+  background-image: url(../demo-images/img-2.png);
+  color: white;
+}
diff --git a/node_modules/material-design-lite/src/typography/demo.html b/node_modules/material-design-lite/src/typography/demo.html
new file mode 100644
index 0000000..7a2871e
--- /dev/null
+++ b/node_modules/material-design-lite/src/typography/demo.html
@@ -0,0 +1,228 @@
+  <h2>Scale &amp; Basic Styles</h2>
+
+  <div class="demo-preview-block demo-page--typography">
+    <table>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Display 4</th>
+        <td class="mdl-typography--display-4">Light 112px</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Display 3</th>
+        <td class="mdl-typography--display-3">Regular 56px</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Display 2</th>
+        <td class="mdl-typography--display-2">Regular 45px</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Display 1</th>
+        <td class="mdl-typography--display-1">Regular 34px</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Headline</th>
+        <td class="mdl-typography--headline">Regular 24px</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Title</th>
+        <td class="mdl-typography--title">Medium 20px</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Subhead</th>
+        <td class="mdl-typography--subhead">Regular 16px (Device), Regular 15px (Desktop)</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Body 2</th>
+        <td class="mdl-typography--body-2">Medium 14px (Device), Medium 13px (Desktop)</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Body 1</th>
+        <td class="mdl-typography--body-1">Regular 14px (Device), Regular 13px (Desktop)</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Body 2 (force preferred font)</th>
+        <td class="mdl-typography--body-2-force-preferred-font">Medium 14px (Device), Medium 13px (Desktop)</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Body 1 (force preferred font)</th>
+        <td class="mdl-typography--body-1-force-preferred-font">Regular 14px (Device), Regular 13px (Desktop)</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Caption</th>
+        <td class="mdl-typography--caption">Regular 12px</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Menu</th>
+        <td class="mdl-typography--menu">Medium 14px (Device), Medium 13px (Desktop)</td>
+      </tr>
+      <tr>
+        <th class="mdl-typography--caption-color-contrast">Button</th>
+        <td class="mdl-typography--button">Medium (All Caps) 14px</td>
+      </tr>
+    </table>
+  </div>
+
+  <h2>HTML Elements</h2>
+
+  <div class="demo-preview-block">
+
+    <h3>Headings</h3>
+
+    <h1>&lt;h1&gt;</h1>
+    <h2>&lt;h2&gt;</h2>
+    <h3>&lt;h3&gt;</h3>
+    <h4>&lt;h4&gt;</h4>
+    <h5>&lt;h5&gt;</h5>
+    <h6>&lt;h6&gt;</h6>
+
+    <h3>Formatting</h3>
+
+    <p><u>&lt;u&gt;Underlined&lt;u&gt;</u></p>
+
+    <p><b>&lt;b&gt;Bold&lt;b&gt;</b></p>
+
+    <p><strong>&lt;strong&gt;Strong&lt;strong&gt;</strong></p>
+
+    <p><i>&lt;italic&gt;Italic&lt;italic&gt;</i></p>
+
+    <p><em>&lt;em&gt;Em&lt;em&gt;</em></p>
+
+    <p><s>&lt;s&gt;Strikethrough&lt;s&gt;</s></p>
+
+    <p><small>&lt;small&gt;Small&lt;small&gt;</small></p>
+
+    <p><mark>&lt;mark&gt;Mark&lt;mark&gt;</mark></p>
+
+    <h3>Body Text</h3>
+
+    <p>&lt;p&gt;</p>
+
+    <p class="mdl-typography--body-2">&lt;p class="mdl-typography-body-2"&gt;</p>
+
+    <p class="mdl-typography--caption">&lt;p class="mdl-typography-caption"&gt;</p>
+
+    <p class="mdl-typography--menu">&lt;p class="mdl-typography-menu"&gt;</p>
+
+    <p class="mdl-typography--button">&lt;p class="mdl-typography-button"&gt;</p>
+
+    <h3>Subtitles</h3>
+
+    <h1>&lt;h1&gt; <small>Subtitle</small></h1>
+    <h2>&lt;h2&gt; <small>Subtitle</small></h2>
+    <h3>&lt;h3&gt; <small>Subtitle</small></h3>
+    <h4>&lt;h4&gt; <small>Subtitle</small></h4>
+    <h5>&lt;h5&gt; <small>Subtitle</small></h5>
+    <h6>&lt;h6&gt; <small>Subtitle</small></h6>
+
+    <h3>Description</h3>
+
+    <dl>
+      <dt>Description lists</dt>
+      <dd>A description list is perfect for defining terms.</dd>
+      <dt>Euismod</dt>
+      <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd>
+      <dd>Donec id elit non mi porta gravida at eget metus.</dd>
+      <dt>Malesuada porta</dt>
+      <dd>Etiam porta sem malesuada magna mollis euismod.</dd>
+    </dl>
+  </div>
+
+  <h2>Quotes</h2>
+
+  <div class="demo-preview-block">
+    <blockquote>&lt;blockquote&gt;</blockquote>
+  </div>
+
+  <h2>Alignment</h2>
+
+  <p class="mdl-typography--text-left">Left aligned text.</p>
+  <p class="mdl-typography--text-center">Center aligned text.</p>
+  <p class="mdl-typography--text-right">Right aligned text.</p>
+  <p class="mdl-typography--text-justify">Justified text.</p>
+  <p class="mdl-typography--text-nowrap">No wrap text.</p>
+
+  <h2>Transformations</h2>
+  <p class="mdl-typography--text-lowercase">Lowercased text.</p>
+  <p class="mdl-typography--text-uppercase">Uppercased text.</p>
+  <p class="mdl-typography--text-capitalize">Capitalized text.</p>
+
+  <h2>Addresses</h2>
+
+  <address>
+    <strong>Googleplex</strong><br>
+    1600 Amphitheatre Pkwy<br>
+    Mountain View, CA 94043<br>
+    <abbr title="Phone">P:</abbr> (650) 253-0000
+  </address>
+
+  <h2>Code</h2>
+
+  <h3>Multi-line code blocks</h3>
+  <p>
+    Use &lt;pre&gt; for multi-line code blocks.
+    <pre>
+&lt;p&gt;This is the first line of code&lt;/p&gt;
+&lt;p&gt;This is the second line of code&lt;/p&gt;
+  </pre>
+  </p>
+
+  <h3>Inline code blocks</h3>
+  <p>Code blocks like <code>&lt;main&gt;</code> could be displayed inline.</p>
+
+
+  <h2>Color Contrasts</h2>
+
+  <div class="demo-preview-block">
+    <div class="demo-typography--white">
+      <p class="mdl-typography--caption-color-contrast">Caption</p>
+
+      <p class="mdl-typography--body-2-color-contrast">Body</p>
+
+      <p class="mdl-typography--subhead-color-contrast">Subhead</p>
+
+      <p class="mdl-typography--title-color-contrast">Title</p>
+
+      <p class="mdl-typography--display-1-color-contrast">Display</p>
+    </div>
+  </div>
+
+  <div class="demo-preview-block">
+    <div class="demo-typography--black">
+        <p class="mdl-typography--caption-color-contrast">Caption</p>
+
+        <p class="mdl-typography--body-2-color-contrast">Body</p>
+
+        <p class="mdl-typography--subhead-color-contrast">Subhead</p>
+
+        <p class="mdl-typography--title-color-contrast">Title</p>
+
+        <p class="mdl-typography--display-1-color-contrast">Display</p>
+    </div>
+  </div>
+
+  <div class="demo-preview-block">
+    <div class="demo-typography--img-1">
+        <p class="mdl-typography--caption-color-contrast">Caption</p>
+
+        <p class="mdl-typography--body-2-color-contrast">Body</p>
+
+        <p class="mdl-typography--subhead-color-contrast">Subhead</p>
+
+        <p class="mdl-typography--title-color-contrast">Title</p>
+
+        <p class="mdl-typography--display-1-color-contrast">Display</p>
+    </div>
+  </div>
+
+  <div class="demo-preview-block">
+    <div class="demo-typography--img-2">
+      <p class="mdl-typography--caption-color-contrast">Caption</p>
+
+      <p class="mdl-typography--body-2-color-contrast">Body</p>
+
+      <p class="mdl-typography--subhead-color-contrast">Subhead</p>
+
+      <p class="mdl-typography--title-color-contrast">Title</p>
+
+      <p class="mdl-typography--display-1-color-contrast">Display</p>
+    </div>
+  </div>