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
+  });
+})();
